Připojení lcd displeje k arduino uno. Schéma připojení LCD displeje k Arduinu pomocí protokolu I2C. LCD s RGB podsvícením

V této lekci budeme hovořit o indikátorech z tekutých krystalů syntetizujících znaky, jejich připojení k desce Arduino a ovládání indikátorů pomocí knihoven LiquidCrystal a LiquidCrystalRus.

Sedmisegmentové LED indikátory jsou sice nejlevnější variantou indikace elektronických zařízení, ale jejich použití je omezeno dvěma podstatnými nevýhodami.

  • Je prakticky obtížné připojit k mikrokontroléru více než 8 číslic LED indikátorů. Je vyžadován velký počet pinů, významné indikační proudy, složité spínače, nízká frekvence regenerace atd.
  • Na sedmisegmentových indikátorech není možné zobrazit symbolické informace.

Pro zobrazení textových informací nebo čísel větších než 4 číslice je mnohem praktičtější použít indikátory (displeje) syntetizující znaky z tekutých krystalů. Mezi jejich výhody patří:

  • pohodlné rozhraní pro připojení k mikrokontrolérům;
  • nízká spotřeba energie;
  • nízké napájecí napětí;
  • trvanlivost.

Na trhu existuje velké množství různých indikátorů s tekutými krystaly (LCD) od různých výrobců. Téměř všechny jsou podobné v parametrech, signálech rozhraní a řídicích příkazech. V současné době jsou nejběžnějšími LCD indikátory na ruském trhu zařízení vyráběná společností Winstar, Taiwan. Budu odkazovat na ukazatele této společnosti. Ale informace jsou docela použitelné i pro znakové LCD displeje jiných výrobců.

Obecné informace.

Znaky syntetizující nebo symbolické indikátory zobrazují informace ve formě znaků určité kapacity. Jedna známost zobrazuje jednu postavu. Počet známých míst určuje počet číslic indikátoru. Informace o indikátorech mohou být zobrazeny na více řádcích, takže u indikátorů tohoto typu je vždy uveden počet znaků na řádek a počet řádků.

Informace se zobrazují na matrici z tekutých krystalů s LED podsvícením. Podsvícení je k dispozici v různých barvách, což výrazně oživuje jednobarevné textové informace.

K ovládání matice tekutých krystalů a organizaci rozhraní indikátoru se používá vestavěný ovladač HD44780 nebo jeho úplné analogy. Tento ovladač určuje signály rozhraní indikátoru a řídicí příkazy.

HD44780 se stal de facto standardem pro displeje z tekutých krystalů (LCD). Technickou dokumentaci k ovladači HD44780 ve formátu PDF si můžete prohlédnout na tomto odkazu -. Možná se někomu bude líbit dokumentace jednoho z analogů tohoto řadiče - SPLC780D. Odkaz ve formátu PDF - .

Znakové LCD indikátory od Winstar.

Vím o následujících možnostech LCD indikátorů od této společnosti.

Typ indikátoru Formát zobrazení, znaků x řádků Rozměry, mm Rozměry viditelné plochy, mm Odkaz na dokumentaci, formát PDF
WH0802A1 8 x 2 58 x 32 38 x 16
WH1202A 12 x 2 55,7 x 32 46 x 14,5
WH1601A 16 x 1 80 x 36 66 x 16
WH1601B 16 x 1 85 x 28 66 x 16
WH1601L 16 x 1 122 x 33 99 x 13
WH1602A 16 x 2 84 x 44 66 x 16
WH1602B 16 x 2 80 x 36 66 x 16
WH1602C 16 x 2 80 x 36 66 x 16
WH1602D 16 x 2 85 x 30 66 x 16
WH1602J 16 x 2 80 x 36 66 x 16
WH1602L1 16 x 2 122 x 44 99 x 24
WH1602M 16 x 2 85 x 32,6 66 x 16
WH1602O 16 x 2 85 x 25,2 66 x 16
WH1602P 16 x 2 85 x 25,2 66 x 16
WH1602S 16 x 2 59 x 29,3 52 x 15
WH1602T 16 x 2 65,4 x 28,2 54,8 x 19
WH1602W 16 x 2 80 x 36 66 x 16
WH1602V2 16 x 2 66,7 x 23,3 61 x 15,9
WH1604A 16 x 4 87 x 60 62 x 26
WH1604B 16 x 4 70,6 x 60 60 x 32,6
WH2002A 20 x 2 116 x 37 85 x 18,6
WH2002D 20 x 2 89 x 21,5 75 x 15
WH2002L 20 x 2 180 x 40 149 x 23
WH2002M 20 x 2 146 x 43 123 x 23
WH2004A 20 x 4 98 x 60 77 x 25,2
WH2004B 20 x 4 98 x 60 77 x 25,2
WH2004D 20 x 4 77 x 47 60 x 22
WH2004G 20 x 4 87 x 58 74,4 x 24,8
WH2004H 20 x 4 87 x 58 74,4 x 24,8
WH2004L 20 x 4 146 x 62,5 123,5 x 43
WH2402A 24 x 2 118 x 36 94,5 x 16
WH4002A 40 x 2 182 x 33,5 154,4 x 16,5
WH4004A 40 x 4 190 x 54 147 x 29,5

Připojení LCD indikátoru k mikrokontroléru.

Schémata zapojení, časová schémata, parametry signálů, řídicí příkazy a kódy symbolů jsou podrobně popsány v dokumentaci k regulátoru HD44780. Uvedu jen nejnutnější údaje o připojení indikátorů k mikrokontrolérům.

Indikátory LCD mají obvykle 16 pinů.

Číslo PIN Signál I - vstup O - výstup Účel signálu
1 Vss - Pozemní (společné)
2 Vdd - Napájení +5V
3 Vo - Ovládání kontrastu displeje. Vstup pro připojení středního výstupu děliče napětí + 5 V. Můžete použít trimovací rezistor s odporem 10-20 kOhm.
4 R.S. Výběr registru: 0 – registr příkazů; 1 – evidence dat. Nízká úroveň signálu znamená, že byl vygenerován příkaz na datové sběrnici, vysoká úroveň znamená, že byl vygenerován příkaz na datové sběrnici.
5 R/W Směr přenosu dat:

0 – záznam;

1 – čtení.

V mnoha aplikacích se funkce čtení nepoužívá, takže signál je často spojen se zemí.

