Kopia (1) plikumikroprocesorowy sterownik oświetlenia dokumentacja


1. Wstęp

Wykonany przez nas projekt to mikroprocesorowy sterownik oświetlenia.

Ideą naszej pracy był zbudowanie uniwersalnego sterownika oświetlenia, którego zadaniem byłoby załączanie oświetlenia w odpowiednich godzinach wieczornych i wyłączanie go w odpowiednich godzinach porannych. Pod uwagę wzięliśmy to, aby układ był odporny na zakłócenia, jego praca była stabilna i statyczna.

Zaletą projektu, jest to, że łączy w sobie funkcję sterownika i zegara. W odróżnieniu od sterowników oświetlenia z czujnikami optycznymi jest odporny na zakłócenia wywołane różnymi źródłami światła (np.: przejeżdżający w nocy samochód).

Układ działa na zasadzie porównywania aktualnego czasu z zapisanymi w programie mikroprocesora godzinami włączeń i wyłączeń oświetlenia, które są indywidualnie dobrane do poszczególnych miesięcy według rocznego rozkładu godzin wschodów i zachodów słońca, który dla każdego roku jest niemal identyczny. Czasy te zostały zaokrąglone dla kolejnych piętnastu dni każdego miesiąca (tabela strona 42).

  1. Obsługa sterownika

Aby rozpocząć pracę mikroprocesorowego sterownika oświetlenia, należy najpierw do wyjścia przekaźnika dołączyć odbiornik (żarówka max.60W, przekaźnik), podłączyć kabel zasilający do sieci oraz znajdujący się na tylnym panelu przełącznik suwakowy ustawić w pozycję „ON”.

Przełącznik ten służy on do odłączania baterii podtrzymującej pracę zegara. W pozycji „ON” bateria jest dołączona do układu, a w pozycji „OFF” odłączona.

0x08 graphic

Gdy sterownik jest nie używany i odłączony od sieci, przełącznik odłączający baterię należy ustawić w pozycji OFF.

Do obsługi sterownika służy czteroprzyciskowa klawiatura, która umożliwia wprowadzenie aktualnej daty i czasu.

Aby zmienić ustawienia zegara należy:

1. Nacisnąć przycisk „SET” (1), który powoduje wejście w tryb ustawień.

Na wyświetlaczu pojawi się napis:

„MIESIĄC: (dotychczasowe ustawienie)”

2.Klawiszami „strzałka w górę”(2) i „strzałka w dół”(4) ustawiamy żądaną wartość.

3. Klawiszem „OK” (3) zatwierdzamy wprowadzoną nastawę.

Na wyświetlaczu pojawi się napis:

„DZIEŃ: (dotychczasowe ustawienie)”

Według identycznej procedury ustawiamy dzień miesiąca, a następnie: godzinę i minutę. Po wpisaniu ostatniej nastawy i wciśnięciu „OK”, układ automatycznie zmienia nastawy zegara oraz wprowadza do pamięci zegara odpowiednie dla danego miesiąca i dnia dane określające godziny załączenia i wyłączenia przekaźnika sterującego oświetleniem.

3. Opis działania sterownika

0x01 graphic

Mikroprocesorowy sterownik oświetlenia zbudowany jest w oparciu o uniwersalny mikroprocesor firmy ATMEL 89C4051. Pełni on pięć zasadniczych funkcji:

Mikroprocesor jest taktowany generatorem z rezonatorem kwarcowym 11,0592MHz. Linie szyny I2C: SDA i SCL, są wyprowadzone na porty odpowiednio:P3.2 i P3.1. Linie te wymagają podciągnięcia do +5V, co jest realizowane przez rezystory R3 i R4. Zegar czasu rzeczywistego PCF8583 wymaga stosowanie rezonatora Q1: 32,768kHz i dwóch kondensatorów C10 i C11 służących do stabilizacji pracy generatora zegara.

Program mikroprocesora odczytuje z układu PCF8583 aktualną: sekundę, minutę, godzinę, dzień i miesiąc a także minutę i godzinę alarmu.

Wyświetlacz LCD jest połączony z mikroprocesorem czterema liniami danych: D4, D5, D6, D7 (odpowiednio porty: P1.2, P1.5, P1.3, P1.4) oraz liniami RS (P1.7) i E (P1.6).

Przekaźnik wyjściowy posiada pojedynczy styk przystosowany do załączania napięcia sieciowego. Cewka przekaźnika jest sterowana poprzez tranzystory T2 i T3 pracujące w układzie Darlingtona. Kondensator C6 ma za zadanie eliminować krótkotrwałe zmiany stanów na porcie P1.1, które powodowały by niepożądane „klapania” styków.

Klawiaturę stanowią cztery przyciski typu switch dołączone do portów: P1.0, P3.4, P3.5, P3.7.

Po włączeniu zasilania program dokonuje konfiguracji zegara (np.: wybór 12 -godzinnego formatu wyświetlania, uaktywnienie systemu alarmów).

Dalej program mikroprocesora stanowi pętla, w której wykonywane są kolejne czynności:

- powrót na początek pętli i wykonywanie jej od początku.

2. Schemat ideowy sterownika

0x01 graphic

4. Mikrokontroler AT89C4051

4.1 Opis ogólny

Układ AT89C4051 jest niskonapięciowym, 8-bitowym mikrokomputerem CMOS z programowalną i kasowalną pamięcią Flash (EEPROM) 4KB.układ jest produkowany z wykorzystaniem technologii pamięci nielotnych dużej gęstości firmy Atmel i jest zgodny z przemysłowym standardem MCS-51 pod względem zestawu instrukcji i rozmieszczenia wyprowadzeń. W wyniku połączenia w jednej strukturze elastycznej 8-bitowej jednostki centralnej (CPU) i pamięci Flash, układ AT89C4051 jest wydajnym mikrokomputerem, będącym wysoce elastycznym i tanim rozwiązaniem wielu wbudowanych zastosowań sterowania.

Układ AT89C2051 oferuje następujące standardowe właściwości: 4KB pamięci Flash, 128 bajtów pamięci RAM, 15 linii wejścia/wyjścia, dwa 16-bitowe timery/liczniki, architekturę przerwań o sześciu wektorach i dwu poziomach, w pełni dupleksowy port szeregowy, precyzyjny komparator analogowy, wewnętrzny oscylator i układ zegara.

