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.
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
- Pułapki AVR: Spis treści
Witam
OdpowiedzUsuń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 :-)
nio i tego szukałem SUPER
OdpowiedzUsuń