Introduktion til I2C LCD-adaptermodul

Prøv Vores Instrument Til At Fjerne Problemer





I dette indlæg skal vi se på 'I2C' eller 'IIC' eller 'I square C' -baseret LCD-adaptermodul, hvilket reducerer ledningsforbindelser mellem Arduino og LCD-skærm til kun 2 ledninger, hvilket også sparer masser af GPIO-ben andre sensorer / drev osv.

Før vi diskuterer om I2C LCD-adaptermodul, er det vigtigt at forstå, hvad I2C-bus er, og hvordan den fungerer.



Men alligevel behøver du ikke være ekspert med I2C-protokol for at arbejde med denne omtale LCD-adapter.

Illustration af I2C-forbindelse:

Illustration af I2C-forbindelse:

I2C eller IIC står for 'Inter-Integrated Circuit' er en seriel computerbus opfundet af Philips halvledere, i dag kendt som NXP halvledere. Dette bussystem blev opfundet i 1982.



Hvad er bus?

Bus er en gruppe kabler / ledninger, der fører data fra en chip til en anden chip / et printkort til et andet printkort.

Den største fordel ved I2C-busprotokol er, at den understøttede mikrokontroller eller sensorer eller chips kan sammenkobles med kun to ledninger. Den sindssyge fordel ved denne protokol er, at vi kan forbinde 127 forskellige chips eller sensorer / drivere til en masterenhed, som normalt er en mikrocontroller med kun 2 ledninger.

Hvad er de to I2C-ledninger?

De to ledninger er SDA og SCL, som er henholdsvis Serial Data og Serial Clock.

Serialuret eller SCL bruges til at synkronisere datakommunikationen via I2C-bussen. SDA eller Serial Data er datalinjen, hvori de faktiske data overføres fra master til slave og omvendt. Master-enheden styrer det serielle ur og bestemmer for hvilken slave-enhed den skal kommunikere. Ingen slaveenheder kan starte en kommunikation først, kun masterenheden kan gøre.

Den serielle datalinje er tovejs og robust, efter hvert sæt af 8 bit data er sendt, sender den modtagende enhed en kvitteringsbit tilbage.

Hvor hurtig I2C-protokol er?

Den oprindelige version af I2C-protokollen, der blev udviklet i 1982, understøttede 100 Kbps. Den næste version blev standardiseret i 1992, som understøttede 400 Kbps (hurtig tilstand) og understøttede op til 1008 enheder. Den næste version blev udviklet i 1998 med 3,4 Mbps (High Speed ​​Mode).

Flere andre I2C-versioner blev udviklet i årene 2000, 2007, 2012 (med 5Mbps Ultra-Fast-tilstand), og den seneste version af I2C blev udviklet i 2014.

Hvorfor pull-up modstande i I2C bus?

SDA og SCL er 'open-drain', hvilket betyder, at begge linjer kan gå LAVT, men det kan ikke drive linjerne HØJ, så en pull-up-modstand er forbundet på hver af linjerne.

Men med de fleste I2C-moduler som LCD eller RTC har der indbygget pull up-modstande, så vi behøver ikke at forbinde en, medmindre det er specificeret.

Pull-up / Pull-down-modstand: Pull-up-modstand er en modstand, der er tilsluttet + Ve-linjen i forsyningen for at holde logikniveauet for en linje til HIGH, hvis linjen hverken er høj eller lav.

En pull-down-modstand er en modstand, der er forbundet med –Ve-linjen i forsyningen for at holde det logiske niveau for en linje til LAV, hvis linjen hverken er høj eller lav.

Dette forhindrer også støj i linjerne.

Vi håber, at vi ridsede overfladen af ​​I2C-protokollen. Hvis du har brug for flere oplysninger om I2C-protokollen, skal du surfe videre

YouTube og Google.

Lad os nu se på I2C LCD-modulet:

I2C LCD-modul pinouts

Der er 16 outputstifter til LCD-skærm, som kan loddes direkte på bagsiden af ​​16 X 2 LCD-modulet.

Indgangsstifterne er + 5V, GND, SDA og SCL. SDA- og SCL-stifterne på Arduino Uno er henholdsvis stifter A4 og A5. For Arduino er mega SDA pin nr. 20 og SCL er pin nr. 21.

Lad os sammenligne, hvordan det ser ud, når vi tilslutter LCD til Arduino uden I2C-adapteren og med adapteren.

Uden I2C-adapter:

Arduino uden I2C-adapter

Med I2C adapter:

Arduino ved hjælp af I2C-adapter

Adapteren er loddet på bagsiden af ​​LCD-skærmen, og da vi kan se, gemte vi masser af GPIO-ben til andre opgaver, og vi kan også fortsætte med at tilføje 126 flere I2C-enheder til ben A4 og A5.

