Witam,
Buduję prosty układ, który ma zapalić diodę led na 100ms (krótki błysk) po czym przejść w tryb niskiego poboru prądu. Następnie po ok 1s procesor powinien się obudzić i znowu: błysnąć diodą i zasnąć. I tak w kółko.
Jednak program nie działa jak powinien, tj:
Procek startuje, błyska diodą, zasypia, po 1s budzi się i... nic nie robi, pozostaje aktywny. Wiem to, bo mierzę prąd pobierany przez procka - na początku na chwilę jest względnie duży, potem wynosi ok 4-5µA, po ok 1s 0,5-1mA - tak już zostaje.
Proszę o pomoc, jak powinien wyglądać prawidłowy program oraz o informację, jak procesor zachowuje się po wybudzeniu przez WatchDoga - cały procesor jest resetowany (raczej nie, bo wtedy program by działał) czy startuje zaraz za komendą sleep, czy jeszcze inaczej?
Poniżej jeden z wariantów kodu, który sprawdzałem:
pozdrawiam
Buduję prosty układ, który ma zapalić diodę led na 100ms (krótki błysk) po czym przejść w tryb niskiego poboru prądu. Następnie po ok 1s procesor powinien się obudzić i znowu: błysnąć diodą i zasnąć. I tak w kółko.
Jednak program nie działa jak powinien, tj:
Procek startuje, błyska diodą, zasypia, po 1s budzi się i... nic nie robi, pozostaje aktywny. Wiem to, bo mierzę prąd pobierany przez procka - na początku na chwilę jest względnie duży, potem wynosi ok 4-5µA, po ok 1s 0,5-1mA - tak już zostaje.
Proszę o pomoc, jak powinien wyglądać prawidłowy program oraz o informację, jak procesor zachowuje się po wybudzeniu przez WatchDoga - cały procesor jest resetowany (raczej nie, bo wtedy program by działał) czy startuje zaraz za komendą sleep, czy jeszcze inaczej?
Poniżej jeden z wariantów kodu, który sprawdzałem:
#define F_CPU 1200000UL // Zegar fabryczny 1,2MHz (9,6 / 8)
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <avr/sleep.h>
#define LED PB0
int main (void) //:::::::::::: MAIN::::::::::::
{
for(;;)
{
DDRB |= (1 << LED); // LED on PB0
wdt_enable(WDTO_1S); //ustaw pieska na 1s
PORTB |= (1 << LED); //zapal (stan wysoki)
_delay_ms(100); //poczekaj chwile (błysk)
PORTB &= ~(1 << LED); //zgaś (stan niski)
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //ustaw tryb spania
sleep_mode(); //śpij!
}
}
pozdrawiam
