Como fazer a interface I2C-EEPROM com o microcontrolador 8051

Experimente Nosso Instrumento Para Eliminar Problemas





O termo I2C ou abreviatura IIC é um inter circuito integrado e é chamado como eu ao quadrado C. I2C é um barramento serial de computador , que é inventado por semicondutores NXP, anteriormente é denominado semicondutores Philips. O barramento I2C é usado para conectar circuitos integrados periféricos de baixa velocidade a microcontroladores e processadores . No ano de 2006, para implementar o protocolo I2C, nenhuma taxa de licenciamento é necessária. Mas é necessária uma taxa para obter o endereço do escravo I2C atribuído pelos semicondutores NXP.

Alguns concorrentes como Texas Instruments, Siemens AG, NEC, Motorola, Intersil e STMicroelectronics anunciaram produtos I²C adequados para o mercado em meados dos anos 1990. No ano de 1995, SMBus é definido pela Intel, que é um subgrupo de I²C que afirma que os protocolos são mais rígidos. O principal objetivo do SMBus é oferecer suporte à interoperabilidade e robustez. Portanto, os sistemas I²C atuais incluem regras e políticas do SMBus, às vezes ele suporta I2C e SMBus com reconfiguração mínima.




I2C Bus

I2C Bus

Interface I2C Bus-EEPROM com microcontrolador 8051

O que é I2C Bus

O barramento I2c usa duas linhas de dreno aberto bidirecionais, como SDA (linha de dados seriais) e SCl (linha de relógio serial) e estas são puxadas com resistores. O barramento I2C permite que um dispositivo mestre inicie a comunicação com um dispositivo escravo. Os dados são trocados entre esses dois dispositivos. As tensões típicas usadas são + 3,3 V ou + 5 V, embora sejam permitidos sistemas com tensões extras.



Interface I2C

Interface I2C

EEPROM

ROM programável eletricamente apagável (EEPROM) é uma ROM modificável pelo usuário que pode ser removida e reprogramada freqüentemente através da aplicação de voltagem elétrica mais alta do que a normal. Uma EEPROM é um tipo de memória não volátil usada em dispositivos eletrônicos como computadores para armazenar pequenas quantidades de dados que devem ser salvos quando a energia é desligada.

8051 Slicker Board

A placa 8051 Slicker é especialmente projetada para ajudar estudantes técnicos na área de sistemas embarcados . Este kit é projetado de forma que todos os recursos do Microcontrolador 8051 será possivelmente usado pelos alunos. Esta placa striker suporta ISP (In System Programming) que é feito através da porta serial. Este kit e o 8051 da NXP são propostos para suavizar o progresso da depuração de muitos projetos envolvendo microcontroladores de 8 bits de velocidade.

Interface I2C - EEPROM

A figura a seguir mostra a interface I2C-EEPROM com o microcontrolador 8051. Aqui, I2C é um protocolo mestre-escravo, que inclui os dados junto com o pulso de clock. Normalmente, o dispositivo mestre trocou a linha do relógio, SCL. Esta linha ordena a temporização dos dados que são transferidos no barramento I2C. A menos que o relógio seja operado, nenhum dado será transferido. Todos os escravos são controlados pelo mesmo relógio, SCL.


Interface I2C - EEPROM

Interface I2C - EEPROM

O barramento I2C suporta os vários dispositivos onde cada dispositivo é identificado por um endereço único, seja um driver LCD, cartão de memória, microcontrolador ou interface do teclado que pode operar como Tx ou Rx depende do funcionamento do dispositivo. O controlador é projetado para controlar o dispositivo EEPROM via protocolo I2C. Aqui, o protocolo I2C funciona como dispositivo mestre e regula a EEPROM e funciona como escravo. As operações R / W são proficientes transferindo um conjunto de sinais de controle compreendendo o barramento de dados AND / OR de endereço. Esses sinais devem ser acompanhados por sinais de relógio adequados

Interface I2C Bus-EEPROM com microcontrolador 8051

Se você quiser ler, escrever e apagar EEPROM usando o barramento I2C na placa 8051 striker. Interface de I2 Bus-EEPROM com O microcontrolador 8051 é muito simples . A operação dessa interface é enviar um sinal como WRITE, seguido por dados e barramento de endereço. Nesta operação, a EEPROM é usada para armazenar os dados. No kit 8051, dois números de linhas EEPROM são regulados por drivers compatíveis com I2C. O SCL e o SDA são conectados ao CI serial EEPROM baseado em I2C.

