Wyświetlacz LCD hd44780 dla Arduino to wyświetlacz alfanumeryczny sterowany za pomocą układu HD44780. Jest on jednym z najpopularniejszych interfejsów graficznych dla Arduino. Bez wątpienia, popularność tą zawdzięcza 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)
Spis treści:
2. Uruchomienie wyświetlacza – biblioteka LiquidCrystal
4. Wyświetlanie znaków specjalnych
1. Podłączenie wyświetlacza LCD hd44780.
Schemat podłączenia wyświetlacza do Arduino przedstawia poniższy rysunek (Rys.1):
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.
tabela znaków standardowych (link)
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.
Przykładowo, 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 LCD hd44780 dla 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 .
2. Uruchomienie wyświetlacza LCD hd44780 – biblioteka LiquidCrystal.
Wyświetlacz LCD hd44780 dla Arduino – 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:
1 |
#include <LiquidCrystal.h> |
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:
1 |
LiquidCrystal lcd(10, 9, 8, 7, 6, 5); |
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:
1 |
lcd.begin(16, 2); |
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();
Przykład
Poznaliśmy 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// przykład ze strony "arduinowo.pl" Wyświetlacz LCD hd44780 dla Arduino #include <LiquidCrystal.h> //wlaczenie biblioteki LiquidCrystal lcd(10, 9, 8, 7, 6, 5); //deklaracja pinów wyswietlacza polaczonych z Arduino void setup() { lcd.begin(16, 2); //inicjalizacja wyswitlacza lcd.setCursor(0, 0); //ustawienie kursora w lewym gornym rogu (w tym przykladzie nie jest to konieczna linijka) lcd.print("Hello, world!"); //wyswietlenie naszego tekstu } void loop() { } |
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. Dlatego jeśli 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.
3. Odświeżanie wyświetlacza LCD hd44780.
Wspominana w poprzednim rozdziale funkcja lcd.clear() służy do czyszczenia z ekranu wszystkich aktualnie wyświetlanych znaków. Jednak funkcja nie jest doskonała i 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.
Jednak 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świeżanie treści.
W poniższym przykładzie przedstawiono kod programu, w którym nie wykorzystano funkcji lcd.clear().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// przyklad ze strony "arduinowo.pl" #include <LiquidCrystal.h> //wlaczenie biblioteki LiquidCrystal lcd(10, 9, 8, 7, 6, 5); //deklaracja pinów wyswietlacza polaczonych z Arduino void setup() { lcd.begin(16,2); //inicjalizacja wyswitlacza lcd.setCursor(0, 0); //ustawienie kursora pierwszej linii lcd.print("Strona ekranu:"); //wyswietlenie tekstu } void loop() { lcd.setCursor(0, 1); //ustawienie kursora drugiej linii lcd.print("<lewa"); //wyswietlenie tekstu delay(500); lcd.setCursor(0, 1); //ustawienie kursora drugiej linii lcd.print(" "); //pięć spacji kasujących tekst: "<lewa" lcd.setCursor(10, 1); //ustawienie kursora drugiej linii lcd.print("prawa>"); //wyswietlenie tekstu delay(500); lcd.setCursor(10, 1); //ustawienie kursora drugiej linii lcd.print(" "); //sześć spacji kasujących tekst: "prawa>" } |
W miejscach zmiany treści, zostają wyświetlone spacje, które skutecznie usuwają część wyświetlonych na ekranie znaków.
4. Wyświetlanie znaków specjalnych.
Wyświetlacz LCD HD44780 dla Arduino oprócz standardowych znaków z TABELI daje nam możliwość wyświetlenia również znaków specjalnych, które sami zaprojektujemy. Jednak 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
Kliknij na jeden z zielonych kwadracików w generatorze – kod programu zmieni się automatycznie. Wystarczy skopiować do Arduino i gotowe;)
Ź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
Na zakończenie: Wyświetlacz LCD hd44780 dla Arduino – obserwuj naszą stronę Facebook Arduino Polska.