i2c pripojenie. Pripojenie LCM1602 LCD obrazovky s I2C k Arduinu

  • Modul FC-113 je založený na čipe PCF8574T, čo je 8-bitový posuvný register - vstupno-výstupný „expandér“ pre sériová zbernica I2C. Na obrázku je mikroobvod označený DD1.
  • R1 je trimovací odpor na nastavenie kontrastu LCD displeja.
  • Jumper J1 slúži na zapnutie podsvietenia displeja.
  • Piny 1…16 sa používajú na pripojenie modulu k pinom LCD displeja.
  • Na zmenu I2C adresy zariadenia sú potrebné kontaktné plôšky A1...A3. Prispájkovaním príslušných prepojok môžete zmeniť adresu zariadenia. Tabuľka ukazuje zhodu adries a prepojok: „0“ zodpovedá prerušenému obvodu, „1“ nainštalovanej prepojke. Štandardne sú všetky 3 prepojky otvorené a adresa zariadenia 0x27.

2 Schéma pripojenia LCD displeja k Arduinu cez I2C protokol

Modul je pripojený k Arduinu štandardným spôsobom pre zbernicu I2C: pin SDA modulu je pripojený k analógovému portu A4, pin SCL je pripojený k analógovému portu A5 Arduina. Modul je napájaný +5 V z Arduina. Samotný modul je pripojený pomocou pinov 1…16 k príslušným pinom 1…16 na LCD displeji.


3 Knižnica pre prácu cez I2C protokol

Teraz potrebujeme knižnicu na prácu s LCD cez rozhranie I2C. Môžete použiť napríklad tento (odkaz v riadku „Stiahnuť vzorový kód a knižnicu“).

Stiahnutý archív LiquidCrystal_I2Cv1-1.rar rozbaliť do priečinka \knižnice\, ktorý sa nachádza v adresári Arduino IDE.

Knižnica podporuje súbor štandardných funkcií pre LCD obrazovky:

FunkciaÚčel
LiquidCrystal() vytvára typ premennej LiquidCrystal a akceptuje parametre pripojenia displeja (čísla pinov);
začať() inicializácia LCD displeja, nastavenie parametrov (počet riadkov a znakov);
jasný() vymazanie obrazovky a návrat kurzora do východiskovej polohy;
Domov() vrátiť kurzor do východiskovej polohy;
setCursor() nastavenie kurzora na danú pozíciu;
písať () zobrazí symbol na LCD obrazovke;
tlačiť () zobrazuje text na LCD obrazovke;
kurzor() ukazuje kurzor, t.j. podčiarknutie pod miestom ďalšieho znaku;
noCursor() skryje kurzor;
blikať() kurzor bliká;
noBlink() Zrušiť blikanie;
noDisplay() vypnutie displeja pri ukladaní všetkých zobrazených informácií;
zobraziť() zapnutie displeja pri ukladaní všetkých zobrazených informácií;
scrollDisplayLeft() posuňte obsah displeja o 1 pozíciu doľava;
scrollDisplayRight() posuňte obsah displeja o 1 miesto doprava;
automatické posúvanie() povoliť automatické posúvanie;
noAutoscroll() zakázať automatické posúvanie;
zľava doprava() nastavuje smer textu zľava doprava;
zprava doľava() smer textu sprava doľava;
createChar() vytvorí vlastný znak pre obrazovku LCD.

4 Skica pre textový výstup na LCD obrazovku cez I2C zbernicu

Otvorme si ukážku: Súbor vzoriek LiquidCrystal_I2C CustomChars a trochu to pozmeníme. Zobrazíme správu, na konci ktorej bude blikajúci symbol. Komentáre ku kódu komentujú všetky nuansy náčrtu.

#include // zahrnie knižnicu Wire #include // pripojenie knižnice LCD #define printByte(args) write(args); // uint8_t srdce = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // bitová maska ​​symbolu “srdca” LiquidCrystal_I2C lcd(0x27, 16, 2); // Nastavte adresu 0x27 pre LCD displej 16x2 void setup() ( lcd.init(); // inicializácia LCD displeja lcd.backlight(); // zapnutie podsvietenia displeja lcd.createChar(3, srdce); // vytvorenie symbolu „srdca“ v pamäťovej bunke 3 lcd.home(); // umiestnite kurzor doľava horný roh, na pozíciu (0,0) lcd.!"); // vytlačí riadok textu lcd.setCursor(0, 1); // presunie kurzor na riadok 2, znak 1 lcd.print(" i "); // vytlačí správu na riadku 2 lcd.printByte(3); // vytlačí symbol „srdca“ umiestnený v 3. bunke lcd.print(" Arduino "); } void loop() (// blikanie posledného znaku lcd.setCursor(13, 1); // presuňte kurzor na riadok 2, znak 1 lcd.print("\t"); oneskorenie(500); lcd.setCursor(13, 1); // presuňte kurzor na riadok 2, znak 1 lcd.print(" "); oneskorenie(500); }

Mimochodom, znaky napísané príkazom lcd.createChar();, zostávajú v pamäti displeja aj po vypnutí napájania, pretože zapísané na zobrazenie ROM 1602.

5 Vytvorte si vlastné symboly pre LCD displej

