Hoe I2C-EEPROM te koppelen aan 8051 Microcontroller

Probeer Ons Instrument Voor Het Oplossen Van Problemen





De term I2C of IIC afkorting is een inter geïntegreerde schakeling en het heet zoals ik het kwadraat C. I2C is een seriële computerbus , dat is uitgevonden door NXP-halfgeleiders, werd het eerder Philips-halfgeleiders genoemd. De I2C-bus wordt gebruikt om geïntegreerde schakelingen van randapparatuur met lage snelheid aan te sluiten microcontrollers en processors ​Anno 2006 zijn voor de implementatie van het I2C-protocol geen licentievergoeding nodig. Maar er is een vergoeding nodig om het I2C-slaafadres toegewezen te krijgen door NXP-halfgeleiders.

Sommige concurrenten zoals Texas Instruments, Siemens AG, NEC, Motorola, Intersil en STMicroelectronics hebben halverwege de jaren negentig goed passende I²C-producten op de markt gebracht. In het jaar 1995 wordt SMBus gedefinieerd door Intel, dat is een subgroep van I²C die stelt dat de protocollen strenger zijn. Het belangrijkste doel van SMBus is om interoperabiliteit en robuustheid te ondersteunen. Daarom bevatten de huidige I²C-systemen regels en beleidsregels van SMBus, soms ondersteunt het zowel I2C als SMBus met minimale herconfiguratie.




I2C Bus

I2C Bus

Interface I2C Bus-EEPROM met 8051 Microcontroller

Wat is I2C Bus

De I2c-bus gebruikt twee bidirectionele open-drain-lijnen zoals SDA (seriële datalijn) en SCl (seriële kloklijn) en deze worden omhooggetrokken met weerstanden. Met de I2C-bus kan een master-apparaat de communicatie met een slave-apparaat starten. Gegevens worden uitgewisseld tussen deze twee apparaten. Typische gebruikte spanningen zijn + 3.3V of + 5V, hoewel systemen met extra voltages zijn toegestaan.



I2C-interface

I2C-interface

EEPROM

Elektrisch uitwisbare programmeerbare ROM (EEPROM) is een door de gebruiker aanpasbare ROM die vaak kan worden verwijderd en opnieuw geprogrammeerd door toepassing van een hogere dan de normale elektrische spanning. Een EEPROM is een soort niet-vluchtig geheugen dat wordt gebruikt in elektronische apparaten zoals computers om kleine hoeveelheden gegevens op te slaan die moeten worden opgeslagen wanneer de stroom wordt losgekoppeld.

8051 Slicker Board

Het 8051 Slicker board is speciaal ontworpen om technische studenten te helpen op het gebied van embedded systemen ​Deze kit is zo ontworpen dat alle functies van 8051 microcontroller wordt eventueel gebruikt door de studenten. Dit spitsbord ondersteunt ISP (In System Programming) dat gebeurt via de seriële poort. Deze kit en 8051 van NXP wordt voorgesteld om de voortgang van het debuggen van veel ontwerpen rondom speed 8-bit microcontrollers te vergemakkelijken.

Interfacing I2C - EEPROM

De volgende afbeelding toont de interface van de I2C-EEPROM met de 8051 microcontroller. Hier is I2C een master-slave-protocol, dat de gegevens samen met de klokpuls bevat. Typisch schakelde het meesterapparaat de kloklijn, SCL. Deze regel bestelt de datatiming die op de I2C-bus wordt overgedragen. Tenzij de klok wordt bediend, worden er geen gegevens overgedragen. Alle slaves worden bestuurd door dezelfde klok, SCL.


Interfacing I2C - EEPROM

Interfacing I2C - EEPROM

I2C-bus ondersteunt de verschillende apparaten waarbij elk apparaat wordt geïdentificeerd door een uniek adres, of het nu een LCD-driver, geheugenkaart, microcontroller of interfacing van toetsenbord die als Tx of Rx kan werken, hangt af van de werking van het apparaat. De controller is ontworpen om het EEPROM-apparaat te besturen via het I2C-protocol. Hier werkt het I2C-protocol als een master-apparaat en regelt het EEPROM en het werkt als een slaaf. De R / W-bewerkingen zijn bekwaam door het overdragen van een set stuursignalen die de adres-EN / OF-databus omvat. Deze signalen moeten worden vergezeld door geschikte kloksignalen

Interface I2C Bus-EEPROM met 8051 Microcontroller

