Uvod v adapter I2C LCD

Preizkusite Naš Instrument Za Odpravo Težav





V tem prispevku si bomo ogledali modul LCD, ki temelji na “I2C” ali “IIC” ali “I square C”, ki bo zmanjšal žične povezave med Arduino in LCD zaslonom na samo 2 žici, prihranil pa bo tudi tone GPIO nožic za drugi senzorji / pogoni itd.

Preden se pogovorimo o I2C adapter modulu LCD, je pomembno razumeti, kaj je vodilo I2C in kako deluje.



Vseeno vam za delo s tem omenjenim adapterjem LCD ni treba biti strokovnjak s protokolom I2C.

Prikaz povezave I2C:

Prikaz povezave I2C:

I2C ali IIC pomeni „Inter-Integrated Circuit“ je serijsko računalniško vodilo, ki so ga izumili Philipsovi polprevodniki, danes znani kot NXP polprevodniki. Ta avtobusni sistem je bil izumljen leta 1982.



Kaj je avtobus?

Bus je skupina kablov / žic, ki prenašajo podatke z enega čipa na drug čip / eno vezje na drugo vezje.

Glavna prednost protokola vodila I2C je v tem, da je podprti mikrokrmilnik ali senzorje ali čipe mogoče povezati samo z dvema žicama. Prednost tega protokola je neverjetna v tem, da lahko 127 različnih čipov ali senzorjev / gonilnikov povežemo z eno glavno napravo, ki je običajno mikrokrmilnik s samo dvema žicama.

Kateri sta dve žici I2C?

Dve žici sta SDA in SCL, ki sta zaporedni podatki oziroma serijska ura.

Zaporedna ura ali SCL se uporablja za sinhronizacijo podatkovne komunikacije prek vodila I2C. SDA ali serijski podatki so podatkovna vrstica, v kateri se dejanski podatki prenašajo od glavnega do pomožnega in obratno. Glavna naprava nadzoruje serijsko uro in se odloči, katero pomožno napravo mora komunicirati. Nobena pomožna naprava ne more najprej začeti komunikacije, lahko samo glavna naprava.

Vrstica s serijskimi podatki je dvosmerna in robustna, po vsakem pošiljanju 8-bitnih podatkov prejemna naprava pošlje nazaj potrditveni bit.

Kako hiter je protokol I2C?

Prvotna različica protokola I2C, razvita leta 1982, je podpirala 100 Kbps. Naslednja različica je bila standardizirana leta 1992, ki je podpirala 400Kbps (hitri način) in podpirala do 1008 naprav. Naslednja različica je bila razvita leta 1998 s hitrostjo 3,4 Mbps (način visoke hitrosti).

V letih 2000, 2007, 2012 (z ultrahitrim načinom 5 Mb / s) je bilo razvitih več drugih različic I2C, leta 2014 pa je bila razvita najnovejša različica I2C.

Zakaj vlečni upori v vodilu I2C?

SDA in SCL sta 'odprta za odtekanje', kar pomeni, da gresta lahko obe liniji NIZKO, vendar ne moreta voziti linij VISOKO, zato je na vsako linijo priključen vlečni upor.

Toda pri večini modulov I2C, kot sta LCD ali RTC, so vgrajeni vlečni upori, zato ga ni treba priključiti, razen če je tako določeno.

Pull-up / Pull-down upor: pull-up upor je upor, priključen na + Ve napajalne enote, da ohrani logično raven linije HIGH, če linija ni niti visoka niti nizka.

Spustni upor je upor, priključen na –Ve napajalne linije, da ohrani logično raven črte na LOW, če linija ni niti visoka niti nizka.

To tudi preprečuje vstop hrupa v proge.

Upamo, da smo opraskali površino protokola I2C, če potrebujete več informacij o protokolu I2C, prosimo, surfajte naprej

YouTube in Google.

Zdaj pa si oglejmo modul LCD I2C:

I2C izrez modula LCD

Za LCD zaslon je na voljo 16 izhodnih nožic, ki jih je mogoče spajkati neposredno na zadnji del modula LCD 16 X 2.

Vhodni zatiči so + 5V, GND, SDA in SCL. Zatiča SDA in SCL na Arduino Uno sta zatiča A4 in A5. Za Arduino mega SDA je pin # 20, SCL pa pin # 21.

Primerjajmo, kako izgleda, ko LCD priključimo na Arduino brez adapterja I2C in z adapterjem.

Brez adapterja I2C:

Arduino brez adapterja I2C

Z adapterjem I2C:

Arduino z uporabo adapterja I2C

Adapter je spajkan na zadnji strani LCD zaslona in kot vidimo, smo prihranili veliko GPIO nožic za druga opravila, prav tako pa lahko še naprej dodajamo še 126 naprav I2C na nožici A4 in A5.

