wersja mobilna | kontakt z nami

Sterownik wyświetlacza LCD z interfejsem szeregowym

Numer: Grudzień/2017

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.

Pobierz PDF

rys1Moduł 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.

rys2Sposoby 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.

rys3Każ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.

rys4Moduł 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.

rys5Pozycja 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.

rys6Budowa 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.

rys7Złą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.

rys8Uruchomienie 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

tab1

tab2

tab3

Pozostałe artykuły

Zasilacz laboratoryjny 0...30 V/5 A ze sterowaniem mikroprocesorowym (1)

Numer: Grudzień/2017

Na ścieżce rozwoju każdego elektronika-konstruktora pojawia się wreszcie taka chwila, gdy w prowadzonych pracach rozwojowych przestają wystarczać takie źródła energii elektrycznej, jak jednorazowe ogniwa elektrochemiczne, akumulatory i akumulatorki czy tanie zasilacze wtyczkowe o przeciętnych parametrach. To chwila, w której jasna staje się potrzeba posiadania własnego zasilacza laboratoryjnego. O ile budowa regulowanego zasilacza stabilizowanego ...

Dwukierunkowy regulator obrotów silnika prądu stałego

Numer: Grudzień/2017

Zmiana prędkości obrotowej silnika prądu stałego jest podstawowym zadaniem w wielu układach napędowych. W artykule przedstawiono nieskomplikowany i co najważniejsze ? ?niemikroprocesorowy? dwukierunkowy regulator prędkości obrotowej silnika prądu stałego wykorzystujący metodę PWM. Rekomendacje: regulator przyda się majsterkowiczom do regulowania prędkości obrotowej narzędzi oraz w budowanych przez siebie urządzeniach.

ATB-WAV Player (1). Karta muzyczna i czytnik kart pamięci dla mikrokontrolerów

Numer: Grudzień/2017

Jak wiadomo, w dzisiejszych czasach odtwarzanie plików dźwiękowych z plików typu WAV umieszczonych na karcie pamięci, za pomocą 8-bitowego mikrokontrolera nie stanowi dużego problemu. Niestety, jest mały kłopot polegający na tym, że trudno tę funkcjonalność zaimplementować do dowolnego projektu na 8-bitowcu z uwagi na spore wymagania czasowe w trakcie odtwarzania dźwięków z karty SD. W związku z tym postanowiłem przygotować projekt ...

Stroik gitarowy

Numer: Styczeń/2018

Przeglądając strony internetowe, natknąłem się na bardzo ciekawy, nietuzinkowy projekt stroika gitarowego, który w odróżnieniu od pozostałych urządzeń tego typu wykorzystuje inne zjawiska fizyczne niż fala akustyczna w celu umożliwienia nastrojenia instrumentu. Typowe rozwiązania dostępne w handlu poddają analizie dźwięk lub drgania emitowane przez strunę gitary i wyświetlają procent odstrojenia instrumentu od wartości prawidłowej. ...

Wielozadaniowy termostat

Numer: Styczeń/2018

Ciepło ma ważne znaczenie dla człowieka, zarówno w kontekście fizjologicznym, jak i ekonomicznym. Dlatego staramy się utrzymać temperaturę, która zagwarantuje komfort cieplny, ale jednocześnie nie spowoduje nadmiernego zużycia energii, bo jej wyprodukowanie ma swoją cenę. Opisywany termostat umożliwia regulowanie temperatury za pomocą 4 wyjść przekaźnikowych o bogatych możliwościach konfiguracji. Rekomendacje: termostat przyda ...

Mobilna
Elektronika
Praktyczna

Elektronika Praktyczna

Luty 2019

PrenumerataePrenumerataKup w kiosku wysyłkowym

Elektronika Praktyczna Plus

lipiec - grudzień 2012

Kup w kiosku wysyłkowym