Bemærk, at Standard Liquid Crystal-biblioteket ikke fungerer med denne I2C LCD-adapter, der er et specielt bibliotek til dette, som snart vil blive dækket, og vi viser dig, hvordan du bruger dette modul med kodeeksempel.

Sådan tilsluttes I2C-adapter til 16 x 2 skærm

I ovenstående afsnit af artiklen lærte vi det grundlæggende i I2C-protokollen og tog en grundlæggende oversigt over I2C LCD-adaptermodul. I dette indlæg skal vi lære at forbinde I2C LCD-adaptermodulet til 16 x 2 LCD-display, og vi vil se, hvordan programmet med et eksempel.

Den største fordel ved I2C-protokollen er, at vi kan tilslutte de understøttede sensorer / input / output-enheder på kun to linjer, og det er nyttigt med Arduino, da det har begrænsede GPIO-ben.

Lad os nu se, hvordan du forbinder modulet til LCD.

Modulet har 16 outputstifter og 4 inputstifter. Vi kan bare lodde adapteren bag på 16 x 2 LCD-skærmen. Ud af de 4 indgangsstifter er de to + 5V og GND, resten af ​​de to er SDA og SCL.

Vi kan se, at vi gemte mange pins på Arduino til andre input / output-opgaver.

Vi kan justere kontrasten på skærmen ved at justere potentiometeret med en lille skruetrækker (fremhævet i rød boks).

Baggrundsbelysningen kan nu styres i selve programkoden:

lcd.backlight ()

Dette tænder baggrundsbelysningen på LCD-skærmen.

lcd.noBaglys ()

Dette slukker for baggrundsbelysningen på LCD-skærmen.

Vi kan se, at der er tilsluttet en jumper, som er fremhævet i rød boks. Hvis jumperen fjernes, forbliver baggrundslyset FRA uanset programkommandoen.

Nu er hardwareopsætningen færdig. Lad os nu se, hvordan man koder. Husk, at I2C LCD-modul har brug for specielt

biblioteket og det forudinstallerede 'liquidcrystal' -bibliotek fungerer ikke.

Du kan downloade I2C LCD-biblioteket herfra og føje til Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Fra det forrige indlæg lærte vi, at I2C-enheder har en adresse, som master eller mikrocontroller kan identificere enheden og kommunikere med.

I de fleste tilfælde ville adressen til I2C LCD-modulet være '0x27'. Men forskellig fremstilling kan have en anden adresse. Vi skal først indtaste den korrekte adresse i programmet, så fungerer din LCD-skærm.

For at finde adressen skal du bare forbinde 5V til Vcc og GND til GND af Arduino og SCL-pin i I2C-modul til A5 og SDA til A4 og uploade nedenstående kode.

Dette scanner de tilsluttede I2C-enheder og viser deres adresse.

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

Upload koden, og åbn den serielle skærm.

Som vi kan se, blev der registreret to enheder, og deres adresser vises, men hvis du kun vil finde adressen på I2C LCD-modulet, skal du ikke forbinde andre I2C-enheder under scanning.
Så til sidst fik vi adressen '0x27'.

Nu skal vi lave et digitalt ur som eksempel, fordi der er to I2C-enheder, LCD-modulet og RTC eller et realtidsurmodul. Begge moduler forbindes med to ledninger.

Download følgende bibliotek:
RTC-bibliotek: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Sådan indstilles tiden til RTC

• Åbn Arduino IDE, og naviger til Filer> Eksempel> DS1307RTC> indstil tid.
• Upload koden med færdig hardware og åben seriel skærm, så er du færdig.

Kredsløbsdiagram:

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

Bemærk:

LiquidCrystal_I2C lcd (0x27, 16, 2)

“0x27” er den adresse, som vi fandt ved scanning, og 16 og 2 er antallet af rækker og kolonner på LCD-skærmen.

For RTC behøver vi ikke finde adressen, men vi fandt under scanning af '0x68', men alligevel håndterer RTC-biblioteket det.

Lad os nu se, hvor meget vi reducerede ledningsoverbelastningen og gemte GPIO-ben på Arduino.

Der er kun tilsluttet 4 ledninger til LCD-displayet, der er fremhævet i rødt felt.

Også kun 4 ledninger er forbundet fra Arduino, og RTC-modulet deler de samme linjer.

Nu har du fået grundlæggende viden om I2C og hvordan du bruger I2C LCD-adaptermodul.
Kan du lide dette indlæg? Har du nogen spørgsmål? Udtryk venligst i kommentarsektionen, du kan få et hurtigt svar.




Forrige: Enkel transistor diode testerkredsløb Næste: Lav dette IR-fjernbetjeningsområde Extender Circuit