Sissejuhatus I2C LCD-adapteri moodulisse

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles postituses vaatame 'I2C' või 'IIC' või 'I ruut C' põhinevat LCD-adapteri moodulit, mis vähendab juhtmete ühendamist Arduino ja LCD-ekraani vahel vaid kaheks juhtmeks, säästes ka tonni GPIO-tihvte muud andurid / ajamid jne

Enne kui arutame I2C LCD-adapterimooduli üle, on oluline mõista, mis on I2C-siin ja kuidas see töötab.



Kuid igal juhul ei pea selle mainitud LCD-adapteriga töötamiseks olema I2C-protokolli ekspert.

I2C ühenduse illustratsioon:

I2C ühenduse illustratsioon:

I2C või IIC tähistab „Integreeritud vooluahelat” - seeriaarvutibussi, mille leiutasid Philipsi pooljuhid, tänapäeval tuntud kui NXP pooljuhid. See bussisüsteem leiutati 1982. aastal.



Mis on buss?

Buss on rühm kaableid / juhtmeid, mis kannavad andmeid ühelt kiibilt teisele kiibile / ühele trükkplaadile teisele trükkplaadile.

I2C-siini protokolli peamine eelis on see, et toetatud mikrokontrollerit või andureid või kiipe saab ühendada vaid kahe juhtmega. Selle protokolli meelepärane eelis on see, et saame ühendada 127 erinevat kiipi või andurit / draiverit ühe põhiseadmega, mis on tavaliselt vaid kahe juhtmega mikrokontroller.

Mis on kaks I2C juhtmest?

Need kaks juhet on SDA ja SCL, mis on vastavalt seeriandmed ja seeriakell.

Seeriakella või SCL-i kasutatakse andmeside sünkroonimiseks I2C-siini kaudu. SDA ehk seeriandmed on andmerida, milles tegelikud andmed edastatakse isandalt orjale ja vastupidi. Põhiseade juhib jadakella ja otsustab, millise orjaseadme jaoks ta peab suhtlema. Ükski orjaseade ei saa kõigepealt sidet algatada, seda saab teha ainult põhiseade.

Seeriandmete rida on kahesuunaline ja kindel, pärast iga 8-bitise andmekogumi saatmist saadab vastuvõttev seade tagasi kinnitusbiti.

Kui kiire on I2C protokoll?

1982. aastal välja töötatud I2C protokolli algne versioon toetas 100 kbit / s. Järgmine versioon standardiseeriti 1992. aastal, mis toetas kiiret režiimi 400Kbps ja toetas kuni 1008 seadet. Järgmine versioon töötati välja 1998. aastal 3,4 Mbps (kiire režiim).

Mitmed muud I2C versioonid töötati välja aastatel 2000, 2007, 2012 (5Mbps Ultra-Fast režiimiga) ja I2C uusim versioon töötati välja 2014. aastal.

Miks tõmbetakistid I2C siinis?

SDA ja SCL on avatud äravooluga, mis tähendab, et mõlemad liinid võivad minna MADALA, kuid see ei suuda liine KÕRGELT juhtida, nii et mõlemale liinile on ühendatud tõmbetakisti.

Kuid enamikul I2C moodulitest, nagu LCD või RTC, on sisseehitatud tõmmetakistid, nii et me ei pea seda ühendama, kui see pole täpsustatud.

Pull-up / Pull-down takisti: Pull-up-takisti on takisti, mis on ühendatud toiteallika + Ve liiniga, et hoida HIGH-i liini loogika taset, kui liin pole ei kõrge ega madal.

Allatõmbetakisti on takisti, mis on ühendatud toiteallikaga –Ve, et hoida liini loogika taset madalal, kui liin pole ei kõrge ega madal.

See hoiab ära ka müra sisenemise liinidesse.

Loodame, et kriimustasime I2C protokolli pinda. Kui vajate I2C protokolli kohta lisateavet, surfake edasi

YouTube ja Google.

Vaatame nüüd I2C LCD moodulit:

I2C LCD-mooduli pistikud

LCD-ekraanil on 16 väljundnõela, mida saab jootma otse 16 X 2 LCD-mooduli taha.

Sisendnõelad on + 5V, GND, SDA ja SCL. Arduino Uno SDA ja SCL tihvtid on vastavalt A4 ja A5. Arduino jaoks on mega SDA pin # 20 ja SCL on pin # 21.

Võrdleme, kuidas see välja näeb, kui ühendame LCD-ühenduse Arduinoga ilma I2C-adapterita ja adapteriga.

Ilma I2C-adapterita:

Arduino ilma I2C-adapterita

I2C adapteriga:

Arduino, kasutades I2C-adapterit

Adapter on joodetud vedelkristallekraani tagaküljele ja nagu näeme, et salvestasime koormusi GPIO-tihvte muude ülesannete jaoks ning saame jätkata ka veel 126 I2C-seadme lisamist tihvtidele A4 ja A5.

Pange tähele, et standardne vedelkristallide teek selle I2C LCD-adapteriga ei tööta, selle jaoks on olemas spetsiaalne teek, mis on varsti kaetud ja me näitame teile, kuidas seda moodulit kasutada koos kodeerimisnäitega.

Kuidas ühendada I2C-adapter 16 x 2 ekraaniga

Artikli ülaltoodud jaotistes õppisime I2C protokolli põhitõdesid ja tegime põhilise ülevaate I2C LCD-adapterimoodulist. Selles postituses õpime, kuidas ühendada I2C LCD-adapteri moodul 16 x 2 LCD-ekraaniga, ja näeme, kuidas programmi koos näitega.

I2C-protokolli peamine eelis on see, et saame toetatud andurid / sisend- / väljundseadmed ühendada vaid kahe reaga ja see on Arduino jaoks kasulik, kuna sellel on piiratud GPIO tihvtid.

Vaatame nüüd, kuidas moodul LCD-ga ühendada.

Moodulil on 16 väljundnõela ja 4 sisendnõela. Saame adapteri lihtsalt jootma 16 x 2 LCD ekraani tagaküljele. Neljast sisendnõelast on need kaks + 5V ja GND, ülejäänud kaks on SDA ja SCL.

Näeme, et salvestasime Arduinos palju sisendeid / väljundülesandeid.

Ekraani kontrastsust saab reguleerida potentsiomeetri reguleerimisega väikese kruvikeerajaga (punases kastis esile tõstetud).

Taustavalgust saab nüüd juhtida programmi koodis:

lcd.backlight ()

See lülitab LCD-ekraani taustvalgustuse SISSE.

lcd.noBacklight ()

See lülitab LCD-ekraani taustvalgustuse välja.

Näeme, et ühendatud on hüppaja, mis on punases kastis esile tõstetud. Kui hüppaja eemaldatakse, jääb taustvalgus VÄLJA, hoolimata programmi käsust.

Nüüd on riistvara seadistamine tehtud, nüüd vaatame, kuidas kodeerida. Pidage meeles, et I2C LCD-moodul vajab erilist

ja eelinstallitud „liquidcrystal” teek ei tööta.

Siit saate alla laadida I2C LCD-teegi ja lisada Arduino IDE-le:

github.com/marcoschwartz/LiquidCrystal_I2C

Eelmisest postitusest saime teada, et I2C-seadmetel on aadress, mille järgi juht või mikrokontroller saavad seadme tuvastada ja suhelda.

Enamasti oleks I2C LCD-mooduli aadressiks “0x27”. Kuid erineval tootmisel võib olla erinev aadress. Peame sisestama programmi õige aadressi alles siis, kui teie LCD-ekraan töötab.

Aadressi leidmiseks ühendage lihtsalt 5V Vcc-ga ja GND Arduino GND-ga ning I2C mooduli SCL-tihvt A5-ga ja SDA A4-ga ning laadige alla kood.

See skannib ühendatud I2C seadmed ja näitab nende aadressi.

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

Laadige kood üles ja avage jademonitor.

Nagu näeme, tuvastati kaks seadet ja kuvatakse nende aadressid, kuid kui soovite leida ainult I2C LCD mooduli aadressi, ei tohiks te skannimise ajal ühendada ühtegi teist I2C seadet.
Nii et kokkuvõtteks saime aadressi “0x27”.

Nüüd teeme näitena digitaalse kella, sest seal on kaks I2C seadet, LCD moodul ja RTC ehk reaalajas kellamoodul. Mõlemad moodulid ühendatakse kahe juhtmega.

Laadige alla järgmine teek:
RTC teek: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Kuidas määrata RTC aeg

• Avage Arduino IDE ja navigeerige jaotisse Fail> Näide> DS1307RTC> määratud aeg.
• Laadige kood koos komplekteeritud riistvara ja avatud seeriamonitoriga üles ja kõik on valmis.

Skeem:

Programm:

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

Märge:

LiquidCrystal_I2C lcd (0x27, 16, 2)

'0x27' on aadress, mille leidsime skannimise teel ning 16 ja 2 on ridade ja veergude arv LCD-ekraanil.

RTC jaoks pole meil vaja aadressi leida, kuid leidsime skannimisel “0x68”, kuid igatahes saab RTC teek sellega hakkama.

Vaatame nüüd, kui palju me vähendasime traadi ülekoormust ja salvestasime Arduinole GPIO tihvte.

LCD-ekraaniga on ühendatud ainult 4 juhtmest, mis on esile tõstetud punase kastiga.

Samuti on Arduinost ühendatud ainult 4 juhet ja RTC moodul jagab samu liine.

Nüüdseks olete omandanud põhiteadmised I2C ja I2C LCD-adapterimooduli kasutamise kohta.
Kas teile meeldib see postitus? Kas teil on küsimusi? Palun öelge kommentaaride jaotises, võite saada kiire vastuse.




Paari: Lihtne transistori dioodi tester Järgmine: tehke see IR kaugjuhtimispuldi vahemiku laiendaja vooluring