Od kódu som očakával, že na úvod a=0 vypne procesor, po dvoch sekundách ho prebudí watchdog, inkrementuje a=1, a viac už procesor nevypne. Ale poďla behu programu predpokladám, že po watchdog resete sa mi premenna 'a' vždy vynuluje, takže podmienka je splnená vždy, a po každom prebudení procesor opäť zaspí. Nasvedčuje tomu meranie spotreby procesoru. Takže by som chcel požiadať o nasmerovanie. Či riešiť ukladanie premennej 'a' do eeprom, alebo je nejaké elegantnejšie riešenie, resp. som vec úplne zle pochopil.
ps: pre úplnosť, o čo mi vo finále ide: potrebujem, aby procesor spal približne 15 minút, a chcel som to riešiť tak, že pri prebúdzaní každé dve sekundy napočítať 450 watchdog resetov. vďaka, i
Kód: Vybrat vše
#define F_CPU 1E6 // 1 MHZ rychlost uPC
#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
int a;
/*tato cast neviem presne, ako funguje, len som si ju odniekial vypozical*/
void reset_wdt(void) \
__attribute__((naked)) \
__attribute__((section(".init3")));
void reset_wdt(void)
{ MCUSR = 0;
wdt_disable();
sleep_disable();
_delay_ms (1000);
a=a+1; }
void init_sleep(void)
{ set_sleep_mode(SLEEP_MODE_PWR_DOWN);
wdt_enable(WDTO_2S);
sleep_enable();
sleep_mode(); }
int main(void)
{
if(a==0)
{init_sleep();
sleep_disable();}
else
{_delay_ms (1000);}
return 0;
}