Ponadto układ AT89C4051 jest wykonany w logice statycznej dla pracy przy częstotliwościach zegara poczynając od zera, dodatkowo wspomagany przez dwa wybierane programowo tryby oszczędnego poboru mocy. Tryb bezczynności wstrzymuje pracę jednostki centralnej, podczas gdy pamięć RAM, timery/liczniki, port szeregowy i system przerwań funkcjonują nadal. Tryb obniżonej mocy podtrzymuje zawartość pamięci RAM, ale zamraża pracę oscylatora, blokując wszystkie inne funkcje układu aż do zerowania sprzętowego.

4.2 Działanie mikrokontrolera

Mikroprocesory są układami sekwencyjnymi, synchronicznymi, tzn. wszystkie operacje wykonywane przez układy procesora odbywają się w określonej kolejności i w ściśle określonych momentach czasowych. Dlatego muszą współpracować z generatorami impulsów zegarowych. Mikrokontrolery mają wewnętrzny generator, do którego dołącza się z zewnątrz rezonator kwarcowy lub ceramiczny oraz dodatkowo dwa kondensatory, ułatwiające wzbudzenie się generatora na pożądanej częstotliwości.

W mikrokontrolerach rodziny '51, jeżeli jest stosowany rezonator kwarcowy, to pojemności mają wartości 22 - 39 pF, a przy rezonatorze ceramicznym 30 - 51 pF.

W pracy został zastosowany rezonator kwarcowy 11,0592 MHz i dwa kondensatory o pojemności 33 pF.

0x01 graphic

Dobierając częstotliwość generatora należy pamiętać, że musi się ona mieścić w zakresie określonym przez producenta. Przy częstotliwości za dużej lub za małej mikrokontroler przestanie poprawnie pracować.

Układ każdego generatora wymaga odpowiedniego czasu od momentu włączenia zasilania do momentu osiągnięcia założonej częstotliwości. Czas ten wynosi na ogół około 10 ms.

Ponieważ po włączeniu zasilania układy wewnętrzne mikrokontrolera przyjmują stan dowolny, dlatego musi istnieć możliwość wymuszenia na mikroprocesorze powtarzalnych stanów początkowych wszystkich jego rejestrów. Mikroprocesory posiadają wejście (RST), na które jeżeli poda się odpowiedni sygnał, to nastąpi wymuszenie stanów początkowych rejestrów wewnętrznych. Ponieważ stan początkowy procesora musi być ustalony po włączeniu zasilania, to do tego wejścia dołącza się układ czasowy RC, który wymusza na wymagany odcinek czasu sygnał zerujący.

Podstawową jednostką określającą czas wykonywania instrukcji jest cykl maszynowy. Składa się on z sześciu stanów oznaczonych od S1 do S6. Każdy ze stanów trwa dwa okresy sygnału taktującego (cykle zegarowe) nazywane fazami i oznaczane P1 i P2. pojedynczy cykl maszynowy składa się z 12 taktów sygnału zegarowego, a czas wykonywania instrukcji wynosi 1, 2 lub 4 cykle maszynowe.

4.3 Opis wyprowadzeń układu AT89C4051


0x01 graphic

RST - reset

VCC - zasilanie +5V

GND - masa

P1.0-P1.7 - wejścia/wyjścia portu P1

P3.0-P3.5 i P3.7 - wejścia/wyjścia portu P3

5. Zasilanie układu

5.1 Schemat

0x01 graphic

Zasilacza zbudowany jest na transformatorze sieciowym TS4/13. |Wyprostowane i odfiltrowane napięcie podawane jest na stabilizator monolityczny 7805, którego napięcie wyjściowe wynosi 5V.

5.2 Stabilizator 7805

Stabilizator 7805 zbudowany jest z następujących bloków:

Wyprowadzenia:

0x01 graphic

5.3 Układ podtrzymania zegara PCF8583

Do zasilania wykorzystywana jest również bateria o napięciu 3,6V. Ogniwo to jest stosowane, gdy odłączone zostanie zasilanie główne i służy do podtrzymania działania zegara PCF 8583. W czasie, gdy zasilanie główne jest włączone ogniwo jest doładowywane.

0x01 graphic
0x08 graphic
0x08 graphic

W czasie normalnej pracy zegar czasu rzeczywistego PCF 8583 jest zasilany z zasilania głównego. Jednak każda przerwa w zasilaniu powoduje reset pamięci RAM zegara. Dlatego konieczne jest zastosowanie dodatkowego zasilania bateryjnego. W czasie pracy zasilacza zegar czasu rzeczywistego jest zasilany przez diodę D1. W tym samym czasie bateria (3,6V) jest doładowywana napięciem +5V przez elementy R2 i D2, które ograniczają prąd płynący do baterii. Dioda D3 blokuje pełne napięcie +5V. W czasie przerwy w zasilaniu bateria zasila PCF poprzez diodę D3. Natomiast diody D1 i D2 separują baterię, aby nie była zasilana pozostała część sterownika.

6. Układ WATCHDOGA zewnętrznego

WATCHDOG jest układem nadzorującym, który umożliwia wykrywanie błędów w działaniu programu. W przypadku zawieszenia się programu mikrokontrolera, WATCHDOG powoduje automatyczny reset systemu mikroprocesorowego, a więc w czasie normalnej pracy WATCHDOG musi, co pewien czas być resetowany sygnałem z mikroprocesora, aby nie zakłócał pracy programu.

6.1 Licznik 4060

W mikroprocesorowym sterowniku oświetlenia WATCHDOG zbudowany jest w oparciu o scalony 14-bitowy licznik CMOS 4060.

Układ ten posiada w swej strukturze wewnętrzny generator, którego częstotliwość działania zależy od elementów zewnętrznych: R8, C7 dołączonych do wejść RTC i CTC.

Na wyjściach Q3 - Q13 otrzymujemy odpowiednie podziały częstotliwości generatora wewnętrznego.

Dla użytych elementów w układzie sterownika oświetlenia częstotliwość wynosi 925kHz.

0x01 graphic

0x01 graphic

Rt<< R1 R1C1<<RtCt

Wartości zalecane:

Ct >100pF

