Como usar vários dispositivos I2C com Arduino

Como usar vários dispositivos I2C com Arduino

Arduino é uma placa eletrônica construída para projetar projetos. Enquanto a construção de projetos Arduino, a comunicação desempenha um papel importante. Arduino tem vários protocolos de comunicação, como serial USART, SPI e I2C. Esses protocolos aprimoram a funcionalidade e o uso do Arduino em uma grande variedade de produtos. Se nosso dispositivo não suportar um protocolo específico, temos uma vantagem de usar os outros dois. Entre todos esses I2C, há um dos protocolos mais avançados usados ​​nas placas Arduino. Vamos discutir como configurar o protocolo I2C para vários dispositivos.

I2C com Arduino

I2C também conhecido como circuito inter -integrado é um protocolo de comunicação usado nas placas Arduino. Ele usa apenas duas linhas para comunicação e um dos protocolos mais complexos para implementar com uma placa Arduino. Usando I2C, podemos conectar até 128 dispositivos com uma placa Arduino em uma única linha de dados.

I2C usa duas linhas que são SDA e SCL. Junto com essas duas linhas, um resistor de tração é usado para manter a linha SDA e SCL High.

Os protocolos I2C suportam a configuração de múltiplos escravos mestre, o que significa usar o mestre arduino único, podemos controlar vários dispositivos de escravos.

Como usar múltiplos i2c com arduino

Como o I2C tem suporte de configuração de escravos mestre para que possamos controlar vários dispositivos de uma só vez. Em alguns projetos, usamos diferentes módulos, sensores e hardware que suportam a comunicação I2C, tudo isso pode ser conectado em um único barramento i2c se eles tiverem um endereço I2C exclusivo. Mas se tivermos mais de um dispositivo que compartilha o mesmo endereço I2C, ele pode causar problemas para ambos os dispositivos e não podemos controlá -los usando o mesmo barramento i2c. No entanto, esse problema pode ser resolvido usando um TCA9548A Multiplexador I2C, este MUX usa um único barramento I2C do Arduino e se converte em 8 canais diferentes, com todos os endereços separados.

Todos os endereços I2C são principalmente de dois tipos, 7 bits ou 10 bits. Na maioria das vezes, os dispositivos usam 7 bits i2c, no entanto, o I2C de 10 bits raramente é usado em dispositivos. Então, isso significa usar um endereço de 7 bits Arduino pode conectar 128 dispositivos.

Agora vamos conectar dois dispositivos diferentes com protocolos I2C exclusivos com linhas Arduino UNO I2C.

Diagrama de circuito

A figura abaixo mostra uma tela OLED conectada ao Arduino usando linhas I2C SDA e SCL. Enquanto uma tela LCD de 16x2 também está conectada usando o mesmo barramento i2c em paralelo com a tela OLED. Uma coisa importante a ser observada aqui é que o LCD 16x2 usa apenas 4 fios I2C em vez de 8 fios para seu controle. Junto com o LCD, usamos um módulo I2C com Arduino, que precisa de apenas 4 pinos para exibição de LCD: VCC, GND, SDA, SCL. Usando o módulo I2C com LCD, salvamos 4 pinos digitais no Arduino, o que reduzirá sobre toda a fiação e melhorará a funcionalidade do Arduino.

Como verificar os endereços dos dispositivos I2C

Antes de conectarmos qualquer dispositivo I2C com Arduino, é importante observar em qual endereço esse dispositivo específico está conectado. Alguns módulos têm endereços I2C padrão escritos, enquanto alguns deles não têm instruções para verificar os endereços I2C. Para resolver esse problema, temos um arame Código da biblioteca que verifica todos os dispositivos I2C conectados e em que endereço eles estão conectados ao Arduino. Isso ajudará a depurar e melhorar o circuito Arduino.

Código

#include /*inclua fio.biblioteca H*/
configuração void ()

Arame.começar(); /*Comunicação I2C do fio Iniciar*/
Serial.começar (9600); /*Taxa de transmissão definida para comunicação serial*/
enquanto (!Serial); /*Aguardando saída serial no monitor serial*/
Serial.println ("\ ni2c scanner");

Void Loop ()

byte err, ADR; /*O erro variável é definido com o endereço de i2c*/
int number_of_devices;
Serial.println ("Scanning.");
número_of_devices = 0;
para (ADR = 1; ADR < 127; adr++ )

Arame.BEGNTRANSMISSÃO (ADR);
err = fio.ENDTRANSMISSÃO ();
if (err == 0)

Serial.print ("dispositivo i2c no endereço 0x");
if (adr < 16)
Serial.print ("0");
Serial.impressão (ADR, hexadecimal);
Serial.println (" !");
número_of_devices ++;

caso contrário, se (err == 4)

Serial.print ("Erro desconhecido no endereço 0x");
if (adr < 16)
Serial.print ("0");
Serial.println (ADR, Hex);


if (number_of_devices == 0)
Serial.println ("Não I2C Dispositivos anexados \ n");
outro
Serial.println ("feito \ n");
atraso (5000); /*Aguarde 5 segundos para a próxima varredura i2c*/

Este código ajudará a encontrar o número de dispositivos I2C e seu endereço no qual eles estão conectados. Este código é comumente referido como código do scanner i2C.

Primeiro, incluímos um "Arame.h " biblioteca. Então, na parte de configuração do código, começamos esta biblioteca. Depois disso, inicializamos a comunicação serial, definindo a taxa de transmissão 9600. Isso ajudará a ver a saída sobre o monitor serial.

Na seção Loop, definimos duas variáveis "errar" e "ADR". Então definimos outra variável "Dispositivos" e defina -o como zero. Depois disso a para O loop é inicializado com valores entre 0 e 127.

Em seguida, inserimos o endereço no fio usando arame.BEGNTRANSMISSÃO (), O scanner I2C procurará o reconhecimento de dispositivos e seu endereço. O valor lido será armazenado na variável "erro". O valor de retorno será igual a 0 se o dispositivo reconhecer o endereço, caso contrário, o valor se tornará 4. Em seguida, usamos uma condição IF que imprimirá o endereço do dispositivo i2C se o valor for <16. Final address of the device is printed in Hexadecimal form.

O circuito

Saída

A saída de dispositivos anexados ao Arduino sobre os protocolos I2C parecerão como mostrado no diagrama abaixo. Aqui 0x3C é o endereço do i2C LCD enquanto 0x27 é o endereço do OLED tela.

Conclusão

Os dispositivos de conexão usando I2C em Arduino podem salvar vários pinos. Vários dispositivos podem ser conectados usando I2C na configuração de escravos mestre, mas a principal coisa a considerar é que todos os dispositivos devem ter um endereço I2C exclusivo, não há dois dispositivos com o mesmo endereço não podem ser operados usando um único barramento i2c. Então, sugerimos uma solução para esse problema é usar um TCA9548A Multiplexador I2C, ele pode converter um único barramento i2c em 8 canais diferentes.