edw6 str47

edw6 str47



Mikroprocesorowa Ośla łączka

Mikroprocesorowa Ośla łączka

On TimerO Co4ms On Timerl Cols Hosave 'Uniwers = 4 : Haxi -Stop Ac


'po przepełnieniu licznika 0 skocz do etykiety o nazwie Co4ms —■po przepełnieniu licznika 1 skocz do etykiety o nazwie Cols 'wartości początkowe zmiennych pomocniczych 'wyłącz zasilanie komparatora analogowego


Do    ’główny program

If Pind.O = 1 Then    'jeżeli brak napięcia sieci

Oosub Koryguj ^......■ ■ ■ 'tylko po to, żeby co sekundę skorygować stan liczników

Portd = 127 : Disable TimerO : Idle

Elsę    'jeśli Jest napięcie    sieci

Enable TimerO    'znów wielkorotnie, w każdym obiegu pętli uruchamiamy T/CO

End If : Loop : End    'koniec programu głównego

Cols:    'co 1 sekundę

Load Timerl , 62500 : Incr Sekundy : Toggle Migaj : Return Koryguj :    O—......

'stany liczników nadal korygujemy normalnie co 4ms, a przy braku napięcia sieci co ls If Sekundy = 60 Then 'skróć cykl licznika Sekund 0...S9

Sekundy = 0 : Incr Minuty    'co Ó0s zwiększ stan licznika minut

End If

If Minuty    * 60 Then    'liczy 0...59

Minuty “ 0 : Incr Godziny    'co 60min zwiększ stan licznika godzin

End If

If Godziny = 24 Then Godziny = 0    'liczy 0...23

Return


Co4ms:

Gosub Koryguj «<— Decr Uniwers


Rys. 81


'co 4,Q96ms sprawdź i skoryguj liczniki 'obsługa wyświetlaczy i przycisków

1 TreTtWT IWTF <-71<*TT - r » 1 1-,-, rMy n r srr-y *\-


On TimerO Co4ms On Timerl Cols Hosave » Uniwers * 4 : Maxi * 100 Stop Ac


Do

If Pind.O * 1 Then Go suit Co4ms    ^

Portd * 127 Portb * 0 Pomoc * 1 Disable TimerO Idle Elsę

If Pomoc = 1 Then Pomoc ;Enatole TimerO End If End If Loop End


Rys. 80


'po przepełnieniu licznika 0 skocz do etykiety o nazwie Co4ms 'po przepełnieniu licznika 1 skocz do etykiety o nazwie Cols 'wartości początkowe zmiennych pomocniczych 'wyłącz zasilanie komparatora analogowego


1 główny program

'jeżeli brak napięcia sieci

'tylko po to, żeby co sekundę skorygować stan liczników 'wygaś wyświetlacze

'likwiduje prąd płynący przez R15...R18 i kabel programujący

'ustaw flagę pomocniczą wygaszania

'zablokuj TimerO

'PRZEJDZ DO TRYBU IDLE

'jeśli jest napięcie sieci

'po powrocie napięcia sieci

'zeruj flagę pomocniczą wygaszania

'przez co uruchamiamy T/CO JEDNORAZOWO, a nie

'    w każdym obiegu pętli


'koniec programu głównego


Cols :

Load Timerl , 62500

Incr Sekundy : Toggle Migaj


co 1 sekundę

= Timerl=3036 '- żeby przerwanie było dokładnie co ls : Return    'koniec obsługi przerwania od T/Cl

Co4ms:

'3tany liczników korygujemy normalnie co 4ms, a przy braku napięcia sieci co ls If Sekundy = 60 Then 'skróć cykl licznika Sekund 0...59

Sekundy = 0 : Incr Minuty    'co ćOs zwiększ stan licznika minut

End If

If Minuty = 60 Then    'liczy 0...59

Minuty * 0 : Incr Godziny    'co 60roin zwiększ stan licznika godzin

End If

If Godziny = 24 Then Godziny = 0    'liczy 0...23

Decr Uniwers    'obsługa wyświetlaczy i przycisków


te :


T tur:


nawet na miesiąc takiej awaryjnej pracy. W takich oszczędnościowych zastosowaniach warto dodatkowo wyłączyć zasilanie komparatora analogowego (AC - analog comparator). Domyślnie zasilanie jest włączone i w BA-SCOM-ie należy je wyłączyć poleceniem STOP AC

W ten sposób pobór prądu w trybach normalnym i Idle zostaje zmniejszony o około 0,5mA.

Nie zapominaj jednak, że na naszej płytce zasilanej napięciem 5V świeci stale kontrolka LED D2 (około 5mA), stale włączone są też potencjometr PR1 (ok. 0,5mA) oraz obwód napięcia odniesienia U3 (ok. 7,5mA), co daje razem około 13mA, nawet gdy kostka U2

Wtedy program zmienia stan końcówki (PD.2 lub PD.3) i wywołuje tym przerwanie, a stan końcówki może też dodatkowo być wykorzystany do sterowania jakichś' urządzeń zewnętrznych.

