Kapcsolatok

Az lcd 1602 i2c nem működik. Az LCM1602 LCD-képernyő csatlakoztatása I2C-vel az Arduino-hoz. I2C eszköz csatlakoztatása Arduinohoz

onnan kerültem ide jó bolt A Chip Resistor egy másik eszköz a tanulmányozáshoz és a hasznos eszközökben való felhasználáshoz. Ez az eszköz kiélezettnek bizonyult az LCD kijelző vezérlésére a HD44780 vezérlő vezérlése alatt, 4 bites módban. Erre a célra egy mikroáramkört telepítenek a kártyára, amely az I2C buszt párhuzamos 8 bites porttá alakítja.

A tábla úgy van elhelyezve, hogy azonnal keresztezhető legyen az LCD kijelzővel. A bemenet tápellátással és I2C vezetékekkel van ellátva. Az alaplapon azonnal felhúzó ellenállások találhatók az SCL és SDA vonalakon, egy potenciométer a kontraszt beállításához és magának a kijelzőnek a tápellátása.

A jobb oldali jumper be-/kikapcsolja a háttérvilágítást. Továbbá tesztelővel felfegyverkezve a következő táblát készítették el. A modul tanulmányozása után kiderült, hogy P3 vezérli a háttérvilágítást. Ha a jumper be van állítva, akkor az 1 bekapcsolja a háttérvilágítást, a 0 pedig kikapcsolja. A jumper eltávolításakor a háttérvilágítás mindig ki van kapcsolva. Továbbá úgy döntöttek, hogy az axlib könyvtárat kiegészítik az I2C busszal való munkavégzéshez (szoftver megvalósítás) és a PCF8574 mikroáramkör vezérléséhez szükséges funkciókkal. Dióhéjban a modul működése. Egy bájt párhuzamos kimenetéhez ehhez el kell küldeni a mikroáramkör címét az I2C buszra (alapértelmezetten 0x4E. A címet úgy is megváltoztathatod, hogy jumpereket forrasztasz a táblára és módosítod a három értékét a cím legkevésbé jelentős bitjei), majd az ACK fogadása után egy adatbájt kerül elküldésre. Miután a mikroáramkör ACK-vel válaszol, egy bájt jelenik meg a mikroáramkör párhuzamos portján. Az LCD-kijelző vezérléséhez az axlib könyvtárból vettem át funkciókat, és kicsit átdolgoztam, hogy működjenek az I2C busszal. #beleértve #beleértve #beleértve #beleértve #define ADD 0x4E // Chip címe / * LCD Chip RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 A háttérvilágítás a P3 lábhoz csatlakozik. 1 be, 0 kikapcsolva * / // Adatkimenet com | = 0x04; // E egységenként pcf8574_byte_out (com, ADD); // Adatkimenet com & = 0xFB; // E-től nulláig pcf8574_byte_out (com, ADD); // Adatkimenet) void init (void) (_delay_ms (30); com (0x30); _delay_us (40); com (0x30); // Váltás 4 bites módra _delay_us (40); // A parancs végrehajtásának késleltetése com (0x30); // Váltás 4 bites módra _delay_us (40); // A parancs végrehajtásának késleltetése com (0x20); // Váltás 4 bites módra _delay_us (40); // A parancs végrehajtásának késleltetése com (0x20); // Paraméterek beállítása com (0x80); // Paraméterek beállítása com (0x00); // Kapcsold ki a kijelzőt com (0x80); // Kapcsold ki a kijelzőt com (0x00); // A kijelző törlése com (0x10); // A kijelző törlése com (0x00); com (0x60); // Az adatbeviteli mód beállítása com (0x00); com (0xC0); // A kijelző bekapcsolása a kiválasztott kurzorral) void char_out (BYTE adatok) (BYTE adat_h = ((adatok & 0xF0) + 0x09); BYTE data_l = ((data // Átvitel magas, 4 bites adat_h | = 0x04; pcf8574_byte_out (adat_h, ADD); // Magas szintű 4 bit átvitele // Magas szintű 4 bit átvitele // A legkisebb jelentőségű 4 bit átvitele // A legkisebb jelentőségű 4 bit átvitele // A legkisebb jelentőségű 4 bit átvitele) void str_out (BYTE * str) (while ((* str)! = "\ 0") (char_out (* str; str ++;)) int main (void) (init (); str_out ("ЁPҐBET MҐP !" ); míg (1) ()) Tulajdonképpen mi folyik itt. Először is csatlakoztatjuk az I2C és a PCF8574 könyvtárait. Az I2C-ről már írtam, így megint nem mondok semmit, de a PCF8574.h-ban elmondom, hogy mit. A könyvtár mindössze három funkciót tartalmaz.
BYTE pcf8574_test (BYTE hozzáadás) (BYTE ask = ACK; add & = 0xFE; i2c_start (); ask = i2c_send_byte (add); i2c_stop (); return ask;) Az első függvényt azért írták, hogy ellenőrizze, van-e eszköz a buszon. Elvileg a buszon bármilyen eszközt lehet vele keresni. A függvény felveszi a keresett eszköz címét, és ha válaszol, akkor nullát ad vissza. Ha egy ilyen címmel rendelkező eszköz nincs a buszon, akkor visszaküld egyet.
BYTE pcf8574_byte_out (BYTE adat, BYTE hozzáadás) (BYTE ask = ACK; add & = 0xFE; i2c_start (); ask = i2c_send_byte (add); if (! Kérdezzen) ask = i2c_send_byte (adat); return ask_stop ) Ez a funkció már tisztán ehhez a mikroáramkörhöz van kiélezve. Argumentumként egy bájtot adunk át neki a buszra való átvitelhez és a mikroáramkör címét. A funkció először kéri a mikroáramkört a címhez, majd küld egy bájtot. Ha a mikroáramkör kapott egy bájtot és ACK-vel válaszolt, akkor a funkció befejezi a mikroáramkörrel való munkát, és sikeres bájtküldésként nullát ad vissza. És a mikroáramkör ekkor ezt a bájtot adja ki a párhuzamos portjára. Ellenkező esetben NACK-t kapunk, és visszaküldünk egyet, az átvitel nem sikerült.
BYTE pcf8574_str_out (BYTE * adat, BYTE col, BYTE hozzáadás) (BYTE ask = ACK; add & = 0xFE; i2c_start (); ask = i2c_send_byte (add); for (BYTE i = 0; i Ez a funkció kísérletezésre készült. Elfogad egy mutatót egybájtos adatok tömbjére, ezen bájtok számát és a mikroáramkör címét. Valójában egy kísérlet az összes adat átvitelére egy munkamenetben, és nem munkamenetenként egy bájtban. A funkció működik, de az LCD-nél nem. Most térjünk vissza a fő programhoz. A könyvtárak csatlakoztatása után regisztráljuk a mikroáramkör címét. Ezután az lcd.h analógiájával három függvényt hozunk létre. Az egyetlen különbség az adatátvitel elvén van.
void com (BYTE com) (com | = 0x08; // P3 az egyikre, hogy a háttérvilágítás be legyen kapcsolva pcf8574_byte_out (com, ADD); // Adatkimenet com | = 0x04; // E egységenként pcf8574_byte_out (com, ADD); // Adatkimenet com & = 0xFB; // E-től nulláig pcf8574_byte_out (com, ADD); // Adatkimenet } Ez a funkció csak parancsokat küld a kijelzőnek. Innentől megjelent az első sor a 0x08 parancs logikai kiegészítésével. Erre a byakára azért van szükség, mert egy bájtot nem közvetlenül az LCD portra továbbítunk, hanem az átjátszónkon keresztül. Vagyis ha megadtunk egy bájtot, és csak egy bitet kell kiadnunk, akkor a deign to az előző bájt hozzárendeli a kívánt bitet és visszaküldi a portra. Itt van egy ilyen probléma. A 0x08-cal való kiegészítés szükséges ahhoz, hogy az egység állandó maradjon a harmadik biten. Emlékszel a háttérvilágításra? Ez a kiegészítés kapcsolja be a háttérvilágítást. Ekkor hívjuk a bájt buszra átvitelének függvényét. Fentebb le van írva róla. Ezután átvisszük a bájtot a buszon keresztül a mikroáramkörbe. Ezután állítsa az E-t 1-re, ami valójában egy bájt 0x04-es logikai összeadása. Az E. alaphelyzetbe állítása után tehát bármilyen parancsot csak úgy küldhet a képernyőre, ha magát a parancsot argumentumként adja át. void init (void) (_delay_ms (30); // Bekapcsolás után szünet com (0x30); // Váltás 4 bites módra _delay_us (40); // A parancs végrehajtásának késleltetése com (0x30); // Váltás 4 bites módra _delay_us (40); // A parancs végrehajtásának késleltetése com (0x30); // Váltás 4 bites módra _delay_us (40); // A parancs végrehajtásának késleltetése com (0x20); // Váltás 4 bites módra _delay_us (40); // A parancs végrehajtásának késleltetése com (0x20); // Paraméterek beállítása com (0x80); // Paraméterek beállítása com (0x00); // Kapcsold ki a kijelzőt com (0x80); // Kapcsold ki a kijelzőt com (0x00); // A kijelző törlése com (0x10); // A kijelző törlése com (0x00); // Az adatbeviteli mód beállítása com (0x60); // Az adatbeviteli mód beállítása com (0x00); // A kijelző bekapcsolása a kiválasztott kurzorral com (0xC0); // A kijelző bekapcsolása a kiválasztott kurzorral } Ez a funkció csak a kijelző inicializálásával foglalkozik. A parancsok sorrendje az LCD-n lévő adatlapról származik. void char_out (BYTE adatok) (BYTE adat_h = ((adatok & 0xF0) + 0x09); BYTE data_l = ((data // Átvitel magas 4 bites adat_h | = 0x04; pcf8574_byte_out (adat_h, ADD); // Magas szintű 4 bit átvitele adat_h & = 0xF9; pcf8574_byte_out (adat_h, HOZZÁADÁS); // Magas szintű 4 bit átvitele pcf8574_byte_out (data_l, ADD); // A legkisebb jelentőségű 4 bit átvitele adat_l | = 0x04; pcf8574_byte_out (data_l, ADD); // A legkisebb jelentőségű 4 bit átvitele adat_l & = 0xF9; pcf8574_byte_out (data_l, ADD); // A legkisebb jelentőségű 4 bit átvitele } Ez a funkció adatokat továbbít az LCD-re. Ugyanúgy hajtódik végre, mint a parancsok, azzal a különbséggel, hogy egy bájt átvitelét először a magasabb rendű nibble hajtja végre, majd az alacsonyabb rendű. A többi ugyanaz. void str_out (BYTE * str) (while ((* str)! = "\ 0") (char_out (* str); str ++;)) Nos, ez a funkció pusztán egy karakterlánc megjelenítésére szolgál. Valójában ennek semmi köze a témánkhoz.

Projekt az AtmelStudio 6.2-hez

Literate 08/01/15 17:11

A vessző hiányzik. Így van: "HELLO WORLD!" És ez a készülék nem csak HD44780-ra van kihegyezve. A felhúzó ellenállások a master oldaláról vannak felszerelve. A specifikáció szerint az LCD vezérlőre történő adatírás lemegy E. Ezért az első funkció leegyszerűsödik: void com (BYTE com) (com | = 0x08; // háttérvilágítás pcf8574_byte_out (com | 0x04, ADD); // Adatkimenet pcf8574_byte_out (com , ADD); // E-től nulláig) Igen, és a többi is lényegesen kevesebb lehet. Például a void char_out (BYTE-adatok) csak két hívásból történik, és még inkább további változók nélkül. Az LCD inicializálása az időzítési előírások megsértésével történt.

Alexey 08/02/15 19:11

A vessző hiánya miatt a kijelzőt ez nem érinti. Ezt az eszközt kifejezetten az ilyen vagy hasonló vezérlővel rendelkező kijelzőkre szabták. De a mikroáramkör valójában egy egyszerű portbővítő. E-vel kapcsolatban egyetértek. További változókra van szükség. Ha argumentumot ad át egy függvénynek, és végrehajt valamilyen logikai műveletet, hibák léphetnek fel. Ezzel már szembesült. Az inicializálás a taimens megsértése nélkül történik. A dokumentáció szerint a parancsok között 40 μs szünet van. Tekintettel arra, hogy az i2c buszon történik az átvitel, ami viszont szoftveres és lassú, a periódusok bőven teljesülnek. Ha ennek ellenére nem vagy lusta, akkor írja meg a verzióját, és küldje el nekem. postázom. Végeredményben ez az oldal az amatőr közönségnek szól, és mindenki, aki akar, elmondhatja véleményét, elképzelését az MK életéről.

Alexey 08/06/15 09:14

Taingok hozzáadva a kijelző inicializálása során a tisztelt "Literate" megjegyzésének megfelelően

Dmitrij 2016. 06. 14. 21:57-kor

Hello Alexey! A kódgenerátorhoz hozzáadhat egy könyvtárat a PCF8574 használatához.

Alexey 2016.06.14. 22:32

Gondolkozni fogok rajta.))

ruslan 2016.12.21. 19:54
Alekszej 2016.12.21. 21:53

Ó igen. Főleg az ASME kódot. Az Arduinok teljes mértékben értékelni fogják)))

