- O que é o protocolo de comunicação I2C?
- Como funciona a comunicação I2C?
- Onde usar a comunicação I2C?
- I2C em MSP430: Potenciômetro Digital de Controle AD5171
MSP430 é uma plataforma poderosa fornecida pela Texas Instruments para projetos embarcados, sua natureza versátil fez com que ele encontrasse maneiras em muitas aplicações e a fase ainda está acontecendo. Se você tem seguido nossos tutoriais do MSP430, deve ter notado que já cobrimos uma ampla variedade de tutoriais sobre este microcontrolador, começando do básico. Desde agora, cobrimos o básico para que possamos entrar em coisas mais interessantes como o portal de comunicação.
No vasto sistema de aplicativos embarcados, nenhum microcontrolador pode realizar todas as atividades sozinho. Em algum momento ele precisa se comunicar com outros dispositivos para compartilhar informações, existem muitos tipos diferentes de protocolos de comunicação para compartilhar essas informações, mas os mais usados são USART, IIC, SPI e CAN. Cada protocolo de comunicação tem suas próprias vantagens e desvantagens. Vamos focar na parte I2C por enquanto, pois é isso que vamos aprender neste tutorial.
O que é o protocolo de comunicação I2C?
O termo IIC significa “ Inter Integrated Circuits ”. Normalmente é denotado como I2C ou I ao quadrado C ou mesmo como protocolo de interface de 2 fios (TWI) em alguns lugares, mas significa o mesmo. I2C é um protocolo de comunicação síncrona, o que significa que ambos os dispositivos que estão compartilhando as informações devem compartilhar um sinal de relógio comum. Ele tem apenas dois fios para compartilhar informações, dos quais um é usado para o sinal do galo e o outro é usado para enviar e receber dados.
Como funciona a comunicação I2C?
A comunicação I2C foi introduzida pela primeira vez por Phillips. Como disse anteriormente, ele tem dois fios, esses dois fios serão conectados em dois dispositivos. Aqui, um dispositivo é chamado de mestre e o outro dispositivo é chamado de escravo. A comunicação deve e sempre ocorrerá entre um Mestre e um Escravo. A vantagem da comunicação I2C é que mais de um escravo pode ser conectado a um mestre.
A comunicação completa ocorre por meio desses dois fios, a saber, Serial Clock (SCL) e Serial Data (SDA).
Serial Clock (SCL): Compartilha o sinal de clock gerado pelo mestre com o escravo
Serial Data (SDA): Envia os dados de e para o mestre e o escravo.
A qualquer momento, apenas o mestre será capaz de iniciar a comunicação. Como há mais de um escravo no barramento, o mestre deve referir-se a cada escravo usando um endereço diferente. Quando endereçado apenas o escravo com aquele endereço particular irá responder de volta com a informação enquanto os outros continuam desligando. Dessa forma, podemos usar o mesmo barramento para nos comunicarmos com vários dispositivos.
Os níveis de tensão de I2C não são predefinidos. A comunicação I2C é flexível, significa que o dispositivo que é alimentado por 5v volt, pode usar 5v para I2C e os dispositivos de 3,3v podem usar 3v para comunicação I2C. Mas e se dois dispositivos que estão operando em tensões diferentes precisarem se comunicar usando I2C? Um barramento I2C 5V não pode ser conectado com 3.3V dispositivo. Neste caso, os deslocadores de tensão são usados para combinar os níveis de tensão entre dois barramentos I2C.
Existem alguns conjuntos de condições que enquadram uma transação. A inicialização da transmissão começa com uma borda descendente de SDA, que é definida como condição 'START' no diagrama abaixo, onde o mestre deixa SCL alto enquanto define SDA baixo.
Conforme mostrado no diagrama acima abaixo, A borda descendente do SDA é o gatilho de hardware para a condição START. Depois disso, todos os dispositivos no mesmo barramento entram no modo de escuta.
Da mesma maneira, a borda ascendente do SDA para a transmissão, que é mostrada como condição 'STOP' no diagrama acima, onde o mestre deixa o SCL alto e também libera o SDA para ir para o ALTO. Portanto, a borda ascendente do SDA interrompe a transmissão.
O bit R / W indica a direção da transmissão dos bytes seguintes, se for HIGH significa que o escravo irá transmitir e se for baixo significa que o mestre irá transmitir.
Cada bit é transmitido em cada ciclo de clock, portanto, leva 8 ciclos de clock para transmitir um byte. Após cada byte enviado ou recebido, o nono ciclo de clock é mantido para o ACK / NACK (confirmado / não confirmado). Este bit ACK é gerado pelo escravo ou mestre dependendo da situação. Para ACK bit, SDA é ajustado para baixo pelo mestre escravo ou no 9 ° ciclo de relógio. Portanto, é baixo considerado como ACK caso contrário NACK.
Onde usar a comunicação I2C?
A comunicação I2C é usada apenas para comunicação de curta distância. É certamente confiável até certo ponto, pois tem um pulso de relógio sincronizado para torná-lo inteligente. Este protocolo é usado principalmente para se comunicar com o sensor ou outros dispositivos que precisam enviar informações a um mestre. É muito útil quando um microcontrolador precisa se comunicar com muitos outros módulos escravos usando, no mínimo, fios. Se você está procurando uma comunicação de longo alcance, você deve tentar o RS232 e se estiver procurando uma comunicação mais confiável, você deve tentar o protocolo SPI.
I2C em MSP430: Potenciômetro Digital de Controle AD5171
Energia IDE é um dos softwares mais fáceis de programar nosso MSP430. É o mesmo que o IDE do Arduino. Você pode aprender mais sobre Introdução ao MSP430 usando Energia IDE aqui.
Então, para usar I2C no Energia IDE, temos que incluir apenas o arquivo de cabeçalho wire.h. A declaração de pin (SDA e SCL) está dentro da biblioteca de fios, portanto, não precisamos declarar na função de configuração .
Exemplos de exemplos podem ser encontrados no menu Exemplo do IDE. Um dos exemplos é explicado abaixo:
Este exemplo mostra como controlar um Potenciômetro Digital Analog Devices AD5171 que se comunica por meio do protocolo serial síncrono I2C. Usando a biblioteca de fios I2C da MSP, o potenciômetro digital passará por 64 níveis de resistência, atenuando um LED.
Primeiro, incluiremos a biblioteca responsável pela comunicação i2c, ou seja, biblioteca de fios
#incluir
Na função de configuração , iniciaremos a biblioteca de fios pela função .begin () .
void setup () { Wire.begin (); }
Em seguida, inicialize uma variável val para armazenar os valores do potenciômetro
byte val = 0;
Na função de loop , iniciaremos a transmissão para o dispositivo escravo i2c (neste caso, potenciômetro digital IC) especificando o endereço do dispositivo que é fornecido na folha de dados do IC.
loop void () { Wire.beginTransmission (44); // transmitir para o dispositivo # 44 (0x2c)
Posteriormente, os bytes da fila, ou seja, os dados que você deseja enviar ao IC para transmissão com a função write () .
Wire.write (byte (0x00)); // envia o byte de instrução Wire.write (val); // envia byte de valor do potenciômetro
Em seguida, transmita-os chamando endTransmission () .
Wire.endTransmission (); // parar de transmitir val ++; // incrementa o valor if (val == 64) {// se atingiu a 64ª posição (max) val = 0; // recomeça do valor mais baixo } delay (500); }