Poďme sa bližšie pozrieť na problematiku tvorby vlastných symbolov pre LCD obrazovky. Každý znak na obrazovke pozostáva z 35 bodov: 5 širokých a 7 vysokých (+1 rezervný riadok na podčiarknutie). V riadku 6 vyššie uvedeného náčrtu definujeme pole 7 čísel: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Previesť hexadecimálne čísla na binárne: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Tieto čísla nie sú nič iné ako bitové masky pre každý zo 7 riadkov symbolu, kde "0" označuje svetlý bod a "1" tmavý bod. Napríklad symbol srdca špecifikovaný ako bitová maska ​​sa objaví na obrazovke, ako je znázornené na obrázku.

6 Ovládanie LCD obrazovky cez zbernicu I2C

Nahrajme náčrt do Arduina. Na obrazovke sa objaví nápis, ktorý sme určili s blikajúcim kurzorom na konci.


7 Čo je za tým I2C zbernica

Ako bonus sa pozrime na časový diagram pre zobrazenie latinských znakov „A“, „B“ a „C“ na LCD displeji. Tieto znaky sú uložené v pamäti ROM displeja a zobrazujú sa na obrazovke jednoduchým prenosom ich adries na displej. Schéma je prevzatá z pinov RS, RW, E, D4, D5, D6 a D7 displeja, t.j. už po prevodníku FC-113 “I2C parallel bus”. Dá sa povedať, že sa ponoríme trochu hlbšie do hardvéru.


Časový diagram výstupu latinských znakov „A“, „B“ a „C“ na LCD displeji 1602

Diagram ukazuje, že znaky, ktoré sú na displeji ROM (pozri str. 11 údajového listu, odkaz nižšie) sa prenášajú v dvoch kúskoch, z ktorých prvý určuje číslo stĺpca tabuľky a druhý - číslo riadku. V tomto prípade sú dáta „zachytené“ na okraji signálu na linke E(Povoliť) a riadok R.S.(Výber registra) je v logickom stave, čo znamená, že sa prenášajú dáta. Nízky stav na linke RS znamená, že sa odosielajú inštrukcie, čo vidíme pred odoslaním každého znaku. IN v tomto prípade vysiela sa inštrukčný kód pre návrat vozíka do polohy (0, 0) LCD displeja, ktorý je možné zistiť aj štúdiom technický popis displej.

A ešte jeden príklad. Tento časový diagram zobrazuje výstup symbolu srdca na LCD displeji.


Opäť prvé dva impulzy Povoliť dodržiavať pokyny Domov()(0000 0010 2) - vráťte vozík do polohy (0; 0) a druhé dva - výstup na LCD displej uložený v pamäťovej bunke 3 10 (0000 0011 2) symbol „Srdce“ (pokyn lcd.createChar(3, srdce); skica).

Možno jedna z najpopulárnejších obrazoviek na trhu. Postavený na populárnom ovládači HD44780U. Z názvu modelu vyplýva, že obrazovka pozostáva z dvoch riadkov po 16 znakoch. Podpora ruského jazyka v tomto konkrétny model Nie

Dátová zbernica sh2s umožňuje súčasne pripojiť až 127 zariadení cez dva vodiče. Tento I2C je implementovaný na čipe PCF8574T.

Schéma zapojenia:

Modrá vec je premenlivý odpor, ktorý vám umožňuje nastaviť kontrast obrazovky.

Prepojka vľavo je zodpovedná za podsvietenie obrazovky.

Blok 4 kontaktov je pripojený k arduinu takto:

GND - GND
VCC - 5V
SDA - A4 (ak Arduino MEGA, tak na D20)
SCL - A5 (ak Arduino MEGA, tak na D21)

Knižnica

Skica

Displej môže mať inú IIC adresu, namiesto 0x27 to môže byť 0x3F. Na presné určenie adresy môžete použiť skener zariadenia i2c.

#include #include //nastavíme adresu LCD obrazovky 0x27, 16 znakov, 2 riadky LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() ( lcd.init(); // Inicializácia obrazovky //zapnite podsvietenie lcd.backlight(); //Nastavenie pozície, od ktorej sa text zobrazí. lcd.setCursor(2, 0); //výstupný riadok 1 lcd.print("Ahoj, Svet!"); //vytlačí druhý riadok rovnakým spôsobom lcd.setCursor(1, 1); lcd.print("www.site"); ) prázdna slučka () ( )

Modul LCD I2C umožňuje pripojiť znakový displej k doske Arduino pomocou iba dvoch signálnych vodičov.

Použité komponenty (kúpiť v Číne):

. Riadiace panel

. Spojovacie vodiče

Hlavné technické vlastnosti:

Displej: Znak 16x02 alebo 20x04
. Podsvietenie: Modré s bielymi znakmi
. Kontrast: Nastaviteľný potenciometrom
. Napájacie napätie: 5V
. Rozhranie: I2C
. I2C adresa: 0x27
. Rozmery: 82 mm x 35 mm x 18 mm

Pripojenie k Arduinu

Modul je vybavený štvorpinovým 2,54 mm konektorom

SCL: sériová hodinová linka (Serial CLock)

S.D.A.: sériová dátová linka (Serial DAta)

VCC: "+" výkon

GND: "-" moc

Piny zodpovedné za rozhranie I2C na doskách Arduino založených na rôznych ovládačoch sa líšia

Pre prácu s týmto modulom je potrebné nainštalovať knižnicu LiquidCrystal_I2C1602V1

Stiahnite si, rozbaľte a vložte do priečinka libraries v priečinku Arduino. Ak bolo IDE Arduino otvorené v čase pridávania knižnice, reštartujte prostredie.

Poďme priamo na náčrt. V tomto príklade vypíšeme štandardný "Ahoj, svet!" a na adresu našej komunity.

príklad kódu programu:

#include #include LiquidCrystal_I2C lcd(0x27,16,2); /* Nastavte adresu a veľkosť zobrazenia. Pri použití LCD I2C modulu s displejom 20x04 nie je potrebné nič meniť v kóde, stačí nastaviť správny rozmer */ neplatné nastaviť() ( lcd.init(); // Inicializácia lcd lcd.backlight(); // Zapnite podsvietenie // Kurzor je na začiatku 1 riadku lcd.print("Ahoj, svet!"); // Zobrazte text lcd.setCursor (0, 1); // Nastavte kurzor na začiatok riadku 2 lcd.print("stránka"); // Výstupný text ) void slučka () { }

Vytvorte si vlastné symboly

Textový výstup sme pretriedili, písmená anglickej abecedy sú pevne zapojené do pamäte ovládača vo vnútri displeja a nie sú s nimi žiadne problémy. Čo však robiť, ak požadovaný symbol nie je v pamäti ovládača?

Žiadny problém, požadovaný symbol je možné vytvoriť ručne. Táto metódaČiastočne limit 7 znakov pomôže vyriešiť problém s výstupom.

Bunka v displejoch, o ktorých uvažujeme, má rozlíšenie 5x8 pixelov. Úloha vytvorenia symbolu spočíva iba v napísaní bitovej masky a umiestnení jednotiek na miesta, kde by bodky mali svietiť a nuly tam, kde by nemali.

V nižšie uvedenom príklade nakreslíme smajlíka.

príklad kódu programu:

//Testované na Arduino IDE 1.0.5 // Pridajte potrebné knižnice#include #include // Bitová maska ​​symbolu úsmevu byte smile = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal_I2C lcd(0x27,20,4); // Nastavte adresu a veľkosť zobrazenia. neplatné nastaviť() ( lcd.init(); // Inicializácia lcd lcd.backlight(); // Zapnite podsvietenie // Vytvorenie symbolu číslo 0 lcd.createChar(1, úsmev); lcd.setCursor(0, 0); // Nastavte kurzor na začiatok 1 riadku lcd.print("\1"); // Zobrazenie smajlíka (číslo znaku 1) - "\1") neplatný slučka () { }

Program na jednoduché vytváranie symbolov

V komentároch poslal člen komunity odkaz na generátor symbolov

Mám to odtiaľto dobrý obchod Chip Resistor je ďalšie zariadenie na štúdium a aplikáciu užitočné zariadenia. Ukázalo sa, že toto zariadenie je určené na ovládanie LCD displeja ovládaného radičom HD44780 v 4-bitovom režime. Na tento účel je na doske nainštalovaný mikroobvod, ktorý je prevodníkom zbernice I2C na paralelný 8-bitový port.

Doska je vedená tak, aby sa dala ihneď pripojiť k LCD displeju. Vstup napája napájanie a I2C linky. Doska je ihneď vybavená pull-up odpormi na linkách SCL a SDA, potenciometrom pre nastavenie kontrastu a napájaním samotného displeja.