Py.sy.
Ha nem is nézed az ACM-et, ott a PIC vezérlőre van írva a program. Ez "nagyon" hasznos információ az AVR-ekhez? főleg kezdőknek))) A PIC ellen nincs semmim, de még a PIC és az AVR ACM is más. És az LCD-kijelző részleteiről meg lehet nézni))) Igaz, még mindig a CVAVR alatt írtam, de az összes parancsot szétszerelték és a polcokon kirakják. De mindenesetre döntse el maga, hol van leírva érthetőbben))) A szerző ír, az olvasó választ.

GeK 01/04/17 12:52 PM

"A mikroáramkör I2C címe (alapértelmezés szerint 0x4E")

A cím legjelentősebb 4 bitje rögzített.
A PCF8574 előtagja 0100, a PCF8574A esetében pedig - 0111
A legkisebb jelentőségű 3 bit az A2-A0 mikroáramkör bemeneteinek állapotától függ. Alapértelmezés szerint mind a 3 jumper nyitva van, a mikroáramkör címe 0111111.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 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 01/04/17 14:27

Valamit összezavartál.
Kivonat a mikroáramkör dokumentációjából

A 0b01001110 a 0x4E
Tehát itt minden helyes. És ha módosítania kell a címet, akkor csak a tervezésben kell megváltoztatnia.

