Ievads I2C LCD adaptera modulī

Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai





Šajā ziņojumā mēs aplūkosim “I2C” vai “IIC” vai “I square C” bāzes LCD adaptera moduli, kas samazinās vadu savienojumus starp Arduino un LCD displeju tikai līdz 2 vadiem, ietaupot arī daudz GPIO tapu citi sensori / piedziņas utt.

Pirms mēs apspriežam I2C LCD adaptera moduli, ir svarīgi saprast, kas ir I2C kopne un kā tā darbojas.



Tomēr, lai strādātu ar šo pieminēto LCD adapteri, jums nav jābūt I2C protokola ekspertam.

I2C savienojuma ilustrācija:

I2C savienojuma ilustrācija:

I2C vai IIC nozīmē “Inter-Integrated Circuit” ir sērijveida datoru kopne, kuru izgudroja Philips pusvadītāji, mūsdienās pazīstami kā NXP pusvadītāji. Šī autobusu sistēma tika izgudrota 1982. gadā.



Kas ir autobuss?

Kopne ir kabeļu / vadu grupa, kas pārraida datus no vienas mikroshēmas uz citu mikroshēmu / vienu shēmu uz citu shēmu.

I2C kopnes protokola galvenā priekšrocība ir tā, ka atbalstīto mikrokontrolleru vai sensorus vai mikroshēmas var savstarpēji savienot tikai ar diviem vadiem. Šī protokola prāta priekšrocība ir tā, ka mēs varam savienot 127 dažādas mikroshēmas vai sensorus / draiverus ar vienu galveno ierīci, kas parasti ir mikrokontrolleris ar tikai 2 vadiem.

Kādi ir divi I2C vadi?

Abi vadi ir SDA un SCL, kas ir attiecīgi Serial Data un Serial clock.

Seriālo pulksteni vai SCL izmanto, lai sinhronizētu datu komunikāciju pa I2C kopni. SDA jeb Serial Data ir datu līnija, kurā faktiskie dati tiek pārsūtīti no galvenā uz vergu un otrādi. Galvenā ierīce kontrolē sērijas pulksteni un izlemj, kura vergu ierīce tai ir nepieciešama saziņai. Neviena vergu ierīce nevar vispirms sākt sakarus, to var izdarīt tikai galvenā ierīce.

Sērijas datu līnija ir divvirzienu un izturīga, pēc katra 8 bitu datu kopas nosūtīšanas saņēmēja ierīce nosūta atpakaļ apstiprinājuma bitu.

Cik ātrs ir I2C protokols?

Sākotnējā I2C protokola versija, kas izstrādāta 1982. gadā, atbalstīja 100 Kbps. Nākamā versija tika standartizēta 1992. gadā, kas atbalstīja 400 kb / s (ātrs režīms) un atbalstīja līdz 1008 ierīcēm. Nākamā versija tika izstrādāta 1998. gadā ar 3,4 Mbps (ātrgaitas režīms).

Vairākas citas I2C versijas tika izstrādātas 2000., 2007., 2012. gadā (ar 5Mbps Ultra-Fast režīmu) un jaunākā I2C versija tika izstrādāta 2014. gadā.

Kāpēc pievilkšanas rezistori I2C kopnē?

SDA un SCL ir “atvērta aizplūšana”, kas nozīmē, ka abas līnijas var iet LOW, bet tās nevar vadīt līnijas HIGH, tāpēc katrai no līnijām ir pievienots pievilkšanas rezistors.

Bet ar lielāko daļu I2C moduļu, piemēram, LCD vai RTC, ir iebūvēti pievilkšanas rezistori, tāpēc mums tas nav jāpievieno, ja vien tas nav norādīts.

Pull-up / Pull-down rezistors: Pull-up rezistors ir rezistors, kas savienots ar barošanas avota + Ve līniju, lai saglabātu līnijas loģisko līmeni līdz HIGH, ja līnija nav ne augsta, ne zema.

Nolaižamais rezistors ir rezistors, kas pievienots barošanas līnijas –Ve līnijai, lai saglabātu līnijas loģisko līmeni LOW, ja līnija nav nedz augsta, nedz zema.

Tas arī novērš trokšņa iekļūšanu līnijās.

Mēs ceram, ka mēs saskrāpējām I2C protokola virsmu. Ja jums nepieciešama plašāka informācija par I2C protokolu, lūdzu, sērfojiet tālāk

YouTube un Google.

Tagad apskatīsim I2C LCD moduli:

I2C LCD moduļa pinouts

LCD displejam ir 16 izejas tapas, kuras var pielodēt tieši 16 X 2 LCD moduļa aizmugurē.

Ieejas tapas ir + 5V, GND, SDA un SCL. Arduino Uno SDA un SCL tapas ir attiecīgi A4 un A5 tapas. Arduino mega SDA ir tapas Nr. 20 un SCL ir tapas Nr. 21.

Salīdzināsim, kā tas izskatās, kad mēs savienojam LCD ar Arduino bez I2C adaptera un ar adapteri.

Bez I2C adaptera:

Arduino bez I2C adaptera

Ar I2C adapteri:

Arduino, izmantojot I2C adapteri

Adapteris ir pielodēts LCD displeja aizmugurē, un, kā redzam, ka citiem uzdevumiem mēs saglabājām daudz GPIO tapu, kā arī mēs varam turpināt pievienot vēl 126 I2C ierīces A4 un A5 tapām.