Jumper na pravej strane zapína/vypína podsvietenie. Potom, vyzbrojený testerom, bola zostavená nasledujúca tabuľka. Po preštudovaní modulu sa ukázalo, že P3 ovláda podsvietenie. Ak je prepojka nainštalovaná, potom 1 zapne podsvietenie a 0 ho vypne. Po odstránení prepojky je podsvietenie vždy vypnuté. Ďalej bolo rozhodnuté doplniť knižnicu axlib o funkcie pre prácu so zbernicou I2C (softvérová implementácia) a funkcie pre ovládanie čipu PCF8574. Stručne povedané, ako modul funguje. Aby ste mohli vydávať bajt paralelne, musíte poslať adresu mikroobvodu na zbernicu I2C (štandardne je to 0x4E. Adresu môžete zmeniť aj spájkovaním prepojok na doske a zmenou hodnoty troch najmenej významných bitov adresy), potom sa po prijatí ACK odošle dátový bajt. Keď čip odpovie ACK, bajt sa objaví na paralelnom porte čipu. Pre ovládanie LCD displeja som prevzal funkcie z knižnice axlib a mierne ich upravil pre prácu so zbernicou I2C. #include #include #include #include #define ADD 0x4E // Adresa čipu /* LCD Chip RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 Na pripojovacej nohe P3 je podsvietenie. 1 zapnuté, 0 vypnuté */ // Výstupné údaje com |= 0x04; // E na jednotku pcf8574_byte_out(com, ADD); // Výstupné údaje com &= 0xFB; // E na nulu pcf8574_byte_out(com, ADD); // Výstupné údaje) void init(void) ( _delay_ms(30); com(0x30); _delay_us(40); com(0x30); // Prepnutie do 4-bitového režimu _delay_us(40); // Oneskorenie vykonania príkazu com(0x30); // Prepnutie do 4-bitového režimu _delay_us(40); // Oneskorenie vykonania príkazu com(0x20); // Prepnutie do 4-bitového režimu _delay_us(40); // Oneskorenie vykonania príkazu com(0x20); // Nastavenie parametrov com(0x80); // Nastavenie parametrov com(0x00); // Vypnutie displeja com(0x80); // Vypnutie displeja com(0x00); // Vymazanie displeja com(0x10); // Vymazanie displeja com(0x00); com(0x60); // Nastavenie režimu zadávania údajov com(0x00); com(0xCO); // Zapnutie displeja so zvoleným kurzorom) void char_out(BYTE údaje) ( BYTE údaje_h = ((údaje & 0xF0) + 0x09); BYTE údaje_l = ((údaje // Prenos najvýznamnejších 4 bitov údajov_h |= 0x04; pcf8574_byte_out(údaje_h, ADD); // Preneste najdôležitejšie 4 bity // Preneste najdôležitejšie 4 bity // Preneste nízke 4 bity // Preneste nízke 4 bity // Preneste nízke 4 bity) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) ( init(); str_out("ЁPҐBET MҐP!" ); zatiaľ čo(1) ( ) ) Presne o čo tu ide. Najprv pripojíme knižnice pre I2C a pre PCF8574. O I2C som už písal, takže o tom budem pokračovať znova a znova, ale poviem vám, čo je v PCF8574.h. Knižnica obsahuje iba tri funkcie.
BYTE pcf8574_test(BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); return ask; ) Prvá funkcia bola napísaná na kontrolu, či je zariadenie na zbernici. V zásade sa dá použiť na vyhľadávanie akéhokoľvek zariadenia umiestneného na zbernici. Funkcia prevezme adresu požadovaného zariadenia a ak odpovie, vráti nulu. Ak zariadenie s takouto adresou nie je na zbernici, vráti jednu.
BYTE pcf8574_byte_out(BYTE dáta, BYTE pridať) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data); i2c_stop(); return ask; ) Táto funkcia je už prispôsobená čisto pre tento čip. Ako argument je daný bajt, ktorý sa má preniesť na zbernicu a adresa čipu. Funkcia najprv požiada čip podľa adresy a potom odošle bajt. Ak čip prijal bajt a odpovedal ACK, potom funkcia ukončí prácu s čipom a vráti nulu ako úspešné odoslanie bajtu. A v tomto čase mikroobvod odošle tento bajt na svoj paralelný port. V opačnom prípade dostaneme NACK a jeden vrátime, prenos zlyhal.
BYTE pcf8574_str_out(BYTE *data, BYTE stĺpec, BYTE pridať) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i Táto funkcia je vytvorená na experimentovanie. Prijíma ukazovateľ na pole jednobajtových údajov, počet týchto bajtov a adresu čipu. V skutočnosti ide o pokus o prenos všetkých údajov v jednej relácii, a nie v jednom byte na reláciu. Funkcia funguje, ale nie je vhodná pre LCD displej. Teraz sa vráťme k hlavnému programu. Po pripojení knižníc napíšeme adresu mikroobvodu. Ďalej vytvoríme tri funkcie podobné lcd.h. Jediný rozdiel je v princípe prenosu dát.
void com(BYTE com) ( com |= 0x08; // P3 do jednej, aby bolo podsvietenie zapnuté pcf8574_byte_out(com, ADD); // Výstupné údaje com |= 0x04; // E na jednotku pcf8574_byte_out(com, ADD); // Výstupné údaje com &= 0xFB; // E na nulu pcf8574_byte_out(com, ADD); // Výstupné údaje } Táto funkcia iba odosiela príkazy na displej. Tu sa objavil prvý riadok s logickým doplnením príkazu z 0x08. Táto chyba je potrebná kvôli tomu, že bajt prenášame nie priamo do portu LCD displeja, ale cez náš opakovač. To znamená, že ak sme dodali bajt a potom potrebujeme vydať iba jeden bit, priraďte požadovaný bit predchádzajúcemu bajtu a znova ho odošlite na port. To je také trápenie. Sčítanie s 0x08 je potrebné na neustále dodržanie jednotky v tretej číslici. Pamätáte si podsvietenie? Práve tento doplnok zapína podsvietenie. Potom zavoláme funkciu prenosu bajtu na zbernicu. Píše sa o tom vyššie. Potom prenesieme bajt cez zbernicu na čip. Ďalej by ste mali nastaviť E na jeden, čo vlastne robí logické pridanie bajtu s 0x04. Po resetovaní E. Môžete teda odoslať ľubovoľný príkaz na displej iba tak, že samotný príkaz odošlete ako argument. void init(void) ( _delay_ms(30); // Pauza po zapnutí com(0x30); // Prepnutie do 4-bitového režimu _delay_us(40); // Oneskorenie vykonania príkazu com(0x30); // Prepnutie do 4-bitového režimu _delay_us(40); // Oneskorenie vykonania príkazu com(0x30); // Prepnutie do 4-bitového režimu _delay_us(40); // Oneskorenie vykonania príkazu com(0x20); // Prepnutie do 4-bitového režimu _delay_us(40); // Oneskorenie vykonania príkazu com(0x20); // Nastavenie parametrov com(0x80); // Nastavenie parametrov com(0x00); // Vypnutie displeja com(0x80); // Vypnutie displeja com(0x00); // Vymazanie displeja com(0x10); // Vymazanie displeja com(0x00); // Nastavenie režimu zadávania údajov com(0x60); // Nastavenie režimu zadávania údajov com(0x00); // Zapnutie displeja so zvoleným kurzorom com(0xCO); // Zapnutie displeja so zvoleným kurzorom } Táto funkcia iba inicializuje displej. Postupnosť príkazov je prevzatá z údajového listu na LCD displeji. void char_out(BYTE údaje) ( BYTE údaje_h = ((údaje & 0xF0) + 0x09); BYTE údaje_l = ((údaje // Prenos najvýznamnejších 4 bitov údajov_h |= 0x04; pcf8574_byte_out(údaje_h, ADD); // Preneste najdôležitejšie 4 bity data_h &= 0xF9; pcf8574_byte_out(data_h, ADD); // Preneste najdôležitejšie 4 bity pcf8574_byte_out(data_l, ADD); // Preneste nízke 4 bity data_l |= 0x04; pcf8574_byte_out(data_l, ADD); // Preneste nízke 4 bity data_l &= 0xF9; pcf8574_byte_out(data_l, ADD); // Preneste nízke 4 bity } Táto funkcia prenáša údaje na LCD displej. Vykonáva sa rovnakým spôsobom ako príkazy, s výnimkou toho, že bajt sa prenáša najskôr s najvýznamnejším nibble a potom s nízkym bajtom. A zvyšok je rovnaký. void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) No, táto funkcia je čisto na odovzdanie reťazca na displej. Vlastne to nemá nič spoločné s našou témou.

Projekt pre AtmelStudio 6.2

Kompetentní 01.08.15 17:11

Chýba čiarka. Správne: "AHOJ SVET!" A toto zariadenie je určené nielen pre HD44780. Pull-up rezistory sú inštalované na hlavnej strane. Podľa špecifikácie sa údaje zapisujú do ovládača LCD v smere pádu E. Prvá funkcia je teda zjednodušená: void com(BYTE com) ( com |= 0x08; // podsvietenie pcf8574_byte_out(com | 0x04, ADD); / / Dátový výstup pcf8574_byte_out(com , ADD); // E na nulu) A zvyšok môže byť tiež výrazne menej. Napríklad void char_out(BYTE data) bude trvať len dve volania a ešte viac bez ďalších premenných. Inicializácia LCD bola vykonaná v rozpore so špecifikáciami časovania.

Alexey 02.08.15 19:11

Kvôli chýbajúcej čiarke to neovplyvní displej. Toto zariadenie je špeciálne navrhnuté pre displeje s týmto alebo podobným ovládačom. Ale tento mikroobvod je skutočne jednoduchý expandér portov. Súhlasím s E. Sú potrebné ďalšie premenné. Ak funkcii odošlete argument a vykonáte určité akcie s logikou, môžu sa vyskytnúť chyby. Už som sa s tým stretol. Inicializácia sa vykonáva bez porušenia časovania. Dokumentácia hovorí, že medzi príkazmi je pauza 40 µs. Vzhľadom na to, že prenos prebieha cez i2c zbernicu, ktorá je zase softvérová a pomalá, periódy sú vyplnené so záujmom. Ak ešte nie ste príliš leniví, napíšte svoju verziu a pošlite mi ju. zverejním to. V konečnom dôsledku je táto stránka určená pre amatérske publikum a každý, kto chce, môže vyjadriť svoj názor a víziu o živote MK.

Alexey 06.08.15 09:14

Pridané časovanie pri inicializácii displeja, ako uvádza uznávaný „gramotný“

Dmitrij 14. 6. 2016 21:57

Dobrý deň, Alexey. Do generátora kódu môžete pridať knižnicu, ktorá bude pracovať s PCF8574.

Alexey 14.06.2016 22:32

Budem myslieť.))