Als u EEPROM wilt lezen, schrijven en wissen met behulp van de I2C-bus in het 8051-spitsbord. Koppeling van I2 Bus-EEPROM met 8051 microcontroller is heel eenvoudig ​De werking van deze interfacing is om een ​​signaal zoals WRITE te verzenden, gevolgd door data- en adresbus. Bij deze bewerking wordt de EEPROM gebruikt om de gegevens op te slaan. In de 8051-kit worden twee nummers van EEPROM-lijnen gereguleerd door I2C-ondersteunde stuurprogramma's. De SCL en SDA zijn verbonden met de op I2C gebaseerde seriële EEPROM IC.

Interface I2C Bus-EEPROM met 8051 Microcontroller

Interface I2C Bus-EEPROM met 8051 Microcontroller

Door SDA- en SCL I2C-lijnen te gebruiken, worden de lees- en schrijfbewerkingen van EEPROM gedaan in 8051 Slicker Kit

De interfacing van I2C is zo eenvoudig en in elke afzonderlijke gegevens lezen / schrijven in EEPROM. De vertraging hangt af van de compiler hoe het de loops verbetert, zodra je wijzigingen aanbrengt in de keuzes, varieert de vertraging.

Broncode voor I2C-interface

#inclusief
#inclusief
#inclusief

# definiëren ACK 1
# definiëren NO_ACK 0

unsigned char i
unsigned char EData [5]
unsigned char Data
void InitSerial (ongeldig)
ongeldig DelayMs (unsigned int)
void WriteI2C (unsigned char)
leegte Start (vervallen)
ongeldig Stop (ongeldig)
ongeldig ReadBYTE (unsigned int)
void WriteBYTE (unsigned int)
unsigned char ReadI2C (bit)

sbit SCL = P2 ^ 0 // maak verbinding met SCL-pin (klok)
sbit SDA = P2 ^ 1 // maak verbinding met SDA-pin (gegevens)


// Hoofdprogramma

leegte hoofd (leegte)

InitSerial () // Initialiseer seriële poort
putchar (0x0C) // wis hyperterminal
DelayMs (5)
WriteBYTE (0x0000)
WriteI2C (‘A’) // Schrijf hier gegevens
WriteI2C (‘B’)
WriteI2C (‘C’)
WriteI2C (‘D’)
WriteI2C (‘E’)
WriteI2C (‘F’)
Hou op()
DelayMs (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)

voor (i = 0i<6i++)

printf ('value =% c n', EData [i]) // gegevens weergeven * /
DelayMs (100)

terwijl (1)


// Initialiseer de seriële poort

void InitSerial (ongeldig)

SCON = 0x52 // stel de seriële poort in
TMOD = 0x20 // hardware (9600 BAUD @ 11.0592 MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 aan


// start I2C

leegte Start (vervallen)

SDA = 1
SCL = 1
_nop_()_nop_()
SDA = 0
_nop_()_nop_()
SCL = 0
_nop_()_nop_()


// stop I2C

ongeldig Stop (ongeldig)

SDA = 0
_nop_()_nop_()
SCL = 1
_nop_()_nop_()
SDA = 1


// Schrijf I2C

void WriteI2C (unsigned char Data)

voor (i = 0i<8i++)

SDA = (gegevens & 0x80)? 1: 0
SCL = 1 SCL = 0
Gegevens<<=1

SCL = 1
_nop_()_nop_()
SCL = 0


// Lees I2C

niet-ondertekend teken ReadI2C (bit ACK_Bit)

Begin()
WriteI2C (0xA1)

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

SCL = 1
Gegevens<<= 1
Datum = (Datum

if (ACK_Bit == 1)
SDA = 0 // Stuur ACK
anders
SDA = 1 // Zend GEEN ACK

_nop_()_nop_()
SCL = 1
_nop_()_nop_()
SCL = 0
Hou op()
retourneer gegevens


// Lees 1 byte vorm I2C

ongeldig ReadBYTE (niet-ondertekende int Adr)

Begin()
WriteI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF)
WriteI2C ((unsigned char) Addr & 0xFF)


// Schrijf 1 byte naar I2C

void WriteBYTE (unsigned int Addr)

Begin()
WriteI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF) // stuur adres hoog
WriteI2C ((unsigned char) Addr & 0xFF) // verzend adres laag


// Vertraging mS-functie

void DelayMs (niet-ondertekende int count)
{// mSec-vertraging 11,0592 Mhz
unsigned int i // Keil v7.5a
terwijl (tel)

ik = 115
terwijl (i> 0) i–
tellen–

Dit gaat dus allemaal over de implementatie van de I2C-interface. We hopen dat u dit concept beter begrijpt. Verder kunnen eventuele vragen over dit concept of interfacing-apparaten geef alstublieft uw waardevolle suggesties door te reageren in het commentaargedeelte hieronder.