10 k  Rt < 1 M

6.2 Opis działania układu

0x01 graphic

Impulsy zerujące licznik podawane są z portu P3.3 mikroprocesora na wejście M RST licznika. Każdy impuls powoduje, że licznik zaczyna zliczać od zera.

Sygnał resetujący mikroprocesor jest pobierany z wyjścia Q9 licznika i podawany przez układ całkujący R1, C11 na bazę tranzystora T1. Zawieszenie się programu spowoduje, że mikroprocesor przestanie generować impulsy zerujące watchdog. W pewnym momencie zliczania na Q9 pojawi się stan wysoki „1”, którym wysterowany zostanie T1. Prowadzi to dalej do podania stanu wysokiego na wejście RST, co powoduje natychmiastowy reset mikroprocesora i rozpoczęcie wykonywania programu od początku.

Impulsy zerujące licznik muszą być generowane przez mikroprocesor w takich odstępach czasowych, aby nie nastąpiło pojawienie się stanu wysokiego na wyjściu Q9 licznika, czyli częstotliwość impulsów zerujących licznik powinna być większa od częstotliwości impulsów resetujących mikroprocesor.

7. Zegar czasu rzeczywistego PCF8583

7.1 Opis ogólny

Układ PCF8583 jest układem zegara i kalendarza zawierającym 256 bajtów pamięci RAM. Posiada wbudowany oscylator o częstotliwości 32,768 kHz.

Adresowanie i przesyłanie danych do tego układu przez mikrokontroler odbywa się za pomocą transmisji szeregowej dwoma liniami szyny I2C. Po każdym odczycie lub zapisie danej z tego układu następuje automatyczna inkrementacja słowa adresowego.

7.2 Konfiguracja wyprowadzeń

0x01 graphic

Nóżka

Oznaczenie

Funkcja

1

OSCI

Wejście oscylatora lub 50 Hz

2

OSCO

Wyjście oscylatora

3

A0

Wejście adresowe

4

GND

Masa układu

5

SDA

Szeregowa linia danych szyny I2C

6

SCL

Szeregowa linia zegarowa szyny I2C

7

INT

Wyjście przerwania

8

Vcc

Zasilanie układu +5V

7.3 Właściwości:

7.4 Adres układu

Komunikacja z układem PCF8583 odbywa się za pośrednictwem szyny I2C. Aby móc komunikować się z układem o takim interfejsie należy w pierwszej kolejności wysłać jego adres. Ma on postać 8 bitów, a przedostatni bit może być modyfikowany poprzez dołączenie nóżki A0 pod odpowiedni poziom napięcia. Dzięki temu do wspólnej magistrali można podłączyć dwa układy PCF8583. Poprzez nadanie każdemu z nich innego adresu staną się one rozróżnialne dla mikroprocesora.

Modyfikacji, lecz tylko w sposób programowy, ulega także ostatni bit adresu. Związany jest on z kierunkiem transmisji („0” - zapis do rejestrów, „1” - odczyt rejestrów)

b7

b6

b5

b4

b3

b2

b1

b0

1

0

1

0

0

0

A0

R/W

Adres I2C układu PCF8583

Sposób podłączenia nóżki A0

Adres

Dec

Bin

Hex

Nóżka A0 zwarta do masy, zapis rejestrów

160

10100000

A0

Nóżka A0 zwarta do masy, odczyt rejestrów

161

10100001

A1

Nóżka A0 zwarta do +5V, zapis rejestrów

162

10100010

A2

Nóżka A0 zwarta do +5V, odczyt rejestrów

163

10100011

A3

7.5 Zapis i odczyt rejestrów

Zegar PCF8583 zawiera 16 ośmiobitowych rejestrów. Aby wywołać dowolny rejestr należy za pomocą szyny I2C wysłać jego numer.

Aby zapisać informację do rejestrów należy wysłać:

Aby odczytać informację z rejestrów należy wysłać:

7.6 Wykaz rejestrów zegara

Rejestr

Adres RAM

Hex

Dec

Sterujący

00H

0

Setne sekundy

01H

1

Sekundy

02H

2

Minuty

03H

3

Godziny

04H

4

Lata / Dni miesiąca

05H

5

Dni tygodnia / miesiące

06H

6

Tirem

07H

7

Kontrola alarmu

08H

8

09H

9

0AH

10

0BH

11

0CH

12

0DH

13

0EH

14

0FH

15

Dostępna dla użytkownika pamięć RAM

10H

16

…..

…..

0FFH

255

Rejestr sterujący (adres 00H):

MSB LSB

B7

b6

b5

b4

b3

b2

b1

b0

b0 - flaga sekund alarmu („0” - alarm sekund aktywny)

b1 - flaga minut alarmu („0” - alarm minut aktywny)

b2 - flaga uaktywnienia alarmu

„0” - alarm nieaktywny (pamięć o adresach 08H do 0FH jest dostępna)

„1” - alarm aktywny (pamięć o adresach 08H do 0FH jest wykorzystana do kontroli alarmu)

Jeżeli bit jest wyzerowany, b0 zmienia cyklicznie swój stan logiczny co 0,5sek, a b1 - co 0,5min

b3 - maskowanie przy odczycie bitów roku i tygodnia

„0” - odczyt rejestrów 05H i 06H bezpośrednio

„1” - zerowanie w komórkach 05H i 06H bitów oznaczających rok i dzień tygodnia

b4, b5 - wybór trybu sterowania oscylatorem i jego rodzaju

„00” - dołączony kwarc 32,768 kHz

„01” - do wejścia OSCI doprowadzony sygnał 50 Hz

„10” - wejście OSCI zlicza impulsy

„11” - tryb test

b6 - zatrzymanie ostatniej wartości

„0” - brak zatrzymania

„1” - zatrzymanie

b7 - znacznik zatrzymania zliczania

„0” - zliczaj impulsy

„1” - zatrzymaj zliczanie, resetuj dzielnik

Rejestr setnych części sekundy (adres 01H):

MSB LSB

b7

b6

b5

b4

B3

b2

b1

b0

b0, b1, b2, b3 - setne części sekund

b4, b5, b6, b7 - dziesiąte części sekund

Rejestr sekund (adres 02H):

MSB LSB

b7

b6

b5

b4