ruslan 21.12.16 19:54
Alexey 21.12.2016 21:53

Ó áno. Najmä kód v ASMA. Odborníci na Arduino to maximálne ocenia)))

Py.sy.
Aj keď sa nepozeráte na ASM, program je napísaný pre radič PIC. Sú tieto „veľmi“ užitočné informácie pre špecialistov AVR? najmä pre začiatočníkov))) Nemám nič proti PIC, ale dokonca aj ASM PIC a AVR sú odlišné. Pokiaľ ide o detaily fungovania LCD displeja, môžete sa pozrieť))) Pravda, napísal som to aj pod CVAVR, ale všetky príkazy sú rozobrané a roztriedené do políc. Ale v každom prípade sa sami rozhodnite, kde je to napísané jasnejšie))) Autor píše, čitateľ si vyberá.

GeK 1. 4. 2017 12:52

"I2C adresa čipu (v predvolenom nastavení je to 0x4E"

Najdôležitejšie 4 bity adresy sú pevné,
Predpona pre PCF8574 je 0100 a pre PCF8574A je to 0111
Spodné 3 bity závisia od stavu vstupov čipu A2-A0. Štandardne sú všetky 3 prepojky otvorené, adresa čipu má hodnotu 0111111.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0 x 21 0 x 39
// 1 0 1 0x22 0x3A
// 1 0 0 0x23 0x3B
// 0 1 1 0x24 0x3C
// 0 1 0 0x25 0x3D
// 0 0 1 0x26 0x3E
// 0 0 0 0x27 0x3F

Alexey 1.4.2017 14:27

Máš niečo pomiešané.
Výpis z dokumentácie pre mikroobvod

0b01001110 je 0x4E
Takže tu je všetko správne. A ak potrebujete zmeniť adresu, stačí ju zmeniť v Define.

Jurij 14.12.2017 21:26

Dobrý deň! A na prácu s adaptérom pre PCF8574 môžete použiť aj funkčný kód lcdgotoxy a lcdclear.

Alexander 20.5.18 18:14

Dobrý deň! Ako vytlačíte ruský text?

Alexey 20.5.2018 23:04

Ide o domáci displej od MELT. Azbuka je napevno zapísaná v jeho pamäti.

Alexander 21.05.2018 04:55

Dobrý deň! Píšem ako vy v projekte pre AtmelStudio 6.2 "ЁPҐBET MҐP!" vystupuje normálne
a ak napíšete "AHOJ SVET!" vyťahuje všelijaké nezmysly. mám dva
Jedna z možností zobrazenia má azbuku. druhá je čínska.

Alexey 21.05.2018 09:22

Najprv by som napísal testovací program. Iteruje cez celú pamäť a zobrazuje symboly a ich adresy. A potom zisti v čom je problém. Tabuľka znakov sa s najväčšou pravdepodobnosťou nezhoduje s tabuľkou ascii.

Andrej 9/03/18 08:32

Dobrý deň!

Môžete poskytnúť schému zapojenia pre Proteus?

Andrej 9. 3. 2018 10:22

Alebo to nikto nekontroloval v Proteuse?

Andrej 9. 3. 2018 10:56

Prišiel som na main_init

Pavel 30.05.2019 23:35

Zaujímavá vec, adresa displeja je 0x4E a ak je rovnaký displej pripojený k Arduinu, potom je adresa 0x27

Pavel 31.05.2019 11:04

Ďakujem veľmi pekne za vašu prácu! Prehľadal som celý internet a žiadny z uvedených príkladov okrem toho vášho nefungoval. Jediná vec je, že v archíve projektu nie sú uvedené oneskorenia _delay_ vo funkcii inicializácie displeja, a preto to nefunguje

Alexey 6. 1. 2019 9:52

No, toto je skôr ukážkový projekt. Z dobrého dôvodu je potrebné prepísať knižnicu axlib, ale vzhľadom na skutočnosť, že STM32 a STM8 sa pohybujú míľovými krokmi, nemá AVR vôbec zmysel.

Pavel 6.5.2019 12:57

STM nemá obaly DIP, výroba dosiek plošných spojov je náročnejšia. Pre moje projekty je možností AVR veľa, na jeden Atmega 8 sa toho veľa zmestí

Alexey 6.5.2019 15:20

Áno, ale koľko stojí Atmega8 a stm8s003)))

Dmitrij 6. 7. 2019 00:41

Dobrý deň, Alexey.
Prosím, povedzte mi, ako čítať stav portu z pcf8574?
Chcem vyrobiť externú jednotku, 8 GPIO na zbernici i2c - to je všetko.

Dmitrij 6. 7. 2019 17:56

Odpoviem si sám
Funkcia vráti bajt - stav portov mikroobvodu
uint8_t pcf8574_byte_rcv(uint8_t addr)
{
uint8_t ask = ACK;
addr |= 0b01; //ČÍTAŤ
uint8_t data=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

Vrátiť údaje;
}

Pavel 6. 7. 2019 20:37

Koľko to stojí, 150 rubľov, za cenu relé vo všeobecnosti) a ako zapájate dosky pre STM? LUT je nespoľahlivý, CNC router si nie je istý, čo zaberie (neskúšal som to)

displej LCD– častý hosť v projektoch Arduino. Ale v zložitých obvodoch môžeme mať problém s nedostatkom Arduino portov kvôli potrebe pripojiť štít, ktorý má veľa, veľa pinov. Riešením v tejto situácii môže byť I2C/IIC adaptér, ktorý pripája takmer štandardný štít Arduino 1602 k doskám Uno, Nano alebo Mega iba pomocou 4 pinov. V tomto článku sa pozrieme na to, ako môžete pripojiť LCD obrazovku s rozhraním I2C, aké knižnice môžete použiť, napíšeme krátky príklad náčrtu a pozrieme sa na bežné chyby.

Displej z tekutých kryštálov LCD 1602 je dobrou voľbou pre výstup reťazcov znakov v rôznych projektoch. Je to lacné, existujú rôzne úpravy s rôznymi farbami podsvietenia, môžete si jednoducho stiahnuť hotové knižnice pre náčrty Arduino. Hlavnou nevýhodou tejto obrazovky je však skutočnosť, že displej má 16 digitálnych pinov, z ktorých je potrebných minimálne 6. Preto používanie tejto LCD obrazovky bez i2c pridáva vážne obmedzenia pre dosky Arduino Uno alebo Nano. Ak nie je dostatok kontaktov, budete si musieť kúpiť dosku Arduino Mega alebo uložiť kontakty, a to aj pripojením displeja cez i2c.

Stručný popis LCD 1602 pinov

Pozrime sa bližšie na kolíky LCD1602:

Každý z kolíkov má svoj vlastný účel:

  1. uzemnenie GND;
  2. Napájanie 5 V;
  3. Nastavenie kontrastu monitora;
  4. Príkaz, dáta;
  5. Zápis a čítanie údajov;
  6. Povoliť;

7-14. Dátové linky;

  1. Plus podsvietenie;
  2. Mínus podsvietenia.

Špecifikácie displeja:

  • Typ zobrazenia znakov, je možné načítať symboly;
  • LED svetlá;
  • Ovládač HD44780;
  • Napájacie napätie 5V;
  • Formát 16x2 znakov;
  • Rozsah prevádzkových teplôt od -20C do +70C, rozsah skladovacích teplôt od -30C do +80C;
  • Pozorovací uhol 180 stupňov.

Schéma pripojenia LCD k doske Arduino bez i2C

Štandardná schéma pripojenia monitora priamo k mikrokontroléru Arduino bez I2C je nasledovná.

Kvôli veľkému počtu pripojených kontaktov nemusí byť dostatok miesta na pripojenie potrebných prvkov. Použitie I2C znižuje počet vodičov na 4 a obsadené kolíky na 2.

Kde kúpiť LCD obrazovky a štíty pre Arduino

