Sterownik wyświetlacza LCD z interfejsem szeregowym

Sterownik wyświetlacza LCD z interfejsem szeregowym
Pobierz PDF Download icon
Typowo, moduł wyświetlacza LCD jest sterowany za pomocą interfejsu równoległego. W tym celu używa się 4 lub 8 bitów danych i 2 linie sterujące. Daje to razem 10 linii I/O, które nie zawsze są dostępne w mikrokontrolerze lub na płytce mikrokomputera. Prezentowany moduł umożliwia dołączenie typowego wyświetlacza tekstowego LCD o rozdzielczości 2 linie × 16 znaków do urządzeń dysponujących tylko interfejsem szeregowym. Rekomendacje: interfejs doskonale sprawdzi się z Arduino, Raspberry Pi i podobnymi mikrokomputerami, a także z "dużymi" komputerami PC.

Moduł interfejsowy pozwala na sterowanie wyświetlaczem alfanumerycznym ze sterownikiem HD44780 lub kompatybilnym. Doskonale sprawdzi się z popularnymi wyświetlaczami o rozdzielczości 2×16 znaków. Maksymalna obsługiwana rozdzielczość wyświetlacza wynosi 4×40 znaków. Sterowanie pracą urządzenia oraz przesyłanie treści do wyświetlenia odbywa się poprzez interfejs szeregowy, który sprzętowo może być zrealizowany na jeden z trzech sposobów: RS485, USB, UART. Zalety, których dostarcza takie rozwiązanie to przede wszystkim uproszczenie budowy urządzenia. Sam wyświetlacz wymaga połączenia z co najmniej 6 liniami I/O systemu nadrzędnego, a dodatkowo wymaga ustawiania kontrastu i sterowania podświetlaniem. Prezentowane urządzenie pozwala na rozbudowę dowolnego systemu o wyświetlacz kosztem tylko 2 lub nawet 1 linii I/O. Kolejną korzyścią jest uproszczenie programowe – system nadrzędny nie jest obciążony procedurami sterującymi wyświetlaczem – nie jest potrzebna dodatkowa biblioteka funkcji. Musi tylko mieć interfejs szeregowy, w który niejako domyślne są wyposażone wszystkie mikrokomputery. Dodatkowo, mogą nim być przesyłane również komunikaty dla innych urządzeń, ponieważ moduł reaguje tylko na komendy w ściśle określonym formacie.

Sposoby sterowania

Moduł może być sterowany za pomocą jednego z dwóch protokołów komunikacyjnych: nieskomplikowanych komend tekstowych lub zbliżonego do Modbus RTU.

W pierwszym komendy sterujące urządzeniem mogą być wysyłane nawet z klawiatury przez dowolny program typu terminal tekstowy. Ogólny format komend pokazano na rysunku 1. Pierwszy znak ramki to identyfikator urządzenia – adres identyfikujący moduł, do którego jest kierowana komenda. Domyślny identyfikator to duża litera „L”. Identyfikator można zmienić, ustawić indywidualny dla każdego urządzenia. Aby zakończyć komendę należy wysłać znak „CR” (r), a następnie utrzymać „ciszę” na magistrali przez czas dłuższy niż potrzebny na transmisję 4 znaków (podobnie jak w protokole Modbus). Komenda może sterować różnymi funkcjami. Ich wykaz wraz z opisem umieszczono w tabeli 1. Uwaga! W przykładach komend dla przejrzystości wstawiono dodatkowe znaki odstępu. W rzeczywistej sytuacji te znaki są ignorowane. Spacje mogą występować tylko w treści wysłanej na ekran wyświetlacza.

Każda prawidłowo odebrana komenda zostanie potwierdzona komunikatem „OK” zakończonym znakiem nowej linii „CR”. Przykładowy kod programu dla Arduino konfigurujący port szeregowy i wypisujący tekst „Hello” na wyświetlaczu (dołączonym poprzez prezentowane urządzenie) wygląda następująco:

Serial.begin(9600);
Serial.print(„LWHellor”);

