Tudo sobre o barramento Arduino I2C

Barramento Arduino I2C

Com Arduino pode criar um grande número de projetos como você viu se leu Hwlibre, programar o microcontrolador de forma simples. Mas entre as conexões analógicas e digitais desta placa de hardware livre, existem algumas que ainda são um tanto desconhecidas para muitos iniciantes, como o verdadeiro potencial das conexões PWM, o SPI, os pinos RX e TX da porta serial, ou os próprio barramento I2C. Portanto, com esta entrada você pode saber pelo menos tudo que você precisa do I2C.

Com o ônibus I2C Você pode conectar e usar muitos dispositivos de terceiros que possuem este tipo de protocolo para se comunicar com a placa Arduino. Entre eles, você pode conectar acelerômetros, monitores, contador, bússolas e muitos outros circuitos integrados graças a esta invenção da Philips.

O que é I2C?

I2C refere-se a circuito interligado, isto é, circuito inter-integrado. É um barramento de comunicação de dados serial desenvolvido em 1982 pela empresa Philips Semiconductors, que hoje é a NXP Semiconductors após se livrar desta seção. No início foi criado para televisores desta marca, para comunicar vários chips internos de forma simples. Mas desde 1990 o I2C se espalhou e é usado por muitos fabricantes.

Atualmente usado por dezenas de fabricantes de chips para várias funções. A Atmel, criadora dos microcontroladores para placas Arduino, introduziu a designação TWI (Two Wired Interface) por motivos de licenciamento, embora seja idêntica à I2C. Mas em 2006, a patente original expirou e não está mais sujeita a direitos autorais, então o termo I2C foi reutilizado (apenas o logotipo continua a ser protegido, mas sua implementação ou uso do termo não é restrito).

Detalhes técnicos do barramento I2C

Barramento I2C

El O barramento I2C se tornou um padrão da indústria e o Arduino o implementou para comunicação com periféricos que precisam dele. Necessita apenas de duas linhas ou cabos para o seu funcionamento, um para o sinal do relógio (CLK) e outro para o envio de dados seriais (SDA). Isso é vantajoso em comparação com outras comunicações em comparação com o barramento SPI, embora sua operação seja um pouco mais complexa devido aos circuitos adicionais necessários.

Neste ônibus cada dispositivo conectado a ele tem um endereço usado para acessar esses dispositivos individualmente. Este endereço é fixado por hardware, modificando os últimos 3 bits através de jumpers ou switch DIPs, embora também possa ser feito por software. Cada dispositivo terá um endereço único, embora vários deles possam ter o mesmo endereço e pode ser necessário usar um barramento secundário para evitar conflitos ou alterá-lo se possível.

Além disso, o barramento I2C tem um Arquitetura do tipo Master-Slave, isto é, mestre-escravo. Isso significa que quando a comunicação é iniciada por um dispositivo mestre, ele poderá enviar ou receber dados de seus escravos. Os escravos não poderão iniciar a comunicação, apenas o mestre pode fazê-lo, e os escravos não podem se comunicar diretamente sem a intervenção do mestre.

Se você vários professores no ônibus, apenas um pode atuar como professor simultaneamente. Mas não vale a pena, pois a mudança de professor exige uma complexidade alta, por isso não é frequente.

Tenha em mente que o mestre fornece o sinal de relógio para sincronizar todos os dispositivos no barramento. Isso elimina a necessidade de cada escravo ter seu próprio relógio.

O protocolo de barramento I2C também prevê o uso de resistores pull-up nas linhas de tensão de alimentação (Vcc), embora esses resistores não sejam normalmente usados ​​com Arduino pull-up porque bibliotecas de programação como Wire ativa os internos com valores de 20-30 k. Isso pode ser muito suave para alguns projetos, portanto, as bordas de subida do sinal serão mais lentas, portanto, velocidades mais baixas e distâncias de comunicação mais curtas podem ser usadas. Para corrigir isso, você pode precisar definir resistores pull-up externos de 1k a 4k7.

sinal

Sinal I2C

 

La quadro de comunicação dos quais um sinal de barramento I2C consiste em bits ou estados (aqueles usados ​​no Arduino, uma vez que o padrão I2C permite outros):

  • 8 bits, 7 deles de endereço do dispositivo escravo que você deseja acessar para enviar ou receber dados dele. Com 7 bits, podem ser criados até 128 endereços diferentes, de modo que, teoricamente, 128 dispositivos poderiam ser acessados, mas apenas 112 podem ser acessados, já que 16 são reservados para usos especiais. E o bit adicional que indica se você deseja enviar ou receber informações do dispositivo escravo.
  • Há também um bit de validação, se não estiver ativo a comunicação não será válida.
  • Então o bytes de dados que eles querem enviar ou receber pelos escravos. Cada byte, como você sabe, é composto de 8 bits. Observe que para cada 8 bits ou 1 byte de dados enviados ou recebidos, são necessários 18 bits adicionais de validação, endereço, etc., o que significa que a velocidade do barramento é muito limitada.
  • Um pedaço final de validação da comunicação.

Além disso, a frequência do relógio para as transmissões são de 100 Mhz como padrão, embora haja um modo mais rápido em 400 MHz.

Vantagens e desvantagens do barramento I2C

As vantagem são:

  • Simplicidade usando apenas duas linhas.
  • Tem mecanismos para saber se o sinal chegou em comparação com outros protocolos de comunicação.

As desvantagens são:

  • Velocidade transmissão bastante baixa.
  • Não é um full duplex, ou seja, você não pode enviar e receber simultaneamente.
  • Não usa paridade nem qualquer outro tipo de mecanismo de verificação para saber se os bits de dados recebidos estão corretos.

 

 

I2C no Arduino

Barramento Arduino I2C

En Arduino, dependendo do modelo, os pinos que podem ser habilitados para usar este barramento I2C variam. Por exemplo:

  • Arduino UNO, Nano, MiniPro: A4 é usado para SDA (dados) e A5 para SCK (relógio).
  • Arduino Mega: pino 20 para SDA e 21 para SCK.

Lembre-se que para usá-lo você deve fazer uso da biblioteca Fio.h para seus códigos IDE do Arduino, embora existam outros como I2C y I2Cdevlib. Você pode ler os documentos dessas bibliotecas ou nossos artigos sobre os projetos que lhe interessam para obter códigos de como seria programado.

Como saber o endereço de um dispositivo para usá-lo com I2C?

Apenas um último aviso, quando você compra ICs de fabricantes europeus, japoneses ou americanos indique a direção que você deve usar para o dispositivo. Por outro lado, os chineses às vezes não detalham ou não está correto, então não funcionará. Isso pode ser facilmente resolvido com um scanner de endereço para saber em qual direção você deve se referir em seu esboço.

La comunidade arduino criou isto código para escanear o endereço e identificá-lo De maneira simples. Embora eu mostre o código aqui:

#include "Wire.h"
 
extern "C" { 
    #include "utility/twi.h"
}
 
void scanI2CBus(byte from_addr, byte to_addr, void(*callback)(byte address, byte result) ) 
{
  byte rc;
  byte data = 0;
  for( byte addr = from_addr; addr <= to_addr; addr++ ) {
    rc = twi_writeTo(addr, &data, 0, 1, 0);
    callback( addr, rc );
  }
}
 
void scanFunc( byte addr, byte result ) {
  Serial.print("addr: ");
  Serial.print(addr,DEC);
  Serial.print( (result==0) ? " Encontrado!":"       ");
  Serial.print( (addr%4) ? "\t":"\n");
}
 
 
const byte start_address = 8;
const byte end_address = 119;
 
void setup()
{
    Wire.begin();
 
    Serial.begin(9600);
    Serial.print("Escaneando bus I2C...");
    scanI2CBus( start_address, end_address, scanFunc );
    Serial.println("\nTerminado");
}
 
void loop() 
{
    delay(1000);
}


O conteúdo do artigo segue nossos princípios de ética editorial. Para relatar um erro, clique Clique aqui.

Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.