Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Коллекция глюков Здесь публикуются все известные глюки, баги микроконтроллеров, памяти, АЦП и т.д.

 
Опции темы
Непрочитано 11.03.2010, 20:45  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию "Глюк" AVR таймера от кварца 32768 Гц

Это не глюк, это просто грабля, на которую наступают почти все, кто добирается до работы таймера AVR микропроцессора в асинхронном режиме. Этот режим используется для реализации "спящих" часов реального времени, когда контроллер большую часть времени спит, а часы себе тикают и время и дату считают.

Асинхронный режим подразумевает подключение кварца к пинам TOSC1 и TOSC2. А теперь внимание, сладкие грабельки!

Прочитав даташит и написав код инициализации таймера в этом режиме все прекрасно работает. Почти работает. Но иногда при подаче питания таймер не стартует, прерывания не генерируются. В некоторых случаях таймер не стартует вообще, не запускаясь и с 100-ой попытки. Вообщем возникает ощущение, что какой-то плохой кварц, контроллер, корпус контроллера, флюс или что-то в этом духе (где-то здесь на Казусе была ветка об этом, но найти не могу).

А решается все просто. Нужно дождаться завершения инициализации таймера перед разрешением прерываний. В моем случае для процессора ATmega48PA это выглядит так:

Код:
// Таймер 2 работает с частотой 1 Гц.
// 32768 / 128 / 256 = 1 Гц.

Mcu.TimerCounter2.ASSR.AS2.Set();

// Предварительный делитель 128.
Mcu.TimerCounter2.TCCR2A.Value = (byte)(Mcu.TimerCounter2.TCCR2A.WGM21.Mask);
Mcu.TimerCounter2.TCCR2B.Value = (byte)(Mcu.TimerCounter2.TCCR2B.CS22.Mask | Mcu.TimerCounter2.TCCR2B.CS20.Mask);

Mcu.TimerCounter2.OCR2A.Value = 256 - 1;

Mcu.TimerCounter2.CompareMatchA += new InterruptEventHandler(TimerCounter2_CompareMatchB)  ;

// Ждем завершения инициализации таймера
// ------------------------------------------------------
// Datasheet page 156
while (Mcu.TimerCounter2.ASSR.TCR2AUB.Value)
     ;
while (Mcu.TimerCounter2.ASSR.TCR2BUB.Value)
     ;
while (Mcu.TimerCounter2.ASSR.OCR2AUB.Value)
     ;
while (Mcu.TimerCounter2.ASSR.TCN2UB.Value)
     ;

// Разрешение прерываний таймера
Mcu.TimerCounter2.TIFR2.OCF2A.Reset();
Mcu.TimerCounter2.TIMSK2.OCIE2A.Set();
// ------------------------------------------------------

// Готово, таймер готов к использованию!
Эта грабелька часто возникает из-за того, что в даташите там где описываются режимы таймера нет явной прямой ссылки на необходимость ожидания инициализации таймера в асинхронном режиме. Эта информация конечно-же в даташите имеется, но она "запакована" далековато от описания пинов управления режимами таймера. Поэтому каждый, кто хочет сделать наноамперные часы реального времени прямо на AVR, стабильно на эту граблю наступает и заканчивается все использованием DS1307

Но теперь вы предупреждены - если часовой генератор не работает или работает неустойчиво - см. в код инициализации таймера

--------------------------

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
Реклама:

Последний раз редактировалось alexgap; 11.03.2010 в 21:32.
alexgap вне форума  
Эти 12 пользователя(ей) сказали Спасибо alexgap за это сообщение:
alekseyb (12.03.2010), Arjuna1008 (29.07.2011), DVD-RW (13.03.2010), forbidden (03.01.2011), hillar (12.03.2010), Ibaness (13.03.2010), makakus (12.03.2010), pinco (25.07.2011), sergrushka (22.07.2011), servillio (22.07.2011), Uz_Sleep_Walker (12.03.2010), _Artem_ (22.07.2011)
Непрочитано 11.03.2010, 21:03  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

У меня проблемы с пиком. Запустил точно так же часы реального времени. Кварц 32768, две емкости по 30пкФ. Часы идут, но отстают на 3 минуты за сутки. Питание хорошее, емкостей куча. Почему так? Кварца два, пробовал оба. Подозреваю, что кварцы дефективные.
Easyrider83 вне форума  
Непрочитано 11.03.2010, 21:25  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

Сообщение от Easyrider83 Посмотреть сообщение
У меня проблемы с пиком. Запустил точно так же часы реального времени. Кварц 32768, две емкости по 30пкФ. Часы идут, но отстают на 3 минуты за сутки. Питание хорошее, емкостей куча. Почему так? Кварца два, пробовал оба. Подозреваю, что кварцы дефективные.
Либо кварц с дефектом, либо емкости неправильные. Из-за несоответствия емкостей параметрам кварца его частота резонанса может существенно сместиться. Обычно в каталогах пишут рекомендуемую емкость нагрузки для кварца, чаще всего мне попадаются часовые кварцы с CL = 12.5 пФ. Конденсаторы на пинах кварца расчиывают так:

С = 2 * CL - Cs

где
CL - рекомендуемая емкость нагрузки для кварца (см. в паспорте кварца)
Сs - паразитная емкость ножки контроллера
Если у вас С = 30 пФ, то это явно слишком много. Должно быть в районе 0-20 пФ в зависимости от паразитной емкости ножки используемого контроллера. Обычно в даташите на контроллер есть необходимое значение этой емкости или формула для расчета.

Слишком большая емкость С = 30 пФ вполне может объяснять отставание часов, так как с повышением емкости нагрузки кварца его резонансная частота уменьшается.

