Grafický LCD display 128x64 je Arduino výstupní modul, který umožňuje zobrazit různé údaje pro uživatele. Tento displej obsahuje řídící obvod ST7920, který lze řídit přes paralelní nebo sériové rozhraní. Vzhledem k tomu, že pro sériové rozhraní je zapotřebí menší množství propojovacích vodičů, tak se tento návod zaměřuje právě na toto rozhraní. Co se týká napájecího napětí, tak elektroniku displeje je nutné napájet napětím 5 Voltů, zatímco pro displej stačí pouze 3,3 Voltů z Arduina. Proudový odběr se zapnutým podsvícením se pohybuje okolo 66 miliAmpér, přičemž samotná elektronika má odběr přibližně 6 miliAmpér. Celý modul displeje má rozměry 93x70 mm, samotný rámeček se zobrazovačem pak 78x51 mm.

Grafický LCD display 128x64 ST7920

Pro úspěšné propojení grafického LCD displeje s Arduinem stačí zapojit celkem osm vodičů. Propojíme GND se zemí Arduina, VCC s 5V Arduina, RS s pinem 11, RW s pinem 12, E s pinem 13, PSB se zemí Arduina, BLA s 3V3 Arduina a BLK se zemí Arduina. Použité datové piny RS, RW a E lze vyměnit za jiné volné piny, ale tuto volbu je nutné provést také na začátku programu. Pro nastavení kontrastu slouží trimr na zadní straně, který je označen jako VR1.

Schéma zapojení Grafického LCD displeje 128x64 ST7920

Pro správné přeložení a nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu U8g, návod jak na to je uveden zde. Ukázkový kód obsahuje na svém začátku připojení potřebné knihovny a nastavení čísel propojovacích pinů. Následuje inicializace LCD displeje z knihovny U8glib a jako další je vytvořena proměnná prepis pro uchování času poslední obnovy displeje. Podprogram setup obsahuje nastavení barvy, intenzity a viditelnosti pixelů a také možné otočení displeje o 180 stupňů skryté v komentáři. V nekonečné smyčce loop se nachází funkce if, která kontroluje rozdíl mezi aktuálním časem a časem posledního vykreslení displeje, kdy změnou čísla za porovnáním (v příkladu 100) můžeme volit rychlost překreslování displeje v milisekundách. Tělo této funkce pak obsahuje skupinu příkazů, které zaručí překreslení displeje a poté ještě uložení posledního času obnovení do proměnné prepis. Ve skupině příkazů překreslení LCD displeje se nachází důležité volání podprogramu vykresli, který obsahuje veškerý výpis dat na displej. Tento podprogram je uveden pod smyčkou loop. Je v něm uvedeno nastavení písma na univerzální font a dále vypsání čtyř řádků s textem. Jak je uvedeno v komentářích, pomocí funkce setPrintPos(x,y) si vždy nastavíme souřadnici, odkud se bude tisknout a poté funkcí print vytiskneme požadovaný text.

// Grafický LCD display 128x64
// řadič ST7920

// připojení knihovny U8glib
#include "U8glib.h"

// nastavení propojovacích pinů
#define EN 13
#define RW 12
#define RS 11

// inicializace OLED displeje z knihovny U8glib
U8GLIB_ST7920_128X64_1X lcd(EN, RW, RS);

// proměnná pro uchování času poslední obnovy displeje
long int prepis = 0;

void setup(void) {
  // nastavení bílé barvy pro výpis
  if ( lcd.getMode() == U8G_MODE_R3G3B2 ) {
    lcd.setColorIndex(255);
  }
  // nastavení maximální intenzity svitu
  else if ( lcd.getMode() == U8G_MODE_GRAY2BIT ) {
    lcd.setColorIndex(3);
  }
  // nastavení viditelnosti pixelů
  else if ( lcd.getMode() == U8G_MODE_BW ) {
    lcd.setColorIndex(1);
  }
  // pro otočení displeje o 180 stupňů
  // stačí odkomentovat řádek níže
  // lcd.setRot180();
}

void loop(void) {
  // porovnání uloženého a aktuálního času,
  // při rozdílu větším než 100 ms se provede
  // obnovení displeje, čas můžeme nastavit dle potřeby
  if (millis()-prepis > 100) {
    // následující skupina příkazů
    // obnoví obsah OLED displeje
    lcd.firstPage();
    do {
      // funkce vykresli vykreslí žádanou obsah
      vykresli();
    } while( lcd.nextPage() );
    // uložení posledního času obnovení
    prepis = millis();
  }
  
  // zde je místo pro další příkazy pro Arduino
  
  // volitelná pauza 10 ms pro demonstraci
  // vykonání dalších příkazů
  delay(10);
}
// funkce vykresli pro nastavení výpisu informací na OLED
void vykresli(void) {
  // nastavení písma, toto písmo umožní vypsat
  // přibližně 15x4 znaků
  lcd.setFont(u8g_font_unifont);
  // nastavení pozice výpisu v pixelech
  // souřadnice jsou ve tvaru x, y
  // souřadnice 0, 0 je v levém horní rohu
  // OLED displeje, maximum je 128, 64
  lcd.setPrintPos(0, 10);
  // výpis textu na zadanou souřadnici
  lcd.print("Arduino navody");
  lcd.setPrintPos(0, 25);
  lcd.print("dratek.cz");
  lcd.setPrintPos(0, 40);
  lcd.print("Cas od zapnuti:");
  lcd.setPrintPos(40, 55);
  lcd.print(millis()/1000);
  lcd.print(" vterin");
}

Po nahrání programu do Arduino desky s připojeným grafickým LCD displejem dostaneme například tento výsledek:

Ukázka použití grafického LCD displaye 128x64 ST7920

Grafický LCD display 128x64 je velice zajímavým zobrazovacím prvek pro Arduino. Má velice dobrý kontrast a díky velkému množství pixelů ho lze využívat nejen na výpis textu, ale také na jednodušší grafické prvky. Může tedy najít využití v projektech, kde potřebujeme vypisovat větší množství informací v kombinaci s dobrou čitelností a viditelností. Při využití sériového módu je také velkou výhodou to, že na Arduinu zabere pouze tři datové piny.

 

Seznam použitých komponent:

http://dratek.cz/arduino/1511-original-arduino-uno-rev3-1485165418.html

http://dratek.cz/arduino/1157-graficky-lcd-display-128x64-modre-podsviceni-1449938856.html

FB tw

Další podobné články