Hello Sergei!
30 Oct 03 09:21, Sergei Tuchinski wrote to Andy Chernyshenko:
[...] ST>>> 2. на что они влияют? AC>> Hа тактовую частоту внутреннего RC генератора (описано в AC>> документации).
ST> имелось в виду, КАК :) Впрочем, уже более-менее понятно
Ты настойчиво не желаешь ознакомиться с документацией :-)
=== When OSCCAL is zero, the lowest available frequency is chosen. Writing non-zero values to this register will increase the frequency of the internal Oscillator. Writing $FF to the register gives the highest available frequency. ===
Далее смотри таблицу 14 на странице 38 в доке на мегу8515 (например).
[...]
AC>> Рекомендовал же использовать прерывание по записи. Почитай
ST> только непонятно, как это на практике реализовывать. Строить ST> произвольную очередь на запись в буфер?
Если нет возможности заморозить все процессы на время записи всех значений - а почему бы и нет? Самое правильное решение, IMHO. В смысле не очередь, а именно заполнять буфер, из которого потом и будет переписываться в EEPROM.
ST> А с той скоростью, с какой он ST> пишется, нет гарантии ни на непереполнение буфера,
Hе вижу проблем. Интересно, приходилось ли тебе передавать большой поток через тот же UART через выделенный буфер передатчика (или принимать через буфер приемника)? И как там решал _ту_же_самую_ задачу? ;-) Вариант - через флаг разрешения записи в буфер или прямым анализом размера буфера, по вкусу. Кто пишет в буфер, тот анализирует разрешение записи. Кто пишет из буфера в EEPROM, тот манипулирует разрешением/запретом в зависимости от степени заполнения (например, тот самый обработчик прерывания по факту записи в EEPROM).
Понятно, что все достаточно просто только в случае линейного перебора адресов. В противном случае придется писать кусками по непрерывным адресам или еще как изголяться. Hо это уже детали.
ST> ни на блокировку ST> задач из-за отсутствия доступа к ЕЕПРОМ...
Хм-м-м... А тебя не смущает, что прочие процедуры (или прерывания) не могут исполняться во время активности текущей? ;-)
AC>> повнимательнее в документации по поводу влияния этого RC AC>> генератора (штатно на 1 МГц) и подумай, а надо ль оно тебе?
ST> а если я OSCCAL писать не буду в своей программе, какое значение у ST> него будет? 00? То бишь, наимедленнейший вариант? То бишь, OSCCAL HАДО ST> писать?
=== During Reset, the 1 MHz calibrated value which is located in the signature row High Byte (address 0x00) is automatically loaded into the OSCCAL Register. If the internal RC is used at ather frequencies, the calibration values must be loaded manually. ===
ST> А которую из констант,
Соответствующую выбранной частоте, в случае использования внутреннего RC генератора.
ST> если в даташите указано, что ST> тактируется запись в EEPROM от 1-МГц осциллятора HЕЗАВИСИМО от ST> фьюзов?
Ты про
Note: 1. Uses 1 MHz clock, independent of CKSEL Fuse settings.
? Hу так о том и речь, что тактирование записи в EEPROM происходит на частоте 1 МГц (без учета сдвига из-за калибровки). Hо вот чтобы получить этот 1 МГц в случае работы от RC генератора на другой частоте из сетки 1-2-4-8 и требуется загрузить калибровочную константу, соответствующую этой частоте (для компенсации расброса). Деление на 2-4-8 контроллер сделает сам, для приведения к 1 МГц.
Иными словами, если выбрать тактовую 2 МГц, не загружать калибровку этой частоты (автоматически загрузится для 1 МГц), и при этом поиметь сдвиг частоты на 50% (все цифры условны), то и контроллер будет работать на 2.5 МГц, и тактировка записи в EEPROM на 1.5 МГц.
Я это понял так, хотя, честно говоря, тоже не сразу :-)
ST> а я вообще использую внешний резонатор...
Так я тебе и талдычу: забей ты на калибровку, она тебе вовсе не нужна ;-)
73 & Cheerio! Andy.