quarta-feira, 16 de novembro de 2016

COMO UTILIZAR DOIS LCDs I2C em UM ARDUINO AO MESMO TEMPO




Para utilizarmos dois ou mais displays LCD 16x2 ou 20X4 em um mesmo Arduino ao mesmo tempo é relativamente simples, basta seguirmos apenas alguns detalhes.

Primeiro devemos ter a noção do uso dos endereços que o nosso modulo I2C utiliza, veja a postagem falando sobre isso aqui.

O exemplo que estou mostrando, utiliza módulos I2C que usam o endereço 0x3F por padrão, então o que devemos fazer para que o Arduíno leia endereços diferentes? 

Vaja na figura abaixo os pontos de solda dentro do circulo vermelho, estes pontos podem ser jampeados para modificarmos o endereço que cada modulo trabalha.




Bem, no primeiro modulo, eu deixei como esta, sem nenhuma alteração, mas no segundo módulo, eu soldei jampeando o ponto de solda A1, nosso ponto de solda do centro, e desta maneira utilizei o endereço 0x3D. Esta é a parte elétrica, que deve ser modificada, para colocar mais displays, basta fazermos estas ligações de forma diferente em cada um dos módulos I2C. Veja na figura abaixo.



Mas como saber o endereço a ser utilizado?  Veja o mapa de endereços do chip PCF8574A


Bem agora basta ligarmos os displays na nossa placa Arduíno UNO da forma que esta abaixo:

    Pinagem do Modulo I2C ao Arduíno
    
    GND => (-)
    VCC => 5V
    SDA => A4
    SCL => A5

Agora vamos ver como vai ficar nosso código, para que o Arduíno consiga distinguir os dois Displays.

Nesta linha abaixo falamos para o Arduíno que é um LCD 16x2:

LiquidCrystal_I2C lcd(0x3D,16,2);

Agora veja a modificação que eu fiz, para cada linha que dávamos um comando para o LCD, apenas colocamos o numero 1 ou o numero 2 apos onde esta escrito lcd para que o arduino saiba diferenciar entre 1 lcd e o o outro, como abaixo, e ai que vamos inserir os respectivos endereços de cada modulo.

As linhas ficam assim:


LiquidCrystal_I2C lcd1(0x27,16,2);
LiquidCrystal_I2C lcd2(0x3D,16,2);

Logo abaixo, vou colocar o exemplo do código com a respectiva biblioteca.



PROBLEMAS COM MODULO I2C E LCD 16X2 ou 20X4



Tenho visto muitos usuários falando que tem tido alguns problemas ao utilizar o modulo I2C para auxiliar na utilização dos displays 16x2 ou 20x4 junto do Arduíno.

Normalmente o maior problema que eu tenho visto é o da utilização de endereço correto ou seja no código é utilizado um endereço errado para acesso do modulo, e como vamos saber qual o endereço correto usar.
Bem o CI que controla o modulo I2C, pode ser o PCF8574, ou o PCF8574A, ambos da Texas Instruments e ai que esta a diferença, pois cada um usa um padrão de endereços diferentes:
PCF8574 : 0x20 - 0x27
PCF8574A : 0x38 - 0x3F

Então esta facilmente resolvido, basta olhar na placa do meu modulo I2C qual é o Chip?
Sim, mas normalmente você só vai enxergar se possuir uma boa lupa ou mesmo um microscópio, ou tenha olhos de águia. Mas não precisa se desesperar, basta no seu codigo, utilizar um dos dois endereços mais comuns por padrão, ou seja o 0x27 e se não funcionar utilizar o 0x3F.

Mas temos uma outra maneira de descobrir qual o endereço que esta atribuído ao nosso modulo I2C e a outros dispositivos que utilizam a comunicação I2C ao Arduíno. Basta fazer a ligação do modulo normalmente ao Arduíno e baixar o código abaixo, depois no monitor serial, vai aparecer qual o endereço que esta sendo utilizado pelo seu dispositivo


Logo abaixo, vou colocar dois um exemplos do código, um com o endereço 0x27 e outro com o endereço 0x3F ambos com a respectiva biblioteca inclusa.

Clique para baixar o código com endereço 0x27.

Clique para baixar o código com endereço 0x3F.

O problema com o endereço representa a maior parte dos problemas em displays I2C, mas não deixamos de ver outros problema, que podem ir desde uma solda fria, um mal contato, conexão em local errado.

Qualquer duvida, ou um outro problema que tenha sido resolvido, coloque nos comentários.