LCD obrazovka 1602 (a verzia 2004) je pomerne populárna, takže ju ľahko nájdete ako v domácich internetových obchodoch, tak aj na zahraničných stránkach. Tu je niekoľko odkazov na najdostupnejšie možnosti:

Modul modrej obrazovky LCD1602+I2C, kompatibilný s Arduino Jednoduchý displej LCD1602 (zelené podsvietenie) lacnejšie ako 80 rubľov Veľká obrazovka LCD2004 s I2C HD44780 pre Arduino (modré a zelené podsvietenie)
1602 displej s IIC adaptérom a modrým podsvietením Ďalšia verzia LCD1602 so spájkovaným I2C modulom Port IIC/I2C/TWI/SPI modul adaptéra pre štít 1602, kompatibilný s Arduino
RGB podsvietený displej! LCD 16×2 + klávesnica +Buzzer Shield pre Arduino Štít pre Arduino s tlačidlami a obrazovkou LCD1602 LCD 1602 LCD displej pre 3D tlačiareň (Smart Controller pre RAMPS 1.4, Text LCD 20×4), modul čítačky kariet SD a MicroSD

Popis protokolu I2C

Pred diskusiou o pripojení displeja k Arduinu cez adaptér i2c si v krátkosti povedzme o samotnom protokole i2C.

I2C/IIC(Inter-Integrated Circuit) je protokol pôvodne vytvorený na komunikáciu integrovaných obvodov v elektronickom zariadení. Vývoj patrí spoločnosti Philips. Protokol i2c je založený na použití 8-bitovej zbernice, ktorá je potrebná na komunikáciu blokov v riadiacej elektronike a adresného systému, vďaka ktorému môžete po rovnakých vodičoch komunikovať s viacerými zariadeniami. Jednoducho prenášame dáta do jedného alebo druhého zariadenia, pričom k dátovým paketom pridávame identifikátor požadovaného prvku.

Najjednoduchší obvod I2C môže obsahovať jedno hlavné zariadenie (najčastejšie mikrokontrolér Arduino) a niekoľko podriadených (napríklad LCD displej). Každé zariadenie má adresu v rozsahu od 7 do 127. V rovnakom obvode by nemali byť dve zariadenia s rovnakou adresou.

Doska Arduino podporuje hardvér i2c. Na pripojenie zariadení pomocou tohto protokolu môžete použiť kolíky A4 a A5.

Prevádzka I2C má niekoľko výhod:

  • Prevádzka vyžaduje len 2 linky - SDA (dátová linka) a SCL (synchronizačná linka).
  • Pripojenie veľkého počtu popredných zariadení.
  • Skrátený čas vývoja.
  • Na ovládanie celej sady zariadení je potrebný iba jeden mikrokontrolér.
  • Možný počet mikroobvodov pripojených na jednu zbernicu je obmedzený len maximálnou kapacitou.
  • Vysoký stupeň bezpečnosti dát vďaka špeciálnemu filtru na potlačenie prepätia zabudovanému v obvodoch.
  • Jednoduchý postup na diagnostiku vznikajúcich porúch a rýchle odladenie porúch.
  • Zbernica je už integrovaná do samotného Arduina, takže nie je potrebné vyvíjať ďalšie rozhranie zbernice.

nedostatky:

  • Na linke je kapacitný limit - 400 pF.
  • Ak je na zbernici niekoľko rôznych zariadení, je ťažké naprogramovať ovládač I2C.
  • Pri veľkom počte zariadení je ťažké izolovať poruchu, ak sa jedno z nich omylom zníži.

i2c modul pre LCD 1602 Arduino

Najrýchlejším a najpohodlnejším spôsobom použitia i2c displeja v Arduine je zakúpenie hotovej obrazovky so vstavanou podporou protokolu. Týchto obrazoviek však nie je príliš veľa a nie sú lacné. Ale už bolo vyrobené obrovské množstvo rôznych štandardných obrazoviek. Preto je dnes najdostupnejšou a najobľúbenejšou možnosťou zakúpenie a použitie samostatného modulu I2C - adaptéra, ktorý vyzerá takto:

Na jednej strane modulu vidíme i2c piny – zem, napájanie a 2 na prenos dát. Na druhom adaptéri vidíme externé napájacie konektory. A samozrejme, doska má veľa kolíkov, pomocou ktorých je modul prispájkovaný k štandardným kolíkom obrazovky.


Výstupy i2c slúžia na pripojenie k Arduino doske. V prípade potreby pripojíme externé napájanie na podsvietenie. So vstavaným trimrom môžeme nastaviť vlastné hodnoty kontrastu J

Na trhu nájdete moduly LCD 1602 s už prispájkovanými adaptérmi, ich použitie je maximálne zjednodušené. Ak ste si zakúpili samostatný adaptér, budete ho musieť najskôr prispájkovať k modulu.

Pripojenie LCD obrazovky k Arduinu cez I2C

Na pripojenie potrebujete samotnú Arduino dosku, displej, breadboard, prepojovacie vodiče a potenciometer.

Ak používate špeciálny samostatný adaptér i2c, musíte ho najskôr prispájkovať k modulu obrazovky. Tam je ťažké urobiť chybu, môžete postupovať podľa tejto schémy.


LCD monitor s podporou i2c je pripojený k doske pomocou štyroch vodičov - dva vodiče pre dáta, dva vodiče pre napájanie.

  • Pin GND sa pripája k GND na doske.
  • Pin VCC je na 5V.
  • SCL sa pripája na kolík A5.
  • SDA je pripojený na pin A.