Upoštevajte, da standardna knjižnica Liquid Crystal ne bo delovala s tem adapterjem LCD I2C, za to obstaja posebna knjižnica, ki bo kmalu obravnavana in pokazali vam bomo, kako uporabljati ta modul s primerom kodiranja.

Kako povezati adapter I2C na zaslon 16 x 2

V zgornjih odsekih članka smo se naučili osnov protokola I2C in izvedli osnovni pregled adapterja I2C LCD. V tem prispevku se bomo naučili, kako povezati adapter I2C LCD adapterja na 16 x 2 LCD zaslon, in videli bomo, kako programirati na primeru.

Glavna prednost protokola I2C je, da lahko podprte senzorje / vhodno / izhodne naprave povežemo v samo dve vrstici, kar je koristno pri Arduinu, saj ima omejene GPIO nožice.

Zdaj pa poglejmo, kako modul priključimo na LCD.

Modul ima 16 izhodnih zatičev in 4 vhodne zatiče. Adapter lahko le spajkamo na zadnji del LCD zaslona 16 x 2. Od 4 vhodnih zatičev sta oba + 5V in GND, preostala dva sta SDA in SCL.

Vidimo, da smo pri Arduinu prihranili veliko zatičev za druge vhodno / izhodne naloge.

Kontrast zaslona lahko prilagodimo z nastavitvijo potenciometra z majhnim izvijačem (označeno v rdečem polju).

Osvetlitev ozadja je zdaj mogoče nadzorovati v sami programski kodi:

lcd. backlight ()

To vklopi osvetlitev ozadja na LCD zaslonu.

lcd.noBacklight ()

S tem izklopite osvetlitev ozadja na LCD zaslonu.

Vidimo, da je povezan mostiček, ki je označen v rdečem polju, če je mostiček odstranjen, osvetlitev ozadja ostane IZKLJUČENA ne glede na ukaz programa.

Zdaj je nastavitev strojne opreme končana, zdaj poglejmo, kako kodirati. Ne pozabite, da I2C LCD modul potrebuje posebno

in vnaprej nameščena knjižnica »liquidcrystal« ne bosta delovala.

Knjižnico I2C LCD lahko prenesete od tukaj in dodate v Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Iz prejšnjega prispevka smo izvedeli, da imajo naprave I2C naslov, po katerem lahko glavni ali mikrokrmilnik prepozna napravo in komunicira.

V večini primerov bi bil za modul LCD I2C naslov »0x27«. Toda različna izdelava ima lahko drugačen naslov. Pravilni naslov moramo vnesti v program šele takrat, ko bo deloval vaš LCD zaslon.

Če želite najti naslov, samo 5V priključite na Vcc in GND na GND Arduina in SCL zatič modula I2C na A5 in SDA na A4 ter naložite spodnjo kodo.

S tem bodo skenirane povezane naprave I2C in prikazan njihov naslov.

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

Naložite kodo in odprite serijski monitor.

Kot vidimo, sta bili zaznani dve napravi in ​​prikazani so njihovi naslovi, če pa želite najti samo naslov modula LCD I2C, med skeniranjem ne smete priključiti nobene druge naprave I2C.
Tako smo v zaključku dobili naslov '0x27'.

Zdaj bomo na primer izdelali digitalno uro, ker obstajata dve napravi I2C, LCD modul in RTC ali modul ure v realnem času. Oba modula bosta povezana z dvema žicama.

Prenesite naslednjo knjižnico:
Knjižnica RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Kako nastaviti čas na RTC

• Odprite Arduino IDE in se pomaknite do Datoteka> Primer> DS1307RTC> nastavite čas.
• Naložite kodo z dokončano strojno opremo in odprite serijski monitor in končali ste.

Shema vezja:

Program:

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

Opomba:

LCD LiquidCrystal_I2C (0x27, 16, 2)

'0x27' je naslov, ki smo ga našli s skeniranjem, 16 in 2 pa sta število vrstic in stolpcev na LCD zaslonu.

Za RTC naslova ni treba najti, vendar smo ga našli med skeniranjem '0x68', vendar bo knjižnica RTC to vseeno obravnavala.

Zdaj pa poglejmo, koliko smo zmanjšali zastoje žic in shranili GPIO nožice na Arduino.

Na LCD zaslon so označene samo 4 žice, označene v rdečem polju.

Iz Arduina so priključene tudi samo 4 žice, modul RTC pa deli iste vodnike.

Do zdaj ste že pridobili osnovno znanje o I2C in o uporabi adapterja I2C LCD.
Vam je ta objava všeč? Imaš kakšno vprašanje? Prosimo, izrazite v oddelku za komentarje, morda boste dobili hiter odgovor.




Prejšnja: Preprosto vezje testerja tranzistorskih diod Naprej: naredite to vezje IR daljinskega upravljalnika