Jurij 2017.12.14. 21:26

Jó nap! Az lcdgotoxy és lcdclear függvényt is kódolhatja, hogy működjön együtt a PCF8574 adapterrel.

Sándor 2018.05.20 18:14

Jó nap! hogyan jeleníti meg az orosz szöveget.

Alexey 2018.05.20. 23:04

Ez a MELT cég hazai kijelzője. A cirill ábécé be van kötve a memóriájába.

Sándor 18.05.21 04:55

Jó nap! Úgy írom, ahogyan az AtmelStudio 6.2 projektjében, "ЁPҐBET MҐP!" akkor a kimenet rendben van
és ha azt írod, hogy "HELLO WORLD!" minden hülyeséget megjelenít. nekem kettő van
az egyik kijelző cirill védelemmel rendelkezik. második kínai.

Alexey 05/21/18 09:22

Először tesztprogramot írnék. Az összes memória felsorolása szimbólumok és címeik megjelenítésével. És csak utána derítsd ki, mi a probléma. Valószínűleg a szimbólumtábla nem egyezik meg az ascii táblával.

Andrey 09/03/18 08:32

Jó napot!

Nem tudnál vázlatot dobni Proteushoz?

Andrey 09/03/18 10:22

Vagy senki sem jelentkezett be a Proteuse-ba?