6 E Záblesk provozu sběrnice (na záporné hraně).
7 DB0 I/O Bity nízkého řádu osmibitového režimu. Nepoužívá se se čtyřbitovým rozhraním.
8 DB1 I/O
9 DB2 I/O
10 DB3 I/O
11 DB4 I/O Nejvýznamnější bity osmibitového režimu nebo datové bity čtyřbitového rozhraní.
12 DB5 I/O
13 DB6 I/O
14 DB7 I/O
15 A - Napájecí anoda podsvícení (+).
16 K - Napájecí katoda podsvícení (-). Proud musí být omezen.

Číslo PIN (první sloupec) je pro nejběžnější možnost. Je lepší to zkontrolovat stažením dokumentace pro váš typ indikátoru z tabulky v předchozí části.

Znakové LCD displeje podporují dvě možnosti připojení k mikrokontroléru:

  • Použití 8bitové datové sběrnice. Všechny signály sběrnice DB0-DB7 jsou připojeny. V jednom cyklu výměny se přenese byte informací.
  • Použití 4bitové datové sběrnice. Jsou připojeny pouze 4 nejvýznamnější bity DB4-DB7. Informace jsou přenášeny čtyři bity za cyklus hodin sběrnice.

První možnost poskytuje přenos dat na displej vyšší rychlostí. Druhý vyžaduje pro připojení indikátoru o 4 kolíky méně. Bezesporu je důležitější snížit počet propojovacích pinů než zvýšit rychlost výměny. Kromě toho jsou LCD indikátory spíše pomalá zařízení s dobou regeneračního cyklu 10-20 ms.

Připojení znakového LCD displeje k desce Arduino.

Indikátor WH2004A (4 řádky po 20 znacích) v režimu čtyřbitové výměny připojím k desce Arduino UNO R3. Dokumentaci k LCD displeji WH2004 si můžete prohlédnout na tomto odkazu.

Diagram vypadá takto.

Rezistory R2 a R3 určují kontrast indikátoru. Můžete připojit trimovací rezistor a nastavit požadovanou čistotu obrazu. Často používám indikátory WH2004 a ve svých obvodech volím tyto hodnoty odporu.

LED podsvícení indikátoru jsem připojil ke zdroji 5 V přes rezistor R1 (30 Ohm). Tímto jsem nastavil proud na cca 25 mA. Tlumené, ale zářící. Ve tmě vidíte dobře. I když indikátory WH2004 umožňují proud podsvícení až 580 mA.

Knihovna pro ovládání LCD indikátorů v systému Arduino LiquidCrystal.

K dispozici je standardní knihovna pro ovládání LCD indikátorů na bázi řadiče HD44780. Její metody podrobně popíšu.

tekuté krystaly (…)

Konstruktor třídy. Může mít jiný počet argumentů.

  • LiquidCristal(rs, en, d4, d5, d6, d7) – čtyřbitové rozhraní, signál RW se nepoužívá (připojeno k zemi).
  • LiquidCristal(rs,rw, en, d4, d5, d6, d7) – čtyřbitové rozhraní, používá se RW signál.
  • LiquidCristal(rs, en, d0, d1, d2, d3, d4, d5, d6, d7) – osmibitové rozhraní, signál RW se nepoužívá (připojeno k zemi).
  • LiquidCristal(rs, rw, en, d0, d1, d2, d3, d4, d5, d6, d7) – osmibitové rozhraní, používá se RW signál.

Argumenty:

  • rs – číslo pinu signálu RS;
  • rw – číslo výstupu signálu RW;
  • cs – signální výstup číslo E;
  • d0, d1, d2, d3, d4, d5, d6, d7 – čísla pinů datové sběrnice.

LiquidCrystal disp(6, 7, 2, 3, 4, 5);

void begin (sloupce, řádky)

Inicializuje rozhraní indikátoru. Nastavuje rozměr indikátoru. Metoda musí být volána jako první, než se použijí další funkce třídy.

Argumenty:

  • cols – počet znaků v řádku;
  • řádky – počet řádků.

disp.begin(20, 4); // používáme displej - 4 řádky po 20 znacích

void clear()

Vymazání obrazovky umístěním kurzoru do levého horního rohu.

disp.clear(); // resetování displeje

prázdný domov ()

Umístěte kurzor do levého horního rohu.

disp.home(); // na začátek obrazovky

void setCursor(sloupec, řádek)

Umístí kurzor na zadanou pozici.

  • col – souřadnice X, číslování od 0;
  • řádek – souřadnice Y, číslování od 0.

setCursor(0,1); // kurzor na začátek druhého řádku

byte zápis (data)

Zobrazí na obrazovce symbol. Vrátí počet přenesených bajtů.

Následující skica zobrazuje data ze sériového portu. Data mohou být přenášena monitorem portů Arduino IDE.

// Výstup dat sériového portu na LCD indikátoru
#zahrnout


char data;

void setup()
{
Serial.begin(9600); // inicializovat sériový port
disp.begin(20, 4); //
}

void loop()
{
if (Serial.available()) ( // pokud existují data
data= Serial.read(); // přečti symbol
if((data != 0xd) && (data != 0xa)) ( // posun řádku
disp.write(data); // zobrazit symbol na obrazovce
}
}
}

Mám velký indikátor - 4 řádky po 20 znacích. Obsahuje dva řadiče HD44780. Proto postupně vysílané znaky vyplňují nejprve první řádek, poté třetí, poté druhý a čtvrtý. Tito. přes čáru. Tato vlastnost musí být zohledněna u určitých typů ukazatelů. Dokumentace pro každý indikátor LCD uvádí pořadí adresování znaků.

byte print (data)

Zobrazí text na obrazovce. Vrátí počet přenesených bajtů.

Argumenty:

data – data, která se mají zobrazit na obrazovce. Může mít typy char, byte, int, long, string.

Může existovat druhý, volitelný argument.

byte print (data, BASE)

  • BASE – určuje číselnou soustavu:
  • BIN – binární;
  • DEC – desítkové;
  • OCT – osmičkové:
  • HEX – hexadecimální.

Příklad programu, který vytiskne textový řetězec na displej.

// zobrazení textového řádku na LCD indikátoru
#zahrnout

LiquidCrystal disp(6, 7, 2, 3, 4, 5); // vytvořit objekt

