Arduino i2c -väylän kirjastot. I2C-laitteen yhdistäminen Arduinoon

Päätin tehdä tekstipaneeli operaattori (HMI) ja liitä se "neliön" I2C-väylän kautta Arduinoon. Tätä varten kehitin 5-painikkeen näppäimistön, joka perustuu PCF8574P-siruun.

PCF8574P on portin laajennus, DIP-paketti, toimii I2C-väylällä. Ostin erän kahta tällaista mikropiiriä hintaan 0,94 dollaria ilmainen toimitus Kiinasta, joten yksi kappale maksaa 0,47 dollaria. Osto on kannattava, koska paikallisissa myymälöissä nämä samat mikropiirit maksavat yli 2 dollaria kappaleelta.

HMI-näyttö tulee olemaan tavallinen 1602-näyttö, joka toimii myös neliöväylän kautta FC-113-kortin kautta.

He lähettivät PCF8574P:n, antoivat seurantanumeron ja 2 viikon kuluttua sain ne jo postissa.


Otamme sen pois muoviputkesta, kaikki näyttää olevan kunnossa.


Yhden mikropiirin kotelon pohjassa on kuitenkin jälkiä salaperäisistä termomekaanisista vaikutuksista.


Näiden vaurioiden luonne ei ole minulle selvä, mutta on selvää, että ne eivät voineet ilmaantua kuljetuksen aikana.

Mietin tätä arvoitusta pitkään, kunnes se valkeni mieleeni.
Luke Skywalker vain hiipi myyjän varastoon kutistuen yhtäkkiä mikroskooppiseen kokoon. Siellä hän huomasi yhden portin laajennuksista, sekoitti sen keisarilliseen kävelijään ja alkoi hakkeroida sitä valomiekalla. Sitten poimija tuli sisään, näki tämän kuvan ja sanoi: ”Lopeta, Luke Skywalker! Tämä ei ole keisarillinen kävelijä, tämä on PCF8574P-mikropiiri, josta olemme jo maksaneet Zaporozhyesta."

On hyvä, että molemmat mikropiirit osoittautuivat toimiviksi testattaessa.

Aloitetaan itse näppäimistön luominen tämän kaavion mukaisesti.


Layout 6.0:ssa piirsin yksipuolisen taulun.


Voit ladata tiedoston levyn mukana.

Levy etsattiin vetyperoksidilla ja sitruunahapolla.

Internetissä on monia reseptejä etsauslevyille peroksidilla.
Tein tämän liuoksen: 100 ml vetyperoksidia 3%, 50 g sitruunahappo, 3 tl suolaa. Kuumenna purkki peroksidia vesikattilassa.

Upotamme levyn liuokseen kuvio alaspäin, kuten suositellaan peroksidilla syövytessä.

Psshhhh! Aluksi prosessi on nopea.


Ps... Sitten se laantuu huomattavasti. Käännä se ympäri ja katso piirrosta.


Kauneus.


Valmis taulu näyttää tältä.




Mikropiirin osoitenastat on kytketty GND:hen, joten väylän piirilevyn osoite on 0x20.

Kirjoitamme ohjelmaa Arduinolle.

#sisältää
#sisältää

#define led 13
#define ADDR_KBRD 0x20
#define ADDR_LCD 0x27

String str;
tavu dio_in;
bool b;
bool avain;

LiquidCrystal_I2C lcd(ADDR_LCD,16,2); // Aseta näyttö

Virheellinen asetus ()
{
pinMode(13, OUTPUT);
lcd.init();
lcd.backlight();// Ota näytön taustavalo käyttöön
Wire.begin();

Wire.beginTransmission(ADDR_KBRD);
Wire.write(B11111111);
Wire.endTransmission();
Serial.begin(9600);
}
void loop()
{
Wire.requestFrom(ADDR_KBRD,1);
while (!Wire.available());
tavu dio_in = Wire.read(); //lukea PCF8574P-porttien tilan
tavumaski=1;
for(int i=0; i<5;i++)
{
key[i]=!(dio_in & mask);
maski=naamio<<1;
}

Str = Merkkijono(dio_in, BIN); //
Serial.println(str);

B=!b;
digitalWrite(led, b);

//
lcd.setCursor(0, 0);
lcd.print(String(avain)+" "+
Merkkijono(avain)+" "+
Merkkijono(avain)+" "+
Merkkijono(avain)+" "+
merkkijono(avain)+" "
);
viive (100);
}


