Bogdan G
Guest
Fri Aug 10, 2007 12:58 pm
Jak najprościej zresetować ATmega32 z poziomu AVR-GCC?
Nie znam assemblera i nie umiem robić wstawek assemblerowych.
Grzegorz Kurczyk
Guest
Fri Aug 10, 2007 1:04 pm
Użytkownik Bogdan G napisał:
Quote:
Jak najprościej zresetować ATmega32 z poziomu AVR-GCC?
Nie znam assemblera i nie umiem robić wstawek assemblerowych.
Uruchomić WatchDog-a i pocze3kać aż "zaszczeka"

Pozdrawiam
Grzegorz
Bogdan G
Guest
Fri Aug 10, 2007 1:16 pm
Użytkownik "Grzegorz Kurczyk" <grzegorz@antispam.control.slupsk.pl> napisał
w wiadomości news:f9hkar$f79$1@atlantis.news.tpi.pl...
Quote:
Użytkownik Bogdan G napisał:
Jak najprościej zresetować ATmega32 z poziomu AVR-GCC?
Nie znam assemblera i nie umiem robić wstawek assemblerowych.
Uruchomić WatchDog-a i pocze3kać aż "zaszczeka" ;-)
Dzięki ale chciałem coś szybszego. Po prostu nie chce mi się na razie robić
porządnej obsługi błędu. Jednak nie ma co dziadować - zacznę już robić
przynajmniej jakieś zręby - przydadzą się.
Grzegorz Kurczyk
Guest
Fri Aug 10, 2007 1:36 pm
Użytkownik Bogdan G napisał:
Quote:
Użytkownik "Grzegorz Kurczyk" <grzegorz@antispam.control.slupsk.pl
napisał w wiadomości news:f9hkar$f79$1@atlantis.news.tpi.pl...
Użytkownik Bogdan G napisał:
Jak najprościej zresetować ATmega32 z poziomu AVR-GCC?
Nie znam assemblera i nie umiem robić wstawek assemblerowych.
Uruchomić WatchDog-a i pocze3kać aż "zaszczeka" ;-)
Dzięki ale chciałem coś szybszego. Po prostu nie chce mi się na razie
robić porządnej obsługi błędu. Jednak nie ma co dziadować - zacznę już
robić przynajmniej jakieś zręby - przydadzą się.
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
Zibias
Guest
Sat Aug 11, 2007 9:58 am
Quote:
Użytkownik Bogdan G napisał:
Jak najprościej zresetować ATmega32 z poziomu AVR-GCC?
Nie znam assemblera i nie umiem robić wstawek assemblerowych.
Uruchomić WatchDog-a i pocze3kać aż "zaszczeka" ;-)
Dzięki ale chciałem coś szybszego. Po prostu nie chce mi się na razie
robić porządnej obsługi błędu. Jednak nie ma co dziadować - zacznę już
robić przynajmniej jakieś zręby - przydadzą się.
no to może tak:
asm("cli");
asm("clr r30");
asm("clr r31");
asm("ijmp");
Grzegorz Kurczyk
Guest
Sat Aug 11, 2007 3:25 pm
Użytkownik Zibias napisał:
Quote:
no to może tak:
asm("cli");
asm("clr r30");
asm("clr r31");
asm("ijmp");
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
Adam Dybkowski
Guest
Tue Aug 14, 2007 9:11 pm
Bogdan G pisze:
Quote:
Jak najprościej zresetować ATmega32 z poziomu AVR-GCC?
Nie znam assemblera i nie umiem robić wstawek assemblerowych.
Uruchomić WatchDog-a i pocze3kać aż "zaszczeka" ;-)
Dzięki ale chciałem coś szybszego. Po prostu nie chce mi się na razie
robić porządnej obsługi błędu. Jednak nie ma co dziadować - zacznę już
robić przynajmniej jakieś zręby - przydadzą się.
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.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.