Główna O nas Kontakt Projekty Timer NE555 ST6 Realizer Historia Linki 

Realizer cz. 6

Sterowanie wyświetlaczem alfanumerycznym LCD w ST6-Realizer

Krzysztof Górski

Z listów wynika że wielu z Was chciało się zapoznać z tym jak ujarzmić wyświetlacz LCD spod ST6-Realizera. Mogło by się wydawać że wyrysowanie odpowiedniego schematu działania przy pomocy ST6-Realizera jest trudne. Wielu użytkowników programu wręcz twierdziło że jest to niemożliwe. Jednak ST6-Realizer przy odrobinie fantazji staje się dość mocnym i szybkim narzędziem projektowym. Umożliwiającym w sposób nieskomplikowany stworzenie odpowiedniego programu obsługi wyświetlacza. Koniecznie do eksperymentów należy wykonać prosty układzik według schematu Rys 1. Idealnym urządzeniem przy pomocy którego możemy przeprowadzić szereg eksperymentów jest publikowany w tym numerze EP zestaw edukacyjny KIT AVT- 50xx. Umożliwia on również wykonanie testowego układu z wyświetlaczem LCD.

Wyniki naszych prac oglądać będziemy na wyświetlaczu LCD1x16 z standardowym sterownikiem HD44780.

Należy również zaopatrzyć się w programator ST62 Kit AVT993 oraz w mikrokontroler ST62 z pamięcią EPROM. Tak uzbrojeni możemy przystąpić do poskramiania ST6-Realizera i wyświetlacza LCD.

Nie będę tu opisywał dokładnie zasady działania wyświetlacza i wszystkich jego procedur. Wiele już na ten temat napisano na łamach Elektroniki Praktycznej i Elektroniki dla Wszystkich. Szczególnie polecam cykl artykułów pt." Alfanumeryczne wyświetlacze LCD" EdW11/97.

Podczas kursu skupimy się na praktycznym przykładzie wykorzystującym Realizer.

Jak to zrobić?

Do komunikacji pomiędzy mikrokontrolerem a wyświetlaczem służą trzy linie sterujące (RW, RS, E) oraz siedem linii danych (D0 –D7). Wyświetlacz może być sterowany poprzez 8 lub 4 bitową linię danych. Przy zastosowaniu mikrokontrolera ST62T10/20 z niewielką ilością wyprowadzeń ośmiobitowe sterowanie wyświetlaczem jest wykluczone. Dlatego zajmiemy się trudniejszym do wykonania czterobitowym sterowaniem wyświetlacza LCD gdzie używane są linie D4 - D7. Pozostałe linie D0 – D3 są ignorowane. Przejście do sterowania czterobitowego odbywa się podczas inicjalizacji wyświetlacza poprzez odpowiednie ustawienie stanów na wejściach sterujących i danych w chwilę po włączeniu zasilania. Przesyłanie danych do układu odbywa się dwu etapowo najpierw przesyła się starszy półbajt instrukcji lub danej a następnie młodszy. Sterowanie cztero bitowe daje nam niewątpliwie oszczędności w wyprowadzeniach procesora.

Nasz przykład wykorzystuje tylko sześć wyprowadzeń mikrokontrolera!

Na rysunku 2 przedstawiony jest przykładowy schemat programu obsługującego wyświetlacz LCD z sterowaniem 4 bitowym. Jak widać nie jest on zbytnio czytelny ale po dokładnym przeanalizowaniu, działanie jest bardzo proste.

Rys. 2

Teraz prześledzimy działanie całego programu.

Każde naciśnięcie przycisku START jest spełnieniem określonego warunku i powoduje przejście programu w kolejny stan oraz wygenerowanie odpowiednich sekwencji stanów logicznych na wejściach sterujących RS,E i danych wyświetlacza D4 – D7. Generator osc LCD generuje ciąg impulsów które poprzez multiplekser mux1 podane są na wejście up licznika zliczającego countlf oraz na wyjście cyfrowe digout E. Wyjście val licznika countlf jest połączone z wejściem tabel indextable. Licznik zlicza impulsy pochodzące z osc LCD do wartości 51 a następnie zostaje wyzerowany. Dzieje się to w wyniku porównania przez komparator comp wartości na wyjściu licznika z wartością stałą. Na wyjściu B=A=C komparatora pojawia się stan wysoki który podany na wejście Clr licznika dokonuje jego wyzerowania. Komparator również steruje pracą przerzutnika srff. Zamiast komparatora możemy użyć tabelki lookuptable o zawartości Def,0 ; 51,1. Po podaniu stanu wysokiego na wejście S srff. Na wyjściu Q pojawia się stan wysoki wyniku czego zostaje zablokowany generator osc. Brak impulsów na wejściu zliczającym up licznika powoduje to że licznik nie dokonuje zliczania. Odblokowanie licznika i powtórzenie całej opisanej sekwencji zliczania nastąpi po kolejnym naciśnięciu przycisku START. Takie rozwiązanie pozwala wygenerować przez licznik wartość od 0 do 51 jest to ciąg potrzebny do wpisania 16 znaków w wyświetlaczu LCD. Cała procedura inicjalizacji wyświetlacza jak i następnie wpisywania znaków zawarta jest w tabelach indextable.

