Como uso dispositivos I2C com o Arduino?

12

Eu tenho alguns componentes I2C úteis, como um expansor de porta de 16 bits (MCP23017), que eu gostaria de usar em vários projetos.

O que preciso fazer para que estes funcionem com o Arduino? Funcionará com qualquer Arduino ou preciso de uma placa ou escudo específico?

Peter Bloomfield
fonte

Respostas:

9

O Arduino possui a Biblioteca de Fios que se comunica com o I2C.

Essa biblioteca permite que você se comunique com dispositivos I2C / TWI. Nas placas Arduino com o layout R3 (pinagem 1.0), o SDA (linha de dados) e o SCL (linha do relógio) estão nos cabeçalhos dos pinos próximos ao pino AREF. O Arduino Due possui duas interfaces I2C / TWI SDA1 e SCL1 estão próximas ao pino AREF e a outra adicional está nos pinos 20 e 21. Como referência, a tabela abaixo mostra onde os pinos TWI estão localizados em várias placas Arduino.

Pinos da placa I2C / TWI

  • Uno, Ethernet A4 (SDA), A5 (SCL)
  • Mega2560 20 (SDA), 21 (SCL)
  • Leonardo 2 (SDA), 3 (SCL)
  • Vencimento 20 (SDA), 21 (SCL), SDA1, SCL1

Você pode dar uma olhada, este exemplos.

Como @TheDoctor disse:

As linhas de dados I2C precisam de resistores de 3,3V. Isso os impede de desviar se estiverem desativados. O valor do resistor de Andy deve funcionar, mas é recomendável usar um entre 10k ohm e 47k ohm.

Butzke
fonte
1
Não se esqueça pullup resistências nas linhas I2C
TheDoctor
1
Para expandir isso, as linhas de dados i2c precisam de resistores de 5v. Isso os impede de desviar se estiverem desativados. Andy valor do resistor deve funcionar, mas recomenda-se usar um entre 10k ohm e 47k ohm
TheDoctor
Deve-se dizer que se você usar pullups de 5V no Arduino devido (que foi nomeado na resposta), você danificou a placa. O Arduino Due usa lógica de 3.3V e NÃO precisa de pull-ups de 5V, também SDA e SCL já são puxados internamente pela placa.
John John
3

Escudos adicionais não são necessários.

Você só precisa da biblioteca do Wire e de alguns fios para conectar o dispositivo ao SDA e ao SCL .

A posição desses pinos é diferente nos vários Arduinos, dê uma olhada aqui .

Klaus-Dieter Warzecha
fonte
2

Para futuros leitores: use a biblioteca Adafruit_MCP23017.

Gordon
fonte