wtorek, 1 września 2015

[7] Arduino - Wyświetlacz LCD 2x16 HD44780 z konwerterem I2C

W tym poście chciałbym przedstawić sposób obsługi wyświetlacza LCD 2x16 ze sterownikiem HD44780 poprzez konwerter I2C LCM1602.

Wstęp


Opisywany wyświetlacz jest jednym z najbardziej rozpowszechnionych i wykorzystywanych alfanumerycznych wyświetlaczy. Posiada on sterownik HD44780.

Wykorzystywany konwerter pozwala na zmniejszenie linii danych z 8 (bądź częściej 4) na zaledwie 2. Oprócz tego nie trzeba dodatkowo podłączać podświetlenie oraz pozostałych pinów wyświetlacza.
Kontrast podświetlenia regulujemy za pomocą potencjometru zamontowanego obok układu konwertera.

Podłączenie


GND - Pin GND Arduino
VCC - Pin 5V Arduino
SDA - Pin Arduino A4
SCL - Pin Arduino A5

Biblioteka


Link do pobrania biblioteki został wklejony w pierwszym akapicie w przykładzie poniżej.

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.

Wszystkie dodatkowe informacje odnośnie parametrów każdej z dostępnych funkcji znajdują się na stronie.

Przykład 1


Programy zostały przetestowane w oprogramowaniu Arduino IDE 1.6.5. r5, pobrana biblioteka to Liquid_Crystal_V1.2.1. (Można ją pobrać stąd: LIB).

Po pobraniu biblioteki należy ją wgrać do oprogramowania Arduino poprzez wybranie następującej opcji: Szkic -> Include Library -> Add .ZIP Library....

W przykładzie 1 przedstawię prosty program do obsługi tego wyświetlacza. Będzie on wyświetlał wpisany w programie tekst na ekranie wyświetlacza.

//Dołączenie potrzebnych bibliotek
#include <Wire.h>  
#include <LiquidCrystal_I2C.h>
 
//Ustawienie adresu układu
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
 
 
void setup()  {
  //Rozpoczęcie pracy wyświetlacza
  lcd.begin(16,2);
 
  //Włączenie podświetlania
  lcd.backlight();
 
  //Ustawienie kursora w pozycji poczatkowej
  lcd.setCursor(0,0);
 
  //Wyswietlenie stalej
  lcd.print("Hi");
  delay(500);
 
  //Ustawienie kursora w drugim wierszu
  lcd.setCursor(0,1);
  lcd.print("Dziala!");
 
  //Przeskoczenie do 1 linii ale do innej pozycji
  lcd.setCursor(3,0);
  lcd.print("Skok");
}
 
void loop() {
  //Nic nie robi
}

Przykład 2


Drugi przykład zawiera prezentację działania wybranych funkcji wyświetlacza. Wszystkie informacje zostały zawarte w komentarzach w programie.

//Dołączenie potrzebnych bibliotek
#include <Wire.h>  
#include <LiquidCrystal_I2C.h>
 
//Ustawienie adresu układu
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
 
 
void setup()  {
  //Rozpoczęcie pracy wyświetlacza
  lcd.begin(16,2);
 
  //Włączenie transmisji szeregowej
  Serial.begin(9600);
 
  //Włączenie podświetlania
  lcd.backlight();
  //Ustawienie kursora w pozycji poczatkowej
  lcd.setCursor(0,0);
 
  //Wyswietlenie stalej
  lcd.print("Hi");
  delay(2000);
 
  //Wylaczenie podświetlania
  lcd.noBacklight();
  delay(2000);
  lcd.backlight();
 
  //Czyszczenie ekranu
  lcd.clear();
 
  //Wyświetlenie kursora
  lcd.cursor();
 
  //Zmiana położenia kursora
  lcd.setCursor(6,1);
  delay(2000);
 
  //Wyłączenie kursora
  lcd.noCursor();
  delay(2000);
 
  //Miganie kursora
  lcd.blink();
  lcd.setCursor(0,0);
  delay(2000);
  lcd.noBlink();
}
 
void loop() {
    //Jeśli dane są dostępne wtedy 
    //zwróć wpisane dane na wyświetlacz
    if(Serial.available()) {
    lcd.write(Serial.read());
  }
}

Biblioteka

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