Hvordan grensesnitt I2C-EEPROM med 8051 Microcontroller

Prøv Instrumentet Vårt For Å Eliminere Problemer





Begrepet I2C eller IIC forkortelse er en inter integrert krets og det kalles mens jeg kvadrerte C. I2C er en seriell datamaskinbuss , som ble oppfunnet av NXP-halvledere, tidligere ble den kalt Philips halvledere. I2C-bussen brukes til å feste integrerte kretser med lav hastighet til mikrokontrollere og prosessorer . I år 2006 er ingen lisensavgift nødvendig for å implementere I2C-protokollen. Men gebyr er nødvendig for å få I2C-slaveadresse tildelt av NXP-halvledere.

Noen konkurrenter som Texas Instruments, Siemens AG, NEC, Motorola, Intersil og STMicroelectronics har kunngjort velegnede I²C-produkter til markedet på midten av 1990-tallet. I 1995 er SMBus definert av Intel, det vil si en undergruppe av I²C som sier at protokollene er strengere. Hovedformålet med SMBus er å støtte interoperabilitet og robusthet. Derfor inkluderer nåværende I²C-systemer regler og policyer fra SMBus, noen ganger støtter det både I2C og SMBus med minimal omkonfigurering.




I2C buss

I2C buss

Grensesnitt I2C Bus-EEPROM med 8051 mikrokontroller

Hva er I2C Bus

I2c-bussen bruker to toveis åpne dreneringslinjer som SDA (seriell datalinje) og SCl (seriell klokkelinje), og disse trekkes opp med motstander. I2C-buss tillater en hovedenhet å starte kommunikasjon med en slaveenhet. Data er utvekslet mellom disse to enhetene. Typiske spenninger som brukes er + 3,3 V eller + 5 V, selv om systemer med ekstra spenninger er tillatt.



I2C-grensesnitt

I2C-grensesnitt

EEPROM

Elektrisk slettbar programmerbar ROM (EEPROM) er en brukermodifiserbar ROM som kan fjernes og omprogrammeres ofte ved bruk av høyere enn den normale elektriske spenningen. En EEPROM er et slags ikke-flyktig minne som brukes i elektroniske enheter som datamaskiner for å lagre små mengder data som skal spares når strømmen er frakoblet.

8051 Slicker Board

8051 Slicker-tavlen er spesielt designet for å hjelpe tekniske studenter i området innebygde systemer . Dette settet er designet på en slik måte at alle funksjonene i 8051 mikrokontroller vil muligens kunne brukes av studentene. Dette angrepskortet støtter ISP (In System Programming) som gjøres via den serielle porten. Dette settet og 8051 fra NXP er foreslått for å jevne fremdriften for feilsøking av mange design rundt hastighets 8- bit mikrokontrollere.

Grensesnitt I2C - EEPROM

Følgende figur viser grensesnitt I2C-EEPROM med 8051 mikrokontroller. Her er I2C en master-slave-protokoll, som inkluderer data sammen med klokkepuls. Vanligvis byttet hovedenheten til klokkelinjen, SCL. Denne linjen bestiller datatimingen som overføres på I2C-bussen. Med mindre klokken blir betjent, blir ingen data overført. Alle slaver styres av samme klokke, SCL.


Grensesnitt I2C - EEPROM

Grensesnitt I2C - EEPROM

I2C-bussen støtter de forskjellige enhetene der hver enhet er identifisert av en unik adresse, enten det er en LCD-driver, minnekort, mikrokontroller eller grensesnitt på tastaturet som kan fungere som Tx eller Rx, avhenger av hvordan enheten fungerer. Kontrolleren er designet for å kontrollere EEPROM-enheten via I2C-protokollen. Her fungerer I2C-protokollen som en masterenhet og regulerer EEPROM, og den fungerer som en slave. R / W-operasjonene er dyktige ved å overføre et sett med styresignaler som omfatter adressen OG / ELLER databussen. Disse signalene bør følges med passende kloksignaler

Grensesnitt I2C Bus-EEPROM med 8051 mikrokontroller

Hvis du vil lese, skriv og slett EEPROM ved å bruke I2C-buss i 8051-spissbrett. Grensesnitt av I2 Bus-EEPROM med 8051 mikrokontroller er veldig enkel . Operasjonen av denne grensesnittet er å sende et signal som WRITE, etterfulgt av data og adressebuss. I denne operasjonen brukes EEPROM til å lagre dataene. I 8051-settet blir to antall EEPROM-linjer regulert av drivere som støttes av I2C. SCL og SDA er koblet til den I2C-baserte serielle EEPROM IC.

Grensesnitt I2C Bus-EEPROM med 8051 mikrokontroller

Grensesnitt I2C Bus-EEPROM med 8051 mikrokontroller

Ved å bruke SDA- og SCL I2C-linjer gjøres lese- og skriveoperasjonene til EEPROM i 8051 Slicker Kit

