Obsługa wyświetlacza znakowego LCD

Jak podłączyć i obsługiwać wyświetlacz LCD zgodny z HD44780 do Arduino

Zapewne każdy z nas dochodził do momentu, w którym chciał aby projekt był niezależny od komputera. Przykładem może być termometr, który odczytuje wartości temperatury, ale dane przesyła do portu szeregowego komputera. W naszym przypadku komputer chcemy zastąpić wyświetlaczem, na którym możemy wyświetlać różnego rodzaju dane takie jak odczytaną wartość temperatury, czy komunikaty informujące użytkownika o przekroczonej np. temperaturze. W tym wpisie zajmiemy się podłączeniem i podstawową obsługą wyświetlacza LCD, który pozwala urozmaicić projekt dając opcję wyświetlania różnych komunikatów.

Podłączenie

Wyświetlacz 2x16 podłaczony do miniaturowej płytki stykowej,razem z czujnikiem temperatury

Do Starter Kitu dla Arduino (wersja rozszerzona) od marca 2015 dołaczony jest wyświetlacz 2x16. Posiada on wlutowane goldpiny, także jest gotowy do pracy - wystarczy wsadzić go do płytki stykowej i podłączyć do Arduino.

Złącze wyświetlacza posiada 16 pinów, jednak nie wszystkie musimy użyć w naszym najprostszym przykładzie. Wyświetlacz może komunikować się z Arduino w trybie 8 i 4 bitowym. Do obsługi trybu 8 bitowego potrzebne jest 11 wolnych pinów kontrolera, natomiast do obsługi trybu 4 bitowego potrzeba tylko 7 pinów.

My wybierzemy tryb 4-ro bitowy. Zużywa on mniej wyjść cyfrowych Arduino, kosztem trochę bardziej skompilkowanego sposobu komunikacji. Ponieważ biblioteka LiquidCrystal z Arduino IDE zajmuje się komunikacją, przed nami jest ta komplikacja ukryta, a zostaje nam więcej wolnych portów. Decyzja o wyborze trybu 4-ro bitowego jest oczywista.

Dla naszych potrzeb zajmiemy się trybem 4 bitowym. Podłączamy nasz wyświetlacz zgodnie z poniższym schematem. Pamiętaj o dokładnym sprawdzeniu połączeń przed uruchomieniem.

Dwie skrajne nóżki potencjometru (będzie służył do regulacji kontrastu) podłączamy pomiędzy zasilanie (5V) i masę (GND), a środkowa nóżka zostaje podłączona do wejścia Vo wyświetlacza LCD.

Szczegółowy schemat podłaczenia wyświetlacza do Arduino

Jeżeli wszystko zostało podłączone i sprawdzone, można udać się do kolejnego punktu, czyli wgrywanie kodu.

Kod

Poniższy kod jest oparty na przykładzie dołączonym do Arduino IDE:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

Uruchomienie

Czego oczekujemy?

Kompilujemy program i wgrywamy. Naszym oczom powinien ukazać się napis “hello world!”, po czym zniknie i zacznie się odliczanie ile milisekund mineło od uruchomienia/zresetowania mikrokontrolera.

Co jeżeli nie działa?

Jeżeli na ekranie nic się nie wyświetla, lub widzisz dwa rzędy czarnych kwadratów, spróbuj pokręcić pokrętłem potencjometru. Możliwe, że kontrast jest ustawiony zbyt nisko lub zbyt wysoko.

Gdy to nie przynosi rezultatu, sprawdź dokładnie czy połączyłeś wszystkie przewody, dokładnie jak na wcześniejszym schemacie.

Objaśnienia do programu

#include <LiquidCrystal.h>

Ta linia informuje Arduino IDE, że będziemy korzystać z biblioteki LiquidCrystal.

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Powyższa komenda odpowiedzialna jest za wskazanie programowi do których pinów podłączony jest wyświetlacz LCD. Z definicji LiquidCrystal można stwierdzić, że używamy następującej formy definicji LCD:

LiquidCrystal lcd (RS, EN, D4, D5, D6, D7);

Kolejne argumenty oznaczają:

Jeżeli podłaczyłeś wyświetlacz dokładnie tak jak na powyższym schmacie to RS - pin 12, EN - pin 11, D4-D7 - piny 5-2

lcd.begin(16, 2);

Polecenie lcd.begin(kolumny,linie) informuję bibliotekę jaki jest rozmiar wyświetlacza, ile ma linii i kolumn. Potrzebuje ona tej informacji by prawidłowo wyświetlać tekst na całym ekranie.

lcd.print("hello, world!");

Zapewne większość z was domyśla się, że komenda print odpowiedzialna będzie za wyświetlenie czegoś na naszym wyświetlaczu.

lcd.setCursor(0, 1);

Komenda setCursor (kolumna, linia); ustawia kursor w podanej przez nas kolumnie i rzędzie, pamiętając, że pierwsza linia i pierwsza kolumna mają współrzędne 0,0. Czyli w naszym przypadku kursor zostanie ustawiony w na początku drugiej linii. Kursor - jest to miejsce, w którym komenda print zacznie wyświetlać tekst.

Dodatkowe informacje

Wyświetlacze LCD dostępne są w wielu wersjach, od wyświetlających jedną linijkę z 8oma znakami po wyświetlacze z 4 liniami po 40 znaków. Najpopularniejsza jednak jest wersja 2 linie po 16 znaków każda. Powyższe wyświetlacze są monochromatyczne, jednak istnieją wersje z różnymi kombinacjami kolorów liter i podświetleń.

Czego się nauczyliśmy