Interface I2C Bus-EEPROM com microcontrolador 8051

Interface I2C Bus-EEPROM com microcontrolador 8051

Usando linhas SDA e SCL I2C, as operações de leitura e gravação de EEPROM são feitas no 8051 Slicker Kit

A interface do I2C é tão simples e em cada dado Read / Write em EEPROM. O atraso depende do compilador como ele aprimora os loops assim que você faz mudanças nas escolhas, o atraso varia.

Código fonte para interface I2C

#incluir
#incluir
#incluir

# define ACK 1
#define NO_ACK 0

não assinado char i
EData char unsigned [5]
Unsigned char Data
void InitSerial (void)
void DelayMs (unsigned int)
void WriteI2C (unsigned char)
void Start (void)
void Stop (void)
void ReadBYTE (unsigned int)
void WriteBYTE (unsigned int)
ReadI2C de char unsigned (bit)

sbit SCL = P2 ^ 0 // conectar ao pino SCL (relógio)
sbit SDA = P2 ^ 1 // conectar ao pino SDA (dados)

// —————————————
// Programa principal
// —————————————
void main (void)
{
InitSerial () // Inicializa a porta serial
putchar (0x0C) // limpa o hiper terminal
DelayMs (5)
WriteBYTE (0x0000)
WriteI2C (‘A’) // Grave os dados aqui
WriteI2C ('B')
WriteI2C ('C')
WriteI2C ('D')
WriteI2C (‘E’)
WriteI2C ('F')
Pare()
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)

para (i = 0i<6i++)
{
printf (“valor =% c n”, EData [i]) // exibe dados * /
DelayMs (100)
}

enquanto (1)
}

// —————————————
// Inicializa a porta serial
// —————————————
void InitSerial (void)
{
SCON = 0x52 // configurar o controle da porta serial
TMOD = 0x20 // hardware (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 ligado
}

// ———————————-
// inicia I2C
// ———————————-
void Start (void)
{
SDA = 1
SCL = 1
_button _ () _ nop_ ()
SDA = 0
_button _ () _ nop_ ()
SCL = 0
_button _ () _ nop_ ()
}

// ———————————-
// para I2C
// ———————————-
void Stop (void)
{
SDA = 0
_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SDA = 1
}

// ———————————-
// Escreva I2C
// ———————————-
void WriteI2C (Unsigned char Data)
{

para (i = 0i<8i++)
{
SDA = (dados e 0x80)? 1: 0
SCL = 1SCL = 0
Dados<<=1
}

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

}

// ———————————-
// Leia I2C
// ———————————-
ReadI2C sem sinal (bit ACK_Bit)
{

Começar()
WriteI2C (0xA1)

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

SCL = 1
Dados<<= 1
Data = (Data

if (ACK_Bit == 1)
SDA = 0 // Enviar ACK
outro
SDA = 1 // Enviar NÃO ACK

_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SCL = 0
Pare()
dados de retorno
}

// ———————————-
// Lê o formulário I2C de 1 byte
// ———————————-
void ReadBYTE (unsigned int Addr)
{
Começar()
WriteI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF)
WriteI2C ((caracteres não assinados) Addr & 0xFF)
}

// ———————————-
// Escreva 1 byte para I2C
// ———————————-
void WriteBYTE (unsigned int Addr)
{
Começar()
WriteI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF) // enviar endereço alto
WriteI2C ((unsigned char) Addr & 0xFF) // enviar endereço baixo
}

// —————————————
// Atrasar a função mS
// —————————————
void DelayMs (contagem interna sem sinal)
{// mSec Delay 11.0592 Mhz
unsigned int i // Keil v7.5a
enquanto (contagem)
{
i = 115
enquanto (i> 0) i–
contar-
}
}

Portanto, tudo se resume à implementação da interface I2C. Esperamos que você tenha entendido melhor este conceito. Além disso, quaisquer dúvidas sobre este conceito ou dispositivos de interface por favor, dê suas sugestões valiosas, comentando na seção de comentários abaixo.