Lataamme ohjelman Arduinoon ja yhdistämme sen luotuun näppäimistöön ja näyttöön.

Kytke se päälle, se toimii!


Käyttöliittymäni ei toimi vain Arduinon, vaan Arduino-yhteensopivan PLC:n kanssa. Jos lukijoilta löytyy inspiraatiota ja kiinnostusta, kirjoitan siitä joskus.

PCF8574P:n plussat:
1. Minimaalinen vanne.
2. Helppokäyttöinen.

PCF8574P:n miinukset:
En löytänyt sitä itse mikropiiristä, vaikka suosittelen ostamaan toiselta myyjältä.

Tämä päättää PCF8574P-mikropiirin tarkastelun.
Mutta jo kokeneena tarkkailijana etukäteen Vastaan ​​kysymyksiin, joita varmasti kysytään:

Miksi DIP-paketissa? SOIC on parempi.
Jos kaikki muut asiat ovat samat, pidän DIP:stä parempana, se on minulle helpompaa.

DIP- ja lähtöelementit asentavat vain lamerit, kaikki asiantuntijat käyttävät SOIC:tä ja SMD:tä. Joten juotan yksinomaan SMD:tä ja yleensä olen loistava.
Hyvin tehty.

Mikset osta vain valmista moduulia Aliexpressistä 1602-näytöllä ja 5-painikkeisella näppäimistöllä? Toimii myös I2C:n kautta.
Sen hinta alkaa 11 dollarista.
Vietin:
Näyttö 1602 - 1,3 dollaria
FC-113-lauta - 0,55 dollaria
Siru PCF8574P - 0,47 dollaria
Napit ja lippalakit - 0,7 dollaria
Reagenssit levyn etsaukseen - 0,3 dollaria
Tekstioliitti, vastukset ja muut pienet asiat - veloituksetta, vanhoista varastoista.
Yhteensä: 3,32 dollaria
Mutta pääasia, että asensin laudalleni neliömäisellä työntimellä napit laittaakseni niihin kauniit värilliset lippaat.

Vau, vain yksi PCF8574P-siru maksaa melkein yhtä paljon kuin koko FC-113-kortti!
Joo...

Teit kaiken väärin. He piirsivät sen väärin, syövytivät sen väärin väärään ratkaisuun ja asettivat väärät painikkeet. Sinuna tekisin kaiken oikein.
Hyvin tehty.

Miksi viides painike on niin kaukana muista?
Tämä on tarkoituksellista, ne ovat toiminnallisesti erilaisia. Nämä neljä ovat vasen, oikea, peruutus, enter, ja viides on SETUP.

Odotin jännittävämpää tarinaa Luke Skywalkerista, sinä petit minut!
Olen mahtava.

Arduino tukee monia tiedonsiirtorajapintoja, joista yksi on I2C, joka on nykyään melko suosittu. Olipa kerran tämän viestintäprotokollan keksi Philips ja se rekisteröitiin patentoidulla nimellä “I2C”, löydät sen myös nimillä TWI, 2 line interface, mutta ne kaikki toimivat samalla periaatteella.

I2C-väylän koko pointti on, että voit ripustaa suuren (128) määrän erilaisia ​​laitteita kahdelle johdolle lämpötila-antureista mikrokontrollereihin.

Mutta samaan aikaan I2C on nopeudeltaan huonompi kuin UART ja SPI, johtuen toimintaperiaatteista, koska kaksi linjaa on aina kytketty vastuksiin (Vcc), mikä tarkoittaa, että kaaviossa emme saa suorakaiteen muotoisia pulsseja, vaan puolisuunnikkaan muotoisia pulsseja, toisin kuin yllä.

SDA - vastaa tiedon välittämisestä (lähetyksen alku, osoite, tiedot)
SCL - väylän kellotus

I2C:ssä laitteita voi olla kahta tyyppiä: Master ja Slave

Katsotaanpa nyt ohjelmoinnin perusperiaatteita käyttämällä vakio Wire.h-kirjastoa:

Wire.begin(uint8_t address) - käytetään laitteen alustamiseen, orjatilassa sinun on syötettävä osoite, master-tilassa Wire.begin() . Wire sijaan voit käyttää mitä tahansa muuta sanaa.

Wire.requestFrom(uint8_t-osoite, uint8_t-määrä) – pyyntö vastaanottaa tietty määrä tavuja tietystä laitteesta (7-bittinen osoite). Palauttaa luettujen tavujen määrän.

Wire.beginTransmission(uint8_t address) - lähetyksen alku