Podkreślam, że takie subtelności to wyższa szkoła jazdy i na razie nie musisz się w to wgłębiać. Chcę jednak już od początku sygnalizować Ci takie możliwości, żebyś pomału przejmował pełną kontrolę nad procesorem. Znakomicie przyda Ci się to, (PCF8591) jest wyjęta z podstawki. Większość Czytelników ma płytkę testową cały czas dołączoną kablem do komputera, a wtedy dodatkowo płyną prądy przez rezystory R15...R18 i obwody portu drukarkowego komputera - zależnie od stanu portu PB procesora dodatkowy pobór prądu może wynieść ponad 20mA (właśnie z tego względu w programie C017c.bas dodałem linię zerującą końcówki portu B na czas wygaszania wskaźników). Celowo zrezygnowałem ze sposobów pokazanych na rysunkach 73...75, bo w naszej płytce nie sposób ich w pełni spożytkować właśnie ze względu na obecność tych dodatkowych obwodów stale pobierających prąd.

gdybyś z czasem dla uzyskania jak najkrótszych programów zechciał skorzystać z programowania w asemblerze lub w programie pisanym pod BA-SCOM-em wykorzystać wstawki asemblerowe, a jest to nie tylko możliwe, ale też względnie łatwe. BASCOM AVR akceptuje rozkazy asemblera i można je wprost włączać w pisany program. Nie są wymagane żadne dodatkowe, specjalne zabiegi. Nie znaczy to, że warto wykorzystywać BASCOM-a

Program z rysunku 79 nie jest jedynym rozwiązaniem postawionego zadania. Można na przykład wrócić do pierwowzoru, korzystać z opcji Nosave i korygować stan liczników w procedurze Co4ms. Ponieważ jednak przerwania od T/CO są wyłączone na czas zaniku napięcia sieci, procedurę tę trzeba wywoływać inaczej - na przykład wstawiając polecenie skoku GOSUB Co4ms

przed polecenie wygaszania wskaźników PortD = 127 PortB = 0

Przy braku napięcia sieci procedura Co4ms będzie wtedy wywoływana co sekundę: będzie powodować skorygowanie stanu liczników i wyświetlenie na chwilę jednej cyfry. Ponieważ jednak zaraz po niej znajdują się polecenia wygaszające wskaźnik, da to dodatkowy ciekawy efekt: mianowicie co sekundę na ułamek sekundy będzie włączany kolejny wyświetlacz w kolejności od strony lewej do prawej. W ciemności będzie to zauważalne i co ciekawe, umożliwi odczytanie aktualnego czasu. Zwiększy to nieznacznie pobór prądu, ale te drobne mikroampery można śmiało pominąć. Kluczowy fragment tak zmodyfikowanego programu pokazany jest na rysunku 80 (C017d.bas). Możesz też spróbować wstawić polecenie skoku (GOSUB) po rozkazach wygaszenia - sprawdź, co to zmieni.

Możesz też zapakować polecenia sprawdzania i korekcji liczników w oddzielną procedurę Koryguj - takie rozwiązanie pokazane jest na rysunku 81 (C017e.bas). Każde z tych rozwiązań ma inne właściwości, na przykład program C017c.bas zajmuje w pamięci FLASH procesora 972 bajtów, program C017d.bas - 890 bajtów, a dodatkowo odchudzony (sprawdź sam, jak) C017e.bas -830 bajtów. Jeśli chcesz, w ramach pracy domowej spróbuj uzyskać jeszcze mniejszą objętość programu.

W tym numerze zmieściło się niestety tylko to jedno ćwiczenie. Nie znaczy to, że nie masz materiału do własnych opracowań. Choć do trybów Idle i Power down będziemy jeszcze wracać, spróbuj już teraz zrealizować własne projekty wykorzystujące te nad wyraz pożyteczne tryby pracy procesora. A w następnym odcinku zajmiemy się projektem najprawdziwszego budzika.

Piotr Górecki

Ciąg dalszy w najbliższym wydaniu EdW.

do programowania wyłącznie w asemblerze. Wspominam o takiej możliwości wyłącznie po to, żeby rozszerzyć Ci horyzonty. Na razie nie będziemy się tym zajmować, a Ty jeśli chcesz, możesz zbadać ten temat samodzielnie, choćby wykorzystując plik pomocy (i jego polską wersję dostępną m.in. na naszej stronie internetowej).

TECHNIKALIA


Elektronika dla Wszystkich Czerwiec 2003 47


Wyszukiwarka

Podobne podstrony:
edw6 str39 Mikroprocesorowa Ośla łączka Mikroprocesorowa Ośla łączkaĆwiczenie 17 Oszczędny zegar -
edw6 str40 Mikroprocesorowa Ośla łączka Ml zostanie wykonana tylko raz). Natomiast przy reakcji na
edw6 str45 Mikroprocesorowa Ośla łączka Mikroprocesorowa Ośla łączka ■CQ17a prosty
edw6 str46 Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 riii«uixe
43680 Image37 (6) Mikroprocesorowa Ośla łączka Ml 191 ZmiennaTypuInteger = Funkcyjka (JakasZaiByte,
89 (141) Mikroprocesorowa Ośla łączka M1 Mikroprocesorowa Ośla łączka M1 programowe zerowanie liczni
90 (145) Mikroprocesorowa Ośla łączka R14 R13
91 (142) Mikroprocesorowa Ośla łączka Ml Reset Watchdog I to sq wszystkie kluczowe informacje, umożl
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
Image33 (6) Mikroprocesorowa Ośla łączka Ml 187 SHIFTOUT Pdane , Pzegar Zmienna ,

więcej podobnych podstron