Andrey 09/03/18 10:56

Értve a main_init

Pavel 2019.05.30. 23:35

Érdekes dolog, a kijelző címe 0x4E, és ha ugyanaz a kijelző csatlakozik az arduinka-hoz, akkor a cím 0x27

Pavel 2019.05.31. 11:04

Nagyon szépen köszönöm a munkádat! Az egész internetet feltúrtam, a tiéd kivételével egyik példa sem működött. Az egyetlen dolog, hogy a _delay_ késleltetések nincsenek beírva a projektarchívumba a megjelenítés inicializálási funkciójában, és ennek megfelelően nem működik

Alexey 06/01/19 09:52

Nos, ez inkább egy demóprojekt. Jó okkal át kell írni az axlib könyvtárat, de tekintettel arra, hogy az STM32 és az STM8 ugrásszerűen mozog, nincs értelme az AVR-nek.

Pavel 06/05/19 12:57

Az STM-nek nincsenek DIP-csomagjai, nehezebb nyomtatott áramköri lapokat készíteni. Az én projektjeimhez az AVR képességek margóval elégek, egy Atmega 8-on sok is elfér

Alexey 06/05/19 15:20

Igen, de mennyibe kerül az Atmega8 és az stm8s003)))

Dmitrij 06/07/19 00:41

Hello Alexey.
Kérem, mondja meg, hogyan kell kiolvasni a pcf8574 portállapotát?
Szeretnék egy külső blokkot csinálni, 8 GPIO-t az i2c buszon - ez magát.

Dmitrij 06/07/19 17:56

válaszolok magamnak
A függvény egy bájtot ad vissza - a mikroáramköri portok állapotát
uint8_t pcf8574_byte_rcv (uint8_t addr)
{
uint8_t ask = ACK;
addr | = 0b01; // OLVAS
uint8_t adat = 0;
i2c_start ();
ask = i2c_send_byte (addr);
if (! ask) data = i2c_read_byte (NACK);
i2c_stop ();

Adatok visszaküldése;
}

Pavel 06/07/19 20:37

Mennyibe kerül, 150 rubel, általában egy relé árán), de hogyan fektesd le az STM tábláit? A LUT megbízhatatlan, a CNC router nem tudja mit vegyen (nem próbáltam)

  • Az FC-113 modul a PCF8574T mikroáramkörre épül, amely egy 8 bites shift regiszter - I / O bővítő az I2C soros buszhoz. Az ábrán a mikroáramkört DD1-nek jelöltük.
  • Az R1 egy vágóellenállás az LCD kontrasztjának beállításához.
  • A J1 jumper a kijelző háttérvilágításának bekapcsolására szolgál.
  • Az 1…16 érintkezők a modulnak az LCD kijelző érintkezőihez való csatlakoztatására szolgálnak.
  • Az I2C eszköz címének megváltoztatásához A1 ... A3 érintkezőfelületek szükségesek. A megfelelő jumperek forrasztásával megváltoztathatja az eszköz címét. A táblázat a címek és a jumperek megfelelését mutatja: "0" a szakadt áramkörnek, "1" - a telepített jumpernek felel meg. Alapértelmezés szerint mind a 3 jumper nyitva van, és az eszköz címe is 0x27.

2 LCD bekötési rajz az Arduino-hoz I2C protokollon keresztül

A modul alapkivitelben az Arduino-hoz csatlakozik az I2C buszhoz: a modul SDA tűje az A4 analóg porthoz, az SCL láb az Arduino analóg A5 portjához csatlakozik. A modult +5 V táplálja az Arduino. Maga a modul 1...16 érintkezőkkel van összekötve az LCD megfelelő 1...16 érintkezőivel.


3 Könyvtár a munkához I2C protokollon keresztül

Most szükségünk van egy könyvtárra, hogy az LCD-kkel az I2C interfészen keresztül dolgozhassunk. Használhatja például ezt (link a "Mintakód és könyvtár letöltése" sorban).

Letöltött archívum LiquidCrystal_I2Cv1-1.rar csomagolja ki egy mappába \ könyvtárak \ amely az Arduino IDE könyvtárában található.

A könyvtár az LCD képernyők szabványos funkcióit támogatja:

FunkcióIdőpont egyeztetés
Folyékony kristály () létrehoz egy LiquidCrystal típusú változót, és elfogadja a kijelző csatlakozási paramétereit (pin számokat);
kezdődik () LCD kijelző inicializálása, paraméterek beállítása (sorok és szimbólumok száma);
egyértelmű () a képernyő törlése és a kurzor visszaállítása a kiindulási helyzetbe;
itthon () vissza a kurzort a kiinduló helyzetbe;
kurzor beállítása () a kurzor beállítása egy adott pozícióba;
ír () karaktert jelenít meg az LCD képernyőn;
nyomtatás () szöveget jelenít meg az LCD képernyőn;
kurzor () mutatja a kurzort, azaz. aláhúzás a következő karakter helye alatt;
nincs kurzor () elrejti a kurzort;
pislogás () villogó kurzor;
noBlink () villogás megszüntetése;
noDisplay () kapcsolja ki a kijelzőt az összes megjelenített információ mentése közben;
kijelző () a kijelző bekapcsolása az összes megjelenített információ mentése közben;
scrollDisplayLeft () a kijelző tartalmának görgetése 1 pozícióval balra;
scrollDisplayRight () a kijelző tartalmának görgetése 1 pozícióval jobbra;
automatikus görgetés () automatikus görgetés engedélyezése;
nincs automatikus görgetés () az automatikus görgetés kikapcsolása;
balról jobbra () beállítja a szöveg irányát balról jobbra;
jobbról balra () a szöveg iránya jobbról balra;
CreateChar () egyéni szimbólumot hoz létre az LCD képernyő számára.

4 Vázlat a szövegkiadáshoz az LCD képernyőn az I2C buszon keresztül

Nyissuk meg a mintát: LiquidCrystal_I2C CustomChars mintafájlés csináld újra egy kicsit. Jelentsünk meg egy üzenetet, aminek a végén egy villogó szimbólum lesz. A vázlat minden árnyalatát a kódhoz fűzött megjegyzésekben kommentálják.

#beleértve // tartalmazza a Wire könyvtárat #include // az LCD könyvtár csatlakoztatása #define printByte (args) írás (args); // uint8_t szív = (0x0,0xa, 0x1f, 0x1f, 0xe, 0x4,0x0); // a "szív" szimbólum bitmaszkja LiquidCrystal_I2C lcd (0x27, 16, 2); // Állítsa be a 0x27-es címet a 16x2-es LCD-kijelzőhöz érvénytelen beállítás () ( lcd.init (); // az LCD inicializálása lcd.backlight (); // kijelző háttérvilágításának engedélyezése lcd.createChar (3, szív); // szív szimbólum létrehozása a memóriahelyen 3 lcd.home (); // helyezzük a kurzort a bal felső sarokba, a (0,0) lcd. pozícióba! "); // szövegsor nyomtatása lcd.setCursor (0, 1); // mozgassa a kurzort a 2. sorba, karakter 1 lcd.print ( "i"); // az üzenet kinyomtatása a 2. sorban lcd.printByte (3); // a 3. cellában található szív szimbólum kinyomtatása lcd.print ("Arduino"); } üres hurok () (// az utolsó karakter villogása lcd.setCursor (13, 1); // a kurzor mozgatása a 2. sor 1. karakterére lcd.print ("\ t"); késleltetés (500); lcd.setCursor (13, 1); // a kurzor mozgatása a 2. sor 1. karakterére lcd.print (""); késleltetés (500); }

Egyébként a parancs által írt karakterek lcd.createChar (); a kikapcsolás után is a kijelző memóriájában marad. az 1602-es kijelző ROM-jába íródnak.

5 Saját szimbólumok létrehozása LCD-hez

Nézzük meg közelebbről az LCD-képernyők saját szimbólumainak létrehozásának kérdését. Minden karakter a képernyőn 35 pontból áll: 5 széles és 7 magas (+1 fenntartott aláhúzás). A fenti vázlat 6. sorában beállítunk egy 7 számból álló tömböt: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0)... Hexadecimális számok konvertálása binárissá: {00000, 01010, 11111, 11111, 01110, 00100, 00000} ... Ezek a számok nem mások, mint bitmaszkok a karakter mind a 7 sorához, ahol a "0" világos pontot, az "1" pedig a sötét pontot jelöl. Például egy bitmaszkként megadott szívszimbólum jelenik meg a képernyőn, ahogy az ábrán látható.

6 LCD vezérlés az I2C buszon

Töltse fel a vázlatot Arduino-ba. A képernyőn megjelenik az általunk megadott felirat, a végén villogó kurzorral.


7 Mi van mögötte I2C busz

Bónuszként vegye figyelembe az LCD-n az "A", "B" és "C" latin karakterek kimenetének időzítési diagramját. Ezek a karakterek a kijelző ROM-ban vannak, és a képernyőn úgy jelennek meg, hogy egyszerűen átadják a címüket a kijelzőnek. A diagramot a kijelző RS, RW, E, D4, D5, D6 és D7 tűiből vettük, azaz. az FC-113 "I2C párhuzamos busz" átalakító után. Kijelenthetjük, hogy egy kicsit mélyebbre süllyedünk a „vasban”.


Az "A", "B" és "C" latin karakterek LCD-kijelzőn történő megjelenítésének időzítési diagramja 1602