Wire.endTransmission() - lähetyksen loppu, palauttaa virhenumeron tai onnistumisen (0)

Wire.write(uint8_t data) – voi ottaa yhden tavun (arvo), usean tavun (merkkijono) arvon, tietyn pituisen taulukon (data, pituus). Sijaitsee välillä: beginTransmission ja endTransmission. Palauttaa kirjoitettujen tavujen määrän.

Wire.available() – palauttaa prosessoitavissa olevien tavujen määrän. Mestari soittaa pyynnöstäFrom.

Wire.read() – lukee tavun orjalaitteesta. Se kirjoitetaan pyynnöstäFrom jälkeen.

Kirjastojen yhdistäminen Arduino IDE:hen ei ole vaikeaa, koska se toimitetaan vakioeditorin mukana.

Muutamia toimintoja on lisää, mutta mielestäni nämä perusasiat riittävät alkuun, ja lisäksi löydät kirjaston melkein mille tahansa oheislaitteelle.

Harkitse esimerkiksi Gy-521-kiihtyvyysmittarin ja gyroskoopin liitäntää ja toimintaa.

Yhdistämme kaavion mukaan (vetovastukset on rakennettu moduuliin):

Moduuli voi toimia sekä 3,3 voltilla että 5 voltilla.

#sisältää // yhdistä kirjasto i2c-liitännän kanssa työskentelemistä varten const int MPU_addr = 0x68; // I2C-osoite GY-521 int16_t AcX, AcY, AcZ, Tmp, GyX, GyY, GyZ; // muuttujat arvojen kirjoittamista varten void setup() ( Wire.begin(); // alusta i2c-väylä Wire.beginTransmission(MPU_addr); // aloita lähetys Wire.write(0x6B); // kirjoita tiettyjä rekistereitä alustusta varten Wire-moduuli write(0); ); // aloita tällä rekisterillä Wire.requestFrom(MPU_addr, 14, true // lue kaikki rekisterit AcX = Wire.read();<< 8 | Wire.read(); // 0x3B AcY = Wire.read() << 8 | Wire.read(); // 0x3D AcZ = Wire.read() << 8 | Wire.read(); // 0x3F Tmp = Wire.read() << 8 | Wire.read(); // 0x41 GyX = Wire.read() << 8 | Wire.read(); // 0x43 GyY = Wire.read() << 8 | Wire.read(); // 0x45 GyZ = Wire.read() << 8 | Wire.read(); // 0x47 Serial.print("AcX = "); Serial.print(AcX); // выводим данные в Serial Serial.print(" | AcY = "); Serial.print(AcY); Serial.print(" | AcZ = "); Serial.print(AcZ); Serial.print(" | Tmp = "); Serial.print(Tmp / 340.00 + 36.53); // выводим температуры по формуле Serial.print(" | GyX = "); Serial.print(GyX); Serial.print(" | GyY = "); Serial.print(GyY); Serial.print(" | GyZ = "); Serial.println(GyZ); delay(333); }

LCD-näyttö– toistuva vieras Arduino-projekteissa. Mutta monimutkaisissa piireissä meillä voi olla ongelma Arduino-porttien puutteesta johtuen tarpeesta yhdistää kilpi, jossa on monia, monia nastaa. Ratkaisu tähän tilanteeseen voisi olla I2C/IIC sovitin, joka yhdistää lähes tavallisen Arduino 1602 -suojan Uno-, Nano- tai Mega-kortille vain 4 nastalla. Tässä artikkelissa tarkastellaan, kuinka voit yhdistää LCD-näytön I2C-liitännällä, mitä kirjastoja voit käyttää, kirjoittaa lyhyt esimerkkiluonnos ja tarkastella yleisiä virheitä.

Nestekidenäyttö LCD 1602 on hyvä valinta merkkijonojen tulostamiseen erilaisissa projekteissa. Se on edullinen, siellä on erilaisia ​​​​muunnoksia erilaisilla taustavalon väreillä, voit helposti ladata valmiita kirjastoja Arduino-luonnoksille. Mutta tämän näytön suurin haitta on se, että näytössä on 16 digitaalista nastaa, joista vähintään 6 vaaditaan. Siksi tämän LCD-näytön käyttö ilman i2c:tä lisää vakavia rajoituksia Arduino Uno- tai Nano-levyille. Jos kontakteja ei ole tarpeeksi, sinun on ostettava Arduino Mega -levy tai tallennettava yhteystiedot, mukaan lukien liittämällä näyttö i2c:n kautta.

Lyhyt kuvaus LCD 1602 -nastaista

Katsotaanpa tarkemmin LCD1602-nastat:

Jokaisella nastalla on oma tarkoituksensa:

  1. Maa GND;
  2. Virtalähde 5 V;
  3. Näytön kontrastin asettaminen;
  4. Komento, data;
  5. Tietojen kirjoittaminen ja lukeminen;
  6. Ota käyttöön;

7-14. Datalinjat;

  1. Plus taustavalo;
  2. Miinus taustavalo.

Näytön tekniset tiedot:

  • Merkkien näyttötyyppi, on mahdollista ladata symboleja;
  • LED-taustavalo;
  • Ohjain HD44780;
  • Syöttöjännite 5V;
  • Muoto 16x2 merkkiä;
  • Käyttölämpötila-alue -20C - +70C, varastointilämpötila -30C - +80C;
  • Katselukulma 180 astetta.

LCD-näytön kytkentäkaavio Arduino-korttiin ilman i2C:tä

Vakiokaavio näytön liittämiseksi suoraan Arduino-mikro-ohjaimeen ilman I2C:tä on seuraava.

Liitettyjen koskettimien suuren määrän vuoksi ei välttämättä ole tarpeeksi tilaa tarvittavien elementtien liittämiseen. I2C:n käyttö vähentää johtojen lukumäärän 4:ään ja varattujen nastojen määrän 2:een.

Mistä ostaa i2c 1602 -näytöt Arduinolle

LCD-näyttö 1602 on melko suosittu, joten löydät sen helposti sekä kotimaisista verkkokaupoista että ulkomaisista sivustoista. Tässä muutamia linkkejä suosituimpiin vaihtoehtoihin:

  • Muunnos tavallisesta näytöstä melko tunnetulta myyjältä Wavgatilta hintaan alle 100 ruplaa.
  • Sarja näyttö ja i2c-sovitin (se täytyy juottaa itse). Hinta - alle 200 ruplaa
  • i2c-näytönsuoja – LCD 1602 -moduuli ohjauspainikkeilla ja laajennuskortilla.

I2C-protokollan kuvaus

Ennen kuin keskustelemme näytön liittämisestä Arduinoon i2c-sovittimen kautta, puhutaanpa lyhyesti itse i2C-protokollasta.

I2C/IIC(Inter-Integrated Circuit) on protokolla, joka on alun perin luotu viestimään integroituja piirejä elektroniikkalaitteessa. Kehitys kuuluu Philipsille. i2c-protokolla perustuu 8-bittisen väylän käyttöön, jota tarvitaan ohjauselektroniikan lohkojen kommunikointiin, sekä osoitusjärjestelmään, jonka ansiosta voit kommunikoida samojen johtojen kautta useiden laitteiden kanssa. Siirrämme yksinkertaisesti dataa yhdelle tai toiselle laitteelle lisäämällä halutun elementin tunnisteen datapaketteihin.

Yksinkertaisin I2C-piiri voi sisältää yhden isäntälaitteen (useimmiten Arduino-mikrokontrolleri) ja useita orjia (esimerkiksi LCD-näytön). Jokaisen laitteen osoite on välillä 7 - 127. Samassa piirissä ei saa olla kahta laitetta, joilla on sama osoite.

Arduino-levy tukee i2c:tä laitteistossa. Voit käyttää liittimiä A4 ja A5 laitteiden yhdistämiseen tällä protokollalla.

I2C-toiminnalla on useita etuja:

  • Toiminta vaatii vain 2 riviä - SDA (datalinja) ja SCL (synkronointilinja).
  • Useiden johtavien laitteiden yhdistäminen.
  • Lyhennetty kehitysaika.
  • Vain yksi mikro-ohjain tarvitaan ohjaamaan koko laitesarjaa.
  • Yhteen väylään kytkettyjen mikropiirien mahdollista määrää rajoittaa vain enimmäiskapasiteetti.
  • Korkea tietoturvallisuus piireihin sisäänrakennetun erityisen ylijännitesuojan ansiosta.
  • Yksinkertainen menettely uusien vikojen diagnosointiin ja vikojen nopeaan korjaamiseen.
  • Väylä on jo integroitu itse Arduinoon, joten lisäväyläliitäntää ei tarvitse kehittää.

Virheet:

  • Linjalla on kapasitiivinen raja - 400 pF.
  • I2C-ohjaimen ohjelmointi on vaikeaa, jos väylällä on useita eri laitteita.
  • Kun laitteita on paljon, vian eristäminen on vaikeaa, jos yksi niistä virheellisesti laskee alas.

i2c-moduuli LCD 1602 Arduinolle

Nopein ja kätevin tapa käyttää i2c-näyttöä Arduinossa on ostaa valmiiksi valmistettu näyttö, jossa on sisäänrakennettu protokollatuki. Mutta näitä näyttöjä ei ole kovin paljon, eivätkä ne ole halpoja. Mutta valtava määrä erilaisia ​​​​standardinäyttöjä on jo valmistettu. Siksi edullisin ja suosituin vaihtoehto tänään on ostaa ja käyttää erillistä I2C-moduulia - sovitinta, joka näyttää tältä:

Moduulin toisella puolella näemme i2c-nastat - maadoitus, teho ja 2 tiedonsiirtoa varten. Toisessa sovittimessa näemme ulkoiset virtaliittimet. Ja tietysti levyllä on monia nastaa, joilla moduuli juotetaan tavallisiin näytön nastoihin.


i2c-lähtöjä käytetään yhdistämään Arduino-korttiin. Tarvittaessa kytkemme ulkoisen virtalähteen taustavaloa varten. Sisäänrakennetulla trimmerillä voimme asettaa mukautettuja kontrastiarvoja J

Markkinoilta löytyy LCD 1602 -moduuleja, joissa on jo juotetut sovittimet, niiden käyttö on yksinkertaistettu niin paljon kuin mahdollista. Jos ostit erillisen sovittimen, sinun on ensin juotettava se moduuliin.

LCD-näytön yhdistäminen Arduinoon I2C:n kautta

Liittämistä varten tarvitset itse Arduino-levyn, näytön, leipälevyn, liitäntäjohdot ja potentiometrin.

Jos käytät erityistä erillistä i2c-sovitinta, se on ensin juotettava näyttömoduuliin. Siellä on vaikea tehdä virhettä, voit seurata tätä järjestelmää.


LCD-näyttö, jossa on i2c-tuki, on kytketty levyyn neljällä johdolla - kaksi johtoa datalle, kaksi johtoa virtaa varten.

  • GND-nasta liitetään kortin GND:hen.
  • VCC-nasta on 5V.
  • SCL liitetään nastaan ​​A5.
  • SDA on kytketty nastan A.

Ja siinä kaikki! Ei johtoverkkoja, joihin on erittäin helppo sotkeutua. Samalla voimme yksinkertaisesti uskoa kaiken i2C-protokollan toteuttamisen monimutkaisuuden kirjastoille.

Kirjastot i2c LCD-näytön kanssa työskentelemiseen

Jotta voit olla vuorovaikutuksessa Arduinon ja LCD 1602:n kanssa I2C-väylän kautta, tarvitset vähintään kaksi kirjastoa:

  • Wire.h-kirjasto I2C:n kanssa työskentelyä varten sisältyy jo vakio Arduino IDE -ohjelmaan.
  • LiquidCrystal_I2C.h-kirjasto, joka sisältää laajan valikoiman komentoja näytön ohjaamiseen I2C-väylän kautta ja jonka avulla voit tehdä luonnoksesta yksinkertaisemman ja lyhyemmän. Sinun on asennettava lisäksi kirjasto Kun olet kytkenyt näytön, sinun on asennettava lisäksi LiquidCrystal_I2C.h-kirjasto

Kun olet liittänyt kaikki tarvittavat kirjastot luonnokseen, luomme objektin ja voimme käyttää kaikkia sen toimintoja. Testausta varten ladataan seuraava vakioesimerkkiluonnos.

#sisältää #sisältää // Mukaan lukien kirjasto //#include // Vaihtoehtoisen kirjaston yhdistäminen LiquidCrystal_I2C lcd(0x27,16,2); // Määritä I2C-osoite (yleisin arvo) sekä näytön parametrit (LCD 1602:n tapauksessa - 2 riviä, joissa kussakin 16 merkkiä //LiquidCrystal_PCF8574 lcd(0x27); // Vaihtoehto PCF8574-kirjastolle void setup( ) ( lcd.init (); // Alusta näytön lcd.backlight(); // Liitä taustavalo lcd.setCursor(0,0); // Aseta kohdistin ensimmäisen rivin alkuun lcd.print(" Hei"); lcd.setCursor(0,1); // Aseta kohdistin toisen rivin alkuun lcd.print("ArduinoMaster"); // Kirjoita teksti toiselle riville ) void loop() ( )

LiquidCrystal_I2C-kirjaston toimintojen ja menetelmien kuvaus:

  • home() ja clear() - ensimmäinen toiminto mahdollistaa kursorin palauttamisen näytön alkuun, toinen tekee saman, mutta samalla poistaa kaiken, mikä oli näytössä aiemmin.
  • write(ch) – voit tulostaa yhden merkin ch näytölle.
  • cursor() ja noCursor() – näyttää/piilottaa kohdistimen näytöllä.
  • blink() ja noBlink() – kohdistin vilkkuu/ei vilku (jos sen näyttö oli käytössä aiemmin).
  • display() ja noDisplay() – voit liittää näytön tai poistaa sen käytöstä.
  • scrollDisplayLeft() ja scrollDisplayRight() – vierittää näyttöä yhden merkin vasemmalle/oikealle.
  • autoscroll() ja noAutoscroll() – voit ottaa automaattisen vieritystilan käyttöön tai poistaa sen käytöstä. Tässä tilassa jokainen uusi merkki kirjoitetaan samaan paikkaan, mikä syrjäyttää näytölle aiemmin kirjoitetun.
  • leftToRight() ja rightToLeft() – Näytettävän tekstin suunnan asettaminen – vasemmalta oikealle tai oikealta vasemmalle.
  • createChar(ch, bitmap) – luo merkin koodilla ch (0 – 7) käyttämällä joukkoa bittikarttoja mustavalkoisten pisteiden luomiseen.

Vaihtoehtoinen kirjasto i2c-näytön kanssa työskentelemiseen

Joissakin tapauksissa saattaa ilmetä virheitä käytettäessä määritettyä kirjastoa PCF8574-ohjaimilla varustettujen laitteiden kanssa. Tässä tapauksessa LiquidCrystal_PCF8574.h-kirjastoa voidaan ehdottaa vaihtoehtona. Se laajentaa LiquidCrystal_I2C:tä, joten sen käytössä ei pitäisi olla ongelmia.

Ongelmia i2c-lcd-näytön kytkemisessä

Jos et näe näytössä viestiä luonnoksen lataamisen jälkeen, kokeile seuraavia vaiheita.

Ensinnäkin voit lisätä tai vähentää näytön kontrastia. Usein merkit eivät yksinkertaisesti näy kontrastin ja taustavalotilan vuoksi.

Jos tämä ei auta, tarkista, onko koskettimet kytketty oikein ja onko taustavalon virta kytketty. Jos käytit erillistä i2c-sovitinta, tarkista koskettimien juottamisen laatu uudelleen.

Toinen yleinen syy tekstin puuttumiseen näytöltä voi olla väärä i2c-osoite. Yritä ensin muuttaa laitteen osoite luonnoksesta 0x27 0x20 tai 0x3F. Eri valmistajilla voi olla ohjelmoitu erilaisia ​​oletusosoitteita. Jos tämä ei auta, voit suorittaa i2c-skanneriluonnoksen, joka skannaa kaikki liitetyt laitteet ja määrittää niiden osoitteen raa'alla voimalla. Esimerkki i2c-skannerin luonnoksesta.

Jos näyttö ei vieläkään toimi, yritä irrottaa sovitin ja kytkeä LCD-näyttö tavalliseen tapaan.

Johtopäätös

Tässä artikkelissa tarkastelimme LCD-näytön käytön pääkysymyksiä monimutkaisissa Arduino-projekteissa, kun meidän on tallennettava ilmaisia ​​​​nastaja laudalle. Yksinkertaisen ja edullisen i2c-sovittimen avulla voit liittää 1602 LCD-näytön, joka vie vain 2 analogista nastaa. Monissa tilanteissa tämä voi olla erittäin tärkeää. Hinta mukavuuden vuoksi on lisämoduulin - muuntimen ja kirjaston - käyttö. Mielestämme tämä ei ole korkea hinta mukavuudesta, ja suosittelemme tämän ominaisuuden käyttöä projekteissa.

LCD I2C -moduulin avulla voit liittää merkkinäytön Arduino-korttiin käyttämällä vain kahta signaalijohtoa.

Käytetyt komponentit (osta Kiinasta):

. Ohjauskortti

. Kytkentäjohdot

Tärkeimmät tekniset ominaisuudet:

Näyttö: Merkki 16x02 tai 20x04
. Taustavalo: Sininen valkoisilla kirjaimilla
. Kontrasti: Säädettävä potentiometrillä
. Syöttöjännite: 5V
. Käyttöliittymä: I2C
. I2C-osoite: 0x27
. Mitat: 82mm x 35mm x 18mm

