Wyświetlacz alfanumeryczny ze sterownikiem HD44780

Spis treści:

1. Wstęp

2. Podłączenie wyświetlacza

3. Uruchomienie wyświetlacza – biblioteka LiquidCrystal

4. Odświeżanie wyświetlacza.

5. Wyświetlanie znaków specjalnych

 


1. Wstęp.

Wyświetlacze alfanumeryczne sterowane za pomocą układu HD44780, są jednymi z najpopularniejszych interfejsów graficznych dla Arduino. Popularność tą zawdzięczamy przede wszystkim dzięki prostocie użycia (oczywiście jeśli skorzystamy z gotowej biblioteki LiquidCrystal) oraz relatywnie niskiej cenie.

Na rynku możemy spotkać różne wersje tych wyświetlaczy.

Podzielić je można ze względu na:

– ilość oraz układ wyświetlanych znaków (popularne to 2×16 oraz 4×20 znaków)
– kolor wyświetlacza (popularne są zielone i niebieskie)
– technologi wykonania (LED oraz OLED)

 


2. Podłączenie wyświetlacza.

Schemat podłączenia wyświetlacza do Arduino przedstawia poniższy rysunek (Rys.1):

HD44780-schem

Rys.1. Schemat podłączenia wyświetlacza LCD do Arduino [1].

 

Opisy oraz numery wyprowadzeń wyświetlacza zostały zamieszczone w poniższej tabeli (Tab.1):

 Nr padu:   Nazwa  Opis podłączenia
         1 VSS Potencjał zerowy sterownika (GND)
         2 VCC Zasilanie sterownika (+5 VDC)
         3 V0 Napięcie regulujące kontrast (od 0 do +5 VDC)
         4 RS Wybór rejestru: instrukcja (GND) / dane (+5 VDC  )
         5 R/W Odczyt/Zapis (w tym przypadku zawsze zapis – podłączamy do GND)
         6 E Odblokowanie wyświetlacza
         7 DB0  

 

 

Magistrala przesyłu danych

=> w tym przypadku (mod 4 bitowy wyświetlacza)

podłączamy tylko wyprowadzenia DB4, DB5, DB6, DB87 *

         8 DB1
         9 DB2
       10 DB3
       11 DB4
       12 DB5
       13 DB6
       14 DB7
       15 LED+ Napięcie zasilania podświetlenia (+5 VDC)
       16 LED- Potencjał zerowy  podświetlenia (GND)

Tab.1. Opis i numeracja wyprowadzeń z wyświetlacza ze sterownikiem HD44780.

* W modzie 4 bitowym podłączane są cztery linie magistrali (DB4-DB7), natomiast w modzie 8 bitowym podłączamy wszystkie. Różnica między modami polega na tym, że w modzie 8 bitowym można wyświetlić więcej znaków z tabeli – dodatkowo prawa kolumna znaków. W modzie 4 bitowym możliwe do wyświetlenia są tylko znaki z lewej kolumny. W praktyce znaki z prawej kolumny są mało przydatne.

 

Sterownik HD44780 zasilany jest napięciem VCC wynoszącym +5 VDC. Aby zasilić podświetlenie wyświetlacza podpinamy napięcie +5 VDC (LED+) przez rezystor  R1 ograniczający prąd (np. o wartości 330 Ohm). Spowodowane jest to faktem, że nie wszystkie wyświetlacze są wyposażone w taki rezystor, a w przypadku jego braku podświetlenie zostanie uszkodzone.

Dodatkowo w tego typu wyświetlaczach regulacja kontrastu następuje poprzez zmianę napięcia V0 – do zmiany napięcia można użyć potencjometru P1 – np. 10 kOhm (źle dobrane napięcie powoduje, że nie zobaczymy w ogóle znaków na wyświetlaczu). Jeśli wyregulujemy kontrast, można zmierzyć wartość rezystancji na potencjometrze, następnie zamienić potencjometr na rezystor o możliwie zbliżonej wartości rezystancji.

Do obsługi wyświetlacza niezbędne jest podłączenie sześciu przewodów do dowolnych portów I/O Arduino.

 

W opisywanym przypadku wyprowadzenia wyświetlacza podłączono do Arduino następująco:

Pin Arduino Wyprowadzenie wyświetlacza
10 RS
9 E
8 DB4
7 DB5
6 DB6
5 DB7

Tab.2. Przykładowe podłączenie wyprowadzeń wyświetlacza do Arduino w modzie 4 bitowym.



Rys.2. Poglądowy schemat podłączenia wyświetlacza do Arduino w modzie 4 bitowym [2].

 

Dużym uproszczeniem podłączenia jest zastosowanie modułu sterowania wyświetlaczem LCD HD44780 poprzez magistralę I2C. Przykładem takiego elementu jest moduł LCM1602. Rozwiązanie takie wymaga podłączenia tylko czterech przewodów, wyświetlacz natomiast działa równie dobrze. Rozwiązanie takie wymaga zastosowania dodatkowej biblioteki np. “LiquidCrystal_I2C”.

 

Rys.3. Poglądowy schemat podłączenia wyświetlacza do Arduino poprzez magistralę I2C (LMC1602).

 

Szczegółowe informacje na temat sterownika można znaleźć w karcie katalogowej: HD44780 .


