реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Проблема с Watchdog Timer`ом, ATmega48
sergeus
сообщение Jun 2 2010, 12:04
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Здравствуйте!

Пишу код на WinAVR. Инициализация ватчдог-таймера такая:
Код
void wdt_init(void){
  asm volatile ("wdr");
  MCUSR &=~(1<<WDRF);
  WDTCSR = (1<<WDCE);
  WDTCSR |= (1<<WDIE)|(1<<WDCE)|(1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0);     // 8s  
}

По моим наблюдениям он срабатываетчаще, чем положенные по даташиту раз в 8 секунд. Может я в чем-то ошибся?
Работает он в режиме "только прерывание, без глобального сброса".

Вот код обработчика, может в нем дело:
Код
ISR(WDT_vect){
  asm volatile ("wdr");

  if (wdt_counter == 10){
    wdt_counter = 0;
    // Спать!
    SMCR = (1<<SM1)|(1<<SE);
    asm volatile ("sleep");
    OCR0A = 0x00;
    OCR0B = 0x00;
    OCR2A = 0x00;      
  }
  wdt_counter++;
}

По-хорошему после 10 переполнений собачьего таймера т.е. через 8*10=80 секунд микроконтроллер ATmega48 должен заснуть, он же у меня засыпает буквально через пару десятков миллисекунд после запуска.

В чем подвох? Спасибо!
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 2 2010, 15:43
Сообщение #2


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(sergeus @ Jun 2 2010, 16:04) *
Пишу код на WinAVR.
Так и используйте его по назначению.
Не изобретайте то, что уже придумано до Вас.
Обратите внимание на модули:
WinAVR/avr/include/avr/wdt.h
WinAVR/avr/include/avr/sleep.h


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sergeus
сообщение Jun 2 2010, 16:19
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



А всё-таки? Мне нагляднее и приятнее работать напрямую с регистрами. Полдня провозился, так и не понял в чем дело. Вот тут даже писали про этот казус: ссылка. второе сообщение.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 2 2010, 17:07
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sergeus @ Jun 2 2010, 19:19) *
А всё-таки? Мне нагляднее и приятнее работать напрямую с регистрами.
Код
  WDTCSR = (1<<WDCE);
  WDTCSR |= (1<<WDIE)|(1<<WDCE)|(1<<WDP3)|(0<<WDP2)|(0<<WDP1)|(1<<WDP0);
Посмотрите внимательно в листинг. на эти две команды отводится 4 такта. |= выполняется дольше. Замените наложение маски во второй строки на прямое присваивание.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sergeus
сообщение Jun 2 2010, 17:21
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 157
Регистрация: 11-12-07
Из: Москва
Пользователь №: 33 174



Спасибо! Я пробовал и так и сяк - и прямым присваиванием тоже, сейчас попробую еще раз.

А что скажете по поводу второго сообщения со ссылки?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 2 2010, 17:58
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(sergeus @ Jun 2 2010, 20:21) *
А что скажете по поводу второго сообщения со ссылки?
Ничего. Я собаку в таком режиме не использовал. В errata что-то есть об этом? Нет - напишите простую программу для воспроизведения, выложите тут - посмотрим. Если придем к выводу, что это действительно глюк - спишитесь с техподдержкой, они включат в документацию.

Просто мысль - а флаг сбрасывается автоматически при входе в прерывание?
Добавлено: Посмотрел в даташит, сбрасывается. Так вставьте в обработчик прерывания махание ногой и посмотрите, с какой частотой махает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01351 секунд с 7
ELECTRONIX ©2004-2016