Kuidas liidestada I2C-EEPROM-i mikrokontrolleriga 8051

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Termin I2C või IIC lühend on muu hulgas integraallülitus ja seda nimetatakse siis, kui ma ruudu C. I2C on järjestikune arvutibuss , mille leiutasid NXP pooljuhid, varem nimetati seda Philipsi pooljuhtideks. I2C-siini kasutatakse väikese kiirusega perifeersete integraallülituste kinnitamiseks mikrokontrollerid ja protsessorid . 2006. aastal ei ole I2C protokolli rakendamiseks litsentsitasu vajalik. Kuid NXP pooljuhtide määratud I2C orja aadressi saamiseks on vaja tasu.

Mõned konkurendid, nagu Texas Instruments, Siemens AG, NEC, Motorola, Intersil ja STMicroelectronics, on 1990ndate keskel turule toonud hästi sobivad I²C tooted. 1995. aastal määratles SMBus Intel, see on I²C alamrühm, mis väidab, et protokollid on rangemad. SMBusi peamine eesmärk on toetada koostalitlusvõimet ja töökindlust. Seetõttu sisaldavad praegused I²C süsteemid SMBusi reegleid ja reegleid, mõnikord toetavad need nii I2C kui ka SMBusi minimaalse ümberseadistamisega.




I2C buss

I2C buss

Liides I2C Bus-EEPROM koos mikrokontrolleriga 8051

Mis on I2C buss

I2c buss kasutab kahte kahesuunalist avatud äravooluliini, nagu SDA (jadaandmete liin) ja SCl (jadakella liin) ja need tõmmatakse üles takistitega. I2C siini abil saab põhiseade alustada sidet alamseadmega. Andmeid vahetatakse nende kahe seadme vahel. Kasutatavad tüüpilised pinged on + 3,3 V või + 5 V, kuigi lisapingega süsteemid on lubatud.



I2C liides

I2C liides

EEPROM

Elektriliselt kustutatav programmeeritav ROM (EEPROM) on kasutaja poolt muudetav ROM, mida saab tavalisest kõrgemast elektripingest rakendades sageli eemaldada ja ümber programmeerida. EEPROM on selline püsimälu, mida kasutatakse elektroonilistes seadmetes, näiteks arvutites, väikeste andmemahtude salvestamiseks, mida tuleks toite eraldamisel salvestada.

8051 Slicker Board

8051 Slicker tahvel on spetsiaalselt loodud selleks, et aidata tehnilisi õppureid piirkonnas sisseehitatud süsteemid . See komplekt on loodud nii, et kõik funktsioonid 8051 mikrokontroller õpilased võivad seda kasutada. See ründelaud toetab ISP-d (süsteemiprogrammides), mida tehakse jadapordi kaudu. Selle komplekti ja NXP-i 8051-ga pakutakse välja paljude 8-bitiste mikrokontrollerit ümbritsevate kujunduste silumise edenemist.

Liides I2C - EEPROM

Järgmine joonis näitab I2C-EEPROM-i liidestamist mikrokontrolleriga 8051. Siin on I2C üli-alamprotokoll, mis sisaldab andmeid koos kella impulsiga. Tavaliselt lülitas põhiseade kellaliini SCL. See rida tellib andmete ajastamise, mis edastatakse I2C siinil. Kui kella ei juhita, andmeid ei edastata. Kõiki orje juhib sama kell SCL.


Liides I2C - EEPROM

Liides I2C - EEPROM

I2C siin toetab erinevaid seadmeid kus iga seade tuvastatakse kordumatu aadressi järgi, olgu see siis LCD draiver, mälukaart, mikrokontroller või klaviatuuri liides mis võivad töötada kui Tx või Rx, sõltub seadme toimimisest. Kontroller on loodud juhtima EEPROM-seadet I2C-protokolli kaudu. Siin töötab ta I2C-protokoll põhiseadmena ja reguleerib EEPROM-i ning see töötab ka orjana. R / W toimingud on osavad, edastades juhtsignaalide komplekti, mis sisaldab aadressi JA / VÕI andmesiini. Nendele signaalidele tuleks reageerida sobivate kellasignaalidega

Liides I2C Bus-EEPROM koos mikrokontrolleriga 8051

Kui soovite lugeda, kirjutage ja kustutage EEPROM, kasutades I2C siini 8051 ründelauas. I2 bussi-EEPROM-i liidestamine 8051 mikrokontroller on väga lihtne . Selle liidese ülesandeks on saata signaal nagu KIRJUTA, millele järgneb andmete ja aadressibuss. Selles toimingus kasutatakse andmete salvestamiseks EEPROM-i. 8051 komplektis reguleerivad kahte numbrit EEPROMi liine I2C toetatud draiverid. SCL ja SDA on ühendatud I2C-põhise jada-EEPROM IC-ga.

Liides I2C Bus-EEPROM koos mikrokontrolleriga 8051

