piątek, 1 kwietnia 2011

Pułapki AVR: Niekontrolowane przerwanie z komparatora


Autor: Dondu

Artykuł jest fragmentem cyklu: Pułapki mikrokontrolerów AVR

Komparator analogowy w mikrokontrolerach AVR ma możliwość zgłaszania przerwań. Istnieje przypadek, w którym może nastąpić niekontrolowane przerwanie w trakcie wyłączania komparatora (np. w celu oszczędzania energii baterii zasilającej mikrokontroler):


tłumaczenie:

Datasheet ATmega8 - str. 194
Gdy zmieniasz bit ACD (wł/wył komparator) przerwania komparatora muszą być wyłączone przez wyzerowanie bitu ACIE w rejestrze ACSR. W przeciwnym wypadku może wystąpić przerwanie podczas zmiany bitu ACD.


Innymi słowy ważne jest zachowanie takiej kolejności instrukcji, podczas wyłączania komparatora:
//wyłączenie komparatora analogowego 
ACSR &= ~(1<<ACIE);  //wyłącz przerwania komparatora
ACSR |= (1<<ACD);    //wyłącz komparator (uwaga! wyjątek opisany poniżej)

Zwróć uwagę jeszcze na to, że komparator domyślnie jest włączony (ustawione zero), a żeby go wyłączyć trzeba ustawić jedynkę na bicie ACD.


Zobacz pozostałe pułapki AVR

2 komentarze:

  1. Witam
    Osobiście uważam, że naturalnym językiem dla mikrokontrolerów AVR jest assembler, dlatego zalecenia programowe dobrze by było ilustrować przede wszystkim w assemblerze a ewentualnie dodatkowo w C. Niestety należy się przy tym liczyć z ryzykiem porzucania C na korzyść asseblera przez czytelników :-)

    OdpowiedzUsuń
  2. nio i tego szukałem SUPER

    OdpowiedzUsuń