Az ábra azt mutatja, hogy a megjelenítő ROM-ban elérhető karakterek (lásd az adatlap 11. oldalát, link lent) két nibble-ben kerülnek átvitelre, amelyek közül az első a táblázat oszlopának számát, a második pedig a sorszámot határozza meg. Ebben az esetben az adatok a vonalon lévő jel szélén „reteszelve” vannak E(Engedélyezés) és a sor Rs(Register select, register select) logikai állapotban van, ami adatátvitelt jelent. Az RS sor alacsony állapota az utasítások továbbítását jelenti, amit minden karakter átvitele előtt látunk. Ebben az esetben az LCD-kijelző pozíciójába (0, 0) a kocsi visszatérés utasításkódja kerül továbbításra, amely a kijelző műszaki leírásának tanulmányozásával is megtudható.

És még egy példa. Ez az időzítési táblázat a Szív szimbólum megjelenítését mutatja az LCD-n.


Ismét az első két impulzus Engedélyezze kövesse az utasításokat Itthon ()(0000 0010 2) - a kocsi visszatérése a (0; 0) pozícióba, a második kettő pedig a 3. memóriacellában tárolt LCD-kijelző 10 (0000 0011 2) szimbólum "szív" (utasítás) lcd.createChar (3, szív); vázlat).

Ez a cikk bemutatja, hogyan használhat I2C interfész modult egy LCD-kijelző (2x16 / 20x4) vezérlésére Arduino segítségével. Ez a modul lehetővé teszi a használt vezérlő érintkezők számának csökkentését, 8 vagy 4 bites kapcsolat helyett csak 2 láb (SDA és SCL) szükséges.

Műszaki adatok

Kijelző támogatás: LCD 16 × 02/20 × 04
Opcionális: kontraszt beállítás
Tápfeszültség. 5B
Interfész: I2C
Méretek: 54mm x 19mm x 15mm

Általános információk az I2C interfész modulról

Mivel az Arduino vezérlők érintkezőinek száma korlátozott, és a különböző érzékelők, modulok használatakor gyakran kimerülnek, szükségessé válik a mentésük, ezekre az esetekre fejlesztették ki ezt a modult, melynek segítségével két érintkezőn keresztül valósítható meg az átvitel (SDA és SCL).

Most egy kicsit magáról a modulról, a PCF8574T mikroáramkörre épül. Az SDA és SCL vonalak felhúzásához R8 (4,7 kOhm) és R9 (4,7 kOhm) ellenállások szükségesek, ideális esetben, ha két vagy több eszközt csatlakoztatunk az I2C buszon keresztül, csak egy eszközön kell felhúzást használni, később I. megírom miért. A táblán három jumper található (a diagram azt mutatja, hogy az A0, A1, A2 vonalakat az R4, R5, R6 ellenállásokon keresztül áramra húzzák), ezek szükségesek az eszköz címzésének megváltoztatásához, összesen 8 lehetőség van . A címzés megváltoztatásával a PCF8574T mikroáramkörrel az IC2 buszon keresztül akár nyolc eszközt is csatlakoztathatunk, a címlehetőségek az ábrán láthatók (alapértelmezésben az eszköz címe 0x27). A modul egy R11 potenciométerrel is fel van szerelve, melynek segítségével az LCD kijelző kontrasztja módosítható.

A csatlakozáshoz a modul három érintkezőcsoporttal rendelkezik:

Első csoport:
SCL: Soros óra
SDA: adatvonal (Serial Dft)
VCC: "+" teljesítmény
GND: "-" teljesítmény

Második csoport:
VSS: "-" tápegység
VDD: "+" tápegység
VO: Kontraszt szabályozó tű
RS: Regisztráció kiválasztása
RW: Olvasás / Írás (írási mód, ha a földre van csatlakoztatva)
E: Engedélyezés (leeső villogó)
DB0-DB3: Az interfész alacsony rendű bitjei
DB4-DB7: Az interfész legjelentősebb bitjei
V: "+" háttérvilágítás teljesítménye
K: "-" háttérvilágítás teljesítménye

Harmadik csoport: (alapértelmezetten telepített jumper)
VCC:
A LCD-ről:

Csatlakozás Arduinohoz

Szükséges adatok:
Arduino UNO R3 x 1db
LCD kijelző 1602A (2 × 16, 5V, kék) x 1 db.
Interfész modul I2C, IIC, TWI LCD-hez x 1 db.
DuPont huzal, 2,54 mm, 20 cm, F-M (nőtől férfiig) x 1
USB 2.0 A-B kábel x 1db

Kapcsolat:
Először is az I2C modult forrasztjuk az LCD kijelzőre, majd az Arduino UNO-hoz kell csatlakoztatni a kijelzőt. Ehhez DuPont huzalozást fogunk használni, az alábbi táblázat szerint csatlakoztatjuk.

Az érthetőség kedvéért adok még egy diagramot.

Ehhez a kísérlethez le kell töltenie és telepítenie kell a "LiquidCrystal_I2C" könyvtárat. Ezután másolja ki és illessze be ezt a mintakódot az Arduino IDE ablakába, és töltse fel a vezérlőre.

/ * Arduino IDE 1.6.11-en tesztelve Teszt dátuma 2016.09.15. * / #include #beleértve LiquidCrystal_I2C lcd (0x27,16,2); // Állítsa be a kijelző címét és méretét void setup () (lcd.init (); // lcd lcd.backlight inicializálása (); // A háttérvilágítás bekapcsolása lcd.setCursor (0,0); // Állítsa be a kurzor az 1. sor elejére lcd .print ("Hello, world"); // Az lcd.setCursor szöveg megjelenítése (0,1); // Állítsa a kurzort a 2. sor elejére lcd.print ("www. site"); // A szöveg megjelenítése) void loop ( ) ()

Arduino IDE 1.6.11-en tesztelve

Teszt időpontja 2016.09.15

#beleértve

#beleértve

LiquidCrystal_I2C lcd (0x27, 16, 2); // A kijelző címének és méretének beállítása

érvénytelen beállítás ()

lcd. benne (); // Lcd inicializálása

lcd. háttérvilágítás (); // Kapcsolja be a háttérvilágítást

lcd. print ("Hello, world"); // Jelenítse meg a szöveget

lcd. nyomtatás ("www.oldal"); // Jelenítse meg a szöveget

üres hurok ()

Ha mindent helyesen csinált, de nincsenek szimbólumok a kijelzőn, próbálja meg növelni a kontrasztot a potenciométerrel.


Linkek
Könyvtár letöltése
Chip dokumentáció

Ez a cikk bemutatja, hogyan használhat I2C interfész modult egy LCD-kijelző (2x16 / 20x4) vezérlésére Arduino segítségével. Ez a modul lehetővé teszi a használt vezérlő érintkezők számának csökkentését, 8 vagy 4 bites kapcsolat helyett csak 2 láb (SDA és SCL) szükséges.

Műszaki adatok

Kijelző támogatás: LCD 16 × 02/20 × 04
Opcionális: kontraszt beállítás
Tápfeszültség. 5B
Interfész: I2C
Méretek: 54mm x 19mm x 15mm

Általános információk az I2C interfész modulról

Mivel az Arduino vezérlők érintkezőinek száma korlátozott, és a különböző érzékelők, modulok használatakor gyakran kimerülnek, szükségessé válik a mentésük, ezekre az esetekre fejlesztették ki ezt a modult, melynek segítségével két érintkezőn keresztül valósítható meg az átvitel (SDA és SCL).

Most egy kicsit magáról a modulról, a PCF8574T mikroáramkörre épül. Az SDA és SCL vonalak felhúzásához R8 (4,7 kOhm) és R9 (4,7 kOhm) ellenállások szükségesek, ideális esetben, ha két vagy több eszközt csatlakoztatunk az I2C buszon keresztül, csak egy eszközön kell felhúzást használni, később I. megírom miért. A táblán három jumper található (a diagram azt mutatja, hogy az A0, A1, A2 vonalakat az R4, R5, R6 ellenállásokon keresztül áramra húzzák), ezek szükségesek az eszköz címzésének megváltoztatásához, összesen 8 lehetőség van . A címzés megváltoztatásával a PCF8574T mikroáramkörrel az IC2 buszon keresztül akár nyolc eszközt is csatlakoztathatunk, a címlehetőségek az ábrán láthatók (alapértelmezésben az eszköz címe 0x27). A modul egy R11 potenciométerrel is fel van szerelve, melynek segítségével az LCD kijelző kontrasztja módosítható.

A csatlakozáshoz a modul három érintkezőcsoporttal rendelkezik:

Első csoport:
SCL: Soros óra
SDA: adatvonal (Serial Dft)
VCC: "+" teljesítmény
GND: "-" teljesítmény

Második csoport:
VSS: "-" tápegység
VDD: "+" tápegység
VO: Kontraszt szabályozó tű
RS: Regisztráció kiválasztása
RW: Olvasás / Írás (írási mód, ha a földre van csatlakoztatva)
E: Engedélyezés (leeső villogó)
DB0-DB3: Az interfész alacsony rendű bitjei
DB4-DB7: Az interfész legjelentősebb bitjei
V: "+" háttérvilágítás teljesítménye
K: "-" háttérvilágítás teljesítménye

Harmadik csoport: (alapértelmezetten telepített jumper)
VCC:
A LCD-ről:

Csatlakozás Arduinohoz

Szükséges adatok:
Arduino UNO R3 x 1db
LCD kijelző 1602A (2 × 16, 5V, kék) x 1 db.
Interfész modul I2C, IIC, TWI LCD-hez x 1 db.
DuPont huzal, 2,54 mm, 20 cm, F-M (nőtől férfiig) x 1
USB 2.0 A-B kábel x 1db

Kapcsolat:
Először is az I2C modult forrasztjuk az LCD kijelzőre, majd az Arduino UNO-hoz kell csatlakoztatni a kijelzőt. Ehhez DuPont huzalozást fogunk használni, az alábbi táblázat szerint csatlakoztatjuk.

Az érthetőség kedvéért adok még egy diagramot.

Ehhez a kísérlethez le kell töltenie és telepítenie kell a "LiquidCrystal_I2C" könyvtárat. Ezután másolja ki és illessze be ezt a mintakódot az Arduino IDE ablakába, és töltse fel a vezérlőre.

