|
watchdog, atmega88pa |
|
|
|
Jul 24 2012, 18:16
|
Местный
  
Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474

|
Всем привет.
Собрал устройство на atmega88pa. Оно находится все время в режиме power-down, просыпается по изменению состояния одной из ножек и по прерыванию от watchdog(WDIE). Работает от 2 батареек типа ААА(напряжение 3В). Но наши современные батарейки полный отстой и хороших найти трудно(с падением тока падает и напряжение). Сначала все работало отлично: при нажатии кнопки, контроллер делал что надо и по прерыванию watchdog(каждые 8S) тоже выполнял свои функции(напряжение было 3В). Но как только напряжение упало до 2.72В watchdog сначало работал, но плохо(мог проснуться и через 8 секунд, а мог и через 1 минуту или вообще заглохнуть), потом напряжение снизилось до 2.7В и все помер!!! Хотя прерывание по кнопкам, как и работало, так и работает без каких либо проблем. Подскажите, пожалуйста, какая может быть беда с watchdog и как ее преодолеть?
|
|
|
|
|
Jul 24 2012, 18:34
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(max_mart @ Jul 24 2012, 21:16)  потом напряжение снизилось до 2.7В и все помер Напряжение больно характерное - не настроет ли у вас BOD на 2,7 В? Цитата(max_mart @ Jul 24 2012, 21:16)  Хотя прерывание по кнопкам, как и работало, так и работает без каких либо проблем. Может при нажатии кнопки напряжение возрастает до величины большей 2,7 В и всё работает какое-то время?
|
|
|
|
|
Jul 24 2012, 19:28
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
А на какой частоте мега работает? Не нарушаются ли ограничения: Цитата • Speed Grade: – 0 - 4 MHz@1.8 - 5.5V, 0 - 10 MHz@2.7 - 5.5.V, 0 - 20 MHz @ 4.5 - 5.5V Попробуйте частоту поделить до 1 МГц.
|
|
|
|
|
Jul 24 2012, 20:04
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(max_mart @ Jul 24 2012, 22:51)  Указан минимум 1.8 и максимум 5.5 вольт и перечислены все возможные моменты при работе меги в этом диапазоне Должен быть в даташите график какой-то напряжение - максимальная тактовая ядра. Но как он назывался - не помню. По нему давно считали для мега128 на 3,7 В, получилось, что на 12,8МГц - работает, на 14,37 - уже не гарантируется. На m88 тоже должен быть такой. А, нашёл: 28.3 Speed Grades Figure 28-1. Maximum Frequency vs. VCC
|
|
|
|
|
Jul 26 2012, 11:33
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 26-07-12
Пользователь №: 72 913

|
1. Попробовать написать пробную программу в которой watchdog работает в режиме сброса и посмотреть, есть ли сброс от него. Скорее всего сброса не будет - у этой серии (atmega*8pa) уже попадались такие "фрукты" причем иногда была неисправность в прескалере(!) сторожевого таймера - сброс не проходил при определенных его значениях. Если сброс проходит - попробовать запустить прерывание от сторожевого таймера и проверить его прохождение. Все манипуляции рекомендуется проделывать при разных питающих напряжениях - от 2.5В до 5В - так можно понять где глюк - в железе (т. е. в чипе) или в софте. 2. Если у вас микроконтроллер работает от внутреннего генератора то наверняка ноги для подключения кварцевого резонатора свободны. Подключите туда часовой кварц (без конденсаторов!) и настройте Timer2 для работы в асинхронном режиме от внешнего кварца. При максимальном значении предделителя (Tosc/1024) прерывание по переполнению таймера будет происходить как раз каждые 8 секунд (только спящий режим надо брать не PowerDown а PowerSave - самый прикол что это получается даже экономичнее чем со сторожевым таймером раза в 4). 3. Еще один способ заставить микроконтроллер просыпаться из PowerDown- это использование внешней RC цепочки (паралельно соединенный танталовый или керамический конденсатор и резистор на пару мегоом). Я так делал на старых AVR (типа ATmega8) у которых небыло асинхронных PCINT'ов и небыло возможности поставить часовой кварц, т. к. использовалось тактирование от кварцевого резонатора. Для этого необходимо подключить RC цепочку к любому свободному входу запроса прерывания INT (для новых микросхем AVR сгодится вообще любой свободный пин любого порта, т. к. у них по всем портам PCINT'ы). Вход запроса прерывания конфигурировать на срабатывание от низкого уровня сигнала (для INT) и настраивать как выход с логической 1. Непосредственно перед уходом в PowerDown перевести этот пин в режим входа с высоким импедансом (DDR*.*=0; PORT*.*=0; -> в такой последовательности чтобы не подсадить конденсатор переключением порта на вывод низкого уровня). Как только конденсатор разрядится до порогового уровня логического нуля - будет сгенерировано прерывание. Цитата Очень интересный факт наблюдается. По топотреблению видел, что watchdog работает(просыпался каждые 8 секунд), но только почему-то не управляет светодиодом, должен по флагу включать и выключать его(если флаг=0, то включить; если 1, товыключить). Напряжение от блока питания 3.3В
странно...без флага работает!!!Если просто включать и выключать светодиод через определенное время!!!??? скинь код! Тут скорее всего чисто программная ошибка...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|