void setup()
{
disp.begin(20, 4); // inicializovat displej 4 řádky po 20 znacích
disp.print("Testovací řetězec");
}

void loop()
{ }

void kurzor()

Aktivuje režim zobrazení kurzoru. Pozice, kde bude vytištěn další znak, je podtržena.

disp.cursor(); // povolit zobrazení kurzoru

void noCursor()

Deaktivuje zobrazení kurzoru.

disp.noCursor(); // deaktivovat zobrazení kurzoru

void blink()

Umožňuje režim blikajícího kurzoru. Používá se ve spojení s funkcí kurzor(). Výsledek závisí na konkrétním modelu indikátoru.

disp.blink(); // povolit blikající kurzor

void noBlink()

Deaktivuje režim blikajícího kurzoru.

disp.noBlink(); // zakázat blikající kurzor

void display()

Zapne obrazovku poté, co byla vypnuta pomocí noDisplay(). Na obrazovce se zobrazí informace, které tam byly před vypnutím.

display.display(); // zapněte displej

void noDisplay()

Vypne obrazovku. Informace se uloží do paměti a zobrazí se po zapnutí displeje.

display.noDisplay(); // vypnout displej

void scrollDisplayLeft()

Posune obsah displeje o jeden znak doleva.

disp. scrollDisplayLeft(); // vše přesunout doleva

void scrollDisplayRight()

Posune obsah displeje o jeden znak doprava.

disp. scrollDisplayRight(); // vše přesunout doprava

void autoscroll()

Povolit režim automatického posouvání textu. Při zobrazení každého znaku se veškerý text na obrazovce posune o jeden znak. Funkce leftToRight() a rightToLeft() určují, kterým směrem jsou informace posunuty.

disp. autoscroll())(; // povolit automatické posouvání

void noAutoscroll()

Vypněte automatické posouvání textu.

disp. noAutoscroll())(; // zakázat automatické rolování

void leftToRight()

Nastavuje režim testovacího výstupu zleva doprava. Nové symboly se objeví vpravo od předchozích.

leftToRight(); // režim zleva doprava

void rightToLeft()

Nastavuje režim testovacího výstupu zprava doleva. Nové symboly se objeví vlevo od předchozích.

zpravaDoleva(); // režim zprava doleva

void createChar(číslo, data)

Metoda pro vytvoření vlastního symbolu. Ovladač umožňuje vytvoření až 8 znaků (0...7) 5x8 pixelů. Obrázek symbolu je určen 8bajtovým polem. Nejméně významných 5 bitů každého bajtu určuje stav pixelů v řádku.

Pro výstup vlastního znaku můžete použít funkci write() s číslem znaku.

// vytvoření vlastního symbolu
#zahrnout

LiquidCrystal disp(6, 7, 2, 3, 4, 5); // vytvořit objekt

byte úsměv = (
B00000000,
B00010001,
B00000000,
B00000000,
B00010001,
B00001110,
B00000000,
B00000000
};

void setup()
{
disp.createChar(0, úsměv); // vytvořit symbol
disp.begin(20, 4); // inicializovat displej 4 řádky po 20 znacích
disp.print("Úsměv");
disp.write(byte(0)); // zobrazí symbol
}

void loop()
{ }

Zde je příklad programu, který zobrazuje ruskou abecedu.

// Výstup ruské abecedy
#zahrnout

LiquidCrystalRus disp(6, 7, 2, 3, 4, 5); // vytvořit objekt

void setup()
{
disp.begin(20, 4); // inicializovat displej 4 řádky po 20 znacích
disp.print("abvgdeezhziyklmnoprst");
disp.print("ABVGDEYOZHIYKLMNOPRST");
disp.print("ughhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh");

Kategorie: . Můžete si to uložit do záložek.

Existuje velké množství různých textů, nebo, jak se jim také říká, obrazovky z tekutých krystalů syntetizující znaky. Nejběžnější displeje jsou založeny na čipech HD44780 od Hitachi, KS0066 od Samsungu nebo s nimi kompatibilní. Pro práci s takovými obrazovkami existuje standardní knihovna Arduino Liquid Crystal.

Mezi takové displeje patří zejména textové obrazovky od společnosti Melt. Tento článek podrobně popisuje schéma zapojení pro tuto obrazovku, ale je také vhodné pro mnoho dalších textových zobrazení.

Článek popisuje obecné principy. Můžete přejít na podrobný popis vašeho displeje:

Požadované komponenty

Spojení

Připojte obrazovku k prkénku a připojte napájení +5 V a uzemnění z Arduina k napájecím kolejnicím propojovacího panelu.

Sílu a přistání budete potřebovat vícekrát, takže je pohodlnější je hodit na koleje.

Zapněte podsvícení

Podsvícení displeje je samostatný okruh, který není propojen se zbytkem. Můžete jej zapnout přivedením +5 V na 15. pin displeje a připojením 16. pinu k zemi. Připojením těchto dvou kolíků k odpovídajícím kolejnicím můžete zapnout Arduino a vidět rozsvícení displeje.

Vezměte prosím na vědomí, že u některých modelů není číslování kontaktů pouze zprava doleva od prvního do šestnáctého, ale poněkud mazanější. Takže například na obrazovce 16×2 od společnosti Melt je první kontakt fyzicky umístěn na 14. pozici, druhý na 13. a tak dále zprava doleva až po 14. na první pozici a 15. resp. 16. jsou umístěny vpravo. Číslování poblíž kontaktů na displeji vám pomůže vyhnout se nejasnostem.

Zapnutí napájení znakového syntezátoru

    První je země. Připojte jej k zemnicí liště.

    Druhým je výživa. Připojte jej k +5V liště.

    Třetí je kontrast. Pro maximální kontrast jej připojte k zemnicí liště. Na tento kontakt můžete přivést libovolné napětí od 0 do 5 V, čím vyšší, tím slabší bude obraz, ale zároveň se sníží spotřeba. Abyste mohli plynule nastavit kontrast, můžete na tento kontakt přivést výstupní signál potenciometru.

Po připojení, pokud zapnete Arduino, můžete vidět obdélníkové známé prostory. V závislosti na kombinaci barev textu a podsvícení mohou být buď jasné a jasně viditelné, nebo sotva znatelné. To je normální: v každém případě bude text vypadat skvěle.

Připojení datové sběrnice

Pro komunikaci mezi Arduinem a obrazovkou je nutné použít několik komunikačních linek:

    2 nebo 3 pro příkazový displej

    4 nebo 8 pro přenos dat (znakové kódy a příkazy)

Obsazeno tak bude 6 až 11 kontaktů z obou zařízení. Pokud nepotřebujete číst z displeje, který vyhovuje většině scénářů použití, budou příkazy vyžadovat 2 řádky.

Pokud také není problém s rychlostí aktualizace dat, stačí k přenosu dat 4 linky.

Pro připojení displeje tedy stačí na Arduinu použít 6 linek, 6 pinů. Podívejme se na tento konkrétní scénář.

Jak bylo zmíněno, z displeje nemáme co číst, budeme na něj pouze zapisovat. Proto připojíme 5. pin displeje, který zodpovídá za výběr čtení/zápisu, na zemnicí lištu. To znamená „vždy psát“.

Poté propojíme Arduino a obrazovku s našimi 6 komunikačními linkami. Nezáleží na tom, které kontakty budou na Arduinu vybrány: uvedeme je v programu, ale pro příklad jsme zvolili následující konfiguraci:

    Pin 6 displeje je Arduino pin 5. Toto je řádek oprávnění k přístupu k datům. Známý jako E nebo Enable. Když se tento řádek změní na jedničku, displej provede příkaz nebo vypíše znak z datového řádku.

    11., 12., 13., 14. pin displeje jsou 10., 11., 12., 13. pin Arduina. Jedná se o datové linky. Známý jako DB4, DB5, DB6, DB7.

Obrazovka je připojena a připravena přijímat data. Zbývá jen napsat program pro Arduino.

Programování

Pro výstup textu z Arduina je nejpohodlnější použít vestavěnou knihovnu Liquid Crystal. Chcete-li zobrazit pozdrav a časovač, použijte kód takto:

Hello.pde #include lcd.begin(16, 2); // vytiskne první řádek lcd.print("Ahoj světe!"); // umístěte kurzor do sloupce 0, řádek 1. Tedy na // toto je vlastně druhý řádek, protože číslování začíná od nuly lcd.setCursor(0, 1); // vytiskne druhý řádek lcd.print ("foo bar baz" ) ;

) void loop() ( )

Vše je docela jednoduché a mělo by to být jasné z komentářů.

cyrilice

Tisk ruských písmen není úplně triviální: nemůžete jen tak napsat lcd.print("Vasya") . To souvisí s konceptem kódování. Víte, že každý znak má odpovídající kód a při kompilaci programu, pokud řetězec obsahuje azbuku, bude převeden na kódy pomocí utf-8, cp-1251 nebo nějaké jiné tabulky, v závislosti na nastavení kompilátoru. Obrazovka zase očekává, že uvidí data ve svém vlastním kódování.

Například písmeno „I“ odpovídá kódu B1 v šestnáctkové soustavě. Chcete-li přenést řetězec „Yandex“ na obrazovku, musíte do řetězce explicitně vložit kód znaku pomocí sekvence \x:

Lcd.print(" \xB1 ndex") ;

Můžete kombinovat běžné znaky a explicitní kódy v jednom řádku, jak chcete. Jedinou výhradou je, že poté, co kompilátor uvidí sekvenci \x v řádku, přečte všechny znaky za ní, které mohou být číslicemi šestnáctkové soustavy, i když jich je více než dva. Z tohoto důvodu nemůžete jednoduše použít znaky v rozsahu 0-9, a-f po dvoumístném znakovém kódu: to způsobí chybu kompilace. Abyste tento bod obešli, můžete využít toho, že dva řádky napsané vedle sebe jsou slepené. Takže pokud chcete napsat "Yeee":

Lcd.print(" \xB1 eee"); // chyba lcd.print("\xB1"

"eee");