В моей схеме, например, С = 6 пФ.
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.

Последний раз редактировалось alexgap; 11.03.2010 в 21:36.
alexgap вне форума  
Эти 2 пользователя(ей) сказали Спасибо alexgap за это сообщение:
Easyrider83 (12.03.2010), _Artem_ (22.07.2011)
Непрочитано 12.03.2010, 01:34  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

Ладно, спасибо. Схему собирал на макетке, у нее емкость связей огромная. И емкости ставил русские. А эти могут прыгать в любом направлении. Но опыт работы с таймером поимел, что и требовалось.
Easyrider83 вне форума  
Непрочитано 12.03.2010, 12:36  
dimka11
Временная регистрация
 
Регистрация: 04.04.2008
Сообщений: 49
Сказал спасибо: 29
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
dimka11 на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

Очень интересно, но вы просто описали один из вариантов граблей! Например я б на эти грабли не когда не стал так как у меня есть жосткая привычка инициализировать всю периферию МК а аж потом разрешать прерывания! И естественно в даташите не будут описывать эту процедура в разделе таймеры так как запрет прерываний нужно делать на всю периферию МК на время ее инициаоизации! И в даташите такая рекомендация есть и нет смысла ее повторять в каждом разделе! Наверное каждый заметил как составляет код генератор начального кода в CVAVR? Аж в самом конце инициализации мк он разрешает прерывания! Естественно если не выполнять рекомендации самого производителя, грабли неизбежны!

Последний раз редактировалось dimka11; 12.03.2010 в 12:43.
dimka11 вне форума  
Сказали "Спасибо" dimka11
pinco (25.07.2011)
Непрочитано 12.03.2010, 13:23  
md5sum
Прописка
 
Аватар для md5sum
 
Регистрация: 21.10.2009
Сообщений: 241
Сказал спасибо: 184
Сказали Спасибо 253 раз(а) в 139 сообщении(ях)
md5sum на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

Сообщение от alexgap Посмотреть сообщение
Эта грабелька часто возникает из-за того, что в даташите там где описываются режимы таймера нет явной прямой ссылки на необходимость ожидания инициализации таймера в асинхронном режиме.
Странно, но в даташите Rev. 8161D–AVR–10/09 в пункте 17.9 это выделено.
Сообщение от dimka11 Посмотреть сообщение
Например я б на эти грабли не когда не стал так как у меня есть жосткая привычка инициализировать всю периферию МК а аж потом разрешать прерывания
Эти грабли возникнут (и вы на них встали-бы если не читать даташит) если вы не дождетесь (из даташит: Wait for TCN2xUB, OCR2xUB, and TCR2xUB) инициализации таймера (запуск генератора).
Просто прикиньте сколько тактов пройдет при работе МК на частоте хотя бы 8 МГц пока асинхронный генератор на частоте 32768 получит один импульс от кварца (примерно 244, а до "установившегося" режима еще больше) - этого достаточно, для того чтобы программа ушла из секции инициализации далеко в основной цикл.
md5sum вне форума  
Сказали "Спасибо" md5sum
sergrushka (22.07.2011)
Непрочитано 12.03.2010, 16:03  
alexgap
Гражданин KAZUS.RU
 
Аватар для alexgap
 
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
alexgap на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

Сообщение от md5sum Посмотреть сообщение
в даташите Rev. 8161D–AVR–10/09 в пункте 17.9 это выделено
Да, так и есть. Однако "плохие" привычки человека бегло читать и полагаться на предыдущий опыт (с синхронными режимами таймера) заставили меня благополучно пропустить секцию 17.9 К сожалению, не я один был пойман в эту "ловушку"
__________________
.

В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
alexgap вне форума  
Непрочитано 13.03.2010, 00:12  
DVD-RW
Временная регистрация
 
Аватар для DVD-RW
 
Регистрация: 26.06.2007
Сообщений: 71
Сказал спасибо: 7
Сказали Спасибо 41 раз(а) в 21 сообщении(ях)
DVD-RW на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

Да да, не далее как вчера менял аж 5! кристаллов на двух контроллерах. Ёмкости туда-сюда ставил, а всё бестолку. Тактовая аж 20 МГц, а я 10 циклов подождал и погнал.
DVD-RW вне форума  
Непрочитано 13.03.2010, 20:37  
berrymorr
Частый гость
 
Регистрация: 03.04.2008
Сообщений: 24
Сказал спасибо: 5
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
berrymorr на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

это точно для авр?
а почему вы на паскале пишете?
berrymorr вне форума  
Непрочитано 13.03.2010, 23:40  
v.chizhov
Прохожий
 
Регистрация: 16.10.2009
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
v.chizhov на пути к лучшему
По умолчанию Re: "Глюк" AVR таймера от кварца 32768 Гц

есть еще один вариант глюка - часы отстают при частом "пробуждении" контроллера.
Контроллер Мега88, часы считают чисто бинарное время с максимальным программируемым интервалом 8 сек кварц (32768 / 1024 / 256). Основная программа пробуждается по внешнему прерыванию и сохраняет во внешний EEPROM значения часов и засыпает далее. Интервал поступления событий от 8 сек. до 3 суток, питание батарейное Li-ion. "Отставание" часов не зависит от кол-ва событий, а както странно зависит от частоты их поступления, например - если за сутки набирается 500 событий - отставание часов 1 и более ЧАСА, такое же кол-во событий за 7 суток приводит к отставанию часов на 10 сек ... 1 мин. Может кто-то с таким сталкивался и подскажет что делать.
v.chizhov вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 13:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot