Paano Mag-interface ng I2C-EEPROM sa 8051 Microcontroller

Subukan Ang Aming Instrumento Para Sa Pagtanggal Ng Mga Problema





Ang salitang I2C o IIC pagpapaikli ay isang inter integrated circuit at ito ay tinatawag na bilang ko parisukat C. Ang I2C ay isang serial computer bus , na naimbento ng NXP semiconductors dati ay pinangalanan bilang Philips semiconductors. Ang I2C bus ay ginagamit upang maglakip ng mababang bilis ng peripheral integrated circuit mga microcontroller at processor . Sa taong 2006, upang maipatupad ang I2C protocol walang kinakailangang bayad sa paglilisensya. Ngunit kinakailangan ang bayad upang makakuha ng I2C na address ng alipin na nakatalaga ng mga NXP semiconductors.

Ang ilang mga kakumpitensya tulad ng Texas Instruments, Siemens AG, NEC, Motorola, Intersil at STMicroelectronics ay inanunsyo na naaangkop na mga produktong I²C sa merkado sa kalagitnaan ng dekada 1990. Sa taong 1995, ang SMBus ay tinukoy ng Intel, iyon ay isang subgroup ng I²C na nagsasaad na ang mga protokol ay mas mahigpit. Ang pangunahing layunin ng SMBus ay upang suportahan ang interoperability at robustness. Samakatuwid, ang mga kasalukuyang sistema ng I²C ay nagsasama ng mga patakaran at patakaran mula sa SMBus, kung minsan ay sinusuportahan nito ang parehong I2C at SMBus na may kaunting muling pagsasaayos.




I2C Bus

I2C Bus

Interface I2C Bus-EEPROM na may 8051 Microcontroller

Ano ang I2C Bus

Ang I2c bus ay gumagamit ng dalawang bidirectional open-drain na linya tulad ng SDA (serial data line) at SCl (serial clock line) at ang mga ito ay hinila kasama ng resistors. Pinapayagan ng I2C bus ang isang master device upang simulan ang komunikasyon sa isang aparato ng alipin. Ipinagpapalit ang data sa pagitan ng dalawang mga aparatong ito. Ang mga karaniwang boltahe na ginamit ay + 3.3V o + 5V bagaman pinapayagan ang mga system na may labis na boltahe.



I2C Interface

I2C Interface

EEPROM

Elektronikong Na-i-Programmable ROM Ang (EEPROM) ay isang nababago ng gumagamit na ROM na maaaring alisin at muling mai-program muli sa pamamagitan ng aplikasyon ng mas mataas kaysa sa normal na boltahe ng elektrisidad. Ang isang EEPROM ay isang uri ng di-pabagu-bago na memorya na ginagamit sa mga elektronikong aparato tulad ng mga computer upang mag-imbak ng maliit na dami ng data na dapat na mai-save kapag natanggal ang lakas.

8051 Slicker Board

Ang 8051 Slicker board ay espesyal na idinisenyo upang matulungan ang mga teknikal na mag-aaral sa lugar ng naka-embed na mga system . Ang kit na ito ay dinisenyo sa paraang lahat na ang lahat ng mga tampok ng 8051 microcontroller posibleng magamit ng mga mag-aaral. Sinusuportahan ng striker board na ito ang ISP (Sa System Programming) na ginagawa sa pamamagitan ng serial port. Ang kit na ito at 8051 mula sa NXP ay iminungkahi upang makinis ang pag-usad ng pag-debug ng maraming mga disenyo na nakapalibot sa bilis ng 8- bit microcontrollers.

Pag-interface ng I2C - EEPROM

Ipinapakita ng sumusunod na pigura ang pag-interfaced ng I2C-EEPROM sa 8051 microcontroller. Dito, ang I2C ay isang master-slave protocol, kasama ang data kasama ang orasan pulse. Kadalasan, pinalitan ng master device ang linya ng orasan, SCL. Ang linya na ito ay nag-uutos sa tiyempo ng data kung saan naglilipat sa I2C bus. Maliban kung pinapatakbo ang orasan, walang maililipat na data. Ang lahat ng mga alipin ay kinokontrol ng parehong orasan, SCL.


Pag-interface ng I2C - EEPROM

Pag-interface ng I2C - EEPROM

Sinusuportahan ng I2C bus ang iba't ibang mga aparato kung saan ang bawat aparato ay kinikilala ng isang natatanging address maging ito man ay isang LCD driver, memory card, microcontroller o interfacing ng keyboard na maaaring gumana bilang Tx o Rx ay nakasalalay sa paggana ng aparato. Ang controller ay idinisenyo upang makontrol ang EEPROM aparato sa pamamagitan ng I2C protocol. Dito, gumagana ang I2C protocol bilang isang master device at kinokontrol ang EEPROM at gumagana ito bilang isang alipin. Ang pagpapatakbo ng R / W ay may husay sa pamamagitan ng paglilipat ng isang hanay ng mga signal ng kontrol na binubuo ng address AT / O data bus. Ang mga signal na ito ay dapat na dinaluhan ng naaangkop na mga signal ng orasan

Interface I2C Bus-EEPROM na may 8051 Microcontroller

Kung nais mong basahin, Isulat at Burahin ang EEPROM sa pamamagitan ng paggamit ng I2C bus sa 8051 striker board. Interfacing ng I2 Bus-EEPROM sa Ang 8051 microcontroller ay napaka-simple . Ang pagpapatakbo ng interface na ito ay upang magpadala ng isang senyas tulad ng pagsulat, na sinusundan ng data at address bus. Sa operasyong ito, ginagamit ang EEPROM upang iimbak ang data. Sa 8051 kit, dalawang bilang ng mga linya ng EEPROM ang kinokontrol ng mga suportadong driver ng I2C. Ang SCL at SDA ay konektado sa I2C batay sa serial EEPROM IC.

Interface I2C Bus-EEPROM na may 8051 Microcontroller

Interface I2C Bus-EEPROM na may 8051 Microcontroller

Sa pamamagitan ng paggamit ng mga linya ng SDA at SCL I2C, ang operasyon ng pagbasa at pagsulat ng EEPROM ay ginagawa sa 8051 Slicker Kit

Ang interfacing ng I2C ay napaka-simple at sa bawat solong data Basahin / Isulat sa EEPROM. Ang pagkaantala ay nakasalalay sa tagatala kung paano nito pinahuhusay ang mga loop sa lalong madaling gumawa ka ng mga pagbabago sa mga pagpipilian na nag-iiba ang pagkaantala.

Source Code para sa I2C Interfacing

# isama
# isama
# isama

# tukuyin ang ACK 1
# tukuyin ang NO_ACK 0

unsigned char i
unsigned char EData [5]
unsigned char Data
walang bisa InitSerial (walang bisa)
void DelayMs (unsigned int)
walang bisa ang WritingI2C (unsigned char)
walang bisa Simula (walang bisa)
walang bisa Itigil (walang bisa)
walang bisa ang ReadBYTE (unsigned int)
walang bisa ang WritingBYTE (unsigned int)
unsigned char ReadI2C (bit)

sbit SCL = P2 ^ 0 // kumonekta sa SCL pin (Clock)
sbit SDA = P2 ^ 1 // kumonekta sa SDA pin (Data)

// —————————————
// Pangunahing programa
// —————————————
walang bisa (walang bisa)
{
InitSerial () // Pinasimulan ang serial port
putchar (0x0C) // malinaw na hyper terminal
Mga Pag-antala (5)
SumulatBYTE (0x0000)
IsulatI2C ('A') // Isulat ang Data Dito
IsulatI2C ('B')
IsulatI2C ('C')
IsulatI2C ('D')
IsulatI2C ('E')
IsulatI2C ('F')
Itigil ()
Mga Pag-antala (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)

para sa (i = 0i<6i++)
{
printf (“halaga =% c n”, EData [i]) // display data * /
Mga Pag-antala (100)
}

habang (1)
}

// —————————————
// Initialize serial port
// —————————————
walang bisa InitSerial (walang bisa)
{
SCON = 0x52 // pag-setup ng serial port control
TMOD = 0x20 // hardware (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 on
}

// ——————————-
// simulan ang I2C
// ——————————-
walang bisa Simula (walang bisa)
{
SDA = 1
SCL = 1
_button _ () _ nop_ ()
SDA = 0
_button _ () _ nop_ ()
SCL = 0
_button _ () _ nop_ ()
}

// ——————————-
// ihinto ang I2C
// ——————————-
walang bisa Itigil (walang bisa)
{
SDA = 0
_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SDA = 1
}

// ——————————-
// Isulat ang I2C
// ——————————-
walang bisa ang WritingI2C (unsigned char Data)
{

para sa (i = 0i<8i++)
{
SDA = (Data at 0x80)? 1: 0
SCL = 1SCL = 0
Data<<=1
}

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

}

// ——————————-
// Basahin ang I2C
// ——————————-
unsigned char ReadI2C (bit ACK_Bit)
{

Simula ()
IsulatI2C (0xA1)

SDA = 1
para sa (i = 0i<8i++)

SCL = 1
Data<<= 1
Petsa = (Petsa

kung (ACK_Bit == 1)
SDA = 0 // Magpadala ng ACK
iba pa
SDA = 1 // Magpadala NG WALANG ACK

_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SCL = 0
Itigil ()
ibalik ang Data
}

// ——————————-
// Basahin ang 1 byte form na I2C
// ——————————-
walang bisa ang ReadBYTE (unsigned int Addr)
{
Simula ()
IsulatI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF)
WriteI2C ((unsigned char) Addr & 0xFF)
}

// ——————————-
// Sumulat ng 1 byte sa I2C
// ——————————-
walang bisa ang WritingBYTE (unsigned int Addr)
{
Simula ()
IsulatI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF) // magpadala ng mataas ang address
WriteI2C ((unsigned char) Addr & 0xFF) // mababa ang ipadala na address
}

// —————————————
// Delay mS function
// —————————————
void DelayMs (unsigned int count)
{// mSec Delay 11.0592 Mhz
unsigned int i // Keil v7.5a
habang (bilangin)
{
ako = 115
habang (i> 0) i–
bilangin–
}
}

Kaya, ito ay tungkol sa pagpapatupad ng interface ng I2C. Inaasahan namin na nakakuha ka ng mas mahusay na pag-unawa sa konseptong ito. Bukod dito, ang anumang mga query patungkol sa konseptong ito o mga aparato sa pagitan mangyaring ibigay ang iyong mahahalagang mungkahi sa pamamagitan ng pagkomento sa seksyon ng komento sa ibaba.