// Správně Například pro napsání „Pozdrav z Amperky“ byl použit kód: cyrillic.pde #include LiquidCrystal lcd(4, 5, 10, 11, 12, 13); void setup() ( lcd.begin(16, 2) ; lcd.print("\xA8 p\xB8 \xB3 " "E\xBF" ); lcd.setCursor(0, 1);

lcd.print(" o

\xBF A\xBC \xBE "

"ep

\xBA\xB8"

); ) void loop() ( ) Přepínání stránek generátoru znaků Zobrazovací modul ukládá do paměti dvě stránky generátoru znaků. Výchozí hodnota je stránka nula. Pro přepnutí stránky použijte metodu command(0x101010) a naopak - command(0x101000). Displej nemůže zobrazovat znaky z různých stránek současně. Podívejme se na příklad, ve kterém se bude stejný řádek měnit v závislosti na vybrané stránce. change_page.ino// Zahrnout standardní knihovnu LiquidCrystal #zahrnout lcd.command(0b101000); // vytiskne první řádek lcd.print(" \x9b \x9c \x9d \x9e \x9f "); // čekání 1 sekunda zpoždění(1000 ) ;// instalace stránky generátoru 1 znaků lcd.command(0b101010);// čekání 1 sekunda zpoždění(1000 ) ;

// vymazání displeje

lcd.clear();

  1. )
  2. Dnes se zkusíme zaměřit na výstup na textový displej. Nejoblíbenějším čipem je HD44780 (nebo jeho kompatibilní KS0066). Pojďme si vyjmenovat jejich klady a zápory:
  3. Pro:
  4. Nízká cena.
  5. Snadné programování, kód bude stejný pro jakýkoli model.

Různé modely - nejběžnější: 8x1, 16x2, 20x4. Dají se najít i docela exotické modely 40x4, tzn. čtyři řádky po 40 znacích.

  1. Možnost připojení více displejů k jednomu Arduinu.
  2. Možnost nastavení vlastních symbolů.

nevýhody:

Ne všechny displeje podporují ruské znaky. Další podrobnosti naleznete v popisu konkrétního displeje.

Připojení bez použití I2C sběrnice vyžaduje použití 10-16 vodičů, což je velmi špatné. s I2C - 4 dráty.

  1. Na základě výše uvedeného budu uvažovat pouze o připojení displeje přes I2C.
  2. Zkusme to.
  3. co potřebujeme?
  4. Arduino (vzal jsem model Nano)
  5. Displej na čipu HD44780 s nebo bez I2C modulu (pak budete potřebovat samostatnou desku LC1602 IIC) - v našem případě 16x2 bez I2C modulu
  6. 10Kohm rezistor (Pokud potřebujete ruční ovládání podsvícení).

