94 (132)

94 (132)



94


Mikroprocesorowa Ośla łączka

wykorzystanie watchdoga w innej roli. Przy    stanu Powerdown może wyrwać procesor przez watchdoga. Wykorzystajmy to teraz

okazji ćwiczeń 17 i 18 dowiedziałeś się, że ze    przerwanie czy też raczej reset wywołany    w naszej centralce.

Ćwiczenie 22 Watchdog w akcji - oszczędzamy prąd

'C022a Oszczędna centralka alarmowa - watchdog "budzi" ją co 0.5s Snoramclear    'podczas resetu nie zeruj zawartości zmiennych

'tu będg deklaracje oraz konfiguracja watchdoga (512ms) i portów 1/0 ' dobrze byłoby tez dodać procedurę ręcznej inicjałizacji, np If Pind 0 • 0 Then tu procedura ręcznej inicjalizacji przyciskiem SI


'1. jak poprzednio najpierw uzyskujemy aktualny stan linii II. 12 oraz wejść SI. S2: '2. jeśli którakolwiek z trzech flag czasu jest ustawiona, w procedurach If-Then-Else zliczamy czasfco O.Ss). gdy czas zostanie odliczony odpowiednia flaga - zerowana '3. potem standardowo sprawdzamy stan centralki Powerdown End


Rys. 115.


$nora»clear

Din Stan As Byte Config Portb * Output Config Batchdog - 512 Start Batchdog

'( tu wykorzystaliśmy komentarz globalny Portb * Stan    'i może coś jeszcze

')

Incr Stan Portb ■ Stan


Snoramclear Din Stan As Byte

Config Portb * Output

Config Watchdog •

512 Start Watchdog

'( tu wykorzystaliśmy komentarz globalny

Portb * Stan

'i może coś jeszcze ')

Incr Stan Portb *

Stan

Powerdovn

End

Rys. 117.


Niech teraz przez większość czasu nasza centralka pozostaje w trybie Power Down i niech co około 0,5 sekundy watchdog budzi ją do życia na króciutką chwilę. Taki zabieg radykalnie obniży pobór prądu przez procesor. My w naszej płytce testowej tego faktu nie wykorzystamy, bo nawet jeśli wyjmiesz z podstawki układ PCF8591, znaczny prąd nadal pobierać będą kontrolka LED, układ TL431, a także wyświetlacze, które tak jak poprzednio mają na bieżąco pokazywać stan centralki. Niemniej taki sposób jest jak najbardziej użyteczny i godny polecenia, więc zmodyfikujmy wcześniejszy program. Koncepcja jest bardzo prosta - teraz program nie będzie już zawierał pętli Do...Loop i nie będziemy wykorzystywać timera ani przerwań od niego. Zamiast przerwania od Timera l wykorzystamy reset zarządzany co pół sekundy przez watchdog. Program będzie bardzo podobny do wcześniejszego, ale musimy uwzględnić kilka ważnych szczegółów. Mianowicie w standardowym programie po rese-cie następuje programowe zerowanie pamięci RAM, czyli zerowanie wszystkich zmiennych. U nas zmienna Stan nadal ma zawierać informacje o aktualnym stanie centralki, więc nie można jej zerować co pół sekundy. Zapobiegnie temu umieszczona na początku programu dyrektywa $noramclear

Znak dolara na początku wskazuje, iż jest to dyrektywa dla kompilatora, żeby w programie nie umieścił standardowej procedury zerowania RAM-u. Ponieważ podczas resetu rejestry 1/0, a tym samym końcówki I/O, zawsze są zerowane, nie możemy już wykorzystywać bitu Podtb.6 jako pamięci alarmu -trzeba dodać „wewnętrzną” zmienną bitową w pamięci RAM. Wcześniej procedura ini-cjalizacji centralki, czyli ustalenie trybu początkowego, następowała po włączeniu zasilania i resecie. Teraz reset następuje co pół sekundy i trzeba jakoś inaczej zapewnić ini-cjalizację - można na przykład wykorzystać przycisk S1. Szkielet nowego programu pokazuje rysunek 115 (C022a.bas) Podkreślam, że nie ma tu pętli Do...Loop, więc po każdym resecie od watchdoga program ma zostać wykonany jeden raz, a po dojściu do rozkazu Powerdown procesor ma się wyłączyć i czekać w uśpieniu na następne „szczeknięcie” watchdoga.

UWAGA! Jeśli zgodnie z rysunkiem 107 dołączysz do zacisków PD.5, PD.6 linie dozorowe z czujnikami normalnie zwartymi, włączysz na stałe tranzystory T5, T6 i wyświetlacz W2. Przewodzące tranzystory T5, T6 mogą uniemożliwić zaprogramowanie procesora. Dlatego wyjątkowo w tym i następnym ćwiczeniu:

NA CZAS PROGRAMOWANIA PROCESORA ZDEJMIJ JUM-PERYJ1, J2.

Ja szybciutko zmodyfikowałem program według takiej koncepcji, skompilowałem, załadowałem i... nic! Program nie działał.

