LCD1602 key shield05. Jun '14

Sissejuhatus

LCD1602 key shield on 16x2 sümbolit LCD ekraaniga ning 6 nupuga Arduino shield mis istub ilusti Arduino Uno ja Arduino Mega selga. Iga sümbol koosneb 5x7 pikslist ning kaheksat sümbolit on võimalik kasutajal ka kohandada.

img/lcd1602-key-shield.jpg

LCD1602 shield sobitub erinevate Arduino mudelitega

LCD1602 põhineb Hitachi HD44780 LCD kontrolleril 1 2 mis võib opereerida nii 4-bitises režiimis kui ka 8-bitises režiimis, vajaminevate väljaviikude hulk on vastavalt 6 või 10. Hitachi HD44780 kontrolleriga või selle kloonidega (Sunplus SPLC780D, Sitronix ST7065C, Samsung S6A0069 3 jpt) realiseeritakse lihtsaid kasutajaliideseid kohvimasina, piletiautomaadi või joogiautomaadi jaoks.

Shieldi realiseeritud skeem

Käesolev LCD1602 opereerib 4-bitises režiimis, mis tähendab et ta kasutab nelja väljaviiku andmete lugemiseks/kirjutamiseks ning kahte väljaviiku ekraani juhtimiseks.

Sõltumata sellest, kas kasutusel on Arduino Uno (Atmega328p mikrokontroller), või Arduino Mega 2560 (Atmega2560 mikrokontroller) on Arduino kood sama. Seevastu C kood näiteks erineb, kuna erinevate Arduino plaatide puhul on pesad ühendatud erinevate registrite külge.

LCD1602 shield on ühendatud järgnevalt 5:

                    LCD module pin 1   <->  Arduino GND
                    LCD module pin 2   <->  Arduino 5V
                    LCD module pin 3   <->  Kontrasti potensiomeeter
HD44780 RS     <->  LCD module pin 4   <->  Arduino pin 8   <->  Atmega328p PB0
HD44780 EN     <->  LCD module pin 6   <->  Arduino pin 9   <->  Atmega328p PB1
HD44780 B4     <->  LCD module pin 11  <->  Arduino pin 4   <->  Atmega328p PD4
HD44780 B5     <->  LCD module pin 12  <->  Arduino pin 5   <->  Atmega328p PD5
HD44780 B6     <->  LCD module pin 13  <->  Arduino pin 6   <->  Atmega328p PD6
HD44780 B7     <->  LCD module pin 14  <->  Arduino pin 7   <->  Atmega328p PD7
Backlight 5V   <->  LCD module pin 15  <->  Arduino 5V
Backlight GND  <->  LCD module pin 16  <->  Arduino pin 10
                    Nupud              <->  Arduino pin A0

Visuaalselt aitab aru saada järgnev skeem:

layer 21012345678910111213text:0A0text:1A1text:2A2text:3A3text:4A4text:5A5text:66text:7A7text:8A8text:9A9text:10A10text:11A11text:12A12text:13A13text:14A14text:15A15text:2222text:2424text:2626text:2828text:3030text:3131text:3232text:3333text:3434text:3535text:3636text:3737text:3838text:3939text:4141text:4040text:4343text:4242text:4545text:4747text:4949text:5151text:4444text:4646text:5050text:4848text:5353text:5252element:C1package:C0603-ROUNDelement:C2package:C0603-ROUNDelement:C3package:C0603-ROUNDelement:C4package:C0603-ROUNDelement:C5package:C0603-ROUNDelement:C6package:C0603-ROUNDelement:C7package:C0603-ROUNDelement:C8package:C0603-ROUNDelement:C9package:C0603-ROUNDelement:C10package:C0603-ROUNDelement:C11package:C0603-ROUNDelement:C12package:C0603-ROUNDelement:C13package:C0603-ROUNDelement:C14package:C0603-ROUNDelement:C15package:C0603-ROUNDelement:F1package:L1812element:FD1package:FIDUCIA-MOUNTelement:FD2package:FIDUCIA-MOUNTelement:FD3package:FIDUCIA-MOUNTelement:FD4package:FIDUCIA-MOUNTelement:GROUNDpackage:SJelement:Ltext:LLelement:R1package:R0603-ROUNDelement:R2package:R0603-ROUNDelement:RN1package:CAT16element:RN2package:CAY16element:RN3package:CAY16element:RN4package:CAY16element:RN5package:CAT16element:RXtext:RXRXelement:TXtext:TXTXelement:Z1package:CT/CN0603element:Z2package:CT/CN0603layer 25text:ANALOG INANALOG INCOMMUNICATIONtext:ANALOG INPOWERAREFGNDTX0RX0RESET3V35Vtext:VINVINtext:GNDGNDtext:GNDGNDSDA 20SCL 21TX2 16RX2 17RX3 15text:TX3TX3 14RX1 19TX1 18text:MADE INMADE INtext:ITALYITALYPWMtext:5V5Vtext:GNDGNDtext:DIGITALDIGITALtext:MEGA 2560MEGAtext:M.Banzitext:D.Cuartiellestext:D.Mellistext:G.Martinotext:T.IgoeIOREFtext:SDAtext:SCLelement:C1package:C0603-ROUNDelement:C2package:C0603-ROUNDelement:C3package:C0603-ROUNDelement:C4package:C0603-ROUNDelement:C5package:C0603-ROUNDelement:C6package:C0603-ROUNDelement:C7package:C0603-ROUNDelement:C8package:C0603-ROUNDelement:C9package:C0603-ROUNDelement:C10package:C0603-ROUNDelement:C11package:C0603-ROUNDelement:C12package:C0603-ROUNDelement:C13package:C0603-ROUNDelement:C14package:C0603-ROUNDelement:C15package:C0603-ROUNDelement:D1package:SMBelement:D2package:MINIMELFelement:D3package:MINIMELFelement:F1package:L1812element:FD1package:FIDUCIA-MOUNTelement:FD2package:FIDUCIA-MOUNTelement:FD3package:FIDUCIA-MOUNTelement:FD4package:FIDUCIA-MOUNTelement:GROUNDpackage:SJelement:IC3package:TQFP100element:IC4package:MLF32element:IC6package:SOT23-DBVelement:IC7package:MSOP08element:Lpackage:CHIP-LED0805element:L1package:0805element:ONtext:ONONelement:R1package:R0603-ROUNDelement:R2package:R0603-ROUNDelement:RN1package:CAT16element:RN2package:CAY16element:RN3package:CAY16element:RN4package:CAY16element:RN5package:CAT16element:RXpackage:CHIP-LED0805element:T1package:SOT-23element:TXpackage:CHIP-LED0805element:XIOpackage:2X18text:XIOelement:Y1package:RESONATORelement:Y2package:QSelement:Z1package:CT/CN0603element:Z2package:CT/CN0603