Grensesnittet til I2C er så enkelt og i hver enkelt data Les / skriv i EEPROM. Forsinkelsen avhenger av kompilatoren hvordan den forbedrer løkkene så snart du gjør endringer i valgene forsinkelsen varierer.

Kildekode for I2C-grensesnitt

#inkludere
#inkludere
#inkludere

#definer ACK 1
#define NO_ACK 0

usignert røye jeg
usignert røye EData [5]
usignerte røye Data
ugyldig InitSerial (ugyldig)
ugyldig DelayMs (usignert int)
ugyldig WriteI2C (usignert røye)
ugyldig Start (ugyldig)
ugyldig Stopp (ugyldig)
ugyldig ReadBYTE (usignert int)
ugyldig WriteBYTE (usignert int)
usignert char ReadI2C (bit)

sbit SCL = P2 ^ 0 // koble til SCL-pin (klokke)
sbit SDA = P2 ^ 1 // koble til SDA-pin (Data)

// ——————————————
// Hovedprogram
// ——————————————
ugyldig hoved (ugyldig)
{
InitSerial () // Initialiser seriell port
putchar (0x0C) // clear hyper terminal
Forsinkelse (5)
SkrivBYTE (0x0000)
WriteI2C (‘A’) // Skriv data her
WriteI2C (‘B’)
WriteI2C (‘C’)
WriteI2C (‘D’)
WriteI2C (‘E’)
WriteI2C (‘F’)
Stoppe()
Forsinkelse (10)

ReadBYTE (0x0000)
EData [0] = ReadI2C (NO_ACK)
EData [1] = ReadI2C (NO_ACK)
EData [2] = ReadI2C (NO_ACK)
EData [3] = ReadI2C (NO_ACK)
EData [4] = ReadI2C (NO_ACK)
EData [5] = ReadI2C (NO_ACK)

for (i = 0i<6i++)
{
printf (“verdi =% c n”, EData [i]) // visningsdata * /
Forsinkelse (100)
}

mens (1)
}

// ——————————————
// Initialiser seriell port
// ——————————————
ugyldig InitSerial (ugyldig)
{
SCON = 0x52 // oppsett seriell portkontroll
TMOD = 0x20 // maskinvare (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 på
}

// ———————————-
// start I2C
// ———————————-
ugyldig Start (ugyldig)
{
SDA = 1
SCL = 1
_knapp _ () _ nop_ ()
SDA = 0
_knapp _ () _ nop_ ()
SCL = 0
_knapp _ () _ nop_ ()
}

// ———————————-
// stopp I2C
// ———————————-
ugyldig Stopp (ugyldig)
{
SDA = 0
_knapp _ () _ nop_ ()
SCL = 1
_knapp _ () _ nop_ ()
SDA = 1
}

// ———————————-
// Skriv I2C
// ———————————-
ugyldig WriteI2C (usignert char Data)
{

for (i = 0i<8i++)
{
SDA = (Data & 0x80)? 1: 0
SCL = 1 SCL = 0
Data<<=1
}

SCL = 1
_knapp _ () _ nop_ ()
SCL = 0

}

// ———————————-
// Les I2C
// ———————————-
usignert char ReadI2C (bit ACK_Bit)
{

Start()
SkrivI2C (0xA1)

SDA = 1
for (i = 0i<8i++)

SCL = 1
Data<<= 1
Dato = (Dato

hvis (ACK_Bit == 1)
SDA = 0 // Send ACK
ellers
SDA = 1 // Send NO ACK

_knapp _ () _ nop_ ()
SCL = 1
_knapp _ () _ nop_ ()
SCL = 0
Stoppe()
returner data
}

// ———————————-
// Les 1 byte skjema I2C
// ———————————-
ugyldig ReadBYTE (usignert int Addr)
{
Start()
SkrivI2C (0xA0)
WriteI2C ((usignert tegn) (Addr >> 8) & 0xFF)
WriteI2C ((usignert tegn) Addr & 0xFF)
}

// ———————————-
// Skriv 1 byte til I2C
// ———————————-
ugyldig WriteBYTE (usignert int Addr)
{
Start()
SkrivI2C (0xA0)
WriteI2C ((usignert tegn) (Addr >> 8) & 0xFF) // send adresse høy
WriteI2C ((usignert tegn) Addr & 0xFF) // send adresse lav
}

// ——————————————
// Forsink mS-funksjonen
// ——————————————
ugyldige DelayMs (usignert int-antall)
{// mSec Delay 11.0592 Mhz
usignert int i // Keil v7.5a
mens (teller)
{
jeg = 115
mens (i> 0) i–
telle-
}
}

Dermed handler alt om implementering av I2C-grensesnitt. Vi håper at du har fått en bedre forståelse av dette konseptet. Videre, eventuelle spørsmål angående dette konseptet eller grensesnitt enheter vennligst gi dine verdifulle forslag ved å kommentere i kommentarfeltet nedenfor.