piątek, 2 października 2015

[12] Arduino - Wyświetlacz LCD 2x16, podłączenie, programowanie

W tym poście zaprezentuję obsługę wyświetlacza LCD 2x16.

Wstęp

Osobiście wolę ten sam wyświetlacz tylko wyposażony w konwerter I2C dzięki któremu ilość pinów jaka jest wymagana do podłączenia LCD do mikrokontrolera zostaje znacznie zmniejszona. 
Z drugiej strony wyświetlacz jest prawie 10 zł tańszy w porównaniu z odpowiednikiem z konwerterem. Wobec tego jeśli nie zamierzamy wykorzystywać wielu pinów do innych celów, ten wyświetlacz będzie lepszym rozwiązaniem.

Rys. 1.1. Wygląd zewnętrzny wyświetlacza

Podłączenie

Opis wyprowadzeń i sposobu podłączenia podałem w tablicy poniżej:

Pin wyświetlacza
Opis
Pin Arduino
VSS
Masa GND
GND
VDD
Zasilanie 5V
5V
V0
Kontrast
Potencjometr
RS
Register Select – Wybranie rejestru instrukcji – stan niski, wybranie rejestru danych – stan wysoki

12
RW
Read/Write czyli odczyt(stan niski)/ zapis stan wysoki
GND
E

11
D0-D3
Linie danych, nie wykrzystywane w 4 bitowym trybie pracy.
-
D4
Linie danych wykorzystywane
5
D5
4
D6
3
D7
2
A
Podświetlanie wyświetlacza 5V lub 3.3V
5V
K
Masa podświetlenia
GND


Na wszelki wypadek na wejście zasilania podświetlenia wyświetlacza należy dołożyć rezystor ograniczający w celu zabezpieczenia układu (200 - 500 Ohmów, 1k też będzie).

Poniżej na rysunku 1.2 przedstawiłem sposób podłączenia układu przygotowany w programie Fritzing.
Rys. 1.2. Sposób podłączenia wyświetlacza

Program 1

W Arduino właściwie do wszystkich modułów, czujników i innych elementów elektronicznych biblioteki zostały przez kogoś już przygotowane. Wobec tego do ogarnięcia działania układu należy poznać działanie oraz sposoby deklaracji już zdefiniowanych funkcji.

Biblioteka pozwala na obsługę takich komend jak [1]:
  • LiquidCrystal() - funkcja odpowiedzialna za inicjalizację całego wyświetlacza;
  • begin() - przesyła informacje do programu odnośnie ilości wierszy i kolumn;
  • clear() - czyści wyświetlacz;
  • home() - umieszcza kursor w prawym górnym rogu wyświetlacza;
  • setCursor() - ustawia pozycje kursora
  • write() - wyswietla dane na wyswietlaczu
  • print() - wyświetla wprowadzony do funkcji tekst;
  • cursor() - wyświetla kursor na ekranie
  • noCursor() - wyłącza wyświetlanie kursora;
  • blink() - włączenie migania kursora;
  • noBlink() - wyłączenie migania kursora;
  • display() - włącza wyświetlacz po tym jak został wyłączony przy użyciu funkcji noDisplay();
  • noDisplay() - wyłącza wyświetlacz;
  • scrollDisplayLeft() - przesuwa zawartość wyświetlacza w lewo;
  • scrollDisplayRight() - przesuwa zawartość wyświetlacza w prawo;
  • autoscroll() - automatyczne przesuwanie tekstu, nie wymazuje tekstu już wpisanego;
  • noAutoscroll() - wyłączenie automatycznego przesuwania;
  • leftToRight() - ustawia kierunek wpisywanego tekstu od lewej do prawej;
  • rightToLeft() - odwrotnie niż funkcja powyżej;
  • createChar() - stworzenie tablicy z wyświetlanym znakiem.
Poprawną obsługę wyświetlacza można uzyskać poprzez wykorzystanie biblioteki LiquidCrystal. Jest to ta sama biblioteka którą wykorzystywałem do obsługi wyświetlacza HD44780 z konwerterem. Przez to zestaw funkcji jest dokładnie taki sam. Dla przypomnienia wrzucę pod spodem krótki opis tych funkcji:


Program będzie inicjalizował cały wyświetlacz, wpisywał teksty w wybrane miejsca oraz zostanie stworzony przykładowy kształt.
Do stworzenia własnego kształtu wykorzystuje się funkcję lcd.createChar() podaje się tam numer stworzonego wcześniej kształtu (w programie to byte jakisksztalt[8]). Kształt wyświetlany jest poprzez funkcje lcd.write().

//Dolaczenie biblioteki
#include <LiquidCrystal.h>
 
//Inicjalizacja poszczególnych pinów
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
byte jakisksztalt[8] = {
  B00100,
  B01000,
  B10000,
  B01000,
  B00100,
  B00010,
  B00001,
};
 
void setup() {
  //Ustawienie liczby kolum i wierzy
  lcd.createChar(0, jakisksztalt);
  lcd.begin(16, 2);
  lcd.print("hello, world!");
  lcd.setCursor(0,1);
  lcd.print("Drugi");
  lcd.setCursor(6, 1);
  lcd.write(byte(0));
}
 
void loop() {
}

Bibliografia:

[1]      https://www.arduino.cc/en/Reference/LiquidCrystal