Liides I2C Bus-EEPROM koos mikrokontrolleriga 8051

Kasutades SDA ja SCL I2C ridu, tehakse EEPROM-i lugemis- ja kirjutamistoimingud 8051 Slicker Kit'is

I2C liides on nii lihtne ja iga üksiku andmete puhul loe / kirjuta EEPROM-is. Viivitus sõltub kompilaatorist, kuidas see tsükleid võimendab, niipea kui muudate viivitusi.

I2C liidestamise lähtekood

# kaasata
# kaasata
# kaasata

#define ACK 1
#define NO_ACK 0

allkirjastamata tähis i
allkirjastamata tähis EData [5]
allkirjastamata tähis Andmed
void InitSerial (tühine)
void DelayMs (allkirjastamata int)
void WriteI2C (märkimata märk)
void Start (tühine)
void Stop (tühine)
void ReadBYTE (allkirjastamata int)
void WriteBYTE (allkirjastamata int)
allkirjastamata tähis ReadI2C (bit)

sbit SCL = P2 ^ 0 // ühenduse loomine SCL-tihvtiga (kell)
sbit SDA = P2 ^ 1 // ühendage SDA tihvtiga (andmed)

// —————————————
// Põhiprogramm
// —————————————
void main (tühine)
{
InitSerial () // Initsialiseeri jadaport
putchar (0x0C) // selge hüperterminaal
Viivised (5)
WriteBYTE (0x0000)
WriteI2C (‘A’) // Kirjuta andmed siia
KirjutamineI2C (‘B’)
KirjutageI2C („C”)
KirjutamineI2C (‘D’)
KirjutamineI2C (‘E’)
KirjutageI2C (‘F’)
Peatus ()
Viivised (10)

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

jaoks (i = 0i<6i++)
{
printf ('väärtus =% c n', EData [i]) // kuvab andmed * /
Viivised (100)
}

samas (1)
}

// —————————————
// Initsialiseeri jadaport
// —————————————
void InitSerial (tühine)
{
SCON = 0x52 // jadapordi juhtimise seadistamine
TMOD = 0x20 // riistvara (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Taimer 1 on sisse lülitatud
}

// ——————————-
// käivitage I2C
// ——————————-
void Start (tühine)
{
SDA = 1
SCL = 1
_nupp _ () _ nop_ ()
SDA = 0
_nupp _ () _ nop_ ()
SCL = 0
_nupp _ () _ nop_ ()
}

// ——————————-
// peatage I2C
// ——————————-
void Stop (tühine)
{
SDA = 0
_nupp _ () _ nop_ ()
SCL = 1
_nupp _ () _ nop_ ()
SDA = 1
}

// ——————————-
// Kirjutage I2C
// ——————————-
void WriteI2C (allkirjastamata märgiandmed)
{

jaoks (i = 0i<8i++)
{
SDA = (Andmed ja 0x80)? 1: 0
SCL = 1SCL = 0
Andmed<<=1
}

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

}

// ——————————-
// Loe I2C
// ——————————-
allkirjastamata tähis ReadI2C (bitt ACK_Bit)
{

Alusta ()
WriteI2C (0xA1)

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

SCL = 1
Andmed<<= 1
Kuupäev = (Kuupäev

kui (ACK_Bit == 1)
SDA = 0 // Saada ACK
muud
SDA = 1 // Saada NO ACK

_nupp _ () _ nop_ ()
SCL = 1
_nupp _ () _ nop_ ()
SCL = 0
Peatus ()
tagastage andmed
}

// ——————————-
// Loe 1 baidine vorm I2C
// ——————————-
void ReadBYTE (allkirjastamata int Addr)
{
Alusta ()
WriteI2C (0xA0)
WriteI2C ((märkimata märk) (Addr >> 8) ja 0xFF)
WriteI2C ((märkimata märk) Addr & 0xFF)
}

// ——————————-
// Kirjutage I2C-le 1 bait
// ——————————-
void WriteBYTE (allkirjastamata int Addr)
{
Alusta ()
WriteI2C (0xA0)
WriteI2C ((märkimata märk) (Addr >> 8) ja 0xFF) // saatke aadress kõrge
WriteI2C ((märkimata tähis) Addr & 0xFF) // saateaadress madal
}

// —————————————
// Viivitage mS-funktsiooniga
// —————————————
void DelayMs (allkirjastamata int-loend)
{// mSec Viivitus 11.0592 Mhz
allkirjastamata int i // Keil v7.5a
samas (loendama)
{
i = 115
samas (i> 0) i–
loenda -
}
}

Seega on see kõik seotud I2C liidese rakendamisega. Loodame, et olete sellest kontseptsioonist paremini aru saanud. Lisaks sellele võivad kõik selle kontseptsiooniga seotud küsimused liideseseadmed palun andke oma väärtuslikke ettepanekuid, kommenteerides allolevas kommentaaride jaotises.