-
11. Data: 2013-02-10 18:54:27
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?
A tabelkę oglądałeś?
W idle można zboczem, reszta trybów snu - poziomem.
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
-
12. Data: 2013-02-10 19:21:43
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: Atlantis <m...@w...pl>
W dniu 2013-02-10 18:40, DJ pisze:
> Więc pewnie z tego powodu do budzenia musi być poziom, nie zbocze.
Dobrze, w takim razie jeszcze jedno pytanie. Jak właściwie wygląda
próbkowanie tego poziomu?
Powiedzmy, że ustawiam INT0 i INT1 na wykrywanie stanu niskiego. Na
liniach pojawia się logiczne zero trwające kilka sekund, a nawet całe
minuty. Kiedy i ile razy wykona się przerwanie?
-
13. Data: 2013-02-10 19:37:37
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: "J.F." <j...@p...onet.pl>
Dnia Sun, 10 Feb 2013 18:34:44 +0100, Atlantis napisał(a):
> 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ę?
Jak procek bedzie dobrze uspiony, to w "w funkcji przerwania" nie nastapi
:-)
A jesli nastepuje, to juz jest obudzony.
Problem z przerwaniem na zbocze jest taki, ze ta funkcja jest czesto
realizowana, jakby to okreslic ... mikroprogramowo ?
Pin jest probkowany w okreslonym momencie cyklu zegarowego, i wewnetrzna
logika rozpoznaje zbocze jak stan ulegl zmianie od poprzedniej probki.
Ale w tym celu zegar musi dzialac, przynajmniej w ukladzie przerwan.
No i czas impulsu musi byc odpowiednio dlugi ... i uwaga przy zegarze o
zmiennej czestotliwosci. To samo zreszta przy "level"
J.
-
14. Data: 2013-02-11 01:10:19
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: Marek <f...@f...com>
On Sun, 10 Feb 2013 19:37:37 +0100, "J.F."
<j...@p...onet.pl> wrote:
> Problem z przerwaniem na zbocze jest taki, ze ta funkcja jest czesto
> realizowana, jakby to okreslic ... mikroprogramowo ?
Wiesz jak jest konkretnie realizowana w Atmedze?
--
Marek
-
15. Data: 2013-02-11 03:02:56
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: Michoo <m...@v...pl>
On 10.02.2013 19:37, J.F. wrote:
> Dnia Sun, 10 Feb 2013 18:34:44 +0100, Atlantis napisał(a):
>> 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ę?
>
> Jak procek bedzie dobrze uspiony, to w "w funkcji przerwania" nie nastapi
> :-)
> A jesli nastepuje, to juz jest obudzony.
>
> Problem z przerwaniem na zbocze jest taki, ze ta funkcja jest czesto
> realizowana, jakby to okreslic ... mikroprogramowo ?
Wybudzanie za pomocą zbocza robi się w najprostszej postaci za pomocą 2
przerzutników D w szeregu. Jak D1 XOR D2 == 1 to masz zbocze.
Filtrowanie to zazwyczaj długa linia opóźniająca i stan "połówki" jest
obliczany według większości bitów (np bufor na 14 bitów wycina
pojedyncze zakłócenie do 3 cykli).
> Pin jest probkowany w okreslonym momencie cyklu zegarowego, i wewnetrzna
> logika rozpoznaje zbocze jak stan ulegl zmianie od poprzedniej probki.
> Ale w tym celu zegar musi dzialac, przynajmniej w ukladzie przerwan.
Ze względu m.i. na pobór prądu we współczesnych procesorach prawie
wszystko jest synchronizowane zegarem.
--
Pozdrawiam
Michoo
-
16. Data: 2013-02-11 11:51:46
Temat: Re: AVR - przerwania zewn?trzne, usypianie i budzenie
Od: g...@s...invalid (Adam Wysocki)
DJ <j...@p...onet.pl> wrote:
> Więc pewnie z tego powodu do budzenia musi być poziom, nie zbocze.
Musi być dlatego, że w power down główny zegar jest zatrzymany. W idle nie jest.
--
Gof
http://www.chmurka.net/
-
17. Data: 2013-02-20 23:15:52
Temat: Re: AVR - przerwania zewnętrzne, usypianie i budzenie
Od: Atlantis <m...@w...pl>
BTW jeszcze jedno pytanie przyszło mi do głowy:
Jak zachowuje się watchdog w stanie idle? Z dokumentacji wynika, że jest
włączony, jednak skoro program się nie wykonuje, to nie ma co go
resetować. A jeśli tak, to uC powinien zostać zrestartowany natychmiast
po wprowadzeniu w stan idle z aktywnym watchdogiem. A to nie miałoby
najmniejszego sensu... Więc jak to wygląda w rzeczywistości?
-
18. Data: 2013-02-20 23:56:41
Temat: Re: AVR - przerwania zewnętrzne, usypianie i budzenie
Od: DJ <j...@p...onet.pl>
On 2013-02-20 23:15:52 +0100, Atlantis <m...@w...pl> said:
> BTW jeszcze jedno pytanie przyszło mi do głowy:
> Jak zachowuje się watchdog w stanie idle? Z dokumentacji wynika, że
> jest włączony, jednak skoro program się nie wykonuje, to nie ma co go
> resetować.
Tak musisz program przemyśleć żeby miał okazję resetować watchdoga,
jako objaw normalnej pracy. Np przerwaniami z timerów, czy czegokolwiek
innego co występuje zawsze częściej niż okres watchdoga.
Jeśli chcesz uśpić uC na amen na 30 minut, bo np po takim czasie
przjdzie Ci INT0/1, to watchdoga w tym czasie użyć nie możesz.
A jeśli tak, to uC powinien zostać zrestartowany natychmiast po
wprowadzeniu w stan idle z aktywnym watchdogiem.
czemu _natychmiast_? ustawiasz czas reakcji watchdoga na 0.00000000usec ;P
--
DJ
PS. przy odpisywaniu na priv usun antyspamowy wpis z adresu
-
19. Data: 2013-02-21 18:46:31
Temat: Re: AVR - przerwania zewnętrzne, usypianie i budzenie
Od: Atlantis <m...@w...pl>
W dniu 2013-02-20 23:56, DJ pisze:
> Tak musisz program przemyśleć żeby miał okazję resetować watchdoga, jako
> objaw normalnej pracy. Np przerwaniami z timerów, czy czegokolwiek
> innego co występuje zawsze częściej niż okres watchdoga.
> Jeśli chcesz uśpić uC na amen na 30 minut, bo np po takim czasie
> przjdzie Ci INT0/1, to watchdoga w tym czasie użyć nie możesz.
Czyli tak jak myślałem... Czy w takim razie duże jest zagrożenie
zawieszeniem się uC w trybie uśpienia?
> czemu _natychmiast_? ustawiasz czas reakcji watchdoga na 0.00000000usec ;P
Oj, skrót myślowy. Miałem na myśli perspektywę człowieka, a nie maszyny. ;)
-
20. Data: 2013-02-22 00:26:44
Temat: Re: AVR - przerwania zewnętrzne, usypianie i budzenie
Od: Michoo <m...@v...pl>
On 21.02.2013 18:46, Atlantis wrote:
> W dniu 2013-02-20 23:56, DJ pisze:
>
>> Tak musisz program przemyśleć żeby miał okazję resetować watchdoga, jako
>> objaw normalnej pracy. Np przerwaniami z timerów, czy czegokolwiek
>> innego co występuje zawsze częściej niż okres watchdoga.
>> Jeśli chcesz uśpić uC na amen na 30 minut, bo np po takim czasie
>> przjdzie Ci INT0/1, to watchdoga w tym czasie użyć nie możesz.
>
> Czyli tak jak myślałem... Czy w takim razie duże jest zagrożenie
> zawieszeniem się uC w trybie uśpienia?
Jeżeli projekt jest poprawnie zaprojektowany to nie istnieje ryzyko
"zawieszenia".
Przykład 1 - Czytasz dane z GPS po UART i zapisujesz na kartę.
- Procesor po starcie resetuje zewnętrzne urządzenia i przeprowadza
inicjalizację.
- Procesor przechodzi w tryb IDLE.
- Przerwania UART powodują pakowanie bajtów do bufora i sparsowanie
wiadomości po \n.
- Przerwanie zegarowe rozpoczyna zapis na kartę po SPI.
- Przerwania obsługują transmisję po SPI.
- Jeżeli nie będzie przez dłuższy czas komunikacji od GPS, albo zamrze
komunikacja z kartą watchdog wywoła reset pozwalając.
Szablon wygląda +- tak:
main(){
if(watch_dog_reset){
report_error();
GPS->force_reset();
CARD->force_reset();
}
GPS->setup();
CARD->setup();
//...
for(;;)
sleep();
}
Przykład 2 - czekasz na naciśnięcie przycisku i otwierasz zamek jeżeli
się zgadza karta.
- Procesor po starcie resetuje zewnętrzne urządzenia i przeprowadza
inicjalizację.
- Procesor przechodzi w tryb STANDBY.
- Jedynym zdarzeniem na które czeka procesor jest przycisk, więc wd jest
wyłączony.
- W czasie kiedy następuje komunikacja z kartą włączasz wd.
Szablon wygląda +- tak:
main(){
if(watch_dog_reset){
report_error();
cleanup();
}
BTN1->setup();
for(;;){
sleep();
wd_enable();
CARD->setup();
if(CARD->verify_access()){
DOOR->open();
busy_wait();
DOOR->close();
}
wd_disable();
}
}
--
Pozdrawiam
Michoo