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 ; 0 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.
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