Como conectar vários dispositivos da interface i2c em um único pino A4 (SDA) e A5 (SCL) no Arduino?

32

Quero adicionar um módulo de relógio em tempo real ao meu pequeno projeto. Quero exibir a hora e a data no meu módulo LCD i2c 2x16 existente.

O módulo de relógio em tempo real da interface i2c e o módulo LCD 2x16 usam o mesmo pino A4 (SDA) e A5 (SCL) no Arduino Uno. Após horas pesquisando na rede, o barramento i2c pode levar muitos dispositivos seriais. Isso é possível porque cada dispositivo tem seu próprio endereço exclusivo.

Minha pergunta é como conectar fisicamente os dois dispositivos da interface i2c em um único A4 e A5? Obrigado.

banksia
fonte
3
Resposta curta: conecte-os em paralelo. Amarre os SDAs e conecte-se ao A4, e os SCLs ao A5. É claro que há o problema de pull-up que às vezes ajuda.
SDsolar

Respostas:

32

Algumas pessoas estão tendo dificuldade para visualizar as coisas conectadas, então aqui está uma foto:

(Sugestão de exibição)

esquemático

simule este circuito - o esquema criado usando o CircuitLab I2C é um barramento, de modo que sinais com nomes semelhantes são conectados juntos. O esquema de endereçamento permite que o microcontrolador selecione com qual dispositivo está falando. No Arduino, os resistores pull-up de 10k passam para "VDD", que são os pinos de 5V ou 3,3V.

gbarry
fonte
Olá, isso pode ser muito básico, mas eu sou novo na área de eletrônicos e cheguei a esta página na pesquisa do google. A que se refere o uC?
Ciasto piekarz
Acredito que a referência seja para qualquer uC, pois o esquema de conexão deve ser o mesmo, a menos que indicado de outra forma.
precisa saber é o seguinte
O uC pode ser um Arduino. SDA é o pino A4 e SCL é o pino A5.
SDsolar
9
@Ciastopiekarz, μC é a abreviação de "microcontrolador". A letra grega μ é a abreviação de micro. Como µ se parece com você, muitas pessoas escrevem "uC".
foobarbecue
9

Para I2C, se todos os dispositivos escravos tiverem endereços de dispositivos diferentes, todos os pinos do SDA deverão ser conectados juntos e todos os pinos do SCL deverão ser conectados juntos. É simples assim.

Naturalmente, você também deve incluir resistores pull-up em ambas as linhas, conforme necessário para I2C. Como escolher os valores do resistor já foi discutido aqui antes .

O fóton
fonte
Descobri que, enquanto um dos dispositivos for o DS3231 RTC, não serão necessários pullups externos.
precisa saber é o seguinte
3
@SDsolar, isso provavelmente significa que o DS3231 possui conexões internas; portanto, usando esse dispositivo, você está fornecendo conexões para o barramento. Isso não é necessariamente uma coisa boa, porque limita sua liberdade de ajustar a resistência ao pull-up, dependendo do número de dispositivos no barramento.
O Photon
Meus pensamentos exatamente. Adicionar pullups externos seria paralelo ao que estiver no DS3231 e, portanto, pode acabar não sendo suficiente para o I2C ser feliz.
SDsolar
@ SDSolar, o que isso tem a ver com a pergunta do OP ou com a minha resposta? Este não é um site de discussão geral. Se você quiser apenas falar sobre coisas, entre na nossa sala de bate-papo .
O Photon
3

Conecte dois pinos A4-sda a A5-scl (na placa uno-uno) e conecte o resistor de 5v de cada linha sda-scl correspondente.

insira a descrição da imagem aqui

daedalucian
fonte
votado negativamente porque a resposta não responde à pergunta original, a saber: "conecte fisicamente os dois dispositivos da interface i2c em um único A4 e A5".
Oleg Mazurov 6/08/2015
Eu não podia excluir, editar, então eu a um (talvez) resposta mais satisfatória
daedalucian
Compartilhar a tensão não é necessário, certo?
clankill3r 24/01
0

I2C é um protocolo de transferência de dados desenvolvido pela Philips. Também conhecida como interface de dois fios, pois usa dois fios para comunicação. Linha de relógio serial SCL. Linha de dados SDL-serial. Portanto, você precisa conectar os pinos correspondentes dos dispositivos i2c, seja um eeprom ou lcd aos pinos SCL e SDL do microcontrolador que estiver usando com um resistor de pull-up ao VDD. Como é um protocolo de endereços com endereço de 7 bits para cada dispositivo conectado, você pode endereçar até 2 ^ 7 dispositivos diferentes. Mas normalmente o endereço I2C de um dispositivo escravo é predefinido com alguns bits a serem conectados pelo desenvolvedor. Isso ajuda na conexão do mesmo tipo de dispositivos com diferentes partes de endereços conectados no mesmo barramento.

Antony Tom Mathews
fonte
1
Tudo verdade, mas é péssimo se você quiser mais de um, como a unidade de intensidade de luz BH1750. Eu quero quatro deles e não quero lidar com a comutação de barramento duplo I2C. Além disso, alguns dispositivos como o DS3231 têm pullups internos para que quaisquer pullups externos fiquem paralelos a eles.
SDsolar
0

Além disso, você deve verificar os resistores pull-up. Se você usar placas já fabricadas, não apenas o chip, essas placas geralmente possuem resistores de pull up a bordo entre o barramento e o vcc. Portanto, quando você conecta tudo em paralelo, os resistores também estão em paralelo, portanto, o valor total do resistor cai e sua comunicação pode falhar.

Petre O.
fonte