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

 
 
> Проблема с 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
Ответов
sergeus
сообщение Jun 2 2010, 17:21
Сообщение #2


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

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



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

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


Гуру
******

Группа: Модераторы
Сообщений: 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 Текстовая версия Сейчас: 22nd July 2025 - 23:19
Рейтинг@Mail.ru


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