Sådan interface I2C-EEPROM med 8051 Microcontroller

Prøv Vores Instrument Til At Fjerne Problemer





Udtrykket I2C eller IIC forkortelse er en inter integreret kredsløb og det kaldes som jeg kvadrerede C. I2C er en seriel computerbus , som er opfundet af NXP-halvledere, tidligere har den fået navnet Philips-halvledere. I2C-bussen bruges til at tilslutte perifer integrerede kredsløb med lav hastighed til mikrokontrollere og processorer . I år 2006 er der ikke noget licensgebyr nødvendigt at implementere I2C-protokollen. Men gebyr er nødvendigt for at få I2C-slaveadresse tildelt af NXP-halvledere.

Nogle konkurrenter som Texas Instruments, Siemens AG, NEC, Motorola, Intersil og STMicroelectronics har annonceret velegnede I²C-produkter til markedet i midten af ​​1990'erne. I år 1995 defineres SMBus af Intel, det vil sige en undergruppe af I²C, der angiver, at protokollerne er strengere. Hovedformålet med SMBus er at understøtte interoperabilitet og robusthed. Derfor inkluderer nuværende I²C-systemer regler og politikker fra SMBus, undertiden understøtter det både I2C og SMBus med minimal omkonfiguration.




I2C Bus

I2C Bus

Interface I2C Bus-EEPROM med 8051 Microcontroller

Hvad er I2C Bus

I2c-bus bruger to tovejs åbne afløbsledninger som SDA (seriel datalinje) og SCl (seriel urledning), og disse trækkes op med modstande. I2C-bus tillader en masterenhed at starte kommunikation med en slaveenhed. Data udveksles mellem disse to enheder. Typiske anvendte spændinger er + 3,3 V eller + 5 V, selvom systemer med ekstra spændinger er tilladt.



I2C-interface

I2C-interface

EEPROM

Elektrisk sletbar programmerbar ROM (EEPROM) er en ROM, der kan ændres af brugeren, og som ofte kan fjernes og omprogrammeres ved anvendelse af højere end den normale elektriske spænding. En EEPROM er en slags ikke-flygtig hukommelse, der bruges i elektroniske enheder som computere til at gemme små mængder data, der skal gemmes, når strømmen frigøres.

8051 Slicker Board

8051 Slicker-tavlen er specielt designet til at hjælpe tekniske studerende i området indlejrede systemer . Dette sæt er designet på en sådan måde, at alle funktionerne i 8051 mikrokontroller vil muligvis blive brugt af de studerende. Dette striker board understøtter ISP (In System Programming), der udføres via den serielle port. Dette kit og 8051 fra NXP foreslås for at udjævne fremskridt med debugging af mange designs omkring hastighed 8- bit mikrokontrollere.

Interfacing I2C - EEPROM

Den følgende figur viser grænsefladen mellem I2C-EEPROM og 8051 mikrokontroller. Her er I2C en master-slave-protokol, der inkluderer dataene sammen med urimpulsen. Typisk skiftede masterenheden urlinjen, SCL. Denne linje bestiller datatimingen, som overføres til I2C-bussen. Medmindre uret betjenes, overføres ingen data. Alle slaver styres af det samme ur, SCL.


Interfacing I2C - EEPROM

Interfacing I2C - EEPROM

I2C-bus understøtter de forskellige enheder hvor hver enhed identificeres af en unik adresse, uanset om det er en LCD-driver, hukommelseskort, mikrokontroller eller grænseflade mellem tastaturet som kan fungere som Tx eller Rx afhænger af enhedens funktion. Controlleren er designet til at styre EEPROM-enheden via I2C-protokol. Her fungerer I2C-protokollen som en masterenhed og regulerer EEPROM, og den fungerer som en slave. R / W-operationerne er dygtige ved at overføre et sæt styresignaler, der omfatter adressen OG / ELLER databussen. Disse signaler skal overvåges med passende ursignaler

Interface I2C Bus-EEPROM med 8051 Microcontroller