B3

b2

b1

b0

b0, b1, b2, b3 - sekundy

b4, b5, b6, b7 - dziesiątki sekund

Rejestr minut (adres 03H):

MSB LSB

b7

b6

b5

b4

b3

b2

b1

b0

b0, b1, b2, b3 - minuty

b4, b5, b6, b7 - dziesiątki minut

Rejestr godzin (adres 04H):

b7

b6

b5

b4

b3

b2

b1

b0

MSB LSB

b0, b1, b2, b3 - godziny (w kodzie BCD)

b4, b5 - dziesiątki godzin (wartość od 0 do 2 w kodzie binarnym)

b6 - znacznik AM/PM („0” - AM, „1” - PM)

b7 - tryb 12h/24h („0” - tryb 12h, „1” - tryb 24h)

Rejestr lat / dni miesiąca (adres 05H):

MSB LSB

b7

b6

b5

b4

B3

b2

b1

b0

b0, b1, b2, b3 - dni miesiąca (w kodzie BCD)

b4, b5 - dziesiątki dni miesiąca (wartość od 0 do 3 w kodzie binarnym)

b6, b7 - informacja o roku (w kodzie binarnym)

Bity informacji o roku są zapisaną binarnie różnicą aktualnego roku i ostatniego roku przestępnego. Układ 8583 nie przewiduje zapisu całej informacji o roku w komórkach liczników. Aby można było stwierdzić aktualny rok należy zapamiętać gdzieś informację o ostatnim roku przestępnym.

Rejestr dni tygodnia /miesięcy (adres 06H):

MSB LSB

b7

b6

b5

b4

b3

b2

b1

b0

b0, b1, b2, b3 - miesiące (w kodzie BCD)

b4 - dziesiątki miesięcy

b5, b6, b7 - dni tygodnia (wartość od 0 do 6 w kodzie binarnym)

Rejestr timera (adres 07H).

Rejestr alarmu (adres 08H):

b0, b1, b2 - bity sterujące funkcją timera

000 - timer wyłączony

001 - timer zlicza ułamki sekundy od 0 do 99

010 - timer zlicza sekundy od 0 do 60, itd…

b3 -

„1” - w przypadku przepełnienia timera zostanie ustawiona flaga alarmu w rejestrze kontrolnym oraz na wyjściu INT pojawi się stan niski

„0” - zostanie ustawiona tylko flaga alarmu.

b4, b5 - funkcje alarmu zegara

00 - zegar pracuje bez alarmu

01 - alarm codzienny, układ nie uwzględnia rejestrów alarmowych daty i dnia tygodnia

10 - alarm w określonym dniu tygodnia, układ nie uwzględnia rejestru alarmowego daty, natomiast uwzględnia rejestr dnia tygodnia

11 - alarm zgodnie z wszystkimi ustawionymi rejestrami alarmowymi (oprócz rejestru dnia tygodnia)

b6 - włączenie alarmu timera.

b7 -

„1” - w przypadku alarmu zegara ustawiony zostanie bit w rejestrze kontrolnym i podany stan niski na wyjście INT

„0” - ustawiony zostanie tylko bit w rejestrze kontrolnym

Rejestr alarmowy ułamków sekund (adres 09H).

Rejestr alarmowy sekund (adres 0AH).

Rejestr alarmowy minut (adres 0BH).

Rejestr alarmowy godzin (adres 0CH).

Rejestr alarmowy dni, bez numeru roku (adres 0DH).

Rejestr alarmowy miesiąca / dnia tygodnia (adres 0EH):

W zależności od ustawionej opcji alarmu zawiera numer miesiąca, albo numer dnia tygodnia. W drugim przypadku funkcje bitów rejestru są następujące:

b0 - alarm, jeśli dzień tygodnia 0,

b1 - alarm jeśli dzień tygodnia 1, itd…

b7 - nie używany

Rejestr alarmowy timera (adres 0FH).

Struktura rejestrów jest identyczna z rejestrami zegara. Służą do porównania z rejestrami zegara w przypadku włączonej funkcji alarmu.

Zliczanie czasu nie powoduje zmiany ich zawartości.

W związku z opisanymi bitami jest niezbędna mała uwaga. Układ alarmu zegara może pracować w czterech trybach:

1. Alarm wyłączony - zegar tylko odmierza czas,

2. Alarm jednorazowy - układ komparatora porównuje rejestry zegara począwszy od rejestru ułamków sekund, aż po rejestr miesiąca wraz z odpowiadającymi im rejestrami alarmu, które zostaną opisane poniżej. W przypadku stwierdzenia równości wszystkich rejestrów zostaje ustawiona flaga alarmu i ewentualnie podany stan niski na wyjście INT.

3. Alarm codzienny - z porównania wykluczone zostaną rejestry daty, a alarm zostanie włączony, jeśli będą zgodne ustawienia rejestrów godzin, minut, itd.

4. Alarm cotygodniowy - układ pomija rejestry daty, natomiast uwzględnia przy porównaniu rejestr zawierający numer dnia tygodnia, co jest bardzo wygodnym rozwiązaniem, jeśli układ ma działać cyklicznie; staje się zbędne wyliczanie kolejnej daty alarmu.

Pozostałe 240 bajtów pamięci RAM, począwszy od adresu 10H, może być dowolnie wykorzystane. Sekwencja programowania alarmu powinna przebiegać w ten sposób, że najpierw zapisuje się wybrane parametry czasu i daty alarmu. Jeżeli będzie to alarm cykliczny, cotygodniowy, pod adresem 0EH trzeba ustawić jeden bit odpowiadający wybranemu dniu tygodnia. W rejestrze 08H bity dotyczące timera powinny być wyzerowane, natomiast ustawienie pozostałych określi rodzaj alarmu oraz zezwolenie na pojawienie się stanu niskiego na wyjściu INT.Na koniec w rejestrze 00H trzeba wyzerować bity 0 i 1.

W przypadku alarmu są one ustawiane i można wyzerować je powtórnie tylko programowo.

8. Wyświetlacz LCD 24x2

8.1 Opis ogólny

Wyświetlacz ciekłokrystaliczny oparty jest na sterowniku HD44780. Umożliwia on wyświetlanie znaków alfanumerycznych (cyfry i litery) w dwóch liniach po 24 znaki. Kody generowanych znaków są zgodne z kodami ASCII. Znaki wyświetlane są punktowo w polu 5 x 7 pikseli.