Yhteyden muodostaminen Arduinoon

Moduuli on varustettu nelinapaisella 2,54 mm:n liittimellä

SCL: sarjakellolinja (Serial CLlock)

S.D.A.: sarjadatalinja (Serial DAta)

VCC: "+" teho

GND: "-" teho

Eri ohjaimiin perustuvien Arduino-levyjen I2C-liitännästä vastaavat nastat vaihtelevat

Jotta voit työskennellä tämän moduulin kanssa, sinun on asennettava LiquidCrystal_I2C1602V1-kirjasto

Lataa, pura ja laita se Arduino-kansion kirjastot-kansioon. Jos Arduino IDE oli auki kirjastoa lisättäessä, käynnistä ympäristö uudelleen.

Siirrytään suoraan luonnokseen. Tässä esimerkissä tulostetaan standardi "Hei, maailma!" ja paikkakuntamme osoitteeseen.

esimerkki ohjelmakoodista:

#sisältää #sisältää LiquidCrystal_I2C lcd(0x27,16,2); /* Aseta osoite ja näyttökoko. Käytettäessä LCD I2C-moduulia, jossa on 20x04 näyttö, sinun ei tarvitse muuttaa koodia mitään, sinun tarvitsee vain asettaa oikea mitta */ mitätön asetukset() ( lcd.init(); // Alusta lcd lcd.backlight(); // Kytke taustavalo päälle // Kohdistin on 1 rivin alussa lcd.print("Hei, maailma!"); // Näytä teksti lcd.setCursor (0, 1); // Aseta kohdistin rivin 2 alkuun lcd.print("sivusto"); // Tulosteteksti ) mitätön silmukka () { }

Luo omat symbolisi

Olemme selvittäneet tekstin ulostulon, englannin aakkosten kirjaimet on kytketty ohjaimen muistiin näytön sisällä, eikä niissä ole ongelmia. Mutta mitä tehdä, jos vaadittua symbolia ei ole ohjaimen muistissa?

Ei hätää, vaadittu symboli voidaan luoda manuaalisesti. Tämä menetelmä osittain, enintään 7 merkkiä, auttaa ratkaisemaan tulostusongelman.

Harkittavien näyttöjen solun resoluutio on 5x8 pikseliä. Symbolin luontitehtävä ei tarkoita muuta kuin kirjoittaa bitimaski ja sijoittaa siihen ykkösiä paikkoihin, joissa pisteiden pitäisi palaa ja nollat ​​paikkoihin, joissa niiden ei pitäisi.

Alla olevassa esimerkissä piirrämme hymiön.

esimerkki ohjelmakoodista:

//Testattu Arduino IDE 1.0.5:llä // Lisää tarvittavat kirjastot#sisältää #sisältää // Hymysymbolin bittimaski tavu hymy = ( B00010, B00001, B11001, B00001, B11001, B00001, B00010, ); LiquidCrystal_I2C lcd(0x27,20,4); // Aseta osoite ja näyttökoko. mitätön asetukset() ( lcd.init(); // Alusta lcd lcd.backlight(); // Kytke taustavalo päälle // Luo symbolinumero 0 lcd.createChar(1, hymy); lcd.setCursor(0, 0);// Aseta kohdistin 1 rivin alkuun lcd.print("\1");// Näytä hymiö (merkki numero 1) - "\1" silmukka () { }

) mitätön

Ohjelma helpottaa symbolien luomista

Kuinka laajentaa kehitettävän mikrokontrolleripohjaisen järjestelmän toimivuutta? Kyllä, tämä kysymys kiinnostaa monia elektronisten laitteiden prototyyppien parissa työskenteleviä piirisuunnittelijoita. Yllättäen Philipsin insinöörien yli 30 vuotta sitten kehittämä väylä mahdollistaa uusien lohkojen lisäämisen järjestelmään ilman piiriä vaihtamatta.

I2C-liitännän ansiosta voit muuttaa mikro-ohjaimen yksinkertaiseksi rakennussarjaksi, johon voit liittää useita satoja mikropiirejä. On syytä huomata heti, että niiden määrää rajoittaa väylän kapasitanssi 400 pF, mutta tämä on yksi harvoista I2C:n haitoista.