Straciłem kilka godzin, szukając przyczyn. W końcu okroiłem program do ostatnich granic i dopiero wtedy odkryłem zaskakującą zależność. Sprawdź to koniecznie na swoim komputerze. Na rysunkach 116 i 117 oraz w plikach (C022b.bas, C022c.bas) znajdziesz dwie niemal identyczne wersje tego samego prościutkiego programiku. Wykorzystuje on watchdog i polecenie Powerdown -co pół sekundy następuje reset i zwiększenie dwójkowego licznika Stan, co jest następnie obrazowane na wyświetlaczu. U mnie pierwsza wersja (C022b.bas) po kompilacji daje działający program. Druga (C022c.bas) też bez problemu daje się skompilować i załadować do procesora, ale program nie funkcjonuje. Jak widzisz, wersje różnią się wyłącznie umieszczeniem znacznika końca globalnego komentarza: •).

Wygląda to na niedoróbkę programu BA-SCOM AVR, przynajmniej w naszej wersji Demo 1.11.6.8. Zdecydowałem się wspomnieć o tym szczególe, bo w przyszłości na pewno w różnych programach spotkasz się z podobnymi niespodziankami. Wynikają one z niedopracowania kompilatora lub braku stosownej informacji w pliku pomocy czy instrukcji obsługi.

Jak zwykle mam dla Ciebie propozycję -sprawdź, jak u Ciebie zachowuje się nie tylko ten programik, ale podobne ze znacznikami globalnego komentarza. Czy ma tu znaczenie fakt wykorzystywania watchdoga? Dlaczego taki sam komentarz nie ma wpły-

realizacja programu - w tym czasie zdąży się ustabilizować zarówno napięcie zasilania (które wzrośnie do wartości nominalnej), jak też amplituda i częstotliwość generatora kwarcowego. Przy napięciu zasilania 5V częstotliwość wewnętrznego oscylatora RC wynosi około IM Hz, więc czas zliczenia 16384 impulsów wynosi mniej więcej 16ms i dopiero po tym czasie zanika sygnał wewnętrznego resetu i program przejmuje pełną kontrolę nad procesorem. Fakt opóźnienia działania programu o kilkanaście milisekund zwykle nie ma praktycznego znaczenia. Tylko w niektórych wyjątkowych zastosowaniach trzeba uwzględnić okoliczność, że przez ten czas, przed rozpoczęciem pracy programu, wszystkie końcówki portów są w tzw. stanie trzecim (wiszą w powietrzu). W razie potrzeby trzeba więc tak zaplanować obwody peryferyjne, zwłaszcza obwody wykonawcze, żeby w tym czasie resetowania ich stan był taki, jak potrzeba. Można to osiągnąć na przykład stosując dodatkowe rezystory ściągające bądź podciągające.

Za względu na słabą stabilność oscylatora RC zliczanie 16384 impulsów może przy napięciu zasilania 5V trwać 11...21ms, co trzeba wziąć pod uwagę w zastosowaniach, gdzie wymagane jest dokładne odmierzanie czasu. Opisany czas opóźnienia można znacznie zmniejszyć, zapewniając szybkie narastanie napięcia zasilana po włączeniu oraz programując specjalny dodatkowy bit w pamięci FLASH oznaczony FSTRT. Bit * ten skraca czas zliczania impulsów wewnętrzne- ” go oscylatora z 16ms±5ms do 0,28ms±0,3ms ^ przez skrócenie cyklu zliczania licznika z 16384 ® na 256 taktów oscylatora - patrz rysunek D. Z Skracanie opóźnienia ma jednak uzasadnienie tylko wówczas, gdy napięcie zasilania narasta * szybko, a zamiast rezonatora kwarcowego za- ^ stosowany jest albo rezonator ceramiczny, gwa- ^ rantujący szybkie powstanie i stabilizację prze-biegu taktującego procesor albo generator zewnętrzny.

Elektronika dla Wszystkich Grudzień 2003 37


Wyszukiwarka

Podobne podstrony:
91 (142) Mikroprocesorowa Ośla łączka Ml Reset Watchdog I to sq wszystkie kluczowe informacje, umożl
IMG 94 166 Polityka gospodarcza —    lepszego wykorzystania ograniczonych zasobów i
Elektronika Dla Wszystkich 10 OŚLA ŁĄCZKA - WZMACNIACZ MIKROFONOWY ODWRACAJĄCY €^OPSyŁ dporta
43680 Image37 (6) Mikroprocesorowa Ośla łączka Ml 191 ZmiennaTypuInteger = Funkcyjka (JakasZaiByte,
30 (269) Ośla łączka TECHNIKALIA Biorąc to pod uwagę, należałoby minimalizować prąd wejściowy wzmacn
32 (248) Ośla łączkaTECHNIKALLA A O—[ Rys. 30B O [ BO—l AO-I tRB2+(Rp1N ) cie w punkcie D będzie się
89 (141) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 programowe zerowanie liczni
90 (145) Mikroprocesorowa Ośla łączka R14 R13
92 (141) Mikroprocesorowa Ośla łączka Mikroprocesorowa Ośla łączka If Flaga * 1 Then gdy llaga usta
93 (135) Mikroprocesorowa Ośla łączka segmentów a tych dwóch wyświetlaczy. Podczas odmierzania czasu
95 (133) Mikroprocesorowa Ośla łączka 95 wu na działanie poprzedniej wersji centralki? Po przeprowad
96 (126) Mikroprocesorowa Ośla łączka Config Portb = Output : Portb = 127 portB - wyjcecie; PB.7 =
97 (117) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 Ćwiczenie 23Wyświetlacz
98 (115) Mikroprocesorowa Ośla łączka Mikroprocesorowa Ośla łączka •C023a Wyświetlacz LCD Cla Do Cl
99 (115) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 ’C023e Wszystkie typy zmi

więcej podobnych podstron