Johdanto I2C LCD-sovitinmoduuliin

Kokeile Instrumenttia Ongelmien Poistamiseksi





Tässä viestissä tarkastellaan 'I2C' - tai 'IIC' - tai 'I-neliö C' -pohjaista LCD-sovitinmoduulia, joka vähentää Arduinon ja LCD-näytön väliset johdinliitännät vain kahteen johtoon, mikä säästää myös tonnia GPIO-nastoja muut anturit / käyttölaitteet jne.

Ennen kuin keskustelemme I2C LCD-sovitinmoduulista, on tärkeää ymmärtää, mikä I2C-väylä on ja miten se toimii.



Mutta joka tapauksessa sinun ei tarvitse olla I2C-protokollan asiantuntija työskennellessäsi tämän mainitun LCD-sovittimen kanssa.

Kuva I2C-yhteydestä:

Kuva I2C-yhteydestä:

I2C tai IIC on lyhenne sanoista “Inter-Integrated Circuit” on sarjapuolinen tietoväylä, jonka ovat keksineet Philipsin puolijohteet, nykyisin tunnetaan nimellä NXP-puolijohteet. Tämä väyläjärjestelmä keksittiin vuonna 1982.



Mikä on bussi?

Väylä on ryhmä kaapeleita / johtoja, jotka kuljettavat tietoja yhdestä sirusta toiseen siruun / yhdestä piirilevystä toiseen piirilevyyn.

I2C-väyläprotokollan tärkein etu on, että tuettu mikro-ohjain tai anturit tai sirut voidaan yhdistää vain kahteen johtoon. Tämän protokollan mielen räjähtävä etu on, että voimme yhdistää 127 erilaista sirua tai anturia / ohjainta yhteen päälaitteeseen, joka yleensä on mikrokontrolleri vain kahdella johtimella.

Mitkä ovat kaksi I2C-johtoa?

Nämä kaksi johtoa ovat SDA ja SCL, jotka ovat vastaavasti sarjatietoja ja sarjakelloja.

Sarjakelloa tai SCL: ää käytetään synkronoimaan tiedonsiirto I2C-väylän kautta. SDA tai Serial Data on tietorivi, jossa varsinainen data välitetään isännältä orjalle ja päinvastoin. Päälaite ohjaa sarjakelloa ja päättää, minkä orjalaitteen sen on oltava yhteydessä. Mikään orjalaite ei voi aloittaa tiedonsiirtoa ensin, vain isäntälaite voi tehdä.

Sarjatietolinja on kaksisuuntainen ja kestävä, kun jokainen 8-bittinen datajoukko on lähetetty, vastaanottava laite lähettää takaisin kuittausbitin.

Kuinka nopea I2C-protokolla on?

Vuonna 1982 kehitetty I2C-protokollan alkuperäinen versio tuki 100 kb / s. Seuraava versio standardisoitiin vuonna 1992, joka tuki 400 kt / s (nopea tila) ja tukee jopa 1008 laitetta. Seuraava versio kehitettiin vuonna 1998 3,4 Mbps: llä (nopea nopeustila).

Useita muita I2C-versioita kehitettiin vuosina 2000, 2007, 2012 (5Mbps: n erittäin nopeassa tilassa) ja tuorein I2C-versio kehitettiin vuonna 2014.

Miksi vetovastukset I2C-väylässä?

SDA ja SCL ovat 'avoimen tyhjennyksen', mikä tarkoittaa, että molemmat johdot voivat mennä MATALAAN, mutta ne eivät voi ajaa linjoja KORKEA, joten kumpaankin linjaan on kytketty ylösvetovastus.

Mutta useimmissa I2C-moduuleissa, kuten LCD tai RTC, on sisäänrakennetut vastusvastukset, joten meidän ei tarvitse liittää sitä, ellei sitä ole määritelty.

Pull-up / Pull-down-vastus: Pull-up-vastus on vastus, joka on kytketty + Ve-syöttöjohtoon pitämään linjan logiikkataso HIGH-tasolle, jos johto ei ole korkea eikä matala.

Vetovastus on vastus, joka on kytketty syöttöjohdon –Ve-linjaan pitämään linjan logiikkataso LOW-tasolla, jos johto ei ole korkea eikä matala.

Tämä estää myös melun pääsyn linjoille.

Toivomme, että naarmuimme I2C-protokollan pinnan, jos tarvitset lisätietoja I2C-protokollasta, surffaa edelleen

YouTube ja Google.

Katsotaan nyt I2C LCD -moduulia:

I2C LCD-moduulin pinouts

LCD-näytössä on 16 ulostulonasta, jotka voidaan juottaa suoraan 16 X 2 LCD-moduulin taakse.

Tulonastat ovat + 5 V, GND, SDA ja SCL. Arduino Unon SDA- ja SCL-nastat ovat vastaavasti nastat A4 ja A5. Arduinolle mega SDA on tappi # 20 ja SCL on tappi # 21.

Verrataan, miltä se näyttää, kun kytkemme LCD-näytön Arduinoon ilman I2C-sovitinta ja sovittimen kanssa.

Ilman I2C-sovitinta:

Arduino ilman I2C-sovitinta

I2C-sovittimen kanssa:

Arduino I2C-sovittimen avulla

Sovitin on juotettu nestekidenäytön takaosaan, ja kuten näemme, että olemme tallentaneet paljon GPIO-nastoja muihin tehtäviin, ja voimme myös jatkaa 126 I2C-laitteen lisäämistä nastoihin A4 ja A5.

Huomaa, että tavallinen nestekidekirjasto ei toimi tämän I2C LCD-sovittimen kanssa, tätä varten on olemassa erityinen kirjasto, joka käsitellään pian ja näytämme sinulle, kuinka tätä moduulia käytetään koodausesimerkillä.

I2C-sovittimen liittäminen 16 x 2 -näyttöön

Artikkelin edellisissä osioissa opimme I2C-protokollan perusteet ja otimme perustiedot I2C LCD-sovitinmoduulista. Tässä viestissä aiomme oppia liittämään I2C LCD-sovitinmoduulin 16 x 2 LCD-näyttöön ja näemme kuinka ohjelma esimerkin avulla.

I2C-protokollan suurin etu on, että voimme kytkeä tuetut anturit / tulo- / lähtölaitteet vain kahdella rivillä, ja se on hyödyllistä Arduinon kanssa, koska sillä on rajoitetut GPIO-nastat.

Katsotaan nyt, kuinka moduuli kytketään LCD-näyttöön.

Moduulissa on 16 lähtöpistoketta ja 4 tulopistoketta. Voimme vain juottaa sovittimen 16 x 2 LCD-näytön takaosaan. Neljästä tulotapista kaksi on + 5 V ja GND, loput kahdesta ovat SDA ja SCL.

Voimme nähdä, että olemme tallentaneet paljon nastoja Arduinoon muita syötteitä / lähtötehtäviä varten.

Näytön kontrastia voidaan säätää säätämällä potentiometriä pienellä ruuvimeisselillä (korostettu punaisella laatikolla).

Taustavaloa voidaan nyt ohjata itse ohjelmakoodilla:

LCD-taustavalo ()

Tämä sytyttää LCD-näytön taustavalon.

lcd.noBacklight ()

Tämä sammuttaa LCD-näytön taustavalon.

Voimme nähdä, että hyppääjä on kytketty, mikä on korostettu punaisella kentällä, jos hyppyjohdin poistetaan, taustavalo pysyy POIS PÄÄLTÄ ohjelmakomennosta riippumatta.

Nyt laitteiston asennus on valmis, nyt katsotaan miten koodata. Muista, että I2C LCD -moduuli tarvitsee erityistä

ja esiasennettu 'liquidcrystal' -kirjasto eivät toimi.

Voit ladata I2C LCD -kirjaston täältä ja lisätä Arduino IDE: hen:

github.com/marcoschwartz/LiquidCrystal_I2C

Edellisestä viestistä saimme tietää, että I2C-laitteilla on osoite, jolla isäntä tai mikrokontrolleri voi tunnistaa laitteen ja kommunikoida.

Useimmiten I2C LCD -moduulin osoite olisi '0x27'. Mutta eri valmistuksella voi olla eri osoite. Meidän on annettava oikea osoite ohjelmassa vasta, kun LCD-näyttösi toimii.

Osoitteen löytämiseksi liitä vain 5 V Vcc: hen ja GND Arduinon GND: hen ja I2C-moduulin SCL-nasta A5: een ja SDA A4: ään ja lataa alla oleva koodi.

Tämä skannaa liitetyt I2C-laitteet ja näyttää niiden osoitteet.

// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 0
for (address = 1 address <127 address++ )
{
Wire.beginTransmission(address)
error = Wire.endTransmission()
if (error == 0)
{
Serial.print('I2C device found at address 0x')
if (address <16)
{
Serial.print('0')
}
Serial.print(address, HEX)
Serial.println(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found ')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //

Lataa koodi ja avaa sarjamonitori.

Kuten voimme nähdä, havaittiin kaksi laitetta ja niiden osoitteet näytetään, mutta jos haluat löytää vain I2C LCD-moduulin osoitteen, älä kytke muita I2C-laitteita skannauksen aikana.
Joten lopuksi saimme osoitteen '0x27'.

Nyt aiomme tehdä digitaalisen kellon esimerkkinä, koska I2C-laitteita on kaksi, LCD-moduuli ja RTC tai reaaliaikainen kellomoduuli. Molemmat moduulit liitetään kahdella johtimella.

Lataa seuraava kirjasto:
RTC-kirjasto: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Kuinka asettaa aika RTC: lle

• Avaa Arduino IDE ja siirry kohtaan Tiedosto> Esimerkki> DS1307RTC> aseta aika.
• Lataa koodi valmiilla laitteistolla ja avoimella sarjaliitännällä ja olet valmis.

Piirikaavio:

Ohjelmoida:

//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//

Huomautus:

LiquidCrystal_I2C lcd (0x27, 16, 2)

'0x27' on osoite, jonka löysimme skannaamalla, ja 16 ja 2 ovat LCD-näytön rivien ja sarakkeiden lukumäärä.

RTC: tä varten meidän ei tarvitse löytää osoitetta, mutta löysimme skannattaessa “0x68”, mutta joka tapauksessa RTC-kirjasto käsittelee sen.

Katsotaan nyt, kuinka paljon vähennimme langan ruuhkia ja tallensimme GPIO-nastat Arduinoon.

Vain 4 johtoa on kytketty nestekidenäyttöön, korostettuna punaisella laatikolla.

Myös vain 4 johtoa on kytketty Arduinosta ja RTC-moduulilla on samat linjat.

Tähän mennessä olet saanut perustiedot I2C: stä ja I2C LCD-sovitinmoduulin käytöstä.
Pidätkö tästä viestistä? Onko sinulla kysymyksiä? Ilmaise kommenttiosassa, saatat saada nopean vastauksen.




Pari: Yksinkertainen transistoridiodidesteripiiri Seuraava: Tee tämä infrapunakaukosäätimen alueen laajenninpiiri