Lūdzu, ņemiet vērā, ka standarta Liquid Crystal bibliotēka nedarbosies ar šo I2C LCD adapteri, tam ir paredzēta īpaša bibliotēka, kas drīz tiks apskatīta, un mēs parādīsim, kā izmantot šo moduli ar kodēšanas piemēru.

Kā savienot I2C adapteri ar 16 x 2 displeju

Iepriekš minētajās raksta sadaļās mēs uzzinājām I2C protokola pamatus un veicām pamata pārskatu par I2C LCD adaptera moduli. Šajā ziņojumā mēs uzzināsim, kā savienot I2C LCD adaptera moduli ar 16 x 2 LCD displeju, un mēs redzēsim, kā programma ar piemēru.

Galvenā I2C protokola priekšrocība ir tā, ka atbalstītos sensorus / ievades / izvades ierīces varam savienot tikai divās līnijās, un tas ir noderīgi ar Arduino, jo tam ir ierobežotas GPIO tapas.

Tagad redzēsim, kā moduli savienot ar LCD.

Modulim ir 16 izejas un 4 ieejas tapas. Mēs varam vienkārši pielodēt adapteri 16 x 2 LCD displeja aizmugurē. No 4 ieejas tapām abi ir + 5V un GND, pārējie divi ir SDA un SCL.

Mēs varam redzēt, ka mēs arduino saglabājām daudz piespraudes citiem ievades / izvades uzdevumiem.

Mēs varam pielāgot displeja kontrastu, pielāgojot potenciometru ar nelielu skrūvgriezi (izcelts sarkanā lodziņā).

Fona apgaismojumu tagad var kontrolēt pašā programmas kodā:

lcd.backlight ()

Tas ieslēgs LCD displeja apgaismojumu.

lcd.noBacklight ()

Tas izslēgs LCD displeja apgaismojumu.

Mēs varam redzēt, ka ir pievienots džemperis, kas ir iezīmēts sarkanajā lodziņā, ja džemperis tiek noņemts, fona apgaismojums paliek izslēgts neatkarīgi no programmas komandas.

Tagad aparatūras iestatīšana ir pabeigta, tagad redzēsim, kā kodēt. Lūdzu, atcerieties, ka I2C LCD modulim ir nepieciešams īpašs

bibliotēka un iepriekš instalētā “liquidcrystal” bibliotēka nedarbosies.

I2C LCD bibliotēku varat lejupielādēt šeit un pievienot Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

No iepriekšējā ieraksta mēs uzzinājām, ka I2C ierīcēm ir adrese, pēc kuras galvenais vai mikrokontrolleris var identificēt ierīci un sazināties.

Vairumā gadījumu I2C LCD moduļa adrese būtu “0x27”. Bet atšķirīgai ražošanai var būt atšķirīga adrese. Mums programmā jāievada pareizā adrese tikai tad, kad darbosies jūsu LCD displejs.

Lai atrastu adresi, vienkārši savienojiet 5V ar Vcc un GND ar Arduino GND un I2C moduļa SCL tapu ar A5 un SDA ar A4 un augšupielādējiet zemāk esošo kodu.

Tas skenēs pievienotās I2C ierīces un parādīs to adresi.

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

Augšupielādējiet kodu un atveriet sērijveida monitoru.

Kā redzam, tika atklātas divas ierīces un tiek parādītas to adreses, taču, ja vēlaties atrast tikai I2C LCD moduļa adresi, skenēšanas laikā nevajadzētu pievienot citas I2C ierīces.
Tātad nobeigumā mēs saņēmām adresi “0x27”.

Tagad mēs gatavosim digitālo pulksteni kā piemēru, jo ir divas I2C ierīces, LCD modulis un RTC vai reālā laika pulksteņa modulis. Abi moduļi tiks savienoti ar diviem vadiem.

Lejupielādējiet šo bibliotēku:
RTC bibliotēka: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Kā iestatīt laiku RTC

• Atveriet Arduino IDE un dodieties uz File> Example> DS1307RTC> set time.
• Augšupielādējiet kodu ar pabeigtu aparatūru un atvērtu sērijveida monitoru, un viss ir pabeigts.

Ķēdes shēma:

Programma:

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

Piezīme:

LiquidCrystal_I2C lcd (0x27, 16, 2)

“0x27” ir adrese, kuru atradām skenējot, un 16 un 2 ir rindu un kolonnu skaits LCD displejā.

RTC gadījumā mums nav jāatrod adrese, bet mēs to atradām, skenējot “0x68”, taču tik un tā RTC bibliotēka to apstrādās.

Tagad redzēsim, cik daudz mēs samazinājām vadu pārslodzi un saglabājām GPIO tapas Arduino.

LCD displejam ir pievienoti tikai 4 vadi, kas izcelti sarkanā lodziņā.

Arī no Arduino ir pievienoti tikai 4 vadi, un RTC modulim ir vienādas līnijas.

Tagad esat ieguvis pamatzināšanas par I2C un to, kā izmantot I2C LCD adaptera moduli.
Vai jums patīk šis ieraksts? Vai jums ir kādi jautājumi? Lūdzu, izsakiet komentāru sadaļā, jūs varat saņemt ātru atbildi.




Pāri: Vienkārša tranzistora diode testa ķēde Nākamais: izveidojiet šo IR tālvadības pults diapazona paplašinātāja shēmu