A to je všetko! Žiadne pavučiny drôtov, ktoré sa dajú veľmi ľahko zamotať. Celú zložitosť implementácie i2C protokolu zároveň môžeme jednoducho zveriť knižniciam.

Knižnice pre prácu s i2c LCD displejom

Na interakciu s Arduinom a LCD 1602 cez zbernicu I2C budete potrebovať aspoň dve knižnice:

  • Knižnica Wire.h pre prácu s I2C je už zahrnutá v štandardnom programe Arduino IDE.
  • Knižnica LiquidCrystal_I2C.h, ktorá obsahuje širokú škálu príkazov na ovládanie monitora cez zbernicu I2C a umožňuje zjednodušiť a skrátiť skicu. Je potrebné dodatočne nainštalovať knižnicu Po pripojení displeja je potrebné dodatočne nainštalovať knižnicu LiquidCrystal_I2C.h

Po pripojení všetkých potrebných knižníc do skice vytvoríme objekt a môžeme využívať všetky jeho funkcie. Pre testovanie si načítajme nasledujúci štandardný vzorový náčrt.

#include #include // Vrátane knižnice //#include // Pripojenie alternatívnej knižnice LiquidCrystal_I2C lcd(0x27,16,2); // Zadajte adresu I2C (najbežnejšiu hodnotu), ako aj parametre obrazovky (v prípade LCD 1602 - 2 riadky po 16 znakov //LiquidCrystal_PCF8574 lcd(0x27); // Možnosť pre knižnicu PCF8574 void setup( ) ( lcd.init (); // Inicializácia displeja lcd.backlight(); // Pripojenie podsvietenia lcd.setCursor(0,0); // Nastavenie kurzora na začiatok prvého riadku lcd.print(" Ahoj"); // Zadanie textu na prvý riadok lcd.setCursor(0,1); // Nastaví kurzor na začiatok druhého riadku lcd.print("ArduinoMaster"); // Napíšte text do druhého riadku ) void loop() ( )

Popis funkcií a metód knižnice LiquidCrystal_I2C:

  • home() a clear() - prvá funkcia umožňuje vrátiť kurzor na začiatok obrazovky, druhá robí to isté, no zároveň vymaže všetko, čo bolo predtým na monitore.
  • write(ch) – umožňuje vytlačiť na obrazovku jeden znak ch.
  • kurzor() a noCursor() – zobrazí/skryje kurzor na obrazovke.
  • blink() a noBlink() – kurzor bliká/nebliká (ak bolo jeho zobrazenie predtým povolené).
  • display() a noDisplay() – umožňuje pripojiť/deaktivovať displej.
  • scrollDisplayLeft() a scrollDisplayRight() – posúva obrazovku o jeden znak doľava/doprava.
  • autoscroll() a noAutoscroll() – umožňuje zapnúť/vypnúť režim automatického rolovania. V tomto režime je každý nový znak napísaný na rovnaké miesto, čím sa premiestňuje to, čo bolo predtým napísané na obrazovke.
  • leftToRight() a rightToLeft() – Nastavenie smeru zobrazovaného textu – zľava doprava alebo sprava doľava.
  • createChar(ch, bitmapa) – vytvorí znak s kódom ch (0 – 7), pomocou poľa bitmapových bitmapových máp na vytvorenie čiernych a bielych bodov.

Alternatívna knižnica pre prácu s i2c displejom

V niektorých prípadoch sa môžu vyskytnúť chyby pri použití špecifikovanej knižnice so zariadeniami vybavenými radičmi PCF8574. V tomto prípade môže byť ako alternatíva navrhnutá knižnica LiquidCrystal_PCF8574.h. Rozširuje LiquidCrystal_I2C, takže by s jeho používaním nemali byť žiadne problémy.

Problémy s pripojením i2c LCD displeja

Ak po odovzdaní náčrtu nevidíte na displeji žiadnu správu, skúste nasledujúce kroky.

Najprv môžete zvýšiť alebo znížiť kontrast monitora. Často znaky jednoducho nie sú viditeľné kvôli kontrastu a režimu podsvietenia.

Ak to nepomôže, skontrolujte, či sú kontakty správne pripojené a či je pripojené napájanie podsvietenia. Ak ste použili samostatný adaptér i2c, znova skontrolujte kvalitu spájkovania kontaktov.

Ďalším častým dôvodom chýbajúceho textu na obrazovke môže byť nesprávna adresa i2c. Najprv skúste zmeniť adresu zariadenia v náčrte z 0x27 0x20 alebo na 0x3F. Rôzni výrobcovia môžu mať naprogramované rôzne predvolené adresy. Ak to nepomôže, môžete spustiť náčrt skenera i2c, ktorý naskenuje všetky pripojené zariadenia a pomocou hrubej sily určí ich adresu. Príklad náčrtu skenera i2c.

Ak obrazovka stále nefunguje, skúste odspájkovať adaptér a pripojiť LCD ako zvyčajne.

Záver

V tomto článku sme sa pozreli na hlavné problémy používania LCD obrazovky v zložitých projektoch Arduino, keď potrebujeme uložiť voľné piny na doske. Jednoduchý a lacný adaptér i2c vám umožní pripojiť 1602 LCD obrazovku, ktorá zaberá iba 2 analógové kolíky. V mnohých situáciách to môže byť veľmi dôležité. Cenou za pohodlie je nutnosť použitia prídavného modulu – prevodníka a knižnice. Podľa nášho názoru to nie je vysoká cena za pohodlie a vrelo odporúčame túto funkciu v projektoch využívať.