LCD1602 shieldi realiseeriv skeem

Kasutamine

Arduino koodis on LCD-ekraani kasutamine üsna lihtne, kuna HD44780 kontrolleriga ekraanide jaoks on ette nähtud LiquidCrystal teek 4, mis hõlbustab sääraste ekraanide kasutamist. Teegis on defineeritud LiquidCrystal klass, millest objekti loomisel peab argumentideks kaasa andma jalgade numbrid, kuhu HD44780 mikrokontroller on ühendatud 6.

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
    // Initsialiseeri 16 tulba ja 2 reaga
    lcd.begin(16, 2);
    lcd.setCursor(0, 0);
    lcd.print("Tere maailm!");
}

void loop() {
    lcd.setCursor(0, 1);
    lcd.print(millis()/1000);
    lcd.print(" s");
}

Täpitähed

Täpitähtedega on asi mõnevõrra keerukam, kuna tähetabel mida kasutab HD44780 ei vasta ühelegi standardiseeritud tähetabelile mis säilitab sümbol-bait vaste (nt ISO8859-13 vms) ning teisalt on Arduino lähtekoodi fail tüüpiliselt Unicode tähetabelis, kus näiteks tähele õ vastab kaks baiti 0xC3 ning 0xB5. Seega lcd.print("õ") saaks argumendiks tegelikult kahebaidilise sõne ning sääraste tähetabelite kasutamine mikrokontrolleri puhul oleks mahukas ettevõtmine.

Kõige lihtsam on LCD kontrolleri datasheet-ist kontrollida, missugune tähetabel on selle sisse programmeeritud ning mis baidid vastavad soovitud sümbolitele. Käesolevas kontrolleris on olemas väikesed täpitähed "ä", "ö" ja "ü". Neile vastavad baitide väärtused on vastavalt 0xE1, 0xEF ning 0xF5. Eesti keelele unikaalset "õ"-d paraku HD44780 kontrollerisse sisse programmeeritud pole, samas saab siinkohal ära kasutada 8 programmeeritava sümboli võimalusi:

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// Täpitähed
const char LCD_AUML = 0xE1;
const char LCD_OUML = 0xEF;
const char LCD_UUML = 0xF5;

// Pisikese õ jaoks loome eraldi sümboli
const char LCD_OTILDE = 0x07;
byte LCD_OTILDE_BITMAP[8] = {
    0b01101,
    0b10010,
    0b01110,
    0b10001,
    0b10001,
    0b10001,
    0b01110
};

void setup() {
    // Initsialiseeri 16 tulba ja 2 reaga
    lcd.begin(16, 2);

    // Loo õ jaoks kohandatud bitmap-iga sümbol
    lcd.createChar(LCD_OTILDE, LCD_OTILDE_BITMAP);

    // Liigu esimese rea algusesse
    lcd.setCursor(0, 0);

    // Kuva "möirgav lõukoer"
    lcd.print("m");
    lcd.print(LCD_OUML);
    lcd.print("irgav l");
    lcd.print(LCD_OTILDE);
    lcd.print("ukoer");

    // Liigu teise rea algusesse
    lcd.setCursor(0, 1);

    // Kuva "hüppas tänaval"
    lcd.print("h");
    lcd.print(LCD_UUML);
    lcd.print("ppas t");
    lcd.print(LCD_AUML);
    lcd.print("naval");
}

void loop() {
}

Käesoleval LCD1602 moodulil on ka viis analoogsisendit välja toodud, mida saab kasutada näiteks potensiomeetri või kaugussensori väärtuse lugemiseks. Analoogseid mooduleid leiab nii DealExtremest 7 kui eBayst.

1

Hitachi HD44780 LCD controller

2

HD44780 datasheet

3

S6A0069 datasheet

4

LiquidCrystal Library

5

HD44780 Character LCD Displays

6

How to connect an Arduino UNO to an LCD 1602

7

DealExtreme

Arduino HD44780 Tiigriülikool Estonian IT College