Você está na página 1de 7

Grupo 4: Pesquisa sobre Módulo I2C - PCF8574

Como foi abordado em discussões anteriores, o LCD ocupa grande parte dos pinos do
Arduino, o que atrapalharia na hora de colocar um dispositivo como a nossa célula de carga.
Pensando na resolução desse problema, vimos que é necessário o uso de um módulo I2C que
seja o demultiplexador dos 16 pinos do LCD para apenas dois pinos digitais.

• O protocolo I²C foi desenvolvido visando conectar diversos dispositivos (periféricos)


utilizando apenas as duas linhas de dados SDA (Serial Data) e SCL (Serial Clock). A ideia
principal é definir um endereço hexadecimal para cada dispositivo e no momento de
comunicação somente o dispositivo solicitado responderá.
• O jump da esquerda permite ligar ou desligar a luz de fundo (backlight) do LCD (com
Jump: LED aceso e sem jump: LED apagado). Ainda assim, mesmo com jump instalado
ainda precisamos controlar o backlight via programação com o códico
“lcd.setbacklight(HIGH)”.
• O trimpot azul serve para regular o contraste da tela.
• GND, VCC, SDA e SDL são as conexões para comunicação I2C da placa.
• As ilhas A0, A1, A2 são o endereço desta placa no barramento I2C. Estas placas possuem
o endereço 0x3Fh com os 3 jumps abertos e 0x38h com os três jumps fechados (através
de uma soldagem).

DIP SWITCH: Termo técnico para o local que define o endereçamento.


Os endereços acima são criados a partir da soldagem dos pinos, isto é, se todos os pinos
(A0, A1, A2), que são representados por (1, 2, 3), forem curtos-circuitados, teremos um
endereço de 0x38, agora se nenhum deles foram, terá o endereço de 0x3F.
Muito embora, seja importante ressaltar que mesmo fazendo o endereçamento
corretamente, ainda será necessário adicionar a biblioteca LiquidCrystal_I2C no IDE do Arduino
(O que será explicado no final deste documento).

Como o circuito desse módulo funciona?


Para entender melhor o funcionamento desse módulo, vamos analisar apenas o CI
PCF8574 dentro de seu datasheet:

INFORMAÇÕES DO DATASHEET PCF8574 (disponível em:


https://pdf1.alldatasheet.com/datasheet-pdf/view/177289/TI/PCF8574.html)
8 bits remotos de entrada ou saída expansível para barramento I2C (demultiplexador).

Informações do componente do datasheet:


Tensão de alimentação: 2.5 a 6 V
Corrente máxima consumida de 10uA

Descrição
O PCF8574 prove vários controles para muitas famílias dos microcontroladores através
de duas linhas de barramentos bidirecionais. Sendo que, esse CI consome uma baixa corrente,
e conta com saída com uma corrente alta com direcionamento para LED’s. Ele também possui
uma linha de interrupção (INT) que pode ser conectada com a lógica de interrupção do
microcontrolador. Evitando uma interrupção de sinal nessa área, o PCF8574 pode informar ao
microcontrolador se há entrada de dados nessas entradas sem ter de se comunicar pelo
barramento I2C. Isso significa que o PCF8574 pode ser um dispositivo escravo simples.

Característica do barramento I2C:


O barramento I2C é para dois caminhos ou duas linhas de comunicações diferentes entre
os CI’s ou módulos. As duas linhas são uma linha de dados serial (SDA) e uma linha de clock serial
(SCL). Ambas as linhas devem ser conectadas a uma alimentação positiva por um resistor de
Pull-up quando conectadas aos estágios de saída. A transferência de dados pode ser iniciada
somente quando o barramento não está ocupado.

Transferência de bit
Um dado em bit é transferido a cada pulso de clock. Os dados na linha SDA devem
permanecer estável durante o período alto de pulso de clock, bem como mudanças na linha de
dados nesse tempo será interpretada como controle de sinais.
Condições de início e parada
Ambas as linhas de clock e de dados permanecem em nível alto quando o barramento
não está ocupado. Uma transição de nível alto para baixo da linha de dados, quando o clock está
alto é definido como uma condição de início (S). Uma transição de baixo para alto da linha de
dados enquanto o clock está alto é definido como a condição de parada.

Configuração de sistema
Um dispositivo que gera uma mensagem é um “transmissor”, um dispositivo que recebe
é o ‘receptor’. O dispositivo que controla a mensagem é o mestre e os dispositivos que são
controlados pelo mestre são os escravos.

Reconhecimento
O número de bytes de dados transferidos entre as condições de início de parada do
transmissor para o receptor não é limitado. Cada byte de oito bits é seguido por
reconhecimento. O bit reconhecido é um nível alto colocado no barramento pelo transmissor
onde como o mestre gera um pulse de clock extra e reconhecido. Um escravo receptor que é
endereçado deve gerar o bit reconhecido depois da recepção de cada byte. Um mestre também
deve gerar um reconhecimento depois da recepção de cada byte que foi cronometrado no
escravo transmissor. O dispositivo que reconhece que tem de puxar para baixo a linha SDA
durante o pulso de clock reconhecido, assim que a linha SDA está estável no nível lógico baixo,
o período alto do pulso de clock relatado e conhecido, configurado e tempos de espera devem
ser tomados em consideração.
Um mestre receptor deve sinalizar um final de dados para o transmissor por não gerar
um reconhecimento no último byte que foi cronometrado para o escravo. Nesse evento, o
transmissor deve deixar a linha de dados em nível lógico alto para habilitar o mestre a gerar uma
condição de parada.
Cálculo dos Resistores de Pull-up
Para calcular o resistor de Pull-up para o barramento I²C, ambos os cálculos usam como
base a capacitância do barramento (10Pf) e a capacitância máxima tolerada (400pF) acima disto
é necessário usar “repetidores” ou “hubs” para gerenciar mais dispositivos. Quanto maior o
número de dispositivos e a distância entre eles maior será a capacitância, pois o comprimento
do fio influencia na capacitância do barramento.

O cálculo dos resistores, normalmente é utilizado um resistor de 10KΩ para propósitos


simples, também pode se adotar: 10KΩ para frequência de 100KHz e 2KΩ para 400KHz até
1MHz, ou colocar um valor intermediário de 4,7KΩ.
Um dos modos de cálculos é fornecido pela Texas Instruments que é um dos maiores
fabricantes de chips dos EUA. Você pode ver no site em anexo:
https://xprojetos.net/download/calculo-para-resistore-i2c-manual/
Neste documento é fornecido uma série de fórmulas para cálculo, porém só duas irão
nos interessar que é a do Rp(min) e Rp(max) que é o valor máximo e mínimo que pode ser
adotado para o resistor de Pull-up, o resistor que você escolher deve estar entre estes dois
valores. A seguir segue o Rp(min):

Onde:

Vcc é a tensão de alimentação do sistema.


Vol(max) é a tensão máxima registrada como baixa pelos pinos I2C do dispositivo ou
microcontrolador.
Iol é a corrente do sinal em nível baixo (bit 0)
Para o Rp(max) temos a seguinte formula:

Onde:

• tr é o tempo de subida aceitável das linhas SDA e SCL para a taxa de transmissão
desejada. Esta informação normalmente está nos datasheets dos dispositivos
(normalmente 300ns para frequências acima de 100KHz e 1000ns para frequências
abaixo de 100KHz)
• Cb é a capacitância do barramento. Esse limite é de 400 pF. Caso deseje adicionar mais
dispositivos é necessário um chip de buffer para I2C.
Abaixo, temos o esquema elétrico do módulo I2C, que leva em consideração os dados
do datasheet do PCF854, com relação ao resistor de pull-up, os transistores necessários e
capacitores, logo, não será necessário realizar os cálculos indicados no datasheet, o que
simplificará grandemente o circuito.

Considerando o esquema, é possível identificar que os pinos em aberto são os de


endereçamento, e por isso é necessário soldar caso queira um endereço específico. Além disso,
é possível enxergar pelo circuito e ao ler o datasheet, o porquê é necessário conectar o pino SDA
e SCL do módulo com o A4 e A5 do Arduino, pois é dessa maneira que o CI PCF8574 passa a
informação, ou seja, por esses dois barramentos de dados.

Como seria a ligação entre o Arduino UNO e o Módulo I2C?


Continuando com o tema anterior e considerando a figura acima, é visível que é
necessário a conexão da alimentação do Arduino no 5V e GND, porque segundo o datasheet do
CI utilizado no módulo, sua tensão de alimentação está entre 2,5V e 6V, logo os 5V é uma tensão
que satisfaz essa exigência. Os outros dois fios que saem do SDA e do SCL devem ir para os pinos
apropriados para os dados e o clock (A4 e A5 do Arduino) por causa da comunicação por esses
dois barramentos

Mas como podemos saber em qual endereço o LCD estará?


Inicialmente, para saber com certeza qual o endereço configurado, é necessário baixar
o sketch disponível em: https://drive.google.com/file/d/1MpaTS5dSHf7mNvZ74nVYYtVA4E-
Znb03/view
Após isso, é necessário carregar esse sketch no Arduino, para que se possa identificar
em qual endereço está. (Ferramentas > Porta > COM12)
Após carregar, é necessário abrir o monitor serial para ver em qual endereço esse display
está configurado.
Irá iniciar o processo de Scan para encontrar o endereço, e ele será dado em
hexadecimal.
Nesse vídeo, explica-se com clareza como será esse procedimento:
https://www.youtube.com/watch?v=5OSPk5oHhVM

Agora, vamos ver como incluir uma biblioteca no Arduino utilizando um tutorial
disponível no site da RoboCore: https://www.robocore.net/tutoriais/adicionando-bibliotecas-
na-ide-arduino
Disponível na IDE do Arduino existe um Gerenciador de Bibliotecas onde você pode
adicionar rapidamente uma biblioteca que está compactada no formato .ZIP ou até mesmo a
pasta. Para isso deve-se na IDE abrir o menu: Sketch > Incluir Biblioteca (Include Library) >
Adicionar Biblioteca .ZIP (Add .ZIP Library...) conforme a imagem abaixo.
Selecione a Biblioteca desejada, no caso a SerialRelay-master.zip na pasta onde foi feito
o download no primeiro passo do tutorial. Lembrando que é possível extrair e adicionar uma
pasta e não necessariamente o arquivo zipado. Caso tenha seguido todos os passos
corretamente verá uma mensagem "Biblioteca adicionada às suas bibliotecas." Para abrir um
exemplo da Biblioteca instalada é só ir em: Arquivo > Exemplos > RoboCore - SerialRelay > Blink
conforme a imagem abaixo.

Obs: o arquivo zip da biblioteca LiquidCrystal_I2C ficará disponível no drive do TCC.

Outros sites utilizados:


https://omecatronico.com.br/blog/lcd-serial-i2c-pcf8574/
https://xprojetos.net/pcf8574-i2c-para-lcd/
https://www.robocore.net/tutoriais/primeiros-passos-com-modulo-i2c

Você também pode gostar