Ничего не понимаю. Тут что-то явно не так. Кусочки кода, которые а вам дал, выдраны из полностью рабочего проекта. Эти куски полностью созвучны с аппноутом производителя AVR134 Вот хорошая статья на это тему: http://microsin.net/programming/AVR/avr ... timer.html
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Нет не странно. Любая операция записи в счетный регистр блокирует работу таймера на время одного периода тактового сигнала таймера, а именно на время примерно 0,0038 секунды если считать за отправную точку кварц 33кГц. 0,0038 * 3600 = 13,7 секунды за час В моем случае, я два раза в секунду обращаюсь к регистру, 13,7 * 2 = 27,4 секунды за час.
Либо так, либо искать нормальный кварц на 32768Гц.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Решил, для себя, разобраться с работой в асинхронном режиме и POWER SAVE. Для начала, загрузил в m8 выложенный выше код Test_8_2, в котором в секундном прерывании вывел стробик на с лапы PB5 (просто удобный доступ на плате). Период, по мне, мало похож на секунду, да ещё при токе потребления >5мА (встроенный RC 8МГц). Оставил в покое эту программу. В программе ниже на PB5 формируется минутный интервал. Ток потребления < 10мкА. Стоящая в седьмом разряде числа 59'999'99x,x просто радует глаз.
akl в Test_8 было по совпадению TIM2_COMP. Какая разница, вводим переменную и корректируем как хотим, к примеру так Спойлер
Код:
interrupt [TIM2_COMP] void timer2_ovf_isr(void) { // Place your code here if(millis_t== 0) { OCR2A=127; } if(++millis_t ==3600) // допустим раз в 3600 секунд коррекция { millis_t=0; OCR2A = 127+-сколько надо; // один тик таймера примерно равен 0,0078 секунды, +учитываем эти же 0,0078сек на перенастройку таймера } sec++; if (sec == 60) { sec = 0; min ++; };
if (min == 60) { min = 0; hour ++; }; if (hour > 23) { hour = 0; }; }
Вы делаете ошибку, полагая частоту часового кварца равной 32'768Гц. У меня, к примеру, генерирует на частоте 32'776Гц. Получается, что программа, отсчитав 256*128=32'768 говорит - секунда прошла и, 32776-32768=8 тактов как не бывало, а это ~244мкс. За час коррекцией OCR2 не отделаетесь. Поэтому, кто-то ставит подстроечный конденсатор и крутит его до посинения, кому-то и так сойдёт, кто-то, типа меня, занимается программной коррекцией.
interrupt [TIM2_COMPA] void timer2_compa_isr(void) { // Place your code here if (++t.second==60) { t.second=0; if (++t.minute==60) { t.minute=0; if (++t.hour==24) { t.hour=0; if (++t.date==31) { t.date=1; } } } } }
6 часов прошло, как бы секунда в секунду. 6 часов мало, надо больше. И да, ток потребления 6-7мкА.
if (++t.second==60) { t.second=0; if (++t.minute==60) { t.minute=0; if (++t.hour==24) { t.hour=0; if (++t.date==31) { t.date=1; } } } } }
Корректировка была один раз в 680 секунд. За 60 часов наблюдается отставание в 1 секунду, +-там милли секунды не контролирую. Опять ексель, опять расчеты, и получаю что корректировать надо уже через 853 секунды. Меняю в прошивке 680 на 853, опять сброс счетчика и ждемс.....
Это как решать уравнение о трех неизвестных, без спец приборов это очень долго и мучительно.
может пригодится: у меня давно "ходят" радиокотовские часики на меге16 тоже с асинхронным таймером http://radiokot.ru/circuit/digital/home/103/ коррекцию производил всего два раза - уже несколько лет не трогаю
Цитата:
Коррекция хода производится один раз в сутки, в 00-00. Если часы спешат к примеру на 5 сек в сутки, то в 00-00-00 время установится в 23-59-55, если же часы отстают на 5 сек, то в 00-00-00 время установится в 00-00-05. Шаг коррекции – 0,1 сек. Максимальная коррекция – 59,9 сек/сутки.
Сейчас этот форум просматривают: nicruzhov и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения