Uvod u I2C LCD adapter modul

Uvod u I2C LCD adapter modul

U ovom ćemo postu pogledati LCD modul zasnovan na 'I2C' ili 'IIC' ili 'I square C', koji će smanjiti žičane veze između Arduina i LCD zaslona na samo 2 žice, uz uštedu tona GPIO pinova za ostali senzori / pogoni itd.



Prije nego što razgovaramo o I2C modulu LCD adaptera, važno je razumjeti što je I2C sabirnica i kako to radi.

No, svejedno za rad s ovim spomenutim LCD adapterom ne trebate biti stručnjak za I2C protokol.





Ilustracija veze I2C:

Ilustracija veze I2C:

I2C ili IIC je skraćenica od 'Inter-Integrated Circuit' serijska računalna sabirnica koju su izumili Philipsovi poluvodiči, danas poznati kao NXP poluvodiči. Ovaj sustav sabirnica izumljen je 1982. godine.

Što je autobus?

Sabirnica je skupina kabela / žica koja prenosi podatke s jednog čipa na drugi čip / jednu pločicu na drugu pločicu.



Glavna prednost I2C protokola sabirnice je u tome što podržani mikrokontroler ili senzori ili čipovi mogu biti međusobno povezani sa samo dvije žice. Prednost ovog protokola koja zbunjuje misli je ta što možemo povezati 127 različitih čipova ili senzora / upravljačkih programa na jedan glavni uređaj koji je obično mikrokontroler sa samo 2 žice.

Koje su dvije I2C žice?

Dvije žice su SDA i SCL koje su serijski podaci i serijski sat.

Serijski sat ili SCL koristi se za sinkronizaciju podatkovne komunikacije preko I2C sabirnice. SDA ili serijski podaci podatkovni je redak u kojem se stvarni podaci prenose od glavnog prema podređenom i obrnuto. Glavni uređaj kontrolira serijski sat i odlučuje za koji slave uređaj treba komunicirati. Nijedan slave uređaj ne može započeti komunikaciju prvi, to može učiniti samo glavni uređaj.

Serijska linija podataka dvosmjerna je i robusna, nakon slanja svakog skupa 8-bitnih podataka uređaj za primanje vraća bit potvrde.

Koliko je brz I2C protokol?

Izvorna verzija protokola I2C razvijena 1982. podržavala je 100 Kbps. Sljedeća verzija standardizirana je 1992. godine koja je podržavala 400Kbps (brzi način) i podržavala do 1008 uređaja. Sljedeća verzija razvijena je 1998. godine s 3,4 Mbps (način velike brzine).

Nekoliko drugih verzija I2C razvijeno je u godinama 2000, 2007, 2012 (s ultrabrzim načinom rada 5 Mbps), a najnovija verzija I2C razvijena je 2014. godine.

Zašto povlačni otpornici u I2C sabirnici?

SDA i SCL su 'otvoreni odvod', što znači da obje linije mogu ići NISKO, ali ne mogu voziti linije VISOKO, tako da je na svaku od linija povezan priključni otpor.

No, kod većine I2C modula poput LCD-a ili RTC-a ugrađeni su otpornici na izvlačenje, tako da ih ne trebamo spajati ako to nije navedeno.

Pull-up / Pull-down otpor: pull-up otpornik je otpornik povezan na + Ve liniju napajanja kako bi se održala logička razina VISOKA ako linija nije ni visoka ni niska.

Padni otpornik je otpornik spojen na –Ve napajanja kako bi se održala logička razina LOW-a ako linija nije ni visoka ni niska.

Ovo također sprječava ulazak buke u vodove.

Nadamo se da smo ogrebali površinu I2C protokola, ako su vam potrebne dodatne informacije o I2C protokolu, molimo vas da surfate dalje

YouTube i Google.

Pogledajmo sada I2C LCD modul:

Izobraznice I2C LCD modula

Postoji 16 izlaznih pinova za LCD zaslon koji se mogu zalemiti izravno na stražnju stranu 16 X 2 LCD modula.

Ulazni pinovi su + 5V, GND, SDA i SCL. SDA i SCL pinovi na Arduino Uno su pinovi A4 i A5. Za Arduino mega SDA je pin # 20, a SCL pin # 21.

Usporedimo kako izgleda kad LCD povežemo s Arduinom bez I2C adaptera i s adapterom.

Bez I2C adaptera:

Arduino bez I2C adaptera

S I2C adapterom:

Arduino pomoću I2C adaptera

Adapter je zalemljen na stražnjoj strani LCD zaslona i kao što vidimo da smo spremili gomilu GPIO pinova za druge zadatke, a također možemo nastaviti dodavati još 126 I2C uređaja na igle A4 i A5.

Imajte na umu da standardna biblioteka Liquid Crystal neće raditi s ovim I2C LCD adapterom, za to postoji posebna biblioteka, koja će uskoro biti pokrivena, a mi ćemo vam pokazati kako koristiti ovaj modul s primjerom kodiranja.

Kako spojiti I2C adapter na zaslon 16 x 2

U gornjim odjeljcima članka naučili smo osnove I2C protokola i napravili osnovni pregled I2C LCD adapterskog modula. U ovom ćemo postu naučiti kako povezati I2C LCD adapter modul na LCD zaslon 16 x 2 i vidjet ćemo kako to programirati na primjeru.

Glavna prednost I2C protokola je u tome što podržane senzore / ulazno / izlazne uređaje možemo povezati u samo dvije linije, a korisno je za Arduino jer ima ograničene GPIO pinove.

Sada da vidimo kako spojiti modul na LCD.

Modul ima 16 izlaznih igla i 4 ulaza. Možemo samo zalemiti adapter na stražnju stranu LCD zaslona 16 x 2. Od 4 ulazna pina, dva su + 5V i GND, ostatak od njih su SDA i SCL.

Vidimo da smo na Arduinu spremili puno pribadača za druge ulazno / izlazne zadatke.

Kontrast zaslona možemo prilagoditi podešavanjem potenciometra malim odvijačem (označeno crvenim okvirom).

Pozadinskim osvjetljenjem sada se može upravljati u samom programskom kodu:

lcd.pozadinsko svjetlo ()

Ovo će uključiti pozadinsko osvjetljenje LCD zaslona.

lcd.noBacklight ()

Ovo će isključiti pozadinsko osvjetljenje LCD zaslona.

Vidimo da je spojen kratkospojnik, što je označeno crvenim okvirom, ako se prespojnik ukloni, pozadinsko osvjetljenje ostaje ISKLJUČENO bez obzira na naredbu programa.

Sad je postavka hardvera gotova, sada ćemo vidjeti kako kodirati. Imajte na umu da I2C LCD modul treba posebno

i unaprijed instalirana knjižnica 'liquidcrystal' neće raditi.

Ovdje možete preuzeti I2C LCD biblioteku i dodati u Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Iz prethodnog posta saznali smo da I2C uređaji imaju adresu po kojoj master ili mikrokontroler mogu prepoznati uređaj i komunicirati.

U većini slučajeva, za I2C LCD modul adresa bi bila '0x27'. Ali različita proizvodnja može imati različitu adresu. Moramo unijeti točnu adresu u program samo tada će vaš LCD zaslon funkcionirati.

Da biste pronašli adresu, samo spojite 5V na Vcc i GND na GND Arduina i SCL pin I2C modula na A5 i SDA na A4 i prenesite donji kod.

Ovo će skenirati povezane I2C uređaje i prikazati njihovu adresu.

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

Prenesite kôd i otvorite serijski monitor.

Kao što vidimo, otkrivena su dva uređaja i prikazane su njihove adrese, ali ako želite pronaći samo adresu I2C LCD modula, tijekom skeniranja ne biste trebali povezati nijedan drugi I2C uređaj.
Dakle, u zaključku smo dobili adresu '0x27'.

Sada ćemo kao primjer napraviti digitalni sat jer postoje dva I2C uređaja, LCD modul i RTC ili modul sata u stvarnom vremenu. Oba modula bit će povezana s dvije žice.

Preuzmite sljedeću biblioteku:
RTC biblioteka: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Kako postaviti vrijeme na RTC

• Otvorite Arduino IDE i idite na Datoteka> Primjer> DS1307RTC> postavi vrijeme.
• Učitajte kod s dovršenim hardverom i otvorite serijski monitor i gotovi ste.

Kružni dijagram:

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

Bilješka:

LCD LiquidCrystal_I2C (0x27, 16, 2)

'0x27' je adresa koju smo pronašli skeniranjem, a 16 i 2 su broj redaka i stupaca na LCD zaslonu.

Za RTC ne trebamo pronaći adresu, ali smo je pronašli dok smo skenirali '0x68', ali svejedno će se RTC biblioteka nositi s tim.

Sada da vidimo koliko smo smanjili zagušenje žica i spremili GPIO pinove na Arduino.

Na LCD zaslon spojene su samo 4 žice, označene crvenim okvirom.

Također su samo 4 žice povezane s Arduinom, a RTC modul dijeli iste vodove.

Do sada ste stekli osnovno znanje o I2C i načinu korištenja I2C LCD adapterskog modula.
Sviđa li vam se ovaj post? Imate li kakvih pitanja? Iznesite u odjeljku za komentare, možda ćete dobiti brzi odgovor.




Prethodno: Jednostavni krug ispitivača diodnih tranzistora Dalje: Napravite ovaj sklop za proširenje dometa IR daljinskog upravljača