Hvis du vil læse, skrive og slette EEPROM ved hjælp af I2C-bus i 8051-strejkerbræt. Grænseflade mellem I2 Bus-EEPROM og 8051 mikrokontroller er meget enkel . Funktionen af ​​denne grænseflade er at sende et signal som WRITE efterfulgt af data og adressebus. I denne handling bruges EEPROM til at gemme dataene. I 8051-sæt reguleres to antal EEPROM-linjer af I2C-understøttede drivere. SCL og SDA er forbundet til den I2C-baserede serielle EEPROM IC.

Interface I2C Bus-EEPROM med 8051 Microcontroller

Interface I2C Bus-EEPROM med 8051 Microcontroller

Ved hjælp af SDA- og SCL I2C-linjer udføres læse- og skriveoperationerne i EEPROM i 8051 Slicker Kit

Grænsefladen til I2C er så enkel og i hver enkelt data læse / skrive i EEPROM. Forsinkelsen afhænger af kompilatoren, hvordan det forbedrer sløjferne, så snart du foretager ændringer i de valg, forsinkelsen varierer.

Kildekode til I2C-grænseflade

#omfatte
#omfatte
#omfatte

#definer ACK 1
#definer NO_ACK 0

usigneret char i
usigneret char EData [5]
usigneret char Data
ugyldigt InitSerial (ugyldigt)
ugyldige DelayMs (usigneret int)
ugyldigt WriteI2C (usigneret tegn)
ugyldigt Start (ugyldigt)
ugyldigt Stop (ugyldigt)
ugyldigt ReadBYTE (usigneret int)
ugyldig WriteBYTE (usigneret int)
usigneret char ReadI2C (bit)

sbit SCL = P2 ^ 0 // tilslut til SCL-pin (ur)
sbit SDA = P2 ^ 1 // tilslut til SDA-pin (data)

// ——————————————
// Hovedprogram
// ——————————————
ugyldigt hoved (ugyldigt)
{
InitSerial () // Initialiser seriel port
putchar (0x0C) // clear hyper terminal
Forsinkelse (5)
SkrivBYTE (0x0000)
WriteI2C (‘A’) // Skriv data her
SkrivI2C (‘B’)
SkrivI2C (‘C’)
SkrivI2C (‘D’)
WriteI2C (‘E’)
SkrivI2C (‘F’)
Hold op()
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 (“værdi =% c n”, EData [i]) // visningsdata * /
DelayMs (100)
}

mens (1)
}

// ——————————————
// Initialiser seriel port
// ——————————————
ugyldigt InitSerial (ugyldigt)
{
SCON = 0x52 // opsætning af seriel portkontrol
TMOD = 0x20 // hardware (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 til
}

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

// ————————————-
// stop I2C
// ————————————-
ugyldigt Stop (ugyldigt)
{
SDA = 0
_knap _ () _ nop_ ()
SCL = 1
_knap _ () _ nop_ ()
SDA = 1
}

// ————————————-
// Skriv I2C
// ————————————-
ugyldigt WriteI2C (usigneret char data)
{

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

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

}

// ————————————-
// Læs I2C
// ————————————-
usigneret 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
andet
SDA = 1 // Send NO ACK

_knap _ () _ nop_ ()
SCL = 1
_knap _ () _ nop_ ()
SCL = 0
Hold op()
returnere data
}

// ————————————-
// Læs 1 byte form I2C
// ————————————-
ugyldigt ReadBYTE (usigneret int Addr)
{
Start()
SkrivI2C (0xA0)
WriteI2C ((usigneret tegn) (Addr >> 8) & 0xFF)
WriteI2C ((usigneret tegn) Addr & 0xFF)
}

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

// ——————————————
// Forsink mS-funktion
// ——————————————
ugyldige DelayMs (usigneret int-antal)
{// mSec Delay 11.0592 Mhz
usigneret int i // Keil v7.5a
mens (tælle)
{
jeg = 115
mens (i> 0) i–
tælle-
}
}

Dette handler altså om implementeringen af ​​I2C-grænsefladen. Vi håber, at du har fået en bedre forståelse af dette koncept. Desuden er spørgsmål vedrørende dette koncept eller interface enheder Giv dine værdifulde forslag ved at kommentere i kommentarfeltet nedenfor.