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