Sisäinen viestintäpiiri - näin voit tulkita väylän nimen, joka nykyään löytyy melkein kaikista elektronisista laitteista. On syytä huomata, että Philips patentoi tällaisen käytännöllisen ratkaisun ja muut valmistajat kopioivat I2C:tä muilla nimillä.

Tämä väylä on asennettu kommunikoimaan näyttöjen, kameroiden ja matkapuhelimien ulkomaailman kanssa. I2C:tä käyttäviin laitteisiin kytkettyjen oheislaitteiden määrä on yleensä lukematon. Mitkä ovat käyttöliittymän edut?

I2C:n tärkeimmät edut ja haitat

I2C on epäsymmetrinen sarjaväylä elektronisten laitteiden sisällä olevien integroitujen piirien väliseen viestintään. Käyttää kahta kaksisuuntaista tietoliikennelinjaa (SDA ja SCL).

Väylä koostuu kahdesta johtimesta ja yksi mikro-ohjain riittää ohjaamaan liitäntää. Yllättäen tällainen yksinkertaisuus antaa sinun sammuttaa mikropiirit käytön aikana. Erityinen sisäänrakennettu suodatin pystyy selviytymään purskeista, mikä varmistaa käsiteltyjen tietojen turvallisuuden.

I2C:n haittoja ovat rajoitetun kapasiteetin lisäksi ohjelmointivaikeudet ja vian tunnistamisen vaikeus matalan tilan tilanteessa.

Aluksi väylän nopeus oli vain 100 kbit ja siihen voitiin kytkeä vain 120 laitetta. 90-luvulla standardit muuttuivat ja tiedonsiirtonopeus kasvoi 4 kertaa ja tuli mahdolliseksi kytkeä jopa 1000 mikropiiriä.

Useimmat käyttöliittymävalmistajat ovat kuitenkin jumissa 400 kbps:ssä 120 laitteen ollessa kytkettynä.

Kytkentä ja toimintaperiaate

Väyläjohtimet on kytketty positiiviselle puolelle 1-10k vastuksilla, yksi johtimista on dataväylä, toinen kello. Tämä järjestelmä toimii yksinkertaisesti: linjalla on yksi päälaite (mikro-ohjain) ja useita oheislaitteita. Koska linjat saavat virran positiivisesta, riittää, että kytketty orja (orjaelementti) painaa johdon maahan ja lähettää siten nollan.

Kun oheislaite irrottaa johtimen, 1 välittyy johtoa pitkin, mutta jos yhteiskäytön aikana yksi orjista antaa 0:n, niin muiden väylään kytkettyjen laitteiden on odotettava. Mikro-ohjain suorittaa kellottamisen ja lähetyksen tarkastaen etukäteen, onko linja vapaa. Tätä varten 1 lähetetään SCL:lle ja SDA:lle, minkä jälkeen luodaan aloitusehto - SDA-riviä painetaan, kun SCL-arvo on yhtä suuri kuin 1.

Seuraava vaihe on siirtää sen laitteen osoite, johon on pääsy.

On muistettava, että dataa luetaan SCL = 1:llä ja lähetys etenee merkitsevimmällä bitillä.

Ensimmäiset 7 bittiä ovat laitteen osoite, 8 ovat kirjoituskomento (0) tai luku (1).

Orja vastaanottaa kaikki kahdeksan signaalia ja painaa SDA-linjaa yhdeksännellä SCL-jaksolla, jos kaikki on hänelle selvää. Jos ei, generoidaan pysäytyssignaali ja data lähetetään uudelleen. Kun työ on valmis, SDA-linja vapautetaan, mutta SCL:ään ei kosketa.

Vaikka kytketty siru käsittelee signaalin hitaasti, se säilyttää silti SCL:n.

Multi-master-käyttötila

Demokratian kysymykset piirisuunnittelussa ovat säänneltyjä. Se perustuu päälaitteen kykyyn hallita työn tulosta. On tarpeen tarkistaa, onko linja vapautettu vai ei, niin isäntä johtaa tällä hetkellä, jos ei, niin jotain tärkeämpää on edelleen. Tässä tapauksessa sinun on odotettava aukkoa ja tehtävä työsi, kun se ilmestyy.

On kuitenkin täysin mahdollista, että kaikki päälaitteet päättävät olla kiireisiä samaan aikaan. Tässä tapauksessa mestaruus menee mestarille, joka aloitti kellon ensimmäisenä ja teki sen nopeasti. Jos kaksi laitetta toimivat supersynkronisesti, niin se, joka tuottaa nollan hieman vastustajaa nopeammin, voittaa ensin.