Strona główna · AVR · BÅ‚Ä…d w ATMega88

BÅ‚Ä…d w ATMega88

ATMega88 Mikrokontroler ATMega88 jest według mnie jednym z najbardziej udanym konstrukcyjnie układem firmy Atmel. Jest mały i wręcz idealny do zastosowań w średnio skomplikowanych aplikacjach. Posiada wewnętrzny oscylator RC, dzięki czemu może pracować praktycznie bez elementów zewnętrznych (gdy nie jest wymagana wysoka stabilność częstotliwości pracy). Wyposażony w sprzętowe interfejsy: I2C (TWI w nomenklaturze Atmela), SPI, USART pozwala na prostą implementację komunikacji z otoczeniem. Przerwania zewnętrzne dostępne praktycznie na każdym pinie dają sporą dowolność przy projektowaniu płytki drukowanej docelowej aplikacji.

Pewnie można wymienić jeszcze wiele zalet wspomnianego układu, ale czas na łyżkę dziegciu.

Ostatnio tworzyłem program, który korzystał z watchdoga będącego wewnętrzną częścią układu ATMega88. W trakcie testów okazało się, że po zresetowaniu układu przez watchdog, mikrokontroler nie chce wystartować – potrzebne jest odłączenie i ponowne podłączenie zasilania, ponieważ zewnętrzny reset nie pomagał. Długo szukałem błędu we własnej aplikacji, aż w końcu doszedłem do wniosku, że wina nie leży po mojej stronie. Okazało się, że mikrokontroler, po resecie wywołanym przepełnieniem licznika watchdoga, nie wyłączał układu watchdog, a dodatkowo ustawiał czas jego przepełnienia na najmniejszą wartość (około 15ms). Z tego powodu układ ciągle się resetował i aplikacja nie startowała (ściślej: startowała na 15ms). Mało tego, pracując w WinAVR i próbując wyłączyć watchdoga w funkcji main() problem nie znikał. I dlatego trochę zniechęciłem się do tego układu.

Na szczęście istnieje rozwiązanie, choć mam żal do projektantów układu, że popełnili taką gafę.

Aby skutecznie wyłączyć watchdoga w aplikacji pisanej pod avr gcc należy dodać następujący kod:

void get_mcusr(void) __attribute__((naked)) __attribute__((section(".init3"))); 
void get_mcusr(void) 
{ 
	MCUSR = 0; 
	wdt_disable(); 
}

Pisząc w assemblerze, wystarczy gdzieś na początku wykonywania programu wyłączyć ten nieszczęsny watchdog.

dodane przez admin October 16, 2008 (11:27AM)

bartek .::. October 23, 2008 (10:13AM)

Też lubię ten mikrokontroler. Trochę szkoda, że w jego konstrukcji jest jakieś niedopatrzenie. Oby to nie wróżyło więcej takich niespodzianek.

Dodaj komentarz

* = wymagane pole

:

:

:


7 + 9 =

MAGICZNY BANER darmowy system wymiany banerów