Mikroprocesorowa Ośla łączka Ml
zostanie wykonana tylko raz). Natomiast przy reakcji na poziom niski, trwale pojawienie się stanu niskiego spowoduje wielokrotne wykonywanie procedury obsługi przerwania przez cały czas, gdy na końcówce wejściowej tego przerwania będzie panował stan niski. Dalszych informacji na ten temat też szukaj w Technikaliach.
Procesor 90S2313 ma dwa tryby oszczędnościowe: ldle oraz Power Down - zostały one wstępnie opisane w EdW 11/2002 str. 45. W obu przypadkach realizacja programu zostaje wstrzymana, można powiedzieć - zamrożona. Zamrożona, czyli niejako w jednej chwili wstrzymana bez żadnych dodatkowych operacji zmiany stanu regestrów czy pamięci.
Po przejściu w tryb ldle „zamrożony” zostaje tylko mikroprocesor, natomiast czynny jest oscylator kwarcowy oraz wszystkie układy peryferyjne (liczniki-timery, przerwania zewnętrzne, obwody U ART, komparator analogowy). Dzięki temu można „obudzić procesor do życia” za pomocą jakiegokolwiek przerwania, na przykład przerwania od licznika T/Cl.
Wprowadzenie w tryb Power Down „zamraża” nie tylko procesor, ale też układy peryferyjne (z wyjątkiem watchdoga i obwodów przerwań zewnętrznych INTO, INT1). Co bardzo ważne, przestaje też pracować oscylator kwarcowy. O ile przejście w tryb ldle zmniejsza pobór prądu około 3-krotnie: przy zasilaniu 5V z około 7,5mA na około 2mA, o tyle pobór prądu w trybie Power Down ze względu na wyłączenie oscylatora kwarcowego jest radykalnie mniejszy: przy zasilaniu 5V około 80pA z włączonym watchdogiem (bo pracuje wewnętrzny oscylator RC i licznik watchdoga) oraz poniżej 0,lpA, gdy watchdog jest wyłączony i procesor nie wykazuje żadnej aktywności.
Przejście w dowolny tryb oszczędnościowy „zamraża” procesor, stan rejestrów i pamięci oraz
I bieżący program. Co bardzo ważne w praktyce, zachowane są też stany portów B i D.
Można niezmiernie łatwo wprowadzić procesor w jeden z tych trybów oszczędnościowych, umieszczając w programie jedno z poleceń BASCOM-a:
IDLE
POWERDOWN
Wtedy zanik napięcia zasilacza zatka tranzystor Tx, przez końcówkę PD.2 przestanie płynąć prąd i pojawi się na niej stan wysoki.
Zamiast wykorzystywać końcówkę PD.2 możemy spożytkować obecny na naszej płytce testowej tranzystor T7 i rezystor R32. Wejs'ciem informacji o obecności i zaniku zasilania musi wtedy być końcówka PD.O. W poprzednich realizacjach zegara służyła ona do ustawiania godzin. Teraz niech pełni nową rolę, a przycisku ustawiania godzin nie będzie - nasz zegar będzie miał jeden „inteligentny” przycisk do ustawiania czasu. Dłuższe naciskanie S2 spowoduje szybkie zwiększanie licznika minut oraz godzin. Ponieważ chodzi tylko o opanowanie kolejnych umiejętności, dlatego możemy dopuścić taki uproszczony sposób ustawiania. Schemat połączeń pokazany na jest na rysunku 75. My w ramach podstawowych ćwiczeń wykorzystamy jeszcze bardziej uproszczony sposób. Nie będziemy dodawać zewnętrznych diod i baterii rezerwowej, a układ jak zawsze cały czas będzie zasilany napięciem 5V dołączonym albo do zacisków złącza sTubowego Power, albo jeszcze prościej, napięciem +5V z komputera przez kabel programujący. W sumie nie wykorzystamy też elementów T7 i R32 na płytce. W ramach naszych ćwiczeń przycisk SI, który przecież umieszczony jest równolegle do złącza kolektor-emiter T7, będzie udawał obwód wykrywający zanik napięcia zasilania. W układzie z rysunku 75 w normalnych warunkach pracy T7 byłby otwarty, co jest równoznaczne ze zwarciem SI. Zanik napięcia z zasilacza oznaczałby zatkanie T7, a w naszym przypadku rozwarcie SI. Da to trochę dziwne działanie, bo dopiero naciśnięcie SI spowoduje włączenie wyświetlacza, ale jest to tylko ćwiczenie, więc nie robimy z tego problemu.
A teraz kwestia programu - na czas zaniku napięcia sieci trzeba na pewno wygasić prądożeme wyświetlacze. Ponieważ jednak nasz zegar musi przy braku napięcia sieci zliczać czas, nie można wykorzystać super-oszczędnego trybu Power Down, tylko tryb ldle, w którym pobór prądu wynosi około 2mA przy napięciu zasilania 5V. W trybie ldle główna część mikroprocesora nie pracuje, pracują jednak generator kwarcowy i układy peryferyjne, w tym oba liczniki T/CO, T/Cl, a przerwania od nich mogą budzić procesor z letargu. Przez zdecydowaną większość czasu procesor będzie więc w stanie ldle. Po zaniku napięcia (wykryciu stanu wysokiego na nóżce PD.O) wyświetlacz nie będzie obsługiwany, jedynie co sekundę będą budzić procesor do życia przerwania od T/C1. Obsługa przerwań będzie powodować tylko zwiększanie zawartości liczników, a wiec po króciutkiej chwili procesor zostanie znów wprowadzony w stan ldle.
Sposobów realizacji takiej idei jak zwykle jest wiele. Możemy zmodyfikować program poprzedniego zegara, dlatego koniecznie powróć do ćwiczenia 16 i jeszcze raz przeanalizuj program COlób.bas (rysunek 72 w EdW 5/2003). Teraz popatrz na rysunek 76, pokazujący szkielet nowego programu z wykorzystaniem trybu oszczędnościowego IDLE (znajdziesz go też w pliku C017a.bas, ale oczywiście nie jest to program, tylko szkie-let-szkic). Zasada zmniejszania poboru prądu przez wykorzystanie trybu IDLE jest beznadziejnie łatwa: w programie COlób.bas programem głównym była pusta pętla DO...LO-OP bezużytecznie zwiększająca pobór prądu.
Rys. 75
wejściowej jednorazowo ustawia flagę, mezalez-nie od stanów bitów zezwalających GIMSK.6 i SREG.7. Flaga pozostanie ustawiona aż do cza-su, gdy automatycznie wyzeruje ją procesor, za-czynając obsługę tego przerwania. Flagę można M też wyzerować programowo, wpisując do niej je-dynkę (!). ale to inna historia. W każdym razie raz >• ustawiona flaga spowoduje jednorazowe obsluże-r* nie przerwania i to nawet długo po czasie wystą-pienia aktywnego zbocza (np. jeśli procesor ^ w chwili zgłoszenia przerwania obsługiwał inne przerwanie).
Zupełnie inaczej jest przy wyzwalaniu poziomem ujemnym. Zwróć uwagę, że dla tego trybu na omawianym właśnie rysunku w ogóle nie zaznaczyłem flagi GIFR.6. Jest ona nieaktywna i na pewno nie zapamiętuje faktu zgłoszenia przerwania. Ma to dwie konsekwencje: po pierwsze, jeśli na przykład procesor obsługuje inne przerwanie i bit globalnego zezwolenia SREG.7 jest wyzerowany, a wyzwalający stan niski szybko zniknie, wtedy przerwanie zewnętrzne w ogóle nie zostanie zauważone i obsłużone. Z drugiej strony, jeśli stan niski będzie się długo utrzymywał, procedura obsługi przerwania zostanie wykonana wiele razy. Decydując się na wybór sposobu reakcji, trzeba wiec przeanalizować konkretne zastosowanie i zachowanie obwodów zgłaszających przerwanie.
Tu muszę Ci przypomnieć, że procesor testuje stan końcówek INTO, INT1 „punktowo” w każdym takcie zegara kwarcowego i tak naprawdę tylko w tych punktach czasowych sprawdza ich stan. Oznacza to, że jeśli impuls wyzwalający będzie bardzo krótki, istnieje duże prawdopodobieństwo, że procesor „nie zauważy” zgłoszenia przerwania. Przy wyzwalaniu rosnącym lub opadającym zboczem,
40 Czerwiec 2003 Elektronika dla Wszystkich