Comunicação I2C

Comunicação I2C

Neste post vamos conhecer um pouco sobre comunicação I2C e ver um exemplo usando a plataforma do Arduino e o ambiente de simulação do Tinkercad.

No vídeo abaixo são apresentados alguns detalhes sobre a comunicação I2C.

O I²C (Inter Integrated Circuit) também conhecido como comunicação I2C foi desenvolvido pela empresa Phillips em 1982 e operava em até 100 kHz, permitia um endereçamento de 7 bits e suportava até 112 dispositivos, mas havia uma quantidade de endereços reservados, o que limitava a quantidade dispositivos que podiam ser conectados no barramento I2C.

Em 1992 foi publicado a primeira especificação para o protocolo de comunicação I2C, foram adicionados mais 3 bits de endereços, o que permitia um endereçamento de 10 bits. Além disso a velocidade aumentou para 400 kHz (modo rápido).

Atualmente alguns microcontroladores conseguem operar em frequências de 1 MHz, 3.4 MHz e 5 MHz.

O I2C é um protocolo de comunicação serial que permite que um ou mais controladores, ou dispositivos sejam controlados na mesma rede, ou seja, é possível conectar vários dispositivos utilizando apenas 4 ligações, isso facilita muito a ligação de vários dispositivos. Na figura abaixo é mostrado a arquitetura básica da comunicação I2C.

Comunicação I2C

Em alguns caso será necessário adicionar um circuito para adequar os níveis de tensão entre os controladores e os dispositivos a serem controladores, por exemplo, quando se usa um microcontrolador que opera com uma tensão de alimentação de 3V3, e um display de 5V será necessário o uso de um voltage translator. Na figura abaixo é mostrado como ficaria a topologia.

Voltage Translator no barramento I2C

Abaixo é apresentado um exemplo de ligação com resistores de pull entre um microcontrolador e uma memória.

Memória conectado a um microcontrolador através do barramento de comunicação I2C

Também é muito importante verificar em qual endereço os nossos dispositivos estão configurados, pois isso pode causar problemas de comunicação.

Controle de display LCD com comunicação I2C

Como exemplo, vamos fazer o controle de um display LCD usando I2C. Para isso vamos precisar dos seguintes materiais:
* Arduino Uno ou Arduino Nano;

* 4 cabos para ligação;

* 1 display LCD 1602 com placa para controle I2C.

Abaixo é apresentado o código que vamos utilizar no nosso exemplo.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(32, 16, 2);  // Endereço I2C do LCD e número de colunas/linhas


void setup() {
  lcd.init();                      // Inicializa o LCD
  lcd.backlight();                 // Ativa a retroiluminação do LCD
}

void loop() {
  lcd.clear();           // Limpa o LCD
  lcd.setCursor(1, 0);  // Posiciona o cursor
  lcd.print("Feliz Ano Novo");
  lcd.setCursor(6, 1);  // Posiciona o cursor
  lcd.print("2024");
  
  delay(1000);  // Atualiza a exibição a cada segundo
}

Simulação

Abaixo é possível fazer a simulação do código apresentado.

Conclusão

Com isso concluímos nossa introdução ao protocolo de comunicação I2C, vimos um exemplo de código e alguns aspectos de hardware, importantes para o bom funcionamento dos dispositivos conectados ao nosso barramento I2C.

Isso é tudo pessoal e até o próximo post.

Referências:
https://en.wikipedia.org/wiki/I%C2%B2C

https://learn.sparkfun.com/tutorials/i2c/all