I2C LCD adapterio modulio įvadas

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiame įraše apžvelgsime „I2C“, „IIC“ arba „I kvadrato C“ pagrindu veikiantį LCD adapterio modulį, kuris sumažins laidų jungtis tarp „Arduino“ ir LCD ekrano tik iki 2 laidų, taip pat sutaupys daugybę GPIO kaiščių kiti jutikliai / pavaros ir pan.

Prieš diskutuodami apie I2C LCD adapterio modulį, svarbu suprasti, kas yra „I2C“ magistralė ir kaip ji veikia.



Bet šiaip jums nereikia būti „I2C“ protokolo ekspertu, kad galėtumėte dirbti su šiuo paminėtu LCD adapteriu.

I2C ryšio iliustracija:

I2C ryšio iliustracija:

I2C arba IIC reiškia „Inter-Integrated Circuit“ - tai serijinė kompiuterio magistralė, kurią išrado „Philips“ puslaidininkiai, šiandien vadinami NXP puslaidininkiais. Ši autobusų sistema buvo išrasta 1982 m.



Kas yra autobusas?

Magistralė yra kabelių / laidų grupė, kuri perduoda duomenis iš vienos mikroschemos į kitą mikroschemą / vieną plokštę į kitą.

Pagrindinis „I2C“ magistralės protokolo privalumas yra tas, kad palaikomą mikrovaldiklį arba jutiklius ar mikroschemas galima susieti tik su dviem laidais. Šio protokolo pranašumas yra tas, kad mes galime sujungti 127 skirtingus lustus arba jutiklius / tvarkykles prie vieno pagrindinio įrenginio, kuris paprastai yra mikrovaldiklis su tik 2 laidais.

Kokie yra du I2C laidai?

Du laidai yra SDA ir SCL, kurie yra serijiniai duomenys ir serijinis laikrodis.

Serijinis laikrodis arba SCL naudojamas duomenų perdavimui per I2C magistralę sinchronizuoti. SDA arba serijiniai duomenys yra duomenų eilutė, kurioje faktiniai duomenys perduodami iš pagrindinio į vergą ir atvirkščiai. Pagrindinis prietaisas valdo nuoseklųjį laikrodį ir nusprendžia, kuriam vergo įrenginiui reikia bendrauti. Nė vienas vergo įrenginys negali užmegzti ryšio pirmiausia, tai gali padaryti tik pagrindinis įrenginys.

Nuoseklios duomenų linija yra dvikryptė ir tvirta, po kiekvieno 8 bitų duomenų rinkinio siuntimo priimantis įrenginys atsiunčia patvirtinimo bitą.

Kaip greitas I2C protokolas?

Originali I2C protokolo versija, sukurta 1982 m., Palaikė 100 Kbps. Kita versija buvo standartizuota 1992 m., Palaikanti 400 kbps (greitas režimas) ir palaikanti iki 1008 įrenginių. Kita versija buvo sukurta 1998 m. Su 3,4 Mbps (didelės spartos režimu).

Keletas kitų „I2C“ versijų buvo sukurtos 2000, 2007, 2012 metais (naudojant 5Mbps „Ultra-Fast“ režimą), o naujausia „I2C“ versija buvo sukurta 2014 m.

Kodėl traukiamieji rezistoriai I2C magistralėje?

SDA ir SCL yra „atviras nutekėjimas“, o tai reiškia, kad abi linijos gali eiti LOW, bet jos negali vairuoti linijų AUKŠTAI, todėl kiekvienoje iš linijų yra prijungtas traukimo rezistorius.

Tačiau su daugeliu „I2C“ modulių, tokių kaip LCD ar RTC, yra įmontuoti pakeliami rezistoriai, todėl mums jų nereikia jungti, nebent tai nurodyta.

Pull-up / pull-down rezistorius: Pull-up rezistorius yra rezistorius, prijungtas prie maitinimo šaltinio + Ve linijos, siekiant išlaikyti loginį linijos HIGH lygį, jei linija nėra nei aukšta, nei žema.

Nuleidžiamas rezistorius yra rezistorius, prijungtas prie maitinimo šaltinio –Ve, kad linijos loginis lygis būtų žemas, jei linija nėra nei aukšta, nei žema.

Tai taip pat apsaugo nuo triukšmo patekimo į linijas.

Tikimės, kad subraižėme I2C protokolo paviršių. Jei jums reikia daugiau informacijos apie I2C protokolą, naršykite toliau

„YouTube“ ir „Google“.

Dabar pažvelkime į I2C LCD modulį:

I2C LCD modulio kištukai

Skystųjų kristalų ekranui yra 16 išvesties kaiščių, kuriuos galima sulituoti tiesiai į 16 X 2 LCD modulio galą.

Įvesties kaiščiai yra + 5 V, GND, SDA ir SCL. „Arduino Uno“ SDA ir SCL kaiščiai yra atitinkamai A4 ir A5 kaiščiai. „Arduino mega“ SDA yra kaištis Nr. 20, o SCL - kaištis Nr. 21.

Palyginkime, kaip atrodo, kai prijungiame LCD ekraną prie „Arduino“ be „I2C“ adapterio ir su adapteriu.

Be „I2C“ adapterio:

„Arduino“ be „I2C“ adapterio

Su „I2C“ adapteriu:

„Arduino“ naudojant „I2C“ adapterį

Adapteris yra sulituotas LCD ekrano gale ir, kaip matome, išsaugojome daugybę GPIO smeigtukų kitoms užduotims atlikti, taip pat galime toliau pridėti dar 126 I2C įrenginius prie smeigtukų A4 ir A5.

