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

 
 
> Проблема с 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
 
Start new topic
Ответов
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



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

 


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


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