Drugi protokół obsługiwany przez urządzenie jest wzorowany na protokole Modbus RTU, ale nie ma jego pełnej funkcjonalności. Niemniej, w zupełności wystarczy do tego, aby sterować wyświetlaczem za pomocą sterownika PLC wyposażonego w interfejs RS485. Ogólną strukturę komend pokazano na rysunku 2. Każda ramka rozpoczyna się identyfikatorem urządzenia, zawiera funkcję do wykonania, dane związane z tą funkcją i jest zakończona dwoma bajtami sumy kontrolnej będącymi głównym elementem mechanizmu kontroli poprawności przesyłanych danych.

Moduł sterujący wyświetlaczem obsługuje dwie funkcje z palety funkcji Modbus: zapis pojedynczego rejestru oraz zapis wielu rejestrów. Dokładną strukturę komend z tymi funkcjami oraz odpowiedzi urządzenia pokazano na rysunkach 3 i 4, natomiast w tabeli 2 umieszczono opis przeznaczenia poszczególnych rejestrów.

W standardzie Modbus RTU przyjęto założenie, że operacje na rejestrach dotyczą rejestrów mieszczących 16 bitów. Pomimo tego, że moduł sterujący wyświetlaczem ma rejestry 8 bitowe, to dane przesyłane w komendach interpretuje jako liczby 16-bitowe, a następnie ogranicza je do 8 bitów.

Do modułu można na dwa sposoby przesyłać tekst do wyświetlenia. Pierwszy z nich polega na przesłaniu tekstu po dwa znaki, jako jeden rejestr 16-bitowy. Należy wtedy zadbać o prawidłowe przygotowanie takich danych oraz prawidłowe ich odczytanie. Poza tym, pozostaje problem tekstu o nieparzystej liczbie znaków. Drugie rozwiązanie to przesyłanie po jednym znaku dla każdego rejestru. Wtedy starszy bajt rejestru zawsze będzie zerem i w rezultacie przesyłane będą puste dane. W module zastosowano rozwiązanie, które sprawdzi się niezależnie od tego, jaką metodę przesyłania tekstu zastosujemy. Oprogramowanie sterownika odczytuje dane jako bajty, więc może odczytać dwa znaki z rejestru 16-bitowego, ale pomija bajty będące zerem. Dzięki temu, w wypadku pierwszej metody, ostatni znak w tekście o nieparzystej liczbie znaków może wynosić 0 i nie zostanie wyświetlony a pozostałe tak. W drugim wypadku, pomimo tego, że każdy bajt będzie oddzielony od poprzedniego bajtem zerowym, to na wyświetlaczu zostaną pokazane obok siebie.

Pozycja kursora, czyli miejsce na ekranie, w którym zostanie wyświetlony przesłany tekst jest określana numerem rejestru, do którego odnosi się komenda (dotyczy rejestrów o numerach 0…159). Pozycja kursora jest liczona od 0, więc funkcja zapisu rejestru o numerze np. 9 ustawi pierwszy znak na pozycji 10 w pierwszej linii wyświetlacza o rozdzielczości 2×16. Zapis do rejestru o numerze np. 18 ustawi pierwszy znak na pozycji 3 w drugiej linii wyświetlacza o rozdzielczości 2×16. Kolejne znaki tej komendy będą umieszczane na wyświetlaczu jeden za drugim, niezależnie od tego, do którego rejestru byłyby przypisane.

Rejestry konfiguracyjne

Służą do ustawienia podstawowych parametrów modułu. Dostęp do nich jest możliwy poprzez funkcję o kodzie „C” w protokole komend tekstowych, a w protokole Modbus poprzez funkcje zapisu grupy rejestrów zaczynających się od rejestru o numerze 200. Uwaga! Moduł pozwala na przesłanie tylko pełnej grupy rejestrów konfiguracyjnych, czyli tylko 8 rejestrów zaczynając od rejestru o adresie 200. Przesłane ustawienia zostają od razu zastosowane i zapamiętane w pamięci nieulotnej. Dotyczy to także prędkości transmisji oraz identyfikatora urządzenia. W protokole Modbus można zmienić wartość jednego rejestru spośród rejestrów konfiguracyjnych, ale takie ustawienie nie zostanie zapisane w pamięci nieulotnej i po ponownym uruchomieniu zostanie przywrócona poprzednia wartość. Funkcje i opis rejestrów konfiguracyjnych umieszczono w tabeli 3.

