Форум РадиоКот https://radiokot.ru/forum/ |
|
Некорректная работа таймера ATMega16A https://radiokot.ru/forum/viewtopic.php?f=20&t=75404 |
Страница 1 из 1 |
Автор: | Petr57 [ Вт июл 10, 2012 06:51:20 ] |
Заголовок сообщения: | Некорректная работа таймера ATMega16A |
Захотел сделать часы. МК работает на 16МГц. Выбрал таймер T2, делитель 1024, режим СТС, прерывание на 125. Внутри прерывания крутиться переменная, которая доходя до 125 увеличивает счётчик секунд. 125*125*1024=16000000. Таким образом получается чёткий один герц. Но в реальности на "секунду" уходит около 3.9 секунд ![]() кусочки кода: interrupt [TIM2_COMP] void timer_comp(void) //прерывание по совпадению { if(++ps==125) //переменная ps обеспечивает ещё одно разделение на 125 { ps=0; sec++; } } void Start_Clock(void) //инициализация таймера { TIMSK |=(1<<OCIE2); //разрешаем прерывание по совпадению TCCR2 |=(1<<CTC2)|(1<<CS20)|(1<<CS21)|(1<<CS22); //режим СТС, тактовый сигнал=CLKsys / 1024 OCR2=125; //прерывание при дохождении до 125 } ЗЫ. При использовании функции delay_ms из библиотеки delay.h на примере моргающего светодиода такая же фигня - моргает он куда медленнее, чем указанная частота. Хотя кварц стоит на 16.000, в настройках CVAVR частота указана правильно. ЗЫЫ. Для вывода используется дисплейчик от Нокии3310, библиотеку я взял чужую и без особого разбора подключил. Хотя странно, но вдруг в ней дело? подскажите, знающие люди!) |
Автор: | zero648 [ Вт июл 10, 2012 07:07:35 ] |
Заголовок сообщения: | Re: Некорректная работа таймера ATMega16A |
Счетчик таймера TCNT2 сбрасывать надо в обработчике прерывания , иначе он по кругу гоняет пока его не остановишь или не сбросишь. |
Автор: | Petr57 [ Вт июл 10, 2012 07:18:53 ] |
Заголовок сообщения: | Re: Некорректная работа таймера ATMega16A |
zero648 писал(а): Счетчик таймера TCNT2 сбрасывать надо в обработчике прерывания , иначе он по кругу гоняет пока его не остановишь или не сбросишь. Исходя из названия режима это странно по понятным причинам. Но даже если так, это объясняет тормоза только в два раза, а не в четыре. Да, сделал сброс TCNT2 в обработчике прерывания - ничего не изменилось, та же проблема. |
Автор: | U235 [ Вт июл 10, 2012 07:33:19 ] |
Заголовок сообщения: | Re: Некорректная работа таймера ATMega16A |
Petr57, Вы про фьюзы ничего не сказали. Вполне возможно, что МК у Вас работает от внутреннего ггенератора. |
Автор: | Petr57 [ Вт июл 10, 2012 08:07:46 ] |
Заголовок сообщения: | Re: Некорректная работа таймера ATMega16A |
U235 писал(а): Petr57, Вы про фьюзы ничего не сказали. Вполне возможно, что МК у Вас работает от внутреннего ггенератора. опа опа оппапа! Кажется Вы правы. Не подскажите, где можно найти русскоязычное описание фьюзов на мегу16? |
Автор: | zero648 [ Вт июл 10, 2012 08:12:41 ] |
Заголовок сообщения: | Re: Некорректная работа таймера ATMega16A |
Как ничего не изменилось, даже в два раза быстрее считать не стал чтоли? У вас кварц на 16МГц стоит или что? Тактируется МК от чего? |
Автор: | zero648 [ Вт июл 10, 2012 08:14:53 ] |
Заголовок сообщения: | Re: Некорректная работа таймера ATMega16A |
Да и вообще внутренний генератор не точный частота может колебаться. |
Автор: | clawham [ Вт июл 10, 2012 09:53:18 ] |
Заголовок сообщения: | Re: Некорректная работа таймера ATMega16A |
1) Подключенный снаружи кварц ещё не гарантия тактования от него! 2) В режиме СТС не нужно в прерывании трогать счетчик таймера - на то он и СТС! 3) насколько я знаю.....из 16000000 тяжело получить точную секунду....лучше используйте часовой кварц 4) не забывайте что таймер считает 0-1-2-3 а не 1-2-3 !! внимательнее с этим надо быть 5) Ваш программный делитель до 125 не досчитывает и там путаницы с нулём нет! |
Автор: | Petr57 [ Вт июл 10, 2012 11:57:00 ] |
Заголовок сообщения: | Re: Некорректная работа таймера ATMega16A |
Ух, намучался.. Искал какие же всё-таки фьюзы нужно выставлять, в результате прошил на работу от внешнего генератора.. ![]() while(1) { PORTB.0=0; PORTB.0=1; } и подключил этот выход на XTAL1 меги. ![]() ![]() Действительно, она работала не на 16МГц. Нашёл какие фьюзы ставить - теперь часики отлично тикают ![]() Всем большое спасибо, и извините за такую глупость ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |