Neste artigo, veremos o que é uma interface I2C (ay-tu-si, i-two-tse), quais são seus recursos e como trabalhar com ela.
É necessário
- - Arduino;
- - potenciômetro digital AD5171;
- - Diodo emissor de luz;
- - resistor de 220 ohms;
- - 2 resistores para 4,7 kOhm;
- - fios de conexão.
Instruções
Passo 1
O protocolo de comunicação serial IIC (também denominado I2C - Inter-Integrated Circuits) utiliza duas linhas de comunicação bidirecionais para a transferência de dados, denominadas barramento SDA (Serial Data) e barramento SCL (Serial Clock). Existem também duas linhas de energia. Os barramentos SDA e SCL são puxados para o barramento de força por meio de resistores.
Há pelo menos um mestre na rede que inicia a transmissão de dados e gera sinais de sincronização. A rede também possui escravos que transmitem dados a pedido do mestre. Cada dispositivo escravo possui um endereço único no qual o mestre o endereça. O endereço do dispositivo é indicado no passaporte (folha de dados). Até 127 dispositivos podem ser conectados a um barramento I2C, incluindo vários mestres. Os dispositivos podem ser conectados ao barramento durante a operação, ou seja, ele suporta conexão a quente.
Passo 2
O Arduino usa duas portas para trabalhar na interface I2C. Por exemplo, no Arduino UNO e no Arduino Nano, a porta analógica A4 corresponde a SDA, a porta analógica A5 corresponde a SCL.
Para outros modelos de placa:
Arduino Pro e Pro Mini - A4 (SDA), A5 (SCL)
Arduino Mega - 20 (SDA), 21 (SCL)
Arduino Leonardo - 2 (SDA), 3 (SCL)
Arduino Due - 20 (SDA), 21 (SCL), SDA1, SCL1
etapa 3
Para facilitar a troca de dados com dispositivos por meio do barramento I2C, uma biblioteca "Wire" padrão foi escrita para o Arduino. Possui as seguintes funções:
begin (endereço) - inicialização da biblioteca e conexão ao barramento I2C; se nenhum endereço for especificado, o dispositivo conectado é considerado o mestre; O endereçamento de 7 bits é usado;
requestFrom () - usado pelo mestre para solicitar um certo número de bytes do escravo;
beginTransmission (address) - o início da transferência de dados para o dispositivo escravo em um endereço específico;
endTransmission () - término da transmissão de dados para o escravo;
write () - grava dados do escravo em resposta a uma solicitação;
available () - retorna o número de bytes de informação disponíveis para receber do escravo;
read () - lê um byte transferido do escravo para o mestre ou do mestre para o escravo;
onReceive () - indica a função a ser chamada quando o escravo recebe uma transmissão do mestre;
onRequest () - Indica uma função a ser chamada quando o mestre recebe uma transmissão do escravo.
Passo 4
Vamos ver como trabalhar com o barramento I2C usando o Arduino.
Primeiro, vamos montar o circuito, conforme mostrado na figura. Vamos controlar o brilho do LED usando o potenciômetro digital de 64 posições AD5171, que se conecta ao barramento I2C. O endereço no qual nos referiremos ao potenciômetro é 0x2c (44 em decimal).
Etapa 5
Agora vamos abrir um esboço dos exemplos da biblioteca "Wire":
Arquivo -> Amostras -> Fio -> digital_potenciômetro. Vamos carregá-lo na memória do Arduino. Vamos ligar.
Veja, o brilho do LED aumenta ciclicamente e, de repente, apaga-se. Nesse caso, controlamos o potenciômetro usando o Arduino por meio do barramento I2C.