/ * Arduino IDE 1.6.11-en tesztelve Teszt dátuma 2016.09.15. * / #include #beleértve LiquidCrystal_I2C lcd (0x27,16,2); // Állítsa be a kijelző címét és méretét void setup () (lcd.init (); // lcd lcd.backlight inicializálása (); // A háttérvilágítás bekapcsolása lcd.setCursor (0,0); // Állítsa be a kurzor az 1. sor elejére lcd .print ("Hello, world"); // Az lcd.setCursor szöveg megjelenítése (0,1); // Állítsa a kurzort a 2. sor elejére lcd.print ("www. robotchip.ru"); // A szöveg megjelenítése) void loop () ()

Arduino IDE 1.6.11-en tesztelve

Teszt időpontja 2016.09.15

#beleértve

#beleértve

LiquidCrystal_I2C lcd (0x27, 16, 2); // A kijelző címének és méretének beállítása

érvénytelen beállítás ()

lcd. benne (); // Lcd inicializálása

lcd. háttérvilágítás (); // Kapcsolja be a háttérvilágítást

lcd. print ("Hello, world"); // Jelenítse meg a szöveget

lcd. nyomtatás ("www.robotchip.ru"); // Jelenítse meg a szöveget

üres hurok ()

Töltse le a programot

Ha mindent helyesen csinált, de nincsenek szimbólumok a kijelzőn, próbálja meg növelni a kontrasztot a potenciométerrel.


Linkek
Töltse le a LiquidCrystal_I2C könyvtárat
Chip dokumentáció

Az LCD I2C modul lehetővé teszi karakteres kijelző csatlakoztatását az Arduino kártyához mindössze két jelvezetékkel.

Felhasznált alkatrészek (Kínában vásárolható):

... Vezérlőtábla

... Csatlakozó vezetékek

Főbb műszaki jellemzők:

Kijelző: 16x02 vagy 20x04 karakter
... Háttérvilágítás: kék, fehér karakterekkel
... Kontraszt: Potenciométerrel állítható
... Tápfeszültség: 5V
... Interfész: I2C
... I2C cím: 0x27
... Méretek: 82mm x 35mm x 18mm

Csatlakozás Arduinohoz

A modul négy tűs 2,54 mm-es csatlakozóval van felszerelve

SCL: Soros óra

SDA: soros adatvonal (Serial DAta)

VCC: "+" tápegység

GND: "-" tápegység

A különböző vezérlőkön alapuló Arduino kártyákon az I2C interfészért felelős érintkezők eltérőek

A modul használatához telepítenie kell a LiquidCrystal_I2C1602V1 könyvtárat

Töltse le, csomagolja ki és töltse fel az Arduino mappában található könyvtárak mappába. Ha a könyvtár hozzáadásakor az Arduino IDE nyitva volt, indítsa újra a környezetet.

Menjünk közvetlenül a vázlathoz. Ebben a példában a szabványos "Hello, world!" és közösségünk címére.

példa programkód:

#beleértve #beleértve LiquidCrystal_I2C lcd (0x27,16,2); / * Állítsa be a kijelző címét és méretét. 20x04-es kijelzővel rendelkező LCD I2C modul használatakor a kódban semmit sem kell módosítani, csak be kell állítani a megfelelő méretet * /üres beállít() (lcd.init (); // Lcd inicializálása lcd.háttérvilágítás (); // Kapcsolja be a háttérvilágítást // A kurzor az 1. sor elején van lcd.print ("Helló, világ!"); // Az lcd.setCursor szöveg megjelenítése (0, 1); // Állítsa a kurzort a 2. sor elejére lcd.print ("webhely"); // A szöveg megjelenítése) void hurok () { }

Saját szimbólumok létrehozása

A szövegkimenetet kitaláltuk, az angol ábécé betűit a kijelzőn belül a vezérlő memóriájába varrjuk és nincs velük probléma. De mi a teendő, ha a szükséges szimbólum nincs a vezérlő memóriájában?

Nem számít, a szükséges szimbólum manuálisan elkészíthető. Ez a módszer részben, 7 karakterre korlátozódik, segít megoldani a kimeneti problémát.

Az általunk vizsgált kijelzők cellája 5x8 pixel felbontású. A szimbólum létrehozásának feladata csak annyi, hogy írjunk egy bitmaszkot, és helyezzünk el egyet olyan helyeken, ahol pontok és nullák világítanak, ahol nem.

Az alábbi példában rajzoljunk mosolygós arcot.

példa programkód:

// Arduino IDE 1.0.5-ön tesztelve // Adja hozzá a szükséges könyvtárakat#beleértve #beleértve // A mosolyszimbólum bitmaszkja bájt mosoly = (B00010, B00001, B11001, B00001, B11001, B00001, B00010,); LiquidCrystal_I2C lcd (0x27,20,4); // Állítsa be a kijelző címét és méretét.üres beállít() (lcd.init (); // Lcd inicializálása lcd.háttérvilágítás (); // Kapcsolja be a háttérvilágítást // 0. szimbólum létrehozása lcd.createChar (1, mosoly); lcd.setCursor (0, 0); // Állítsa a kurzort az 1. sor elejére lcd.print ("\ 1"); // A hangulatjel megjelenítése (1-es karakter) - "\ 1") érvénytelen hurok () { }

Program a szimbólumok egyszerű létrehozásához

A kommentekben a közösség egyik tagja bedobott egy linket a szimbólumgenerátorra



Tetszett a cikk? Oszd meg