Jak propojit I2C-EEPROM s mikrokontrolérem 8051

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





Termín zkratka I2C nebo IIC je inter integrovaný obvod a nazývá se to, když jsem na druhou C. I2C je sériová počítačová sběrnice , který vynalezli polovodiče NXP, dříve byl pojmenován jako polovodiče Philips. Sběrnice I2C se používá k připojení nízkorychlostních periferních integrovaných obvodů mikrokontroléry a procesory . V roce 2006 není pro implementaci protokolu I2C nutný žádný licenční poplatek. Je však nutný poplatek za získání adresy I2C slave přiřazené polovodičem NXP.

Někteří konkurenti, jako jsou Texas Instruments, Siemens AG, NEC, Motorola, Intersil a STMicroelectronics, oznámili v polovině 90. let na trh vhodné produkty I²C. V roce 1995 je SMBus definován společností Intel, což je podskupina I²C, která uvádí, že protokoly jsou přísnější. Hlavním účelem SMBus je podpora interoperability a robustnosti. Proto současné systémy I²C obsahují pravidla a zásady od SMBus, někdy podporuje I2C i SMBus s minimální rekonfigurací.




I2C sběrnice

I2C sběrnice

Rozhraní I2C Bus-EEPROM s mikrokontrolérem 8051

Co je I2C Bus

Sběrnice I2c používá dvě obousměrné linky s otevřeným odtokem, jako je SDA (sériová datová linka) a SCl (sériová hodinová linka), které jsou vytaženy pomocí odporů. Sběrnice I2C umožňuje hlavnímu zařízení zahájit komunikaci s podřízeným zařízením. Data jsou mezi těmito dvěma zařízeními zaměňována. Typické použité napětí je +3,3 V nebo + 5 V, i když jsou povoleny systémy s mimořádným napětím.



Rozhraní I2C

Rozhraní I2C

EEPROM

Elektricky mazatelná programovatelná ROM (EEPROM) je uživatelem upravitelná ROM, kterou lze často vyjímat a přeprogramovat pomocí aplikace vyššího než běžného elektrického napětí. EEPROM je druh energeticky nezávislé paměti používané v elektronických zařízeních, jako jsou počítače, k ukládání malého množství dat, která by měla být uložena při odpojení napájení.

8051 Slicker Board

Deska 8051 Slicker je speciálně navržena tak, aby pomohla studentům technických oborů v oblasti vestavěné systémy . Tato sada je navržena tak, aby splňovala všechny její vlastnosti 8051 mikrokontrolér budou případně použity studenty. Tato útočná deska podporuje ISP (In System Programming), které se provádí přes sériový port. Tato sada a 8051 od NXP je navrženo k uhlazení postupu ladění mnoha návrhů obklopujících rychlostní 8bitové mikrokontroléry.

Propojení I2C - EEPROM

Následující obrázek ukazuje propojení I2C-EEPROM s mikrokontrolérem 8051. Zde je I2C protokolem master-slave, který obsahuje data spolu s hodinovým pulzem. Hlavní zařízení obvykle přepínalo hodinovou linku SCL. Tato linka objednává časování dat, které se přenáší na sběrnici I2C. Pokud nebudou hodiny v provozu, nebudou přenesena žádná data. Všichni slave jsou ovládáni stejnými hodinami, SCL.


Propojení I2C - EEPROM

Propojení I2C - EEPROM

Sběrnice I2C podporuje různá zařízení kde je každé zařízení identifikováno jedinečnou adresou, ať už se jedná o ovladač LCD, paměťovou kartu, mikrokontrolér nebo propojení klávesnice které mohou fungovat jako Tx nebo Rx, závisí na fungování zařízení. Řadič je určen k ovládání zařízení EEPROM prostřednictvím protokolu I2C. Zde protokol I2C funguje jako hlavní zařízení a reguluje EEPROM a funguje jako slave. R / W operace jsou zdatné přenosem sady řídicích signálů zahrnujících adresu AND / OR datovou sběrnici. Tyto signály by měly být obsluhovány vhodnými hodinovými signály

Rozhraní I2C Bus-EEPROM s mikrokontrolérem 8051

Chcete-li číst, zapisujte a mazejte EEPROM pomocí sběrnice I2C na úderníkové desce 8051. Propojení I2 Bus-EEPROM s Mikrokontrolér 8051 je velmi jednoduchý . Činnost tohoto propojení je vyslat signál jako WRITE, následovaný datovou a adresovou sběrnicí. V této operaci se EEPROM používá k ukládání dat. V sadě 8051 jsou dvě čísla linek EEPROM regulována ovladači podporovanými I2C. SCL a SDA jsou připojeny k sériovému EEPROM IC založenému na I2C.

Rozhraní I2C Bus-EEPROM s mikrokontrolérem 8051

Rozhraní I2C Bus-EEPROM s mikrokontrolérem 8051

Použitím linek SDA a SCL I2C se operace čtení a zápisu EEPROM provádějí v sadě 8051 Slicker

Rozhraní I2C je tak jednoduché a v každém jednotlivém datu čte / zapisuje do EEPROM. Zpoždění závisí na kompilátoru, jak vylepšuje smyčky, jakmile provedete změny v možnostech, které se zpoždění liší.

Zdrojový kód pro rozhraní I2C

#zahrnout
#zahrnout
#zahrnout

#define ACK 1
#define NO_ACK 0

nepodepsaný znak i
nepodepsaný znak EData [5]
nepodepsaný char Data
void InitSerial (void)
void DelayMs (unsigned int)
void WriteI2C (nepodepsaný znak)
void Start (void)
void Stop (void)
void ReadBYTE (unsigned int)
void WriteBYTE (unsigned int)
nepodepsaný znak ReadI2C (bit)

sbit SCL = P2 ^ 0 // připojení ke kolíku SCL (hodiny)
sbit SDA = P2 ^ 1 // připojení k pinu SDA (Data)

// ——————————————
// Hlavní program
// ——————————————
void main (void)
{
InitSerial () // Inicializuje sériový port
putchar (0x0C) // vymazat hyper terminál
DelayMs (5)
WriteBYTE (0x0000)
WriteI2C („A“) // Zápis dat je zde
WriteI2C („B“)
WriteI2C („C“)
WriteI2C („D“)
WriteI2C („E“)
WriteI2C („F“)
Stop()
DelayMs (10)

Číst BYTE (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)

pro (i = 0i<6i++)
{
printf („hodnota =% c n“, EData [i]) // zobrazit data * /
DelayMs (100)
}

zatímco (1)
}

// ——————————————
// Inicializace sériového portu
// ——————————————
void InitSerial (void)
{
SCON = 0x52 // nastavení ovládání sériového portu
TMOD = 0x20 // hardware (9600 BAUD @ 11,0592 MHz)
TH1 = 0xFD // TH1
TR1 = 1 // Časovač 1 zapnutý
}

// ——————————-
// spustit I2C
// ——————————-
void Start (void)
{
SDA = 1
SCL = 1
_tlačítko _ () _ nop_ ()
SDA = 0
_tlačítko _ () _ nop_ ()
SCL = 0
_tlačítko _ () _ nop_ ()
}

// ——————————-
// zastavit I2C
// ——————————-
void Stop (void)
{
SDA = 0
_tlačítko _ () _ nop_ ()
SCL = 1
_tlačítko _ () _ nop_ ()
SDA = 1
}

// ——————————-
// Napište I2C
// ——————————-
void WriteI2C (nepodepsaná char data)
{

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

SCL = 1
_tlačítko _ () _ nop_ ()
SCL = 0

}

// ——————————-
// Přečíst I2C
// ——————————-
nepodepsaný znak ReadI2C (bit ACK_Bit)
{

Start()
WriteI2C (0xA1)

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

SCL = 1
Data<<= 1
Datum = (Datum

pokud (ACK_Bit == 1)
SDA = 0 // Odeslat ACK
jiný
SDA = 1 // Odeslat ŽÁDNÝ ACK

_tlačítko _ () _ nop_ ()
SCL = 1
_tlačítko _ () _ nop_ ()
SCL = 0
Stop()
vrátit data
}

// ——————————-
// Číst 1 bajtový formulář I2C
// ——————————-
void ReadBYTE (unsigned int Addr)
{
Start()
WriteI2C (0xA0)
WriteI2C ((nepodepsaný znak) (adresa >> 8) & 0xFF)
WriteI2C ((nepodepsaný znak) Addr a 0xFF)
}

// ——————————-
// Napište 1 bajt na I2C
// ——————————-
void WriteBYTE (unsigned int Addr)
{
Start()
WriteI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF) // vysoká adresa odeslání
WriteI2C ((nepodepsaný znak) Addr & 0xFF) // nízká adresa pro odeslání
}

// ——————————————
// Zpoždění funkce mS
// ——————————————
void DelayMs (unsigned int count)
{// Zpoždění mSec 11,0592 MHz
unsigned int i // Keil v7.5a
while (count)
{
i = 115
while (i> 0) i–
počet-
}
}

Jedná se tedy o implementaci I2C rozhraní. Doufáme, že jste tomuto konceptu lépe porozuměli. Kromě toho jakékoli dotazy týkající se tohoto konceptu nebo propojovací zařízení uveďte své cenné návrhy komentářem v sekci komentářů níže.