Obsługa wyświetlacza znakowego LCD

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

Obsługa wyświetlacza LCD HD44780

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

Wstęp

Czasem przychodzi ten moment, kiedy chcemy usamodzielnić nasze Arduino od komputera. W końcu nie planujemy do końca życia odczytywać wyników pomiarów na monitorze. Z pomocą przyjdą nam tanie wyświetlacze znakowe oparte na sterowniku HD44780 oraz wbudowana w Arduino biblioteka LiquidCrystal. Wyświetlacze te 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 kolorami podświetleń.

Do dyspozycji użytkownika oddano 16 pinów, a wyświetlacz może komunikować się 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.

Dla naszych potrzeb zajmiemy się trybem 4 bitowym. Podłączenie nie jest trudne i sprowadza się do skorzystania z obrazka, który dostarcza nam strona Arduino.cc. Jedyną dodatkową rzeczą jest posiadanie potencjometru 10k, który odpowiedzialny będzie za ustawienie kontrastu.

Podłączenie

Jeżeli jesteśmy gotowi, podłączamy nasz wyświetlacz zgodnie z poniższym schematem. Pamiętając o dokładnym sprawdzeniu połączeń przed uruchomieniem. Źle podłączony wyświetlacz nie dość, że nie zadziała to istnieje duże prawdopodobieństwo, że zostanie uszkodzony.

Uwaga, pamiętajcie, aby za każdym razem sprawdzić notę katalogową, w której będzie rysunek opisujący wyjścia wyświetlacza. Pomimo sterownika zgodnego z HD44780, część wyświetlaczy może różnić się pinout’em.

Dwie skrajne nóżki potencjometru od kontrastu podłączamy pomiędzy plus i masę, a środkowa nóżka zostaje podłączona do Vo wyświetlacza LCD.

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

Kod

/*
  LiquidCrystal Library - Hello World

 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.

 This sketch prints "Hello World!" to the LCD
 and shows the time.

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// 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);
}

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

Komendy

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 pokazanego wcześniej kodu można stwierdzić, że:

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

Dzięki temu, możemy sami zdecydować, do których wyjść podłączymy wyświetlacz.

lcd.begin(16, 2);

W komendzie lcd.begin użytkownik ustala rozmiar wyświetlacza, ile ma linii i kolumn. W przykładzie podano ustawienia dla 16 kolumn i 2 linii.

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, rząd); 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 jeśli posiadamy wyświetlacz 2 linie po 16 znaków (kolumn), to według tego kodu do wyboru mamy linie 0 oraz linie 1.

Wyświetlacze z większą ilością linii

W momencie kiedy chcemy użyć większego wyświetlacza, tj. takiego, który posiada więcej linii i kolumn niż standardowe 2x16, wtedy mogą zacząć się schody w postaci przesuniętego tekstu lub nie wyświetlających się znaków. Jest to spowodowane tym, że wyświetlacze posiadające np. 4 linie po 40 znaków mają wbudowane dwa sterowniki, czyli w sumie dysponują dwoma wejściami EN. Dlatego w przypadku użycia takiego wyświetlacza zalecane jest zastosowanie biblioteki Enhanced Liquid Crystal, która ma wsparcie dla wyświetlaczy posiadających dwa sterowniki HD44780. Obecnie na stronie można znaleźć informacje, iż powyższa biblioteka z powodzeniem sprawdziła się przy użyciu wyświetlaczy 4x40 oraz 4x27. Gdybyśmy chcieli użyć tylko standardowej biblioteki, moglibyśmy spotkać się z sytuacja kiedy tekst po dojściu do końca 1 linii przeskoczy nam zamiast do drugiej to do trzeciej linii. Oczywiście są też inne błędy, które spowodują, iż użycie większego wyświetlacza ze standardową biblioteką będzie mijać się z celem- więcej czasu stracimy na kombinowanie, a rezultat może być inny od oczekiwanego.

Podsumowanie

Jak widać rozpoczęcie zabawy z wyświetlaczami LCD zgodnymi z HD44780 nie jest takie trudne. W sieci możecie się również spotkać z wyświetlaczami np. VFD, których sterowniki są zgodne ze wspomnianym HD44780. Czym różnią się np. wyświetlacze VFD od zwykłych LCD? Otóż, przede wszystkim są to wyświetlacze lampowe, a co za tym idzie posiadają o wiele większą jasność oraz konstrast. Niestety są też zdecydowanie droższe od popularnych LCDków. Poniższe zdjęcie przedstawia przykładowy wyświetlacz VFD.

Jak zawsze zachęcamy do eksperymentowania. Jeśli ktoś ma obawy, że może mieć problemy z podłączeniem wyświetlacza zawsze może sięgnąć po dedykowany dla Arduino shield, którego obsługa sprowadza się do złączenia w "kanapkę" z Arduino i wgrania przykładowego programu.

Odnośniki