Potenciometr (Pokud potřebujete ruční ovládání podsvícení).

Breadboard vývojová deska.

Knihovna LiquidCrystal_I2C. http://www.ansealk.ru/files/LiquidCrystal_V1.2.1.zip

Malá odbočka č. 1: Jak rozlišit displej s I2C modulem?

Je to vlastně docela jednoduché. Pokud při otočení displeje uvidíme dlouhý blok konektorů (obvykle 16 kusů), pak na displeji není žádný modul I2C:

A takto vypadá displej s již nainstalovaným modulem I2C:

Pro připojení Arduina slouží piny SCL, SDA, VCC, GND. Dva kontakty vlevo - na obrázku jsou sepnuté propojkou - jsou potřeba pro fungování podsvícení.

Pokud modul není připojen, budete to muset udělat sami. Hlavní věc, kterou je třeba věnovat pozornost, je připojení kontaktů ve správném pořadí. Zpravidla se označí první a 16 kolíků. Někdy se stává, že 15-16 kontaktů, přes které je ovládáno podsvícení, může být umístěno před prvním (v tomto případě budou očíslovány). Na samotném modulu může být první pin také označen nikoli číslem, ale čtverečkem kolem samotného pinu.

  1. Pokud narazíte na displej s již připájeným I2C modulem, pak nebudou šedě označené vodiče potřeba. Jinak se nic nemění.
  2. Pokud nechceme měnit jas displeje, pak se schéma zjednoduší:

Jak jste si všimli, dva piny na I2C modulu označené jako LED jsou zodpovědné za podsvícení displeje. Pokud nechceme používat ovládání jasu, můžeme je jednoduše zavřít.

Nyní se podíváme na kód.

Téměř vše by nám zde mělo být známé. V řádku 5 uvedeme adresu zařízení. V řádcích 16 a 17 - počet znaků v řádku a počet řádků. V řádcích 20-22 - Vytvoříme objekt pro práci s displejem a popíšeme parametr pro práci s ním.

Malá odbočka č. 2: Jak zjistit adresu I2C zařízení?

Z velké části lze adresu nalézt v datasheetu k čipu, na kterém je I2C zařízení postaveno. Pokud to není možné, zde je odkaz na archiv s náčrtem a schématy - http://www.ansealk.ru/files/Arduino_lcd_i2c.zip, který určuje adresy všech zařízení připojených přes I2C sběrnici. Stačí připojit zařízení k Arduinu, nahrát skicu, otevřít konzoli a zobrazit adresu.

Zde vidíme funkci, která bude ve skutečnosti zodpovědná za výstup na displej. Princip výstupu je něco takového:

Pozici začátku výstupu nastavíme pomocí funkce setCursor().

Tisk řetězce pomocí funkce print().

Poté další funkce print() zahájí výstup z další pozice, po které skončil předchozí vstup. Dále bych chtěl upozornit na skutečnost, že na rozdíl od výstupu do konzole zde není použita funkce println() pro dokončení výstupu a posunu řádku.

Na obrazovce se tedy v prvním řádku objeví nápis „Test LCD1602“ a druhý řádek bude indikovat rozlišení displeje a počítadlo ukazující, kolik cyklů dokončila naše skica.

Pokud však potřebujeme na obrazovce zobrazit mnoho proměnných hodnot, není tato metoda úplně pohodlná. Faktem je, že procedura výstupu displeje je velmi energeticky náročná a pomalá a v této funkci provádíme výstup až 7krát. Bude mnohem snazší vygenerovat řetězec předem a poté jej celý vytisknout. S tím nám pomůže vstupní funkce ve formátu sprintf().

Malá odbočka #3: Formátovaná vstupní funkce sprintf().

V jazyce C existuje několik velmi pohodlných funkcí pro výstup řetězců - nazývají se formátované výstupní funkce - printf (od slov print a format). V našem konkrétním případě nás zajímá funkce sprintf, která na obrazovku nic nevytiskne, ale vygeneruje řetězec pro následný výstup. Vypadá to nějak takto:

sprintf (str , "Řetězec %d pro výstup", i );

Funkce vygeneruje řetězec (označený modře) pomocí šablony (žluté), do kterého se dosadí hodnoty proměnných (zeleně). Výsledný výsledek bude zapsán do řetězcové proměnné (červeně).

Může existovat několik šablon a proměnných. V tomto případě se proměnné zapisují oddělené čárkami. Hlavní věcí je zajistit, aby počet vzorů v řádku odpovídal počtu proměnných. Proměnné pro šablony se berou postupně, tzn. hodnota první proměnné se dosadí do první šablony, hodnota druhé proměnné do druhé atd.

Co jsou šablony? Jakýkoli vzor začíná znakem "%" a končí jedním z deseti (v případě Arduina - sedmi) znaků typu. Mezi nimi může být poměrně hodně informací o tom, jak hodnotu vypsat, nebo tam nemusí být vůbec nic.

Podívejme se, co může být v šabloně. Obecně šablona vypadá takto:

%[příznak ][šířka ][.přesnost ]typ

Hranaté závorky označují, že prvek v nich uzavřený může chybět. Svislý pruh označuje, že v tomto poli by měla být vybrána jedna ze zadaných hodnot (v našem případě jedno z písmen H, I nebo L).

Pojďme se nejprve zabývat požadovaným prvkem šablony – typem. Určuje, jaký typ proměnné bude na výstupu, a může nabývat jedné z následujících hodnot:

Symbol Význam
C Jedna postava
s Řetězec znaků
d,i Desetinné celé číslo se znaménkem
Ó Celé číslo
u Desetinné celé číslo bez znaménka
x, X Celé číslo v šestnáctkové soustavě
p Ukazatel (v šestnáctkové soustavě)
F Zlomkové číslo v pevném formátu
e,E Zlomkové číslo ve vědeckém formátu
g, G Zlomkové číslo ve vědeckém nebo pevném formátu

Ty typy, které nejsou použitelné při práci s Arduinem, jsou označeny šedě. Pro výstup řetězce tedy musíte zadat "%s" a pro výstup celého čísla - "%d".

Dále se podíváme na pole šířky. Číslo v něm udává minimální šířku pole, ve kterém bude šablona zobrazena. Pokud je velikost hodnoty v proměnné menší, pole bude doplněno mezerami, pokud je větší, bude položka přesahovat pole. Šablona "%6d" pro číslo 385 tedy vydá 385 (všimněte si tří mezer před číslem).