Układ posiada dwie pamięci:

DDRAM -pamięć danych wyświetlanych (pamięć ekranu) o pojemności 128 bajtów.

CGRAM - pamięć konfigurowalna (generator znaków definiowalnych) o pojemności 64 bajtów, w której użytkownik może zapisać 8 własnych znaków.

W pamięci CGRAM zarezerwowanych jest po 8 bajtów dla każdego definiowanego znaku. Znakom tym przypisuje się domyślne numery od 0 do 7 jako kody tych znaków, które wykorzystuje się tak samo jak kody ASCII znaków standardowych. Znak o kodzie n zapisuje się w pamięci CGRAM pod adresami 8n(8n+7), gdzie n = 0…7.

W celu zdefiniowania własnego znaku, np. litery Ł jako znaku numer 7 należy do pamięci CGRAM pod adresami 56 - 63 (38h - 3Fh) zapisać 8 bajtów o wartościach odpowiadających kombinacjom bitów reprezentujących punkty (piksele) wierszy matrycy (6 x 8 punktów), w której odwzorowany jest znak o wymiarach 5 x7 punktów

Matryca znaku

CGRAM

5

4

3

2

1

0

Adres (hex)

Dane (hex)

0

0x01 graphic

38

10

1

0x01 graphic

39

10

2

0x01 graphic

0x01 graphic

3A

14

3

0x01 graphic

0x01 graphic

3B

18

4

0x01 graphic

3C

10

5

0x01 graphic

3D

10

6

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

3E

1F

7

3F

00

8.2 Opis wyprowadzeń (widok wyświetlacza z góry)

0x08 graphic
0x01 graphic

1 - GND 8 - D1

2 - Vcc (+5V) 9 - D2

3 - V0 10 - D3

4 - RS 11 - D4

5 - R / W 12 - D5

6 - E 13 - D6

7 - D0 14 - D7

D0…D7 - 8 linii danych do dwukierunkowej komunikacji z systemem (w trybie 4-bitowej pracy używane są linie D4…D7)

RS - sygnalizuje, czy dana na wejściu jest kodem znaku do wpisania, czy też instrukcją do wykonania

„0” - wybieramy rejestr instrukcji

„1” - wybieramy rejestr danych

R / W - sygnalizuje, czy dana ma być czytana, czy też wpisywana do wyświetlacza

„0” - zapis

„1” - odczyt

E - linia uaktywnienia (sterująca) - aktywna w stanie H

V0 - regulacja kontrastu od 0V do 5V

0V - maksymalny kontrast

5V - wygaszony wyświetlacz

Cztery kombinacje sygnałów RS i R/W pozwalają na wykonanie następujących instrukcji:

RS

R/W

Instrukcje

0

0

Zapis rozkazów do sterownika. Są one przesyłane po linii danych

0

1

Odczyt flagi Busy (siódmy bit) oraz aktualnej zawartości licznika adresów AC (bity od 0 do 7)

Busy = 1 - sterownik zajęty wykonywaniem wewnętrznej operacji

Busy = 0 - sterownik może przyjąć kolejną instrukcję

1

0

Zapis danych do RAM-u (danych wyświetlacza DDRAM lub generatora znaków CG-RAM)

1

1

Odczyt danej z RAM-u (danych wyświetlacza DDRAM lub generatora znaków CG-RAM)

8.3 Lista instrukcji

Lp.

Instrukcja

Kod instrukcji

Opis

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

Ustawienie parametrów wyświetlacza

0

0

0

0

1

DL

N

F

-

-

DL=0 4-bitowa szyna danych

DL=1 8-bitowa szyna danych

N=0 1 linia wyświetlacza

N=1 2 linie wyświetlacza

F=0 matryca 5*7 punktów

F=1 matryca 5*10 punktów

2

Ustawienie trybu wprowadzania znaków

0

0

0

0

0

0

0

1

I/D

S

I/D=0 - zmniejszaj adres kursora po każdym wpisie lub odczycie danych

I/D=1 - zwiększaj adres kursora po każdym wpisie lub odczycie danych

S=1 - jednoczesny obrót danych wyświetlacza

3

Załączanie/ wyłączanie wyświetlacza

0

0

0

0

0

0

1

D

C

B

1-włącz 2-wyłącz

D - cały wyświetlacz

C - kursor

B - mruganie znaku w pozycji kursora

4

Czyszczenie ekranu

0

0

0

0

0

0

0

0

0

1

Kasuje dane wyświetlacza i ustawia kursor pod adres 0

5

Ustawienie kursora na pozycji 0

0

0

0

0

0

0

0

0

1

-

Ustawia kursor w położeniu zerowym

6

Przesuwanie kursora i ekranu

0

0

0

0

0

1

S/C

R/L

-

-

S/C=1 - obrót danych wyświetlacza

S/C=0 - przesunięcie kursora

R/L=1 - obrót/przesunięcie w prawo

R/L=0 - obrót/przesunięcie w lewo

7

Ustawianie adresu CGRAM

0

0

0

1

A5

A4

A3

A2

A1

A0

A0-A5 Adres pamięci RAM generatora znaków

8

Ustawianie adresu DDRAM

0

0

1

A6

A5

A4

A3

A2

A1

A0

A0-A6 Adres pamięci danych

9

Odczyt flagi zajętości Busy i adresu pamięci danych

0

1

BF

A6

A5

A4

A3

A2

A1

A0

BF - wskaźnik zajętości

A0-A6 Stan licznika adresu

10

Zapis danej do CGRAM lub DDRAM

1

0

A7

A6

A5

A4

A3

A2

A1

A0

A0-A7 Dane do zapisania do pamięci RAM generatora lub pamięci danych

11

Odczyt danej z CGRAM lub DDRAM

1

1

A7

A6

A5

A4

A3

A2

A1

A0

A0-A7 Dane do odczytania z pamięci RAM generatora znaków lub pamięci danych

9. Interfejs I2C

9.1 Właściwości

SDA - dane

SCL - sygnał taktujący (zegarowy)

9.2 Przesyłanie informacji po szynie I2C

    1. Liniami sygnałowymi są linie SDA i SCL

