Attiny watchdog timer

Miroslav Mraz mraz na seznam.cz
Sobota Leden 19 10:52:09 CET 2013


Zdravím,
zasekl jsem se na jednoduchém problému. Mám Attiny45, fuses default (wdt
je tedy vypnutý) a kód v C:

#define F_CPU 1000000UL  // 1 MHz
#include <avr/io.h>
#include <util/delay.h>
#include <avr/wdt.h>

int main (void) {
   DDRB  |=  (1<<DDB0); // LED vystup
   PORTB &= ~(1<<PB0);  // rozsvitim
   _delay_ms (1000);    // pockam 1s
   PORTB |=  (1<<PB0);  // zhasnu
   wdt_enable (WDTO_1S);
   for (;;) {
     wdt_reset();
     _delay_ms (200);
     PORTB ^= (1<<PB0);
   }
   return 0;
}

To funguje podle očekávání. Problém nastane, pokud vynechám v hlavní
smyčce funkci wdt_reset(), tedy instrukci wdr. Pak bych očekával, že
procesor rozsvítí na 1s ledku, dvakrát blikne a zresetuje se - tedy
cyklus se bude opakovat. Není tomu tak. Rozsvítí 1s, dvakrát blikne a
začne blikat s frekvencí cca 10Hz - dostane se tedy do jakéhosi
nedefinovaného stavu. Tuší někdo, kde by mohl být problém ?

Mrazík





Další informace o konferenci Hw-list