-
1. Data: 2013-02-09 19:08:56
Temat: AVR - przerwania zewnętrzne, usypianie i budzenie
Od: Atlantis <m...@w...pl>
Po przeczytaniu odpowiedniego rozdziału podręcznika programowania AVR-ów
wciąż mam kilka wątpliwości, które chciałbym rozwiać:
1) Co tak właściwie dzieje się po wprowadzeniu mikrosterownika w stan
uśpienia? Jakie operacje będą wykonywane, a jakie nie? Załóżmy, że przy
pomocy rejestru MCUCR konfiguruję tryb ilde, w którym aktywna jest
większość modułów. Mam rozumieć, że wywołanie funkcji sleep_mode
spowoduje zatrzymanie wykonywania operacji w głównej funkcji programu,
ale wciąż będą wykonywane funkcje obsługi przerwań czynnych modułów, np.
USART, nawet jeśli nie zawierają one instrukcji wybudzenia mikrosterownika?
2) Co się stanie w przypadku wprowadzenia mikrosterownika w tryb
power-down, podczas gdy do portu USART podłączone jest aktywne
urządzenie? Do momentu wybudzenia mikrosterownika np. przez INT0
przesyłane dane będą po prostu przepadały, czy też taka sytuacja stwarza
jakieś zagrożenie dla uC albo podłączonego modułu?
3) Po wybudzeniu układu (np. przez przerwanie zewnętrzne) w którym
miejscu program wznawia swoją pracę? Dokładnie tam, gdzie znajdował się
przed uśpieniem, czy w jakimś innym punkcie?
4) Rozumiem, że w stanie uśpienia wszystkie wyłączone moduły (liczniki,
PWM) zachowują swoją konfigurację i po wybudzeniu automatycznie
rozpoczynają przerwaną pracę?
-
2. Data: 2013-02-09 19:47:14
Temat: Re: AVR - przerwania zewnętrzne, usypianie i budzenie
Od: "michal" <...@b...pl>
Użytkownik "Atlantis" <m...@w...pl> napisał w wiadomości
news:kf63bu$c0q$1@portraits.wsisiz.edu.pl...
> Po przeczytaniu odpowiedniego rozdziału podręcznika programowania AVR-ów
> wciąż mam kilka wątpliwości, które chciałbym rozwiać:
>
> 1) Co tak właściwie dzieje się po wprowadzeniu mikrosterownika w stan
> uśpienia? Jakie operacje będą wykonywane, a jakie nie? Załóżmy, że przy
> pomocy rejestru MCUCR konfiguruję tryb ilde, w którym aktywna jest
> większość modułów. Mam rozumieć, że wywołanie funkcji sleep_mode spowoduje
> zatrzymanie wykonywania operacji w głównej funkcji programu, ale wciąż
> będą wykonywane funkcje obsługi przerwań czynnych modułów, np. USART,
> nawet jeśli nie zawierają one instrukcji wybudzenia mikrosterownika?
idle - cpu nie pracuje.
liczniki liczą, uart pracuje, program nie jest wykonywany,
pojawiajace sie przerwanie budzi mikrosterownik, wykonuje dane
przerwanie i wznawia wykonywanie następnego kodu po instrukcji sleep.
> 2) Co się stanie w przypadku wprowadzenia mikrosterownika w tryb
> power-down, podczas gdy do portu USART podłączone jest aktywne urządzenie?
> Do momentu wybudzenia mikrosterownika np. przez INT0 przesyłane dane będą
> po prostu przepadały, czy też taka sytuacja stwarza jakieś zagrożenie dla
> uC albo podłączonego modułu?
prawdopodobnie tak jak piszesz dane sa tracone bo uart nie pracuje,
dokladnie nie pamietam należało by przeczytać manual.
> 3) Po wybudzeniu układu (np. przez przerwanie zewnętrzne) w którym miejscu
> program wznawia swoją pracę? Dokładnie tam, gdzie znajdował się przed
> uśpieniem, czy w jakimś innym punkcie?
dokładnie następna instrukcja po sleep. (lub przerwanie trzeba popatrzeć do
manuala
aczkolwiek to zazwyczaj bez znaczenia)
> 4) Rozumiem, że w stanie uśpienia wszystkie wyłączone moduły (liczniki,
> PWM) zachowują swoją konfigurację i po wybudzeniu automatycznie
> rozpoczynają przerwaną pracę?
tak. ale tez nalezy zobaczyć do manuala z szczególnym uwzglednieniem
erraty.
(tych trybów jest kilka i troche różnie na różnych prockach działają).
pozdrawiam
mm
-
3. Data: 2013-02-09 20:27:38
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: Atlantis <m...@w...pl>
W dniu 2013-02-09 19:47, michal pisze:
> liczniki liczą, uart pracuje, program nie jest wykonywany,
> pojawiajace sie przerwanie budzi mikrosterownik, wykonuje dane
> przerwanie i wznawia wykonywanie następnego kodu po instrukcji sleep.
Każde przerwanie, dobrze rozumiem? Czyli jeśli USART mi coś wyśle, to po
wykonaniu funkcji obsługi przerwana odbioru znaku program rozpocznie
normalne działanie, nawet jeśli funkcja sama w sobie nie będzie
zawierała instrukcji wybudzenia?
> dokładnie następna instrukcja po sleep. (lub przerwanie trzeba popatrzeć do
> manuala
> aczkolwiek to zazwyczaj bez znaczenia)
Chcę po prostu upewnić się, czy moje rozumienie tematu jest poprawne,
zanim zabiorę się za pisanie kodu. Generalnie program ma być uśpiony
przez większość czasu. Budzić mają go dwa zdarzenia:
1) Pojawienie się sygnału dzwonka (linia RI współpracującego modułu GSM)
2) Podniesienie słuchawki telefonicznej.
Linie podpięte są odpowiednio do INT0 i INT1. Przerwania wyzwalane
pojawieniem się stanu niskiego (a może zbocze odpadające byłoby lepszym
pomysłem?). Wewnątrz obsługujących je funkcji znajduje się tylko
instrukcja wybudzenia.
W funkcji main znajduje się nieskończona pętla. W niej dwie instrukcje
warunkowe. Jedna sprawdza obecność stanu niskiego na RI, druga
podniesienie słuchawki. Dopóki warunki te są spełnione, w pętlach
wykonują się właściwe operacje.
Za instrukcjami warunkowymi, na końcu nieskończonej pętli znajduje się
instrukcja wprowadzająca moduł w stan uśpienia, tak więc po następnym
wybudzeniu sprawdzanie zacznie od następnej iteracji nieskończonej pętli.
Tak to powinno wyglądać czy coś pomieszałem?
> (tych trybów jest kilka i trochę różnie na różnych prockach działają).
Mi akurat chodzi o zwykłą Atmegę8. ;)
-
4. Data: 2013-02-10 13:43:56
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: DJ <j...@p...onet.pl>
On 2013-02-09 20:27:38 +0100, Atlantis <m...@w...pl> said:
> Każde przerwanie, dobrze rozumiem?
Nie.
1. Wszystkie takie podstawowe szczegóły masz opisane w datasheet. Naprawdę.
2. Zależne jest to mocno do konkretnego modelu procka AVR, są różne
poziomy sleep.
> Mi akurat chodzi o zwykłą Atmegę8. ;)
Więc datasheet ad atmega8. Tam naprawdę wszystko jest.
Rozdział "Power management and sleep modes", jest tam opisane które
części uC działają w danym trybie uśpienia, i które przerwania wybudzą
go z konkretnego poziomu snu. Jest nawet ładna tabelka.
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
-
5. Data: 2013-02-10 17:58:36
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: Atlantis <m...@w...pl>
W dniu 2013-02-10 13:43, DJ pisze:
> Więc datasheet ad atmega8. Tam naprawdę wszystko jest.
Właśnie czytałem, ale wciąż nie mam całkowitej pewności jak
interpretować ten fragment:
"Idle mode enables the MCU to wake up from external triggered interrupts
as well as internal
ones like the Timer Overflow and USART Transmit Complete interrupts."
Skłaniałbym się raczej ku interpretacji, w myśl której w obsłudze
przerwania USART mogę umieścić instrukcję budzenia (wyzerowanie
odpowiednich bitów w MCUCR). Ale czy samo wystąpienie przerwania
spowoduje wyjście ze stanu uśpienia?
-
6. Data: 2013-02-10 18:04:38
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: AlexY <a...@i...pl>
Atlantis wrote:
> W dniu 2013-02-10 13:43, DJ pisze:
>
>> Więc datasheet ad atmega8. Tam naprawdę wszystko jest.
>
> Właśnie czytałem, ale wciąż nie mam całkowitej pewności jak
> interpretować ten fragment:
>
> "Idle mode enables the MCU to wake up from external triggered interrupts
> as well as internal
> ones like the Timer Overflow and USART Transmit Complete interrupts."
>
> Skłaniałbym się raczej ku interpretacji, w myśl której w obsłudze
> przerwania USART mogę umieścić instrukcję budzenia (wyzerowanie
> odpowiednich bitów w MCUCR). Ale czy samo wystąpienie przerwania
> spowoduje wyjście ze stanu uśpienia?
Czy uśpiony procek realizuje program? (tak rozumiem to co napisałeś)
Powyższy fragment mówi że np USART w trybie uśpienia wysyła dane z
bufora i po zakończeniu transmisji może obudzić program
--
AlexY
http://nadzieja.pl/inne/spam.html
http://www.pg.gda.pl/~agatek/netq.html
-
7. Data: 2013-02-10 18:26:33
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: DJ <j...@p...onet.pl>
On 2013-02-10 17:58:36 +0100, Atlantis <m...@w...pl> said:
> W dniu 2013-02-10 13:43, DJ pisze:
>
>> Więc datasheet ad atmega8. Tam naprawdę wszystko jest.
>
> Właśnie czytałem, ale wciąż nie mam całkowitej pewności jak
> interpretować ten fragment:
>
> "Idle mode enables the MCU to wake up from external triggered
> interrupts as well as internal
> ones like the Timer Overflow and USART Transmit Complete interrupts."
przy INT0/1 jest notka, że budzenie poziomem.
> Skłaniałbym się raczej ku interpretacji, w myśl której w obsłudze
> przerwania USART mogę umieścić instrukcję budzenia (wyzerowanie
> odpowiednich bitów w MCUCR).
Nie musisz. On już jest obudzony sprzętowo.
> Ale czy samo wystąpienie przerwania spowoduje wyjście ze stanu uśpienia?
Tak, i tylko tak.
Po obudzeniu wykonuje kod spod wektora przerwania który spowodował
"pobudkę", a po jego zakończeniu wraca do miejsca gdzie usnął, wykonuje
kolejne rozkazy.
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
-
8. Data: 2013-02-10 18:33:06
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: DJ <j...@p...onet.pl>
On 2013-02-10 18:04:38 +0100, AlexY <a...@i...pl> said:
> Atlantis wrote:
>> W dniu 2013-02-10 13:43, DJ pisze:
>>
>>> Więc datasheet ad atmega8. Tam naprawdę wszystko jest.
>>
>> Właśnie czytałem, ale wciąż nie mam całkowitej pewności jak
>> interpretować ten fragment:
>>
>> "Idle mode enables the MCU to wake up from external triggered interrupts
>> as well as internal
>> ones like the Timer Overflow and USART Transmit Complete interrupts."
>>
>> Skłaniałbym się raczej ku interpretacji, w myśl której w obsłudze
>> przerwania USART mogę umieścić instrukcję budzenia (wyzerowanie
>> odpowiednich bitów w MCUCR). Ale czy samo wystąpienie przerwania
>> spowoduje wyjście ze stanu uśpienia?
>
> Czy uśpiony procek realizuje program? (tak rozumiem to co napisałeś)
Podchwytliwe pytanie, to i podchwytliwa odpowiedź:
Realizuje program? Tak.
Wykonuje rozkazy i zmienia ProgramCounter? Nie.
MSPANC :)
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
-
9. Data: 2013-02-10 18:34:44
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: Atlantis <m...@w...pl>
W dniu 2013-02-10 18:26, DJ pisze:
> przy INT0/1 jest notka, że budzenie poziomem.
> (...)
> Nie musisz. On już jest obudzony sprzętowo.
Tylko poziomem?
A jeśli przerwanie INT0/INT1 ustawię np. tak, żeby reagowało na
opadające zbocze i w funkcji wyzeruję bity MCUCR - obudzi się?
-
10. Data: 2013-02-10 18:40:53
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: DJ <j...@p...onet.pl>
On 2013-02-10 18:34:44 +0100, Atlantis <m...@w...pl> said:
> W dniu 2013-02-10 18:26, DJ pisze:
>
>> przy INT0/1 jest notka, że budzenie poziomem.
> > (...)
>> Nie musisz. On już jest obudzony sprzętowo.
>
> Tylko poziomem?
Note that if a level triggered interrupt is used for wake-up from
Power-down mode, the
changed level must be held for some time to wake up the MCU. This makes the MCU
less sensitive to noise. The changed level is sampled twice by the
watchdog oscillator
clock.
Więc pewnie z tego powodu do budzenia musi być poziom, nie zbocze.
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu