- posted
16 years ago
Reset w AVR-GCC
- Vote on answer
- posted
16 years ago
Użytkownik Bogdan G napisał:
Uruchomić WatchDog-a i pocze3kać aż "zaszczeka" ;-)
Pozdrawiam Grzegorz
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
Użytkownik Bogdan G napisał:
To zależy co rozumiesz pod pojęciem RESET-u ? Skok do adresu 0x0000 ? Czy faktyczne zresetowanie procka wraz z zerowaniem portów itd. itp. Trick z WatchDog-iem nie musi być wcale aż tak wolny. Jak ustawisz najmniejszy preskaler, to kilkanaście ms. Ewentualnie podłącz jakąś nogę procka pod RESET i programowo wymuś na niej stan niski.
Pozdrawiam Grzegorz
- Vote on answer
- posted
16 years ago
- Vote on answer
- posted
16 years ago
Użytkownik Zibias napisał:
Ale to nie będzie RESET procka. Np. stany portów pozostaną niezmienione. Z tego powodu pytałem się autora wątku co rozumie pod pojęciem RESET procesora ?
P.S. To samo można zrobić bez wstawki assemblerowej.
Pozdrawiam Grzegorz
- Vote on answer
- posted
16 years ago
Bogdan G pisze:
Najszybszy watchdog to 15 ms - nie wystarczy?
#include <avr/interrupt.h>
#include <avr/wdt.h>
void stop_now (void) { cli (); wdt_enable (WDTO_15MS); for (;;); }
Alternatywnie to w końcu zawsze możesz zewrzeć wejście resetujące AVRa z najbliższym pinem I/O i resetować się programowo. :) Podczas resetu i po starcie wszystkie piny są skonfigurowane jako wejścia Hi-Z więc nie powinno przeszkadzać zwarcie jednego z resetem. A potem w pożądanej chwili wystarczy wyzerować odpowiedni bit w rejestrze PORTn i ustawić w odpowiadającym mu DDRn (co skonfiguruje pin jako wyjściowy). Dla większej stabilności warto by dodać jeszcze do pinu resetu kondensator.