Atkreipkite dėmesį, kad standartinė „Liquid Crystal“ biblioteka neveiks su šiuo „I2C“ LCD adapteriu, tam yra skirta speciali biblioteka, kuri netrukus bus aprėpta ir mes jums parodysime, kaip naudoti šį modulį su kodavimo pavyzdžiu.

Kaip prijungti „I2C“ adapterį prie 16 x 2 ekrano

Ankstesniuose straipsnio skyriuose mes sužinojome I2C protokolo pagrindus ir apžvelgėme pagrindinę I2C LCD adapterio modulio apžvalgą. Šiame įraše mes sužinosime, kaip prijungti „I2C“ LCD adapterio modulį prie 16 x 2 skystųjų kristalų ekrano, ir pamatysime, kaip programa su pavyzdžiu.

Pagrindinis „I2C“ protokolo privalumas yra tas, kad palaikomus jutiklius / įvesties / išvesties įrenginius galime prijungti tik dviem eilutėmis, ir tai naudinga „Arduino“, nes jame yra riboti GPIO kaiščiai.

Dabar pažiūrėkime, kaip prijungti modulį prie LCD.

Modulis turi 16 išvesties kaiščių ir 4 įvesties kaiščius. Mes galime tiesiog sulituoti adapterį prie 16 x 2 skystųjų kristalų ekrano užpakalinės dalies. Iš 4 įvesties kaiščių abu yra + 5 V ir GND, likę du yra SDA ir SCL.

Matome, kad „Arduino“ išsaugojome daug smeigtukų kitoms įvesties / išvesties užduotims atlikti.

Ekrano kontrastą galime sureguliuoti reguliuodami potenciometrą su mažu sraigtiniu atsuktuvu (pažymėtas raudona dėžute).

Dabar apšvietimą galima valdyti pačiame programos kode:

lcd.backlight ()

Tai įjungs LCD ekrano apšvietimą.

lcd.noBacklight ()

Tai išjungs LCD ekrano apšvietimą.

Matome, kad yra prijungtas trumpiklis, kuris paryškinamas raudoname laukelyje, jei džemperis pašalinamas, foninis apšvietimas išlieka IŠJUNGTAS, neatsižvelgiant į programos komandą.

Dabar aparatūros sąranka atlikta, dabar pažiūrėkime, kaip koduoti. Atminkite, kad „I2C LCD“ moduliui reikia ypatingo

biblioteka ir iš anksto įdiegta „liquidcrystal“ biblioteka neveiks.

I2C LCD biblioteką galite atsisiųsti iš čia ir pridėti prie „Arduino IDE“:

github.com/marcoschwartz/LiquidCrystal_I2C

Iš ankstesnio įrašo sužinojome, kad „I2C“ įrenginiai turi adresą, kuriuo pagrindinis arba mikrovaldiklis gali identifikuoti įrenginį ir bendrauti.

Daugeliu atvejų „I2C LCD“ modulio adresas būtų „0x27“. Tačiau skirtinga gamyba gali turėti skirtingą adresą. Programoje turime įvesti teisingą adresą tik tada, kai veiks jūsų LCD ekranas.

Norėdami rasti adresą, tiesiog prijunkite 5 V prie „Vcc“, o GND prie „Arduino“ GND ir „I2C“ modulio SCL kaištį prie A5, o SDA prie A4 ir įkelkite žemiau esantį kodą.

Tai nuskaitys prijungtus „I2C“ įrenginius ir parodys jų adresą.

// -------------------------------- //
#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)
}
// -------------------------------- //

Įkelkite kodą ir atidarykite nuoseklųjį monitorių.

Kaip matome, buvo aptikti du įrenginiai ir rodomi jų adresai, tačiau jei norite rasti tik I2C LCD modulio adresą, nuskaitydami neturėtumėte prijungti jokių kitų I2C įrenginių.
Taigi apibendrindami gavome adresą „0x27“.

Dabar kaip pavyzdį pateiksime skaitmeninį laikrodį, nes yra du „I2C“ įrenginiai: LCD modulis ir RTC arba realaus laiko laikrodžio modulis. Abu moduliai bus sujungti dviem laidais.

Atsisiųskite šią biblioteką:
RTC biblioteka: github.com/PaulStoffregen/DS1307RTC
„TimeLib.h“: github.com/PaulStoffregen/Time

Kaip nustatyti laiką RTC

• Atidarykite „Arduino IDE“ ir eikite į File> Example> DS1307RTC> set time.
• Įkelkite kodą su sukomplektuota aparatine įranga ir atidarykite nuoseklųjį monitorių ir viskas.

Grandinės schema:

Programa:

//------------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-------//

Pastaba:

„LiquidCrystal_I2C“ lcd (0x27, 16, 2)

„0x27“ yra adresas, kurį radome nuskaitydami, o 16 ir 2 yra eilučių ir stulpelių skaičius LCD ekrane.

RTC atveju nereikia rasti adreso, bet radome nuskaitydami „0x68“, bet vis tiek RTC biblioteka jį tvarkys.

Dabar pažiūrėkime, kiek sumažinome laidų spūstį ir išsaugojome „Arduino“ GPIO kaiščius.

Prie LCD ekrano prijungti tik 4 laidai, pažymėti raudona dėžute.

Taip pat iš „Arduino“ yra prijungti tik 4 laidai, o RTC modulis dalijasi tomis pačiomis linijomis.

Dabar jau įgijote pagrindinių žinių apie I2C ir kaip naudotis I2C LCD adapterio moduliu.
Ar jums patinka šis įrašas? Ar turite kokių nors klausimų? Prašau išsakyti komentarų skiltyje, galite gauti greitą atsakymą.




Pora: Paprasta tranzistoriaus diodų testerio grandinė Kitas: Padarykite šią IR nuotolinio valdymo nuotolio išplėtimo grandinę