Są to linie dwukierunkowe, podłączone do dodatniego napięcia zasilania pośrednictwem rezystorów podciągających

    1. Przy braku transmisji obie linie znajdują się w stanie wysokim (wynika to z obecności rezystorów podciągających)

    2. Podczas transmisji danych impulsy taktujące na szynie SCL wysyłane są w ilości: 1 impuls na każdy bit przesyłanych danych

    3. Podczas stanu wysokiego na linii SCL stan linii SDA musi być stabilny - stan tej linii może ulegać zmianie tylko podczas niskiego stanu linii SCL

0x08 graphic

SCL

SDA

Stan stabilny

    1. Wyjątkiem od wyżej wymienionej reguły są sygnały:

      • START - wymuszenie opadającego zbocza na SDA przy wysokim stanie SCL. Po pojawieniu się tego sygnału szyna jest uważana za zajętą, aż do wystąpienia sygnału STOP.

0x08 graphic

SDA

SCL

0x08 graphic

SDA

SCL

    1. Każdy bajt danych przesyłanych po szynie I2C musi składać się z 8 bitów, przy czym dane nadawane są od najbardziej znaczącego bitu

    2. Liczba bitów danych przesyłanych w ramach danej transmisji nie jest ograniczona.

Każda operacja przesłania bajtu danych powinna zakończyć się bitem potwierdzenia.

Impuls taktujący związany z bitem potwierdzenia jest generowany przez urządzenie nadrzędne.

Urządzenie nadające dane musi na czas bitu potwierdzenia zwolnić linię SDA, zaś urządzenie odbierające w czasie trwania stanu wysokiego na SCL powinno wymusić stan niski na SDA.

0x08 graphic
0x08 graphic

1

Brak potwierdzenia

2

Potwierdzenie

3 S 1 2 8 9

Impuls taktujący do bitu potwierdzenia

START

1. Stan linii SDA wymuszony przez urządzenie nadające.

2. Stan linii SDA wymuszony przez urządzenie odbierające.

3. Stan linii SCL wymuszony przez urządzenie nadrzędne.

    1. Jeśli zaadresowane urządzenie podrzędne nie jest w stanie potwierdzić swojego adresu, musi pozostawić ono linię SDA w stanie wysokim. Wówczas urządzenie nadrzędne może wysłać sygnał STOP i tym samym przerwać transmisję.

Analogiczna sytuacja ma miejsce, gdy urządzenie podrzędne potwierdzi swój adres, ale nie jest w stanie odebrać jednego z następnych bajtów danych i chce wymusić przerwanie transmisji przez urządzenie nadrzędne. Urządzenie podrzędne wysyła sygnał braku potwierdzenia, w wyniku czego urządzenie nadrzędne sygnałem STOP kończy transmisję danych.

    1. Jeśli dane są odbierane przez urządzenie nadrzędne to wysłanie przez to urządzenie bitu braku potwierdzenia jest informacją dla urządzenia podrzędnego, że zakończono właśnie transmisję ostatniego bitu danych. Urządzenie podrzędne musi zwolnić linię danych, aby umożliwić urządzeniu nadrzędnemu wysłanie sygnału STOP.

    2. Jeżeli urządzenie odbierające dane nie może z pewnych względów rozpocząć odbioru następnego bajtu, to może ono przeciągnąć stan niski na linii SCL i wymusić w ten sposób na urządzeniu nadającym przejście w stan oczekiwania.

Transmisja danych będzie w takim przypadku kontynuowana po zwolnieniu linii SCL przez urządzenie odbierające dane.

10. Program

$crystal = 11059200 'KWARC Q=11.0592Mhz

'Ustawienia wyświetlacza, konfiguracja pinów wyświetlacza LCD,

'wyłączenie kursora, konfiguracja pinów szyny I2C

Config Lcd = 16 * 2

Config Lcdpin = Pin , Db4 = P1.2 , Db5 = P1.5 , Db6 = P1.3 , Db7 = P1.4 ,

Config Lcdpin = Pin , E = P1.6 , Rs = P1.7

Deflcdchar 0 , 12 , 4 , 6 , 12 , 4 , 4 , 14 , 32

Deflcdchar 1 , 21 , 17 , 25 , 21 , 19 , 17 , 17 , 32

Deflcdchar 2 , 14 , 17 , 17 , 31 , 17 , 17 , 19 , 32

Cursor Off

Cls

Config Sda = P3.2

Config Scl = P3.1

'Deklaracja zmiennych

Dim Przerwa As Bit 'sygnalizuje przerwę w zasilaniu

Dim Sekunda As Byte 'sekundy

Dim Minuta As Byte 'minuta

Dim Godzina As Byte 'godzina

Dim Dzien As Byte 'dzien

Dim Miesiac As Byte 'miesiac

Dim Godz_al As Byte 'godzina alarmu

Dim Min_al As Byte 'minuta alarmu

Dim Godz_off As Byte 'godzina wyłączenia

Dim Min_off As Byte 'minuta wyłączenia

Dim Godz_on As Byte 'godzina włączenia

Dim Min_on As Byte 'minuta włączenia

Dim Mmax As Byte 'określa liczbę dni w danym miesiącu

Dim Rejestr_kontrol As Byte 'Bajt Konfiguracji

'Nadanie nazw (aliasów) numerom portów w celu ulatwienia pisania programu

Up Alias P3.4

Down Alias P3.5

Prog Alias P1.0

Ok Alias P3.7

Przekaznik Alias P1.1

Watczdog Alias P3.3

'**************************** PROGRAM GŁÓWNY *********************************

Reset Watczdog

'Zapis do rejestru (0) kontrolnego zegara

Rejestr_kontrol = &B00001100 'bajt konfigurujący pracę zegara

I2cstart

I2cwbyte 160

I2cwbyte 0

I2cwbyte Rejestr_kontrol

I2cstop

Przerwa = 1

Do

Set Watczdog

Reset Watczdog

I2cstart

I2cwbyte 160 'adres zapisu

I2cwbyte 2 'numer pierwszej komórki od której

'rozpoczynamy odczyt pam.RAM PCF

I2cstart 'ponowny start

I2cwbyte 161 'adres odczytu