Budowa i montaż

Schemat ideowy modułu sterującego wyświetlaczem pokazano na rysunku 5. Blok zasilania zbudowano z użyciem układu scalonego L5973D impulsowej przetwornicy obniżającej napięcie. Dzięki dużej sprawności jest możliwe zasilanie urządzenia napięciem aż do 30 V. Na wyjściu otrzymujemy napięcie stabilizowane 5 V – może ono być doprowadzone również ze złącza USB, ale ze względu na spadek napięcia na diodzie D1, jego wartość będzie nieco niższa.

Układ IC3 typu FT230 pracuje w typowej aplikacji, w której pełni rolę konwertera USB/UART. Układ IC6 (MCP2551) jest wykorzystywany niestandardowo – jest to driver CAN, ale w prezentowanym urządzeniu jest driverem magistrali RS485 i doskonale sprawdza się w tej roli. Przewyższa typowe rozwiązania np. z MAX485 odpornością na uszkodzenia, ale „przegrywa”, jeśli chodzi o maksymalną długość przewodu połączeniowego. Złącza szpilkowe CFG2 i CFG3 pozwalają na wybranie magistralę do komunikacji, przełączając odpowiednie sygnały do portu szeregowego UART mikrokontrolera.

Złącza IC2 oraz IC5 służą do przyłączenia wyświetlacza. Zastosowano dwa typy złącz dla dwóch najpopularniejszych konfiguracji wyprowadzeń wyświetlaczy. Informacji o temperaturze dostarcza układ LM50 i dzięki temu jest możliwa korekcja kontrastu. Napięcie sterujące kontrastem jest wytwarzane za pomocą wbudowanego w mikrokontroler generatora PWM z wyjściowym filtrem RC.

Schemat montażowy modułu pokazano na rysunku 6. W czasie montażu należy pamiętać o tym, aby złącza CON1…CON4, szpilki konfiguracyjne CFG1…CFG3 oraz kondensator C1 zamontować od spodu płytki, jak na fotografii 7.

Uruchomienie i obsługa

Zmontowane urządzenie, z dołączonym wyświetlaczem, można łatwo sprawdzić bez wysyłania jakiejkolwiek komendy. Po włączeniu zasilania powinno włączyć się podświetlenie wyświetlacza, ponieważ domyślnie jest ono ustawione na ok. 80% intensywności świecenia. Następnie należy założyć zworkę na szpilkach oznaczonych CFG1 na pozycji TEST. W tym trybie urządzenie wypełnia wyświetlacz ciągiem liter a następnie zmienia poziom kontrastu od wartości minimalnej do wartości maksymalnej w pętli nieskończonej. Dzięki temu, w każdym cyklu pętli będzie moment, gdzie kontrast będzie optymalny dla wyświetlacza i wyświetlana będzie prawidłowa treść. Warto w takim momencie zdjąć zworkę ze szpilek TEST, ponieważ wtedy oprogramowanie modułu zapamięta aktualną wartość kontrastu. Oczywiście nie jest to procedura konieczna, kontrast można ustawić także odpowiednimi komendami.

Szpilki „DEF” pozwalają na przywrócenie ustawień domyślnych – wystarczy w dowolnej chwili założyć zworkę. Szpilki oznaczone RTU służą do wyboru protokołu komunikacyjnego, brak zworki oznacza protokół komend tekstowych, a zworka założona to protokół Modbus RTU.

Szpilki oznaczone CFG2 oraz CFG3 służą do wyboru magistrali komunikacyjnej (nie protokołu) i muszą być ustawiane obie w tym samym położeniu. Urządzenie może obsługiwać tylko jedną magistralę w danej chwili. Sposób połączenia różnych magistrali oraz ustawienie zworek przedstawia rysunek 8. W wypadku UART połączenie może być wykonane tylko jednym przewodem – wystarczy sygnał TX z mikrokomputera do modułu oraz jest konieczne, aby połączone urządzenia miały wspólną masę zasilania.

KS



Artykuł ukazał się w
Elektronika Praktyczna
grudzień 2017
DO POBRANIA
Pobierz PDF Download icon
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik grudzień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna grudzień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich grudzień 2024

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów