Introdução ao Módulo Adaptador LCD I2C

Experimente Nosso Instrumento Para Eliminar Problemas





Neste post, vamos dar uma olhada no módulo adaptador de LCD baseado em “I2C” ou “IIC” ou “I quadrado C”, que reduzirá as conexões de fio entre o Arduino e o monitor LCD para apenas 2 fios, economizando toneladas de pinos GPIO outros sensores / drives etc.

Antes de discutirmos sobre o módulo adaptador I2C LCD, é importante entender o que é o barramento I2C e como ele funciona.



Mas de qualquer forma, você não precisa ser um especialista com o protocolo I2C para trabalhar com este adaptador LCD mencionado.

Ilustração da conexão I2C:

Ilustração da conexão I2C:

O I2C ou IIC significa “Inter-Integrated Circuit” é um barramento serial de computador inventado pela Philips semiconductors, hoje conhecido como NXP semiconductors. Este sistema de ônibus foi inventado em 1982.



O que é ônibus?

Barramento é um grupo de cabos / fios que transportam dados de um chip para outro chip / uma placa de circuito para outra placa de circuito.

A principal vantagem do protocolo de barramento I2C é que o microcontrolador ou sensores ou chips com suporte podem ser interligados com apenas dois fios. A vantagem deste protocolo é que podemos interconectar 127 chips ou sensores / drivers diferentes a um dispositivo mestre que geralmente é um microcontrolador com apenas 2 fios.

Quais são os dois fios I2C?

Os dois fios são SDA e SCL, que são dados seriais e relógio serial, respectivamente.

O relógio serial ou SCL é usado para sincronizar a comunicação de dados no barramento I2C. O SDA ou Dados Seriais é a linha de dados na qual os dados reais são transmitidos do mestre para o escravo e vice-versa. O dispositivo mestre controla o relógio serial e decide com qual dispositivo escravo ele precisa se comunicar. Nenhum dispositivo escravo pode iniciar uma comunicação primeiro, apenas o dispositivo mestre pode fazer.

A linha de dados serial é bidirecional e robusta, após cada conjunto de dados de 8 bits ser enviado, o dispositivo receptor envia de volta um bit de confirmação.

Quão rápido é o protocolo I2C?

A versão original do protocolo I2C desenvolvido em 1982 suportava 100 Kbps. A próxima versão foi padronizada em 1992, que suportava 400 Kbps (modo rápido) e suportava até 1008 dispositivos. A próxima versão foi desenvolvida em 1998 com 3,4 Mbps (modo de alta velocidade).

Várias outras versões do I2C foram desenvolvidas nos anos de 2000, 2007, 2012 (com modo Ultra-Fast de 5 Mbps) e a versão recente do I2C foi desenvolvida em 2014.

Por que resistores pull-up no barramento I2C?

O SDA e o SCL são 'dreno aberto', o que significa que ambas as linhas podem ficar LOW, mas não pode conduzir as linhas HIGH, então um resistor pull-up é conectado em cada uma das linhas.

Mas a maioria dos módulos I2C, como LCD ou RTC, possui resistores pull up integrados, portanto, não precisamos conectar um, a menos que seja especificado.

Resistor pull-up / pull-down: O resistor pull-up é um resistor conectado à linha + Ve da fonte para manter o nível lógico de uma linha em HIGH se a linha não for alta nem baixa.

Um resistor pull-down é um resistor conectado a –Ve linha da fonte para manter o nível lógico de uma linha em BAIXO se a linha não for alta nem baixa.

Isso também evita que o ruído entre nas linhas.

Esperamos ter arranhado a superfície do protocolo I2C, se você precisar de mais informações sobre o protocolo I2C, navegue em

YouTube e Google.

Agora vamos dar uma olhada no módulo I2C LCD:

Pinagem do módulo I2C LCD

Existem 16 pinos de saída para o display LCD que podem ser soldados diretamente na parte de trás do módulo LCD 16 X 2.

Os pinos de entrada são + 5V, GND, SDA e SCL. Os pinos SDA e SCL no Arduino Uno são os pinos A4 e A5, respectivamente. Para Arduino mega SDA é o pino # 20 e SCL é o pino # 21.

Vamos comparar a aparência quando conectamos o LCD ao Arduino sem o adaptador I2C e com o adaptador.

Sem adaptador I2C:

Arduino sem adaptador I2C

Com adaptador I2C:

Arduino usando adaptador I2C

O adaptador é soldado na parte de trás do display LCD e como podemos ver, economizamos muitos pinos GPIO para outras tarefas e também podemos continuar a adicionar mais 126 dispositivos I2C aos pinos A4 e A5.

Observe que a biblioteca padrão de Cristal Líquido não funciona com este adaptador I2C LCD, há uma biblioteca especial para isso, que será abordada em breve e mostraremos como usar este módulo com um exemplo de codificação.

Como conectar o adaptador I2C a um monitor 16 x 2

Nas seções acima do artigo, aprendemos os fundamentos do protocolo I2C e obtivemos uma visão geral básica do módulo adaptador LCD I2C. Neste post vamos aprender como conectar o módulo adaptador I2C LCD a um display LCD 16 x 2 e veremos como programar com um exemplo.

A principal vantagem do protocolo I2C é que podemos conectar os sensores / dispositivos de entrada / saída suportados em apenas duas linhas e é útil com o Arduino, pois possui pinos GPIO limitados.

Agora vamos ver como conectar o módulo ao LCD.

O módulo possui 16 pinos de saída e 4 pinos de entrada. Podemos simplesmente soldar o adaptador na parte de trás do display LCD 16 x 2. Dos 4 pinos de entrada, os dois são + 5V e GND, o resto dos dois são SDA e SCL.

Podemos ver que salvamos muitos pinos no Arduino para outras tarefas de entrada / saída.

Podemos ajustar o contraste do display ajustando o potenciômetro com uma pequena chave de fenda (destacada na caixa vermelha).

A luz de fundo agora pode ser controlada no próprio código do programa:

lcd.backlight ()

Isso ligará a luz de fundo do visor LCD.

lcd.noBacklight ()

Isso desligará a luz de fundo do visor LCD.

Podemos ver que há um jumper conectado, que é destacado na caixa vermelha, se o jumper for removido a luz de fundo permanece desligada independentemente do comando do programa.

Agora que a configuração do hardware está feita, agora vamos ver como codificar. Lembre-se de que o módulo I2C LCD precisa de

biblioteca e a biblioteca pré-instalada de 'cristal líquido' não funcionam.

Você pode baixar a biblioteca I2C LCD aqui e adicioná-la ao Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

No post anterior, aprendemos que os dispositivos I2C têm um endereço pelo qual o mestre ou o microcontrolador pode identificar o dispositivo e se comunicar.

Na maioria dos casos, para o módulo I2C LCD, o endereço seria “0x27”. Mas fabricantes diferentes podem ter endereços diferentes. Precisamos inserir o endereço correto no programa somente para que o display LCD funcione.

Para encontrar o endereço basta conectar 5V ao Vcc e GND ao GND do Arduino e o pino SCL do módulo I2C ao A5 e SDA ao A4 e fazer o upload do código abaixo.

Isso fará a varredura dos dispositivos I2C conectados e mostrará seus endereços.

// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 0
for (address = 1 address <127 address++ )
{
Wire.beginTransmission(address)
error = Wire.endTransmission()
if (error == 0)
{
Serial.print('I2C device found at address 0x')
if (address <16)
{
Serial.print('0')
}
Serial.print(address, HEX)
Serial.println(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found ')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //

Faça upload do código e abra o monitor serial.

Como podemos ver, dois dispositivos foram detectados e seus endereços são exibidos, mas se você deseja encontrar apenas o endereço do módulo I2C LCD, não deve conectar nenhum outro dispositivo I2C durante a digitalização.
Concluindo, obtivemos o endereço “0x27”.

Agora vamos fazer um relógio digital como exemplo porque existem dois dispositivos I2C, o módulo LCD e o RTC ou módulo de relógio de tempo real. Os dois módulos serão conectados com dois fios.

Baixe a seguinte biblioteca:
Biblioteca RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Como definir a hora para RTC

• Abra o Arduino IDE e navegue até Arquivo> Exemplo> DS1307RTC> definir hora.
• Carregue o código com o hardware completo e o monitor serial aberto e pronto.

Diagrama de circuito:

Programa:

//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//

Observação:

LiquidCrystal_I2C lcd (0x27, 16, 2)

O “0x27” é o endereço que encontramos ao escanear e 16 e 2 são o número de linhas e colunas no display LCD.

Para RTC, não precisamos encontrar o endereço, mas o encontramos durante a varredura de “0x68”, mas de qualquer forma a biblioteca RTC cuidará disso.

Agora vamos ver o quanto reduzimos o congestionamento de fios e salvamos os pinos GPIO no Arduino.

Apenas 4 fios estão conectados ao display LCD, destacados na caixa vermelha.

Além disso, apenas 4 fios são conectados do Arduino e o módulo RTC compartilha as mesmas linhas.

Agora você já ganhou conhecimento básico sobre I2C e como usar o módulo adaptador I2C LCD.
Você gosta deste post? Você tem alguma pergunta? Por favor, expresse na seção de comentários, você pode obter uma resposta rápida.




Anterior: Circuito de teste de diodo de transistor simples Próximo: Faça este circuito extensor de alcance de controle remoto IR