Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Watchdog + powerdown

WiesioShow
-
-
Posty:25
Rejestracja:18 maja 2007, o 16:26
Lokalizacja:Koszalin
Watchdog + powerdown

Postautor: WiesioShow » 8 sie 2008, o 22:28

Chciałem stworzyć prosty program działający na zasilaniu bateryjnym (a zatem potrzebna jest mi oszczędność baterii) - czyli tryby usypiające procka wskazane no i budzić go chciałem właśnie watchdogiem.

Stworzyłem coś takiego:

Kod: Zaznacz cały

#include <avr/io.h> // dostęp do rejestrów #include <avr/wdt.h> // obsługa układu Watchdog #include <avr/sleep.h> // Define baud rate #define USART_BAUD 1200 #define USART_UBBR_VALUE (((F_CPU / (USART_BAUD * 16UL))) - 1) void USART_Init(unsigned int baud) { /* Set baud rate */ UBRRH=(unsigned char)(baud>>8); UBRRL=(unsigned char)baud; /* Enable receiver and transmitter */ UCSRB=(1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bit */ UCSRC=(1<<USBS)|(3<<UCSZ0); } void USART_Transmit(unsigned char data) { /* Wait for empty transmit buffer */ while (!( UCSRA & (1<<UDRE))); /* Put data into buffer, sends the data */ UDR = data; } unsigned char USART_Receive(void) { /* Wait for data to be received */ while (!(UCSRA & (1<<RXC))); /* Get and return received data from buffer */ return UDR; } void USART_TxString(const char StringPtr[]) { while (*StringPtr != 0x00) { USART_Transmit(*StringPtr); StringPtr++; } } int main(void) { USART_Init(USART_UBBR_VALUE); // inicjalizacja portu szeregowego USART_TxString("Start programu !!!\r"); set_sleep_mode(SLEEP_MODE_PWR_DOWN); wdt_enable(WDTO_2S); // watchdog na czas ok 2s // wdt_enable(WDTO_1S); // watchdog na czas ok 1s // wdt_enable(WDTO_500MS); // watchdog na czas ok 0,5s // wdt_enable(WDTO_250MS); // watchdog na czas ok 0,25s // wdt_enable(WDTO_120MS); // watchdog na czas ok 0,12s // wdt_enable(WDTO_60MS); // watchdog na czas ok 0,06s // wdt_enable(WDTO_30MS); // watchdog na czas ok 0,03s // wdt_enable(WDTO_15MS); // watchdog na czas ok 0,015s sleep_enable(); sleep_mode(); return 0; }
Według mnie powinno to działać, ale niestety nie tak nie jest. Ma ktoś jakiś pomysł ?

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 93 gości