Как да се свърже I2C-EEPROM с микроконтролер 8051

Опитайте Нашия Инструмент За Премахване На Проблемите





Терминът I2C или IIC съкращение е интер интегрална схема и се нарича, както аз на квадрат C. I2C е серийна компютърна шина , която е изобретена от полупроводници NXP, преди това е наречена като полупроводници Philips. Шината I2C се използва за свързване на периферни интегрални схеми с ниска скорост микроконтролери и процесори . През 2006 г. за прилагане на протокола I2C не е необходима лицензионна такса. Но таксата е необходима, за да се получи I2C slave адрес, присвоен от NXP semiconductors.

Някои конкуренти като Texas Instruments, Siemens AG, NEC, Motorola, Intersil и STMicroelectronics обявиха на пазара подходящи I²C продукти в средата на 90-те години. През 1995 г. SMBus се определя от Intel, което е подгрупа на I²C, която заявява, че протоколите са по-строги. Основната цел на SMBus е да поддържа оперативна съвместимост и стабилност. Следователно, настоящите I²C системи включват правила и политики от SMBus, понякога поддържат I2C и SMBus с минимална реконфигурация.




I2C автобус

I2C автобус

Интерфейс I2C Bus-EEPROM с 8051 микроконтролер

Какво е I2C Bus

I2c шината използва две двупосочни линии с отворен източник, като SDA (серийна линия за данни) и SCl (серийна тактова линия) и те се изтеглят с резистори. I2C шината позволява на главното устройство да започне комуникация с подчинено устройство. Данните се обменят между тези две устройства. Типичните използвани напрежения са + 3.3V или + 5V, въпреки че са разрешени системи с допълнително напрежение.



I2C интерфейс

I2C интерфейс

EEPROM

Програмируем ROM с електрическо изтриване (EEPROM) е ROM, модифициран от потребителя, който може да бъде премахван и препрограмиран често чрез прилагане на по-високо от нормалното електрическо напрежение. EEPROM е вид енергонезависима памет, използвана в електронни устройства като компютри за съхраняване на малки количества данни, които трябва да бъдат запазени, когато захранването е отделено.

8051 Slicker Board

Таблата 8051 Slicker е специално проектирана, за да помогне на студентите технически специалисти в района на вградени системи . Този комплект е проектиран по такъв начин, че всички функции на 8051 микроконтролер ще бъде използвано от учениците. Тази нападателна дъска поддържа ISP (при системно програмиране), което се извършва през серийния порт. Този комплект и 8051 от NXP се предлага да изгладят напредъка на отстраняването на грешки на много дизайни, обграждащи скорост 8-битови микроконтролери.

Интерфейс I2C - EEPROM

Следващата фигура показва взаимодействие на I2C-EEPROM с 8051 микроконтролер. Тук I2C е главно-подчинен протокол, който включва данните заедно с тактовия импулс. Обикновено главното устройство превключва линията на часовника SCL. Този ред нарежда времето за предаване на данни, което се прехвърля по I2C шината. Освен ако часовникът не работи, няма да бъдат прехвърлени данни. Всички роби се контролират от един и същ часовник, SCL.


Интерфейс I2C - EEPROM

Интерфейс I2C - EEPROM

I2C шината поддържа различни устройства където всяко устройство се идентифицира с уникален адрес, независимо дали е LCD драйвер, карта с памет, микроконтролер или взаимодействие на клавиатура което може да работи като Tx или Rx зависи от функционирането на устройството. Контролерът е предназначен за управление на EEPROM устройството чрез I2C протокол. Тук протоколът I2C работи като главно устройство и регулира EEPROM и работи като slave. Операциите за R / W са опитни чрез прехвърляне на набор от контролни сигнали, съдържащи адресната И / ИЛИ шина за данни. Тези сигнали трябва да бъдат съпроводени с подходящи тактови сигнали

Интерфейс I2C Bus-EEPROM с 8051 микроконтролер

Ако искате да четете, напишете и изтрийте EEPROM, като използвате I2C шина в 8051 ударна платка. Взаимодействие на I2 Bus-EEPROM с Микроконтролерът 8051 е много прост . Операцията на това взаимодействие е да изпрати сигнал като WRITE, последван от данни и адресна шина. При тази операция EEPROM се използва за съхраняване на данните. В комплекта 8051 два броя EEPROM линии се регулират от поддържани от I2C драйвери. SCL и SDA са свързани към I2C базиран сериен EEPROM IC.

Интерфейс I2C Bus-EEPROM с 8051 микроконтролер