3. Uruchomienie wyświetlacza – biblioteka LiquidCrystal.

Jedną z największych zalet Arduino jest fakt, że posiada duże wsparcie biblioteczne. W przypadku wyświetlacza sterowanego układem HD44780 twórcy platformy Arduino IDE wyposażyli ją w domyślnie zainstalowaną biblioteką o nazwie LiquidCrystal. Na stronie producenta, można znaleźć opis każdej z funkcji biblioteki oraz przykłady użycia tej biblioteki.

Program zaczynamy od włączenia biblioteki LiquidCrystal:

W kolejnym kroku definiujemy, które piny Arduino używać będziemy do obsługi wyświetlacza. W nawiasie umieszczamy numery pinów zgodnie z następującym porządkiem:

LiquidCrystal lcd(RS, E, DB4, DB5, DB6, DB7);

W naszym przykładowym podłączeniu (Rys.2) zgodnie z tabelą Tab.2 otrzymujemy:

W części programu “setup” inicjalizujemy wyświetlacz komendą:

lcd.begin (liczba kolumn, liczba wierszy);

Niezbędne jest tu zdefiniowanie modelu wyświetlacza (np. czy jest to 16×2 znaków, czy 20×4 itp.). Dla wyświetlacza 16×2 będzie to komenda:

 

W tym momencie wyświetlacz jest już gotowy do użycia. W zasadzie do podstawowej obsługi wyświetlacza wystarczą nam trzy funkcje z opisywanej biblioteki:

1. Ustawienie kursora w miejscu gdzie ma rozpocząć się wyświetlenie ciągu znaków:

lcd.setCursor(kolumna, wiersz);

2. Instrukcja wyświetlenia ciągu znaków:

lcd.print(“nasz tekst”);

3. Instrukcja czyszcząca cały ekran:

lcd.clear();


Znamy już wszystkie niezbędne funkcje, aby stworzyć pierwszy program wyświetlający dowolny tekst.
Przykładowy kod wyświetlenia napisu “Hello, world!” znajduje się poniżej:

Powyższy przykład pokazuje jedną podstawową rzecz: po wysłaniu ciągu znaków do wyświetlania poleceniem lcd.print(), pozostają one w jego pamięci (są jakby “zamrożone”). Dowodem tego jest fakt, że polecenie lcd.print() znajduje się w części programu setup(), która wykonuje się tylko raz. Jeśli zatem przez jakiś czas nie potrzebujemy odświeżać ekranu wyświetlacza (np. mamy jakiś statyczny tekst) wystarczy wysłać jednokrotnie polecenie lcd.print() i nie angażować już więcej czasu procesora.

 


4. Odświeżanie wyświetlacza.

Wspominana w poprzednim rozdziale funkcja lcd.clear() służy do czyszczenia z ekranu wszystkich aktualnie wyświetlanych znaków. Proces czyszczenia ekranu, następnie wyświetlenie nowej treści przebiega relatywnie wolno. Polecenie lcd.clear() najlepiej używać, gdy niezbędna jest znacząca zmiana wyświetlanej treści. W przypadku, gdy chcemy zaktualizować na wyświetlaczu tylko kilka znaków, zdecydowanie lepiej nadpisać konkretne znaki lub po prostu wyświetlić w tym miejscu znaki spacji. Napisanie tym sposobem programu jest bardziej czasochłonne, jednak unikamy w ten sposób niechcianego migotania treści statycznych.

Dla wielu mniej wymagających programistów, odświeżanie wyświetlacza wyłącznie funkcją lcd.clear() będzie wystarczające, a migotanie treści statycznych może zostać niezauważone. Dla bardziej wymagających aplikacji warto przypomnieć sobie, że użycie funkcji lcd.clear() nie jest jedynym sposobem na odświerzanie treści.

W poniższym przykładzie przedstawiono kod programu, w którym nie wkorzystano funkcji lcd.clear()

W miejscach zmiany treści, zostają wyświetlone spacje, które skutecznie usuwają część wyświetlonych na ekranie znaków.

 


5. Wyświetlanie znaków specjalnych.

Wyświetlacz alfanumeryczny sterowany układem HD44780 oprócz standardowych znaków z TABELI daje nam możliwość wyświetlenia również znaków specjalnych, które sami zaprojektujemy. Jedyne ograniczenie stanowi to, że można wyświetlić nie więcej niż osiem różnych znaków specjalnych jednocześnie.

Aby wyświetlić znak specjalny należy w pierwszym kroku utworzyć zmienną byte z zdefiniowaną mapą bitową naszego znaku. Najprościej można stworzyć taką mapę używając generatora znaków specjalnych, takiego jak poniżej.

Generator znaków specjalnych dla wyświetlacza LCD HD44780






































Podłączenie:
   równoległe
   I2C
RS
RW GND
Enable
D4
D5
D6
D7
Adres dla I2C (HEX):
Liczba linii
Liczba kolumn

Powyższy przykład przygotowany na bazie kodów autorstwa: Omer Kilic (omerk)
https://omerk.github.io/lcdchargen/

Źródła grafik:

[1] http://www.learningaboutelectronics.com/images/Arduino-HD44780-circuit-schematic.png

[2] https://electrosome.com/wp-content/uploads/2014/11/Interfacing-LCD-with-Arduino-UNO.jpg