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

 
 
> Проблема с 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



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 13:15
Рейтинг@Mail.ru


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