Интерфейс I2C Bus-EEPROM с 8051 микроконтролер

Чрез използване на SDA и SCL I2C линии, операциите за четене и запис на EEPROM се извършват в 8051 Slicker Kit

Взаимодействието на I2C е толкова просто и във всички отделни данни се чете / пише в EEPROM. Забавянето зависи от компилатора как той подобрява контурите веднага щом направите промени в избора, забавянето варира.

Изходен код за I2C взаимодействие

#include
#include
#include

#define ACK 1
#define NO_ACK 0

неподписан знак i
неподписан знак EData [5]
неподписани char данни
void InitSerial (void)
void DelayMs (неподписан int)
void WriteI2C (неподписан знак)
void Start (void)
void Stop (void)
void ReadBYTE (неподписан int)
void WriteBYTE (неподписан int)
неподписан знак ReadI2C (бит)

sbit SCL = P2 ^ 0 // свързване към SCL щифт (часовник)
sbit SDA = P2 ^ 1 // свързване към SDA щифт (данни)

// —————————————
// Основна програма
// —————————————
void main (void)
{
InitSerial () // Инициализиране на серийния порт
putchar (0x0C) // изчистване на хипер терминал
Закъснения (5)
WriteBYTE (0x0000)
WriteI2C (‘A’) // Write Data’s Here
WriteI2C (‘B’)
WriteI2C (‘C’)
WriteI2C (‘D’)
WriteI2C(‘E’)
WriteI2C (‘F’)
Спри се()
Закъснения (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)

за (i = 0i<6i++)
{
printf (“value =% c n”, EData [i]) // показване на данни * /
Закъснения (100)
}

докато (1)
}

// —————————————
// Инициализиране на сериен порт
// —————————————
void InitSerial (void)
{
SCON = 0x52 // настройка на контрол на сериен порт
TMOD = 0x20 // хардуер (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Включен таймер 1
}

// ———————————-
// стартиране на I2C
// ———————————-
void Start (void)
{
SDA = 1
SCL = 1
_бутон _ () _ nop_ ()
SDA = 0
_бутон _ () _ nop_ ()
SCL = 0
_бутон _ () _ nop_ ()
}

// ———————————-
// спиране на I2C
// ———————————-
void Stop (void)
{
SDA = 0
_бутон _ () _ nop_ ()
SCL = 1
_бутон _ () _ nop_ ()
SDA = 1
}

// ———————————-
// Пишете I2C
// ———————————-
void WriteI2C (неподписани char данни)
{

за (i = 0i<8i++)
{
SDA = (Data & 0x80) ? 1:0
SCL = 1SCL = 0
Данни<<=1
}

SCL = 1
_бутон _ () _ nop_ ()
SCL = 0

}

// ———————————-
// Прочетете I2C
// ———————————-
неподписан знак ReadI2C (бит ACK_Bit)
{

Старт ()
WriteI2C (0xA1)

SDA = 1
за (i = 0i<8i++)

SCL = 1
Данни<<= 1
Дата = (Дата

ако (ACK_Bit == 1)
SDA = 0 // Изпращане на ACK
друго
SDA = 1 // Изпращане НЯМА ACK

_бутон _ () _ nop_ ()
SCL = 1
_бутон _ () _ nop_ ()
SCL = 0
Спри се()
връщане на данни
}

// ———————————-
// Четене на 1 байт форма I2C
// ———————————-
void ReadBYTE (неподписан int Addr)
{
Старт ()
WriteI2C (0xA0)
WriteI2C ((неподписан знак) (Addr >> 8) & 0xFF)
WriteI2C ((неподписан знак) Addr & 0xFF)
}

// ———————————-
// Записваме 1 байт в I2C
// ———————————-
void WriteBYTE (неподписан int Addr)
{
Старт ()
WriteI2C (0xA0)
WriteI2C ((неподписан знак) (Addr >> 8) & 0xFF) // изпращане на адрес високо
WriteI2C ((неподписан знак) Addr & 0xFF) // адрес за изпращане нисък
}

// —————————————
// Забавяне на mS функция
// —————————————
void DelayMs (неподписан int count)
{// mSec Delay 11.0592 Mhz
unsigned int i // Keil v7.5a
докато (брои)
{
i = 115
докато (i> 0) i–
броя-
}
}

По този начин всичко е свързано с внедряването на I2C интерфейс. Надяваме се, че сте разбрали по-добре тази концепция. Освен това, всякакви въпроси относно тази концепция или свързващи устройства моля дайте вашите ценни предложения, като коментирате в раздела за коментари по-долу.