Wyjścia tabel NAPIS1-3 połączone są poprzez multiplekser mux2, przy pomocy którego wybierany jest komunikat do wyświetlenia z wejściem W bunpack. Wyprowadzenia bunpack sterują modułem wyświetlacza poprzez wyjścia cyfrowe digout skonfigurowane jako push-pull output. Od zawartości tabel zależy to jak i co będzie się ukazywać na wyświetlaczu LCD. Aby komunikaty wyświetlać bez błędów należy do tabeli wpisać odpowiednie liczby z zakresu od 0–255.

W naszym przypadku będzie to 50 liczb które są odpowiednikami sygnałów sterujących i danych. Tak jak już wspomniałem wyświetlacz po włączeniu zasilania musi przejść proces inicjalizacji. Na rysunku 3 przedstawiona jest wraz z opisem zawartość pierwszych dwunastu pozycji w tabeli NAPIS1. Jest to omawiany proces inicjalizacji wyświetlacza LCD.

 

0

0

3 Function Set

3 Function Set

3 Function Set

2 Function Set interfejs czterobitowy

2 Function Set ilość wyświetlanych linii 2, format znaku 5x7

8

0 Display OFF

8

0 Display ON

1

0 “Entry mode set” Kierunek przesuwu kursora zwiększenie o +1

6 Przesuwanie napisu wyłączone.

Rys. 3

Kolejne 48 pozycji tabeli dotyczy wpisania tekstu do wyświetlacza Rys 4.

135

135 w

135

135 w

135

135 w

130

142 . kropka

134

133 e

135

128 p

130

142 . kropka

134

131 c

12 Instrukcja podająca adres 40 w pamięci DD RAM pierwsza pozycja litery

0 w drugiej linii.

134

143 o

134

141 m

130

142 . kropka

135

128 p

134

140 l

138

128 spacja

138

128 spacja

138

128 spacja

0

2 ustawienie kursora na pozycji początkowej

0

Efektem wpisania sygnałów sterujących i danych jest wyświetlenie napisu o treści www.ep.com.pl.

Kolejne procesy wprowadzania kolejnych dwóch napisów do wyświetlacza wyglądają podobnie pierwsza część to inicjalizacja druga to wpisanie treści. Wszyscy ci którzy znają obsługę wyświetlaczy od razu zadają pytanie po co za każdym razem robić inicjalizację? Oczywiście jest to niepotrzebne wystarczy zrobić to raz a następnie zmieniać tylko wpisywany tekst lub też adresować poszczególne pozycje na wyświetlaczu i zmieniać znaki. Zastosowane rozwiązanie umożliwiło na uproszczenie programu (schematu) do tego stopnia że jest on czytelny i bardziej zrozumiały dla mniej zaawansowanych czytelników.

Jak dobrać zawartość tabel NAPIS1-3 ?

Zakładam że wszyscy kursanci znają choć trochę wyświetlacze LCD i ich obsługę. Jak zapewne wiecie wszystkie znaki alfabetu łacińskiego, cyfry, znaki specjale są ponumerowane według kodu ASCII. W naszym przypadku każdemu znakowi odpowiada liczba ośmiobitowa. W danych katalogowych sterownika HD44780 znajdziemy specjalną tablicę znaków generatora CG ROM Rys4 z odpowiednią kombinacją stanów na wejściach D0-D7 powodujących wyświetlenie danego znaku. Na pewno zauważyliście że tablica znaków Rys.4 tworzy jakby układ współrzędnych gdzie starszy półbajt określa kolumnę a młodszy wiersz. Po odnalezieniu żądanej litery w prosty sposób określamy jej pozycję. Dla przykładu aby wywołać na wyświetlaczu literę R gdzie jej starszy półbajt to 0101, młodszy 0010 a po ich złożeniu otrzymujemy 01010010 czyli dziesiętne 82.

Jak się ma liczba 82 do tabeli NAPIS 1-3 z schematu programu? W przypadku gdybyśmy chcieli zastosować transmisję ośmiobitową procesor-wyświetlacz możemy podać tę liczbę dziesiętną.

Aby do tabeli NAPIS1-3 wpisać dane pozwalające wyświetlić literę R w trybie 4 bitowym, musimy do wartości dziesiętnej odpowiadającej półbajtom

0101 - 5

0010 - 2

dodać liczbę 128 (wartość ta jest niezbędna aby po podaniu na wejście W bunpack uzyskać dodatkowo na wyjściu B7 bunpack stan wysoki odpowiadający sygnałowi sterującemu RS) po dodaniu otrzymujemy 133,130 które to liczby wpisujemy do tabeli NAPIS 1-3. Podobnie postępujemy z resztą liter, znaków, cyfr które mamy zamiar wpisać do wyświetlacza.

Na płycie CDEP znajduje się folder KURS_LCD zawierający źródło dla prezentowanego przykładu.

Mam nadzieję że ta część kursu rozwieje trochę wątpliwości na temat sterowania wyświetlaczem i rzuci nowe światło na możliwości ST6-Realizera.

 

Krzysztof Górski