I2crbyte Sekunda , Ack 'odczyt 2 rejestru - sekundy

I2crbyte Minuta , Ack 'odczyt 3 rejestru - minuta

I2crbyte Godzina , Ack 'odczyt 4 rejestru - godzina

I2crbyte Dzien , Ack 'odczyt 5 rejestru - dzien miesiąca

I2crbyte Miesiac , Nack 'odczyt 6 rejestru - miesiac

I2cstop

I2cstart

I2cwbyte 160

I2cwbyte 11

I2cstart

I2cwbyte 161

I2crbyte Min_al , Ack

I2crbyte Godz_al , Nack

I2cstop

Sekunda = Makedec(sekunda)

Minuta = Makedec(minuta)

Godzina = Makedec(godzina)

Dzien = Makedec(dzien)

Miesiac = Makedec(miesiac)

Godz_al = Makedec(godz_al)

Min_al = Makedec(min_al)

Locate 1 , 2

If Godzina < 10 Then

Locate 1 , 3

End If

Lcd Godzina ; ":"

If Minuta < 10 Then

Lcd "0"

End If

Lcd Minuta ; ":"

If Sekunda < 10 Then

Lcd "0"

End If

Lcd Sekunda

Locate 1 , 14

If Dzien < 10 Then

Lcd " "

End If

Lcd Dzien ; "."

If Miesiac < 10 Then

Lcd "0"

End If

Lcd Miesiac

Locate 2 , 2

Lcd "Wy" ; Chr(0) ; ".: " ; Godz_off ; ":"

If Min_off < 10 Then

Lcd "0"

End If

Lcd Min_off

Locate 2 , 14

Lcd "W" ; Chr(0) ; ".: " ; Godz_on ; ":"

If Min_on < 10 Then

Lcd "0"

End If

Lcd Min_on

If Prog = 0 Then

Set Watczdog

Gosub Nastaw_zegar

Reset Watczdog

End If

If Przerwa = 1 Then

Set Watczdog

Gosub Alarm

Reset Przerwa

Reset Watczdog

End If

If Godzina = Godz_al And Minuta = Min_al And Sekunda = 0 Then

Set Watczdog

Gosub Alarm

Reset Watczdog

End If

If Godzina = 0 And Minuta = 0 And Sekunda = 0 Then

Set Watczdog

Cls

Reset Watczdog

End If

Loop

'******WPROWADZANIE NASTAW ZEGARA I GODZIN ZAŁĄCZEŃ PRZEKAŹNIKA*******

Nastaw_zegar:

Do

If Up = 0 Then

If Miesiac = 12 Then

Miesiac = 1

Else

Incr Miesiac

End If

End If

If Down = 0 Then

If Miesiac = 1 Then

Miesiac = 12

Else

Decr Miesiac

End If

End If

Cls

Lcd "MIESI" ; Chr(2) ; "C: " ; Miesiac

Waitms 200

Loop Until Ok = 0

While Ok = 0

Wend

Do

If Up = 0 Then

Select Case Dzien

Case Is < 28 : Incr Dzien

Goto Kkk

Case 31 : Dzien = 1

Goto Kkk

Case 30 :

If Miesiac = 4 Or Miesiac = 6 Or Miesiac = 9 Or Miesiac = 11 Then

Dzien = 1

Else

Incr Dzien

End If

Goto Kkk

Case 29 : Incr Dzien

Goto Kkk

Case 28 :

If Miesiac = 2 Then

Dzien = 1

Else

Incr Dzien

End If

End Select

End If

If Down = 0 Then

Select Case Dzien

Case Is > 1 : Decr Dzien

Goto Kkk

Case 1 :

If Miesiac = 4 Or Miesiac = 6 Or Miesiac = 9 Or Miesiac = 11 Then

Dzien = 30

Else

Dzien = 31

End If

If Miesiac = 2 Then

Dzien = 28

End If

Goto Kkk

End Select

End If

Kkk:

Cls

Lcd "DZIE" ; Chr(1) ; ": " ; Dzien

Waitms 200

Loop Until Ok = 0

While Ok = 0

Wend

Do

If Up = 0 Then

If Godzina = 23 Then

Godzina = 0

Else

Incr Godzina

End If

End If

If Down = 0 Then

If Godzina = 0 Then

Godzina = 23

Else

Decr Godzina

End If

End If

Cls

Lcd "GODZINA: " ; Godzina

Waitms 200

Loop Until Ok = 0

While Ok = 0

Wend

Do

If Up = 0 Then

If Minuta = 59 Then

Minuta = 0

Else

Incr Minuta

End If

End If

If Down = 0 Then

If Minuta = 0 Then

Minuta = 59

Else

Decr Minuta

End If

End If

Cls

Lcd "MINUTA: " ; Minuta

Waitms 200

Loop Until Ok = 0

Sekunda = 0

Minuta = Makebcd(minuta)

Godzina = Makebcd(godzina)

Dzien = Makebcd(dzien)

Miesiac = Makebcd(miesiac)

I2cstart 'zapisanie nowych ustawień do zegara

I2cwbyte 160

I2cwbyte 2

I2cwbyte Sekunda

I2cwbyte Minuta

I2cwbyte Godzina

I2cwbyte Dzien

I2cwbyte Miesiac

I2cstop

Cls

Minuta = Makedec(minuta)

Godzina = Makedec(godzina)

Dzien = Makedec(dzien)

Miesiac = Makedec(miesiac)

Gosub Alarm

Return

'*****************************ZMIANA ALARMU ***********************************

Alarm:

Gosub Sprawdz_dzien

If Godzina > Godz_off Then

Gosub Wylacz

End If

If Godzina = Godz_off And Minuta > Min_off Then

Gosub Wylacz

End If

If Godzina = Godz_off And Minuta = Min_off Then

Gosub Wylacz

End If

If Godzina < Godz_off Then

Gosub Ddd

End If

If Godzina = Godz_off And Minuta < Min_off Then

Gosub Ddd

End If

If Godzina > Godz_on Then

Gosub Wlacz

End If

If Godzina = Godz_on And Minuta = Min_on Then

Gosub Wlacz

End If

If Godzina = Godz_on And Minuta > Min_on Then

Gosub Wlacz

End If

Min_al = Makebcd(min_al)

