Hoje em dia, os protocolos desempenham um papel essencial no projeto de sistema embarcado . Sem ir aos protocolos, se você quiser expandir os recursos periféricos do microcontrolador, a complexidade e o consumo de energia aumentarão. Existem diferentes tipos de protocolos de barramento disponíveis, como USART, SPI, CAN, Protocolo de barramento I2C , etc., que são usados para transferir os dados entre dois sistemas.
Protocolo I2C
O que é I2C Bus?
A transmissão e o recebimento de informações entre dois ou mais dispositivos requerem um caminho de comunicação denominado sistema de barramento. Um barramento I2C é um barramento serial bidirecional de dois fios usado para transportar os dados entre circuitos integrados. O I2C significa “Inter Integrated Circuit”. Foi introduzido pela primeira vez pelos semicondutores Philips em 1982. O barramento I2C consiste em três velocidades de transferência de dados, como padrão, modo rápido e modo de alta velocidade. O barramento I2C suporta dispositivos de espaço de endereço de 7 e 10 bits e sua operação difere com tensões baixas.
Protocolo I2c Bus
Linhas de Sinal I2C
Linhas de Sinal I2C
O I2C é um protocolo de barramento serial que consiste em duas linhas de sinal, como linhas SCL e SDL, que são usadas para se comunicar com os dispositivos. O SCL significa uma 'linha de relógio serial' e este sinal é sempre conduzido pelo 'dispositivo mestre'. O SDL significa 'linha de dados seriais' e este sinal é conduzido pelo mestre ou pelos periféricos I2C. Ambas as linhas SCL e SDL estão em estado de dreno aberto quando não há transferência entre os periféricos I2C.
Saídas de dreno aberto
O ralo aberto é o conceito para transistor FET em que o terminal de drenagem do transistor está no estado aberto. Os pinos SDL e SCL do dispositivo mestre são projetados com os transistores no estado aberto, portanto, a transferência de dados só é possível quando esses transistores são conduzidos. Portanto, essas linhas ou terminais de drenagem são conectados a resistores pull-up completos ao VCC para o modo de condução.
Interfaces I2C
Vários dispositivos escravos têm interface com o microcontrolador com a ajuda do barramento I2C através do deslocador de nível I2C IC para transferir as informações entre eles. O protocolo I2C usado para conectar no máximo 128 dispositivos, todos conectados para se comunicarem com as linhas SCL e SDL da unidade mestre, bem como com os dispositivos escravos. Ele suporta comunicação Multimaster, o que significa que dois mestres são usados para comunicar os dispositivos externos.
Taxas de transferência de dados I2C
O protocolo I2C opera três modos, tais como: modo rápido, modo de alta velocidade e modo padrão em que a velocidade de dados do modo padrão varia de 0 Hz a 100 Hz, e os dados do modo rápido podem ser transferidos com velocidade de 0 Hz a 400 KHz e o modo de alta velocidade com 10 KHz a 100KHz. Os dados de 9 bits são enviados para cada transferência em que 8 bits são enviados pelo transmissor MSB para o LSB e o 9º bit é um bit de confirmação enviado pelo receptor.
Taxas de transferência de dados I2C
Comunicação I2C
O protocolo de barramento I2C é mais comumente usado na comunicação mestre e escravo, em que o mestre é chamado de “microcontrolador” e o escravo é chamado de outros dispositivos como ADC, EEPROM, DAC e dispositivos semelhantes no sistema embarcado. O número de dispositivos escravos é conectado ao dispositivo mestre com a ajuda do barramento I2C, em que cada escravo consiste em um endereço único para comunicá-lo. As etapas a seguir são usadas para comunicar o dispositivo mestre ao escravo:
Passo 1: Primeiro, o dispositivo mestre emite uma condição inicial para informar todos os dispositivos escravos para que eles escutem na linha de dados seriais.
Passo 2: O dispositivo mestre envia o endereço do dispositivo escravo alvo, que é comparado com todos os endereços dos dispositivos escravos, conforme conectado às linhas SCL e SDL. Se houver correspondência de algum endereço, esse dispositivo será selecionado e todos os dispositivos restantes serão desconectados das linhas SCL e SDL.
Etapa 3: O dispositivo escravo com um endereço correspondente recebido do mestre responde com uma confirmação ao mestre e, em seguida, a comunicação é estabelecida entre o mestre e os dispositivos escravos no barramento de dados.
Passo 4: O mestre e o escravo recebem e transmitem os dados, dependendo se a comunicação é de leitura ou gravação.
Passo 5: Em seguida, o mestre pode transmitir 8 bits de dados para o receptor, que responde com uma confirmação de 1 bit.
Tutorial I2C
Transmitir e receber as informações passo a passo em série com respeito aos pulsos de clock é chamado de protocolo I2C. É um protocolo inter-sistemas e de curta distância, ou seja, é utilizado dentro da placa de circuito para comunicar os dispositivos mestre e escravo.
Fundamentos do protocolo I2C
Em geral, o sistema de barramento I2C consiste em dois fios que são usados facilmente para expandir os recursos periféricos de entrada e saída, como ADC, EEROM e RTC, e outros componentes básicos para fazer um sistema cuja complexidade é muito menor.
Exemplo: Como o microcontrolador 8051 não tem ADC embutido - então, se quisermos fazer a interface de qualquer sensor analógico com o microcontrolador 8051 - temos que usar dispositivos ADC, como ADC de canal ADC0804-1, ADC de canal ADC0808-8, etc. Usando esses ADCs, podemos conectar os sensores analógicos ao microcontrolador.
Sem usar o protocolo para expandir os recursos de E / S de qualquer microcontrolador ou processador, podemos ir para o dispositivo 8255 ICit de 8 pinos. O O microcontrolador 8051 é um microcontrolador de 40 pinos usando o IC 8255, podemos expandir as portas de 3 E / S com 8 pinos em cada porta. Ao usar todos os dispositivos como RTC, ADC, EEPROM, Timers, etc. - para expandir o circuito periférico - a complexidade, o custo, o consumo de energia e o tamanho do produto também são aumentados.
Para superar esse problema, o conceito de protocolo entra em cena para reduzir a complexidade do hardware e o consumo de energia. Podemos expandir mais o número de recursos, como periféricos I / 0, ADCs, T / C e dispositivos de memória para até 128 dispositivos usando este protocolo I2C.
Terminologia usada em protocolos I2C
Transmissor: O dispositivo que envia dados para o barramento é chamado de transmissor.
Destinatário: O dispositivo que recebe dados do barramento é denominado receptor.
Mestre: O dispositivo que inicia as transferências para gerar sinais de relógio e encerrar uma transferência é chamado de mestre.
Escravo: O dispositivo endereçado por um mestre é denominado escravo.
Multimaster: Mais de um mestre pode tentar controlar o barramento ao mesmo tempo sem corromper a mensagem. É chamado de Multimaster.
Arbitragem: Procedimento para garantir que, se mais de um mestre tentar controlar o barramento simultaneamente, apenas um poderá fazê-lo, a mensagem vencedora não será corrompida.
Sincronização: O procedimento para sincronizar o relógio único de dois ou mais dispositivos é chamado de sincronização.
Sequência de Comandos Básicos I2C
- Condição de bit inicial
- Parar condição de bit
- Condição de Reconhecimento
- Operação de gravação mestre para escravo
- Leia a Operação Slave to Master
Iniciar e parar condição de bits
Quando o mestre (microcontrolador) deseja falar com um dispositivo escravo (por exemplo, ADC), ele inicia a comunicação emitindo uma condição de partida no barramento I2C e, em seguida, emite uma condição de parada. Os níveis lógicos de partida e parada I2C são mostrados na figura.
A condição de início I2C é definida como uma transição de alto para baixo da linha SDA enquanto a linha SCL é alta. Uma condição de parada I2C ocorre quando a linha SDA muda de baixa para alta enquanto a linha SCL está alta.
O mestre I2C sempre gera as condições S e P. Uma vez que o mestre I2C inicia uma condição de PARTIDA, o barramento I2c é considerado como estando no estado ocupado.
Iniciar e parar condição de bits
Programação:
START Condtion:
sbit SDA = P1 ^ 7 // inicializa os pinos SDA e SCL do microcontrolador //
sbit SCL = P1 ^ 6
void delay (unsigned int)
void main ()
{
SDA = 1 // processando os dados //
SCL = 1 // clock é alto //
atraso()
SDA = 0 // enviou os dados //
atraso()
SCL = 0 // sinal de clock é baixo //
}
Atraso vazio (int p)
{
unsignedinta, b
Para (a = 0a<255a++) //delay function//
Para (b = 0b
Condição de PARADA:
void main ()
{
SDA = 0 // Pare de processar os dados //
SCL = 1 // clock é alto //
atraso()
SDA = 1 // Parado //
atraso()
SCL = 0 // sinal de clock é baixo //
}
Atraso vazio (int p)
{
unsignedinta, b
Para (a = 0a<255a++) //delay function//
Para (b = 0b
Condição de Confirmação (ACK) e Não Confirmação (NCK)
Cada byte transmitido pelo barramento I2C é seguido por uma condição de reconhecimento do receptor, o que significa que, após o mestre puxar o SCL para baixo para completar a transmissão de 8 bits, o SDA será puxado do receptor para o mestre. Se, após a transmissão do receptor não puxar, a linha SDA LOW é considerada uma condição NCK.
Reconhecimento (ACK)
Programação
Reconhecimento
void main ()
{
SDA = 0 // linha SDA vai para baixo //
SCL = 1 // clock é alto para baixo //
atraso (100)
SCL = 0
}
Sem confirmação:
void main ()
{
SDA = 1 // linha SDA vai para alta //
SCL = 1 // clock é alto para baixo //
atraso (100)
SCL = 0
}
Operação de gravação de mestre para escravo
O protocolo I2C transfere os dados na forma de pacotes ou bytes. Cada byte é seguido por um bit de confirmação.
Formato de transferência de dados
Formato de transferência de dados
Começar: Primeiramente, a sequência de transferência de dados iniciada pelo mestre gerando a condição inicial.
Endereço de 7 bits: Depois disso, o mestre envia o endereço do escravo em dois formatos de 8 bits em vez de um único endereço de 16 bits.
R / W: Se o bit de leitura e gravação for alto, a operação de gravação será executada.
ALAS: Se a operação de gravação for realizada no dispositivo escravo, o receptor envia o ACK de 1 bit para o microcontrolador.
Pare: Após a conclusão da operação de gravação no dispositivo escravo, o microcontrolador envia a condição de parada para o dispositivo escravo.
Programação
Operação de gravação
voidwrite (unsigned char d)
{
Caractere sem sinal k, j = 0x80
Para (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
atraso (4)
SCL = 0
}
SDA = 1
SCL = 1
atraso (2)
c = SDA
atraso (2)
SCL = 0
}
Operação de leitura mestre para escravo
Os dados são lidos de volta do dispositivo escravo na forma de bit ou bytes - leia o bit mais significativo primeiro e leia o bit menos significativo por último.
O formato de leitura de dados
Formato de leitura de dados
Começar: Primeiramente, a sequência de transferência de dados é iniciada pelo mestre gerando a condição inicial.
Endereço de 7 bits: Depois disso, o mestre envia o endereço do escravo em dois formatos de 8 bits em vez de um único endereço de 16 bits.
R / W: Se o bit de leitura e gravação for baixo, a operação de leitura será executada.
ALAS: Se a operação de gravação for realizada no dispositivo escravo, o receptor envia o ACK de 1 bit para o microcontrolador.
Pare: Após a conclusão da operação de gravação no dispositivo escravo, o microcontrolador envia a condição de parada para o dispositivo escravo.
Programação
Leitura nula ()
{
Caractere sem sinal j, z = 0x00, q = 0x80
SDA = 1
para (j = 0j<8j++)
{
SCL = 1
atraso (100)
flag = SDA
if (bandeira == 1)
q)
q = q >> 1
atraso (100)
SCL = 0
Exemplo prático de interface ADC com o microcontrolador 8051
O ADC é um dispositivo que é usado para converter os dados analógicos na forma digital e digital para analógica. O microcontrolador 8051 não tem um ADC embutido, então temos que adicionar externamente por meio do protocolo I2C. O PCF8591 é baseado em I2C analógico para digital e conversor digital para analógico. Este dispositivo pode suportar um máximo de 4 canais de entrada analógica junto com tensões de 2,5 a 6 V.
Saídas Analógicas
As saídas analógicas vêm na forma de tensões. Por exemplo, o sensor analógico de 5 V fornece lógica de saída de 0,01 V a 5 V.
O valor digital máximo de 5v é = 256.
O valor de 2,5 V é = 123 de acordo com o valor máximo de tensão.
A fórmula da saída analógica é:
A fórmula das saídas digitais:
Interface do ADC com o microcontrolador 8051
A figura acima mostra a transferência de dados usando o protocolo I2C do dispositivo ADC para o microcontrolador 8051. Os pinos ADC de SCL e SDA são conectados aos pinos 1.7 e 1.6 do microcontrolador para estabelecer a comunicação entre eles. Quando o sensor fornece valores analógicos ao ADC, ele converte para digital e transfere os dados para o microcontrolador por meio do protocolo I2C.
Trata-se do tutorial do protocolo de barramento I2C com programas apropriados. Esperamos que o conteúdo fornecido forneça um conceito prático de interface de vários dispositivos com microcontroladores usando a comunicação I2C. Se você tiver alguma dúvida no procedimento de interface deste protocolo, pode entrar em contato conosco comentando abaixo.