Urządzenia wyjściowe do równoległego portu wejścia/wyjścia 8255
Wskaźnik stanów logicznych
Jest to urządzenie wyjściowe, które monitoruje stan wszystkich linii logicznych dostępnych na złączu DB25 karty rozszerzającej. Jest to zespół 24 diod elektroluminescencyjnych, które świecą gdy na wejściu pojawi się poziom logiczny “1”. Na obudowie tego urządzenia umieszczone jest drugie gniazdo umożliwiające podłączenie jednocześnie innych urządzeń.
Rys. 24 przedstawia schemat ideowy pojedynczego bloku reagującego na jeden sygnał wejściowy oznaczony tutaj jako We.
Rys. 24. Schemat ideowy pojedynczego bloku diodowego wskaźnika stanów logicznych
Wyświetlacz matrycowy LCD
Jako drugie urządzenie wyjściowe zastosowano układ matrycowego wyświetlacza LCD typu LM018L firmy Hitachi. Można na nim wyświetlać 24 znaki w jednej linii, natomiast w buforze wyświetlacza mieści się 80 znaków. Widoczny obszar bufora można wybrać dowolnie. Każdy znak jest złożony z matrycy 5x7 punktów i dodatkowej linii kursora 5x1 punktów. Widok wyświetlacza przedstawia Rys. 25, zaś wymiary każdego znaku Rys. 26.
Rys. 25. Widok panelu wyświetlacza LM-018L
Rys. 26. Wymiary pojedynczego znaku wyświetlacza LM-018L
Istnieje możliwość zaprogramowania dodatkowych 8 znaków narodowych. Należy tylko przesłać ich wzorce bitowe do wyświetlacza. Program dołączony do modelu, obsługujący uniwersalny port we/wy 8255 realizuje polskie znaki na wyświetlaczu.
Układ wyświetlacza (zwany LCD II) jest skonstruowany w ten sposób, że za komunikację ze “światem zewnętrznym” odpowiedzialny jest specjalny mikroprocesor HD44780 firmy Hitachi. Tak więc w praktyce komputer komunikuje się z wyświetlaczem poprzez tenże procesor. Nie musimy sami dbać o to w jaki sposób wyświetlić np. literę A na 7 pozycji, bo robi to za nas HD44780. Programista jedynie wysyła odpowiednie “rozkazy” do wykonania przez procesor. W tym przypadku wysyłamy do wyświetlacza rozkaz “wyświetl znak na pozycji” dodatkowo podajemy tylko pozycję znaku i jego kod przybliżony do standardowego kodu ASCII jaki jest stosowany w komputerach PC. Na Rys. 27. przedstawiono tabelę kodów ASCII wyświetlacza. Jak widać, mamy tu 160 znaków z których część to diakrytyki japońskie tzw. znaki KANA; a szkoda, że nie są to polskie ogonki...
Inicjalizacja wyświetlacza
Źródła Hitachi podają iż wyświetlacz LM-018L po załączeniu zasilania inicjalizuje się automatycznie, jednak producent zaleca wstępną inicjalizację wyświetlacza za pomocą układów zewnętrznych (w naszym przypadku za pomocą komputera i specjalnego programu) na wypadek gdyby inicjalizacja sprzętowa zawiodła. W praktyce ustalono, że inicjalizacja sprzętowa nie jest podejmowana, więc zawsze inicjalizuje się wyświetlacz programowo. Sposób inicjalizacji programowej dla trybów pracy 4 i 8 bitowego nieco się różnią, więc podane zostaną oba.
Rys. 27. Tabela ASCII wyświetlacza LM-018L
Inicjalizacja w trybie 8 bitowym
Po załączeniu zasilania układu należy odczekać 15ms
Wyzerować linie RS i R/W
Linie D0-D3 są dowolne, na linie D4-D7 należy podać słowo binarne 0011. (D7 jest najstarszym bitem słowa) Nie można jeszcze sprawdzać flagi zajętości BF
Odczekać nie krócej niż 4.1ms
Linie D0-D3 są dowolne, na linie D4-D7 należy podać słowo binarne 0011 (jak w pkt. 3)
Odczekać nie krócej niż 100 s
Linie D0-D3 są dowolne, na linie D4-D7 należy podać słowo binarne 0011. (jak w pkt. 3) Od tej pory należy; każdorazowo przed wysłaniem rozkazu za pomocą magistrali danych; sprawdzać flagę zajętości BF i jeżeli jest ona ustawiona należy czekać dopóki się nie wyzeruje.
Przesłać rozkaz “Ustaw tryb pracy interfejsu” z parametrami określającymi pracę z magistralą danych o szerokości 8 bitów. (Patrz Rys. 30)
Przesłać rozkaz “Kontrola wyświetlania” z parametrem wyłączającym ekran wyświetlacza
Przesłać rozkaz “Kontrola wyświetlania” z parametrem włączającym ekran wyświetlacza
Przesłać rozkaz “Ustaw parametry przesuwu” z parametrem wybranym według potrzeb
Inicjalizacja w trybie 4 bitowym
Po załączeniu zasilania układu należy odczekać 15ms
Wyzerować linie RS i R/W
Na linie D4-D7 należy podać słowo binarne 0011. (D7 jest najstarszym bitem słowa) Nie można jeszcze sprawdzać flagi zajętości BF
Odczekać nie krócej niż 4.1ms
Na linie D4-D7 należy podać słowo binarne 0011 (jak w pkt. 3)
Odczekać nie krócej niż 100 s
Na linie D4-D7 należy podać słowo binarne 0011. (jak w pkt. 3) Od tej pory należy; każdorazowo przed wysłaniem rozkazu za pomocą magistrali danych (a ściślej przed wysłaniem połówki rozkazu); sprawdzać flagę zajętości BF i jeżeli jest ona ustawiona należy czekać dopóki się nie wyzeruje. Należy pamiętać, że każdy rozkaz lub daną od tej pory wysyła się na raty tzn. najpierw 4 starsze bity, potem 4 młodsze
Przesłać rozkaz “Ustaw tryb pracy interfejsu” z parametrami określającymi pracę z magistralą danych o szerokości 4 bitów. (Patrz Rys. 30)
Przesłać rozkaz “Kontrola wyświetlania” z parametrem wyłączającym ekran wyświetlacza
Przesłać rozkaz “Kontrola wyświetlania” z parametrem włączającym ekran wyświetlacza
Przesłać rozkaz “Ustaw parametry przesuwu” z parametrem wybranym według potrzeb
Procesor HD 44780
Procesor HD 44780 jest specjalizowanym, wykonanym w technologii VLSI układem przeznaczonym do sterowania multipleksowanymi wyświetlaczami matrycowymi LCD. Może się komunikować za pomocą 4 lub 8 bitowej magistrali danych z układem mikroprocesorowym. W przypadku pracy w trybie 4-bitowym przesyłanie danych jest realizowane przy użyciu 4 najstarszych bitów danych D4-D7. Wszystkie funkcje wymagane do obsługi wyświetlaczy są realizowane przez wewnętrzne bloki układu. HD 44780 potrafi obsłużyć wiele typów wyświetlaczy : jedno- i dwuliniowe; 24, 40, i 80-znakowe. W modelu użyto wyświetlacza jednoliniowego, 24-znakowego, z buforem 80-znakowym. Gdy żądamy wykonania operacji dotyczącej wyświetlacza np.: dwuliniowego na wyświetlaczu jednoliniowym zostanie ona zignorowana. Schemat blokowy procesora przedstawiono na Rys. 28.
Rys. 28. Schemat blokowy procesora HD44780
Rys. 29. Schemat blokowy układu wyświetlacza LCD
Cały układ (płytka wyświetlacza) wyświetlacza przedstawia się jak na Rys. 29.
Z procesora HD 44780 wychodzą sygnały:
CLK - sygnał zegarowy
SEG1 - SEG40 - linie wybierające poszczególne znaki na wyświetlaczu
ROW1 - ROW16 - linie wybierające poszczególne rzędy znaku
D - linia danych szeregowych
Wyświetlanie poszczególnych elementów obrazu przedstawia się następująco:
wybierany jest sygnał znaku np.: SEG1 odpowiadający pierwszemu znakowi
wybierany jest pierwszy sygnał rzędu ROW1 odpowiadający pierwszemu rzędowi (w wybranym wcześniej pierwszym znaku)
poprzez wyjście D i za pomocą sygnału zegara CLK jest przesyłane szeregowo słowo wypełniające wybrany wcześniej rząd znaku. Każdy bit tego słowa równy 1 oznacza zapalony punkt rzędu
potem realizowany jest wpis do następnych rzędów w wybranym znaku (ROW2 , ROW3...)
następnie tak samo wpisywane są informacje do następnych znaków
Jeżeli dany wyświetlacz nie jest wyposażony w 40 znaków to po prostu nie są one wyświetlane, lub i są przenoszone do drugiej linii (dla wyświetlaczy 2 liniowych). W wyświetlaczu LM-018L jest tylko 24 znaki i 1 linia, więc dalsze znaki nie są wyświetlane.
Na Rys. 30. Przedstawiono wszystkie rozkazy procesora. Objaśnienia wymagają niektóre bity owych rozkazów. I tak:
I/D=1 oznacza zwiększanie licznika, 0 - zmniejszanie
S=1 oznacza przesuw ekranu wraz z przesuwem kursora
S/C=1 oznacza przesuw ekranu; 0 - przesuw kursora
R/L =1 oznacza przesuw w prawo; 0 - w lewo
DL=1 ustawia 8 bitową szynę danych; 0 - 4 bitową
N=1 ustawia wyświetlanie dwuliniowe; 0 - jednoliniowe
F=1 ustawia matrycę znaku 5x10 punktów; 0 - 5x7 punktów
BF=1 oznacza zajętość procesora przez wewnętrzne operacje; 0 - gotowość do przyjęcia danych
Parametry elektryczne
Układ jest przystosowany do zasilania napięciem 5V ± 0.25V lecz z praktyki wiadomo iż pracuje on poprawnie w zakresie napięć 3V-5.25V. Należy tylko zwrócić uwagę na konieczność skorygowania jaskrawości wyświetlania dla każdej zmiany napięcia zasilającego. Uzyskuje się to poprzez regulację rezystancji dzielnika napięcia odniesienia na płytce elektroniki wyświetlacza.
Układ wyświetlacza posiada następujące wyprowadzenia (Pierwszy przewód w taśmie czerwony):
1.-7. D0-D7 - (Data Bits) 8 bitowa, dwukierunkowa magistrala danych.
8. E - (Enable) Dla wpisania informacji (czy to rozkazu czy danych) należy wystawić 1 logiczną na to wejście, odpowiednio ustawić wszystkie bity danych oraz linie RS i R/W a następnie wyzerować tę linię. Opadające zbocze informuje LCD II że wszystkie pozostałe sygnały (D0-D7, R/W, RS) są poprawne i można rozpocząć dekodowanie.
9. R/W - (Read/Write) Wejście informujące układ o zapisie (R/W w stanie niskim), lub o odczycie (R/W w stanie wysokim).
10. RS - (Register Select) Linia wejściowa informująca LCD II czy w danym momencie na magistrali danych znajduje się rozkaz (RS w stanie niskim), czy dane (RS w stanie wysokim).
11. GND - Masa układu.
12. Vcc - Zasilanie.
INSTRUKCJA |
BINARNY KOD ROZKAZU |
OPIS ROZKAZU |
CZAS WYKONANIA |
CZAS WYKONANIA |
|||||||||
|
RS |
R/W |
DB7 |
DB6 |
DB5 |
DB4 |
DB3 |
DB2 |
DB1 |
DB0 |
|
ZEGAR 250 kHz |
ZEGAR 160 kHz |
WYCZYŚĆ EKRAN |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Czyści ekran i ustawia kursor w pozycji początkowej czyli ustawia adres w DD RAM na wartość 0 |
82µs-1.64ms |
120µs-4.9ms |
POWRÓĆ DO POCZĄTKU |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
x |
Ustawia kursor w pozycji początkowej (ustawia adres DD RAM na wartość 0) Jeśli widoczny obszar ekranu jest przesunięty, także ustawia go w pozycji początkowej. |
40µs -1.6ms |
120µs-4.8ms |
USTAW PARAMETRY PRZESUWU |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
I/D |
S |
Ustala kierunek przesuwu kursora i określa czy ekran ma się przesuwać podczas zapisu i odczytu danych (a nie rozkazów!) do pamięci wyświetlacza (DD RAM) |
40µs |
120µs |
KONTROLA WYŚWIETLANIA |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
D |
C |
B |
Włącza lub wyłącza ekran (bit D); kursor (bit C) oraz miganie litery nad kursorem (bit B) |
40µs |
120µs |
PRZESUN KURSOR/EKRAN |
0 |
0 |
0 |
0 |
0 |
1 |
S/C |
R/L |
x |
x |
Przesuwa kursor i/lub ekran bez zmieniania zawartości pamięci DD RAM |
40µs |
120µs |
USTAW TRYB PRACY INTERFEJSU |
0 |
0 |
0 |
0 |
1 |
DL |
N |
F |
x |
x |
Ustala szerokość szyny danych, ilość wyświetlanych linii i wybiera rodzaj czcionki |
40µs |
120µs |
USTAW ADRES CG RAM |
0 |
0 |
0 |
1 |
ADRES W CG RAM |
Ustawia adres w pamięci znaków (CG RAM) |
40µs |
120µs |
|||||
USTAW ADRES W DD RAM |
0 |
0 |
1 |
ADRES W DD RAM |
Ustawia adres w pamięci wyświetlacza ( DD RAM ) |
40µs |
120µs |
||||||
SPRAWDŹ FLAGĘ ZAJĘTOŚCI |
0 |
1 |
BF |
ADRES CG RAM lub DD RAM |
Odczytuje flagę zajętości ( BF ) , także odczytuje ostatnio używany adres zarówno w pamięci CG RAM jak i w pamięci DD RAM |
1µs |
1µs |
||||||
ZAPSZ DANE DO CG RAM/DD RAM |
1 |
0 |
ZAPISYWANA DANA |
Zapisuje dane do pamięci DD RAM lub do pamięci CG RAM |
40µs |
120µs |
|||||||
WEŹ DANE Z CG RAM/DD RAM |
1 |
1 |
ODCZYTYWANA DANA |
Odczytuje dane z pamięci DD RAM lub CG RAM |
40µ s |
120µ s |
Rys. 30. Tabela dostępnych rozkazów procesora HD44780
Na Rys. 31. i Rys. 32. pokazano cykle zapisu i odczytu z wyświetlacza.
Rys. 31. Wykres czasowy cyklu zapisu danych do wyświetlacza (procesora HD44780)
Rys. 32. Wykres czasowy cyklu odczytu danych z wyświetlacza (procesora HD44780)
|
SYMBOL |
MINIMALNIE |
MAKSYMALNIE |
Czas trwania cyklu Enable |
Tec |
1µ s |
- |
Czas trwania stanu wysokiego Enable |
Te |
450ns |
- |
Czas narastania sygnału Enable |
Ter |
- |
25ns |
Czas opadania sygnału Enable |
Tef |
- |
25ns |
Czas ustalenia się sygnałów RS i R/W |
Tas |
140ns |
- |
Opóźnienie danych |
Tdd |
- |
320ns |
Czas wystawienia danych |
Tds |
195ns |
- |
Czas przetrzymania danych |
Th |
20ns |
- |
Rys. 33. Tabela objaśniająca czasy trwania cykli odczytu i zapisu
Stanowisko do demonstracji pracy układu 8255
Stanowisko składa się z trzech części:
karty rozszerzającej do komputera PC, którą należy włożyć do wnętrza komputera do wolnego slotu 8 lub 16 bitowego
diodowego detektora stanu linii, który należy połączyć z kartą za pomocą przewodu 25 żyłowego służącego do przesyłania danych. Należy podłączyć także zasilanie przewodem zakończonym wtyczkami mini jack.
modułu wyświetlacza LCD i klawiatury krzyżowej, który także łączymy z kartą za pomocą przewodu 25 żyłowego pośrednio przez moduł diodowego detektora linii. Podłączenie zasilania jest realizowane za pomocą przewodu z wtyczką mini jack.
Schemat połączeń wszystkich modułów przedstawiono na Rys. 34.
Rys. 34. Sposób połączenia wszystkich elementów model