Godz_al = Makebcd(godz_al)

I2cstart

I2cwbyte 160

I2cwbyte 11

I2cwbyte Min_al

I2cwbyte Godz_al

I2cstop

Cls

Return

Ddd:

Godz_al = Godz_off

Min_al = Min_off

Set Przekaznik

Return

Wylacz:

Godz_al = Godz_on

Min_al = Min_on

Reset Przekaznik

Return

Wlacz:

If Dzien = Mmax Then

If Miesiac = 12 Then

Miesiac = 1

Gosub Jj

End If

Incr Miesiac

End If

Jj:

Dzien = 1

Gosub Sprawdz_dzien

Godz_al = Godz_off

Min_al = Min_off

Set Przekaznik

Return

*GODZINY WYŁĄCZENIA i WŁĄCZENIA PRZEKAŹNIKA DLA POSZCZEGÓLNYCH MIESIĘCY**

Sprawdz_dzien:

If Dzien < 15 Or Dzien = 15 Then

Select Case Miesiac

Case 1 : Godz_off = 7

Min_off = 43

Godz_on = 15

Min_on = 45

Mmax = 31

Return

Case 2 : Godz_off = 7

Min_off = 08

Godz_on = 16

Min_on = 30

Mmax = 28

Return

Case 3 : Godz_off = 6

Min_off = 10

Godz_on = 17

Min_on = 25

Mmax = 31

Return

Case 4 : Godz_off = 5

Min_off = 00

Godz_on = 18

Min_on = 15

Mmax = 30

Return

Case 5 : Godz_off = 4

Min_off = 05

Godz_on = 19

Min_on = 00

Mmax = 31

Return

Case 6 : Godz_off = 3

Min_off = 23

Godz_on = 19

Min_on = 45

Mmax = 30

Return

Case 7 : Godz_off = 3

Min_off = 20

Godz_on = 20

Min_on = 00

Mmax = 31

Return

Case 8 : Godz_off = 3

Min_off = 45

Godz_on = 19

Min_on = 45

Mmax = 31

Return

Case 9 : Godz_off = 4

Min_off = 30

Godz_on = 18

Min_on = 45

Mmax = 30

Return

Case 10 : Godz_off = 5

Min_off = 18

Godz_on = 17

Min_on = 36

Mmax = 31

Return

Case 11 : Godz_off = 6

Min_off = 4

Godz_on = 16

Min_on = 40

Mmax = 30

Return

Case 12 : Godz_off = 7

Min_off = 15

Godz_on = 15

Min_on = 40

Mmax = 31

Return

End Select

End If

If Dzien > 15 Then

Select Case Miesiac

Case 1 : Godz_off = 7

Min_off = 30

Godz_on = 16

Min_on = 8

Mmax = 31

Return

Case 2 : Godz_off = 6

Min_off = 40

Godz_on = 17

Min_on = 0

Mmax = 28

Return

Case 3 : Godz_off = 5

Min_off = 34

Godz_on = 17

Min_on = 50

Mmax = 31

Return

Case 4 : Godz_off = 4

Min_off = 32

Godz_on = 18

Min_on = 38

Mmax = 30

Return

Case 5 : Godz_off = 3

Min_off = 40

Godz_on = 19

Min_on = 25

Mmax = 31

Return

Case 6 : Godz_off = 3

Min_off = 15

Godz_on = 19

Min_on = 48

Mmax = 30

Return

Case 7 : Godz_off = 3

Min_off = 30

Godz_on = 19

Min_on = 55

Mmax = 31

Return

Case 8 : Godz_off = 4

Min_off = 5

Godz_on = 19

Min_on = 15

Mmax = 31

Return

Case 9 : Godz_off = 4

Min_off = 45

Godz_on = 18

Min_on = 15

Mmax = 30

Return

Case 10 : Godz_off = 5

Min_off = 40

Godz_on = 17

Min_on = 05

Mmax = 31

Return

Case 11 : Godz_off = 6

Min_off = 36

Godz_on = 16

Min_on = 10

Mmax = 30

Return

Case 12 : Godz_off = 7

Min_off = 40

Godz_on = 15

Min_on = 25

Mmax = 31

Return

End Select

End If

Return

'******************************************************************************

'Program został napisany w programie BASCOM 8051 ver.2.0.8.0

11. Tabela przełączeń przekaźnika dla odpowiednich dni i miesięcy.

Miesiąc

Dni (Od 1 do 15)

Dni (>15)

Wyłączenie

Włączenie

Wyłączenie

Włączenie

Styczeń

7:43

15:45

7:30

16:08

Luty

7:08

16:30

6:40

17:00

Marzec

6:10

17:25

5:34

17:50

Kwiecień

5:00

18:15

4:32

18:38

Maj

4:05

19:00

3:40

19:25

Czerwiec

3:23

19:45

3:15

19:48

Lipiec

3:20

20:00

3:30

19:55

Sierpień

3:45

19:45

4:05

19:15

Wrzesień

4:30

18:45

4:45

18:15

Październik

5:18

17:36

5:40

17:05

Listopad

6:04

16:40

6:36

16:10

Grudzień

7:15

15:40

7:40

15:25

MIKROPROCESOROWY STEROWNIK OŚWIETLENIA

________________________________________________________________

13

14 * *13

12 * *11

10 * *9

8 * *7

6 * *5

4 * *3

2 * *1



Wyszukiwarka

Podobne podstrony:
mikroprocesorowy sterownik oświetlenia str0 spis treści
automatyczny sterownik oswietle Nieznany (2)
Kopia (21) Dok101, BHP dokumenty, WARTOŚCIOWANIE PRACY UMEWAP 95
Sterownik oswietlenia kabiny samochodu
Inteligentny system sterowania oświetleniem
Oswietlenie 1, Dokumenty(1)
1997 09 Układ sterowania oświetleniem kabiny samochodu
1997 07 Układ sterowania oświetleniem kabiny samochodu
1997 08 Układ sterowania oświetleniem kabiny samochodu
Komputerowy pulpit do sterowania oświetleniem Alfa Instrukcja obsługi
2000 06 Automatyczny sterownik oświetlenia
Inteligentny system sterowania oświetleniem
Oświetlenie zewnętrzne szafka sterownicza

więcej podobnych podstron