Specifikátor přesnosti vždy začíná tečkou a následující číslo určuje různé akce v závislosti na typu hodnoty. U typů "d,o,u,x" bude udávat minimální počet znaků, které by se měly objevit během zpracování. Pro typ "f" - počet desetinných míst. Pro typ "s" - maximální počet znaků řetězce, které budou na výstupu. Například "%6.1f" pro číslo 34.2345 vypíše "34.1" (všimněte si, že tečka je také považována za znak a před číslem budou dvě mezery). Nebo vzor "%.3s" z řetězce "precision" vypíše pouze první tři znaky - "precision".

Příznak umožňuje změnit zobrazení zobrazené hodnoty:

Více o šablonách funkcí printf si můžete přečíst na internetu. Zde jsem uvedl stručný přehled nejčastěji používaných funkcí.

Naše výstupní funkce, přepsaná tak, aby používala formátovaný výstup, by tedy vypadala takto:

Všimněte si, že na řádcích 33 a 37 vygenerujeme celý řádek pro výstup a na řádcích 34 a 38 je vytiskneme.

Nakonec naše oblíbené nastavení a funkce smyčky.

V řádku 47 nastavíme rozlišení displeje, v řádku 48 zapneme podsvícení (jehož jas lze regulovat potenciometrem). V řádku 49 nastavíme čítač cyklů na nulu. Na 37. řádku výstupu ji zvýšíme o jednu (pamatujete na konstrukci count++?). Nakonec na řádku 56 zavoláme funkci zobrazení, o které jsme hovořili dříve. Vše.

Co lze změnit nebo zlepšit?

Například můžete automaticky ovládat podsvícení v závislosti na úrovni světla pomocí fotorezistoru nebo světelného senzoru z meteostanice, o které se mluví v několika článcích dříve. Například při silném osvětlení zvyšte jas podsvícení a v noci jej snižte. Nebo našroubujte pohybové čidlo a zapněte podsvícení, když se před displejem objeví nějaký předmět, nebo... Obecně si myslím, že to už chápete, pokud chcete, výměnou jedné nebo více komponent a napsáním kódu , můžete docela vážně zlepšit použitelnost displeje. Pro zobrazení můžeme použít i vlastní vyvinuté symboly.

Všechny tyto otázky zde nezvažuji, protože jsou nad rámec recenze pro začátečníky.

A to je pro dnešek vše, co mám.

Arduino. Připojení LCD displeje

26 hodnocení, Průměrné hodnocení: 5 z 5

Instrukce

Činnost ultrazvukového dálkoměru HC-SR04 je založena na principu echolokace. Vydává zvukové impulsy do prostoru a přijímá signál odražený od překážky. Vzdálenost k objektu je dána dobou šíření zvukové vlny k překážce a zpět.
Zvuková vlna se spouští aplikací pozitivního pulzu trvajícího alespoň 10 mikrosekund na TRIG nohu dálkoměru. Jakmile puls skončí, dálkoměr vyšle do prostoru před sebou balíček zvukových pulsů o frekvenci 40 kHz. Současně se spustí algoritmus pro určení doby zpoždění odraženého signálu a na noze dálkoměru ECHO se objeví logická jednotka. Jakmile snímač detekuje odražený signál, objeví se na pinu ECHO logická nula. Doba trvání tohoto signálu („Zpoždění ozvěny“ na obrázku) určuje vzdálenost k objektu.
Dosah měření vzdálenosti dálkoměru HC-SR04 je až 4 metry s rozlišením 0,3 cm Úhel pohledu je 30 stupňů, efektivní úhel je 15 stupňů. Spotřeba proudu v pohotovostním režimu je 2 mA, během provozu - 15 mA.

Ultrazvukový dálkoměr je napájen napětím +5 V. Další dva piny jsou připojeny k libovolným digitálním portům Arduino, které připojíme k 11 a 12.

Nyní napíšeme náčrt, který určí vzdálenost k překážce a vyšle ji na sériový port. Nejprve nastavíme čísla pinů TRIG a ECHO - jedná se o piny 12 a 11. Poté deklarujeme trigger jako výstup a echo jako vstup. Inicializujte sériový port na 9600 baudů. Každé opakování cyklu smyčka() Odečteme vzdálenost a odešleme ji do portu.
Funkce getEchoTiming() generuje spouštěcí impuls. Prostě vytvoří proud 10 mikrosekund, puls, který je spouštěčem pro to, aby dálkoměr začal vysílat zvukový paket do vesmíru. Dále si pamatuje čas od začátku přenosu zvukové vlny do příchodu ozvěny.
Funkce getDistance() vypočítá vzdálenost k objektu. Ze školního kurzu fyziky si pamatujeme, že vzdálenost se rovná rychlosti krát čas: S = V*t. Rychlost zvuku ve vzduchu je 340 m/s, čas známe v mikrosekundách, to je „doba trvání“. Chcete-li získat čas v sekundách, vydělte 1 000 000. Vzhledem k tomu, že zvuk se šíří dvojnásobnou vzdálenost - k objektu a zpět - musíte vzdálenost rozdělit na polovinu. Ukazuje se tedy, že vzdálenost k objektu je S = 34 000 cm/s * trvání / 1 000 000 s / 2 = 1,7 cm/s / 100, což je to, co jsme napsali do náčrtu. Mikrokontrolér provádí operaci násobení rychleji než dělení, takže jsem nahradil „/ 100“ ekvivalentem „* 0,01“.

Také bylo napsáno mnoho knihoven pro práci s ultrazvukovými dálkoměry. Například tento: http://robocraft.ru/files/sensors/Ultrasonic/HC-SR04/ultrasonic-HC-SR04.zip. Knihovna se instaluje standardně: stáhnout, rozbalit do adresáře knihovny, který se nachází ve složce Arduino IDE. Poté lze knihovnu používat.
Po instalaci knihovny napíšeme nový náčrt. Výsledek jeho činnosti je stejný – monitor sériového portu zobrazuje vzdálenost k objektu v centimetrech. Pokud napíšete do náčrtu float dist_cm = ultrazvuk.Ranging(INC);, vzdálenost se zobrazí v palcích.

Ultrazvukový dálkoměr HC-SR04 jsme tedy připojili k Arduinu a přijímali z něj data dvěma různými způsoby: pomocí speciální knihovny a bez ní.
Výhodou použití knihovny je, že se výrazně sníží množství kódu a zlepší se čitelnost programu, nemusíte se nořit do složitostí zařízení a můžete jej okamžitě používat. V tom ale spočívá nevýhoda: hůře rozumíte tomu, jak zařízení funguje a jaké procesy v něm probíhají. V každém případě je na vás, kterou metodu použijete.

LCD displej– častý host v projektech Arduino. Ale ve složitých obvodech můžeme mít problém s nedostatkem portů Arduino kvůli nutnosti připojit štít, který má mnoho, mnoho pinů. Řešením v této situaci by mohlo být I2C/IIC adaptér, který připojí téměř standardní štít Arduino 1602 k deskám Uno, Nano nebo Mega pouze pomocí 4 pinů. V tomto článku se podíváme na to, jak můžete propojit LCD obrazovku s rozhraním I2C, jaké knihovny můžete použít, napsat krátký příklad náčrtu a podívat se na běžné chyby.

Displej z tekutých krystalů LCD 1602 je dobrou volbou pro výstup znakových řetězců v různých projektech. Je to levné, existují různé modifikace s různými barvami podsvícení, můžete si snadno stáhnout hotové knihovny pro náčrty Arduino. Ale hlavní nevýhodou této obrazovky je skutečnost, že displej má 16 digitálních pinů, z nichž je vyžadováno alespoň 6. Proto použití této LCD obrazovky bez i2c přidává vážná omezení pro desky Arduino Uno nebo Nano. Pokud není dostatek kontaktů, budete si muset koupit desku Arduino Mega nebo uložit kontakty, včetně připojení displeje přes i2c.

Stručný popis LCD 1602 pinů

Podívejme se blíže na piny LCD1602:

Každý z kolíků má svůj vlastní účel:

  1. Uzemnění GND;
  2. Napájení 5 V;
  3. Nastavení kontrastu monitoru;
  4. Příkaz, data;
  5. Zápis a čtení dat;
  6. Umožnit;

7-14. Datové linky;

  1. Plus podsvícení;
  2. Mínusové podsvícení.

Specifikace displeje:

  • Typ zobrazení znaků, je možné načíst symboly;
  • LED podsvícení;
  • Ovladač HD44780;
  • Napájecí napětí 5V;
  • Formát 16x2 znaků;
  • Rozsah provozních teplot od -20C do +70C, rozsah skladovacích teplot od -30C do +80C;
  • Pozorovací úhel 180 stupňů.

Schéma připojení LCD k desce Arduino bez i2C

Standardní schéma pro připojení monitoru přímo k mikrokontroléru Arduino bez I2C je následující.

Vzhledem k velkému počtu připojených kontaktů nemusí být dostatek místa pro připojení potřebných prvků. Použití I2C snižuje počet vodičů na 4 a obsazené piny na 2.

Kde koupit obrazovky i2c 1602 pro Arduino

LCD obrazovka 1602 je poměrně oblíbená, takže ji snadno najdete jak v tuzemských internetových obchodech, tak na zahraničních stránkách. Zde je několik odkazů na nejdostupnější možnosti:

  • Varianta běžného displeje od poměrně známého prodejce Wavgat za cenu pod 100 rublů.
  • Sada obrazovky a adaptéru i2c (musíte si jej připájet sami). Cena - pod 200 rublů
  • i2c screen shield – modul LCD 1602 s ovládacími tlačítky a rozšiřující deskou.

Popis protokolu I2C

Než probereme připojení displeje k Arduinu přes i2c adaptér, pojďme si krátce povědět o samotném i2C protokolu.

I2C/IIC(Inter-Integrated Circuit) je protokol původně vytvořený pro komunikaci integrovaných obvodů v elektronickém zařízení. Vývoj patří společnosti Philips. Protokol i2c je založen na použití 8bitové sběrnice, která je potřebná pro komunikaci bloků v řídicí elektronice, a adresovacího systému, díky kterému můžete po stejných drátech komunikovat s více zařízeními. Jednoduše přeneseme data do jednoho nebo druhého zařízení a do datových paketů přidáme identifikátor požadovaného prvku.

Nejjednodušší obvod I2C může obsahovat jedno hlavní zařízení (nejčastěji mikrokontrolér Arduino) a několik podřízených (například LCD displej). Každé zařízení má adresu v rozsahu od 7 do 127. Ve stejném obvodu by neměla být dvě zařízení se stejnou adresou.

Deska Arduino podporuje i2c v hardwaru. Pro připojení zařízení pomocí tohoto protokolu můžete použít piny A4 a A5.

Provoz I2C má několik výhod:

  • Provoz vyžaduje pouze 2 linky - SDA (datová linka) a SCL (synchronizační linka).
  • Připojení velkého množství předních zařízení.
  • Snížená doba vývoje.
  • K ovládání celé sady zařízení je zapotřebí pouze jeden mikrokontrolér.
  • Možný počet mikroobvodů připojených na jednu sběrnici je omezen pouze maximální kapacitou.
  • Vysoký stupeň zabezpečení dat díky speciálnímu přepěťovému filtru zabudovanému v obvodech.
  • Jednoduchý postup pro diagnostiku vznikajících poruch a rychlé ladění poruch.
  • Sběrnice je již integrována do samotného Arduina, takže není potřeba vyvíjet další sběrnicové rozhraní.

nedostatky:

  • Na lince je kapacitní limit - 400 pF.
  • Je obtížné naprogramovat I2C kontrolér, pokud je na sběrnici několik různých zařízení.
  • U velkého počtu zařízení je obtížné izolovat poruchu, pokud jedno z nich chybně klesne.

i2c modul pro LCD 1602 Arduino

Nejrychlejším a nejpohodlnějším způsobem použití i2c displeje v Arduinu je zakoupení hotové obrazovky s vestavěnou podporou protokolu. Těchto obrazovek ale není příliš mnoho a nejsou levné. Ale již bylo vyrobeno obrovské množství různých standardních obrazovek. Proto je dnes nejdostupnější a nejoblíbenější možností zakoupení a použití samostatného modulu I2C - adaptéru, který vypadá takto:

Na jedné straně modulu vidíme i2c piny - zem, napájení a 2 pro přenos dat. Na druhém adaptéru vidíme externí napájecí konektory. A deska má samozřejmě mnoho pinů, kterými je modul připájen ke standardním pinům obrazovky.


Výstupy i2c slouží k připojení k desce Arduino. V případě potřeby připojíme externí napájení pro podsvícení. Pomocí vestavěného trimru můžeme nastavit vlastní hodnoty kontrastu J

Na trhu najdete moduly LCD 1602 s již připájenými adaptéry, jejich použití je maximálně zjednodušeno. Pokud jste si zakoupili samostatný adaptér, budete jej muset nejprve připájet k modulu.

Připojení LCD obrazovky k Arduinu přes I2C

K připojení potřebujete samotnou desku Arduino, displej, prkénko, propojovací vodiče a potenciometr.

Pokud používáte speciální samostatný adaptér i2c, musíte jej nejprve připájet k modulu obrazovky. Je těžké udělat chybu, můžete se řídit tímto schématem.


LCD monitor s podporou i2c je k desce připojen pomocí čtyř vodičů - dva vodiče pro data, dva vodiče pro napájení.

  • Pin GND se připojuje ke GND na desce.
  • Pin VCC je na 5V.
  • SCL se připojuje na pin A5.
  • SDA je připojen na pin A.

A to je vše! Žádné pavučiny drátů, které se velmi snadno zamotají. Veškerou složitost implementace protokolu i2C přitom můžeme jednoduše svěřit knihovnám.

Knihovny pro práci s i2c LCD displejem

Pro interakci s Arduinem a LCD 1602 přes I2C sběrnici budete potřebovat alespoň dvě knihovny:

  • Knihovna Wire.h pro práci s I2C je již součástí standardního programu Arduino IDE.
  • Knihovna LiquidCrystal_I2C.h, která obsahuje širokou škálu příkazů pro ovládání monitoru přes I2C sběrnici a umožňuje zjednodušit a zkrátit skicu. Musíte dodatečně nainstalovat knihovnu Po připojení displeje je potřeba dodatečně nainstalovat knihovnu LiquidCrystal_I2C.h

Po připojení všech potřebných knihoven ke skice vytvoříme objekt a můžeme využívat všechny jeho funkce. Pro testování si načtěte následující standardní ukázkový náčrt.

#zahrnout Přepínání stránek generátoru znaků // Včetně knihovny //#include // Připojení alternativní knihovny LiquidCrystal_I2C lcd(0x27,16,2); // Zadejte adresu I2C (nejběžnější hodnotu) a také parametry obrazovky (v případě LCD 1602 - 2 řádky po 16 znacích //LiquidCrystal_PCF8574 lcd(0x27); // Volba pro knihovnu PCF8574 void setup( ) ( lcd.init (); // Inicializace displeje lcd.backlight(); // Připojení podsvícení lcd.setCursor(0,0); // Nastavte kurzor na začátek prvního řádku lcd.print(" Hello"); lcd.setCursor(0,1); // Nastavte kurzor na začátek druhého řádku lcd.print("ArduinoMaster"); // Napište text na druhý řádek ) void loop() ( )

Popis funkcí a metod knihovny LiquidCrystal_I2C:

  • home() a clear() - první funkce umožňuje vrátit kurzor na začátek obrazovky, druhá dělá totéž, ale zároveň smaže vše, co bylo předtím na monitoru.
  • write(ch) – umožňuje vytisknout na obrazovku jeden znak ch.
  • kurzor() a noCursor() – zobrazí/skryje kurzor na obrazovce.
  • blink() a noBlink() – kurzor bliká/nebliká (pokud bylo jeho zobrazení dříve povoleno).
  • display() a noDisplay() – umožňuje připojit/zakázat displej.
  • scrollDisplayLeft() a scrollDisplayRight() – posouvá obrazovku o jeden znak doleva/doprava.
  • autoscroll() a noAutoscroll() – umožňuje povolit/zakázat režim automatického posouvání. V tomto režimu je každý nový znak zapsán na stejné místo a přemístí to, co bylo na obrazovce napsáno dříve.
  • leftToRight() a rightToLeft() – Nastavení směru zobrazeného textu – zleva doprava nebo zprava doleva.
  • createChar(ch, bitmap) – vytvoří znak s kódem ch (0 – 7) pomocí pole bitmap k vytvoření černých a bílých bodů.

Alternativní knihovna pro práci s i2c displejem

V některých případech může při použití uvedené knihovny se zařízeními vybavenými řadiči PCF8574 dojít k chybám. V tomto případě může být jako alternativa navržena knihovna LiquidCrystal_PCF8574.h. Rozšiřuje LiquidCrystal_I2C, takže by s jeho používáním neměly být žádné problémy.

Problémy s připojením i2c LCD displeje

Pokud po nahrání skici nevidíte na displeji žádnou zprávu, zkuste následující kroky.

Nejprve můžete zvýšit nebo snížit kontrast monitoru. Často postavy jednoduše nejsou vidět kvůli kontrastu a režimu podsvícení.

Pokud to nepomůže, zkontrolujte, zda jsou kontakty správně připojeny a zda je připojeno napájení podsvícení. Pokud jste použili samostatný adaptér i2c, zkontrolujte znovu kvalitu pájení kontaktů.

Dalším častým důvodem chybějícího textu na obrazovce může být nesprávná adresa i2c. Nejprve zkuste změnit adresu zařízení ve skice z 0x27 0x20 nebo na 0x3F. Různí výrobci mohou mít naprogramované různé výchozí adresy. Pokud to nepomůže, můžete spustit skicu skeneru i2c, která naskenuje všechna připojená zařízení a pomocí hrubé síly určí jejich adresu. Příklad skici skeneru i2c.

Pokud obrazovka stále nefunguje, zkuste odpájet adaptér a připojit LCD jako obvykle.

Závěr

V tomto článku jsme se podívali na hlavní problémy používání LCD obrazovky ve složitých projektech Arduino, když potřebujeme ušetřit volné piny na desce. Jednoduchý a levný adaptér i2c vám umožní připojit 1602 LCD obrazovku, která zabírá pouze 2 analogové piny. V mnoha situacích to může být velmi důležité. Cenou za pohodlí je nutnost použití přídavného modulu – převodníku a knihovny. Podle našeho názoru to není vysoká cena za pohodlí a velmi doporučujeme tuto funkci v projektech používat.




Nahoru