0% acharam este documento útil (0 voto)
140 visualizações7 páginas

Módulo I2c

1) O documento discute o uso de um módulo I2C (PCF8574) para conectar um LCD ao Arduino e liberar mais pinos. 2) O protocolo I2C permite conectar vários dispositivos usando apenas duas linhas de dados através de endereços. 3) O módulo I2C contém um CI (PCF8574) que desmultiplexa os 16 pinos do LCD para apenas dois pinos digitais do Arduino.

Enviado por

Igor Barbosa
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia online no Scribd
Fazer download em pdf ou txt
0% acharam este documento útil (0 voto)
140 visualizações7 páginas

Módulo I2c

1) O documento discute o uso de um módulo I2C (PCF8574) para conectar um LCD ao Arduino e liberar mais pinos. 2) O protocolo I2C permite conectar vários dispositivos usando apenas duas linhas de dados através de endereços. 3) O módulo I2C contém um CI (PCF8574) que desmultiplexa os 16 pinos do LCD para apenas dois pinos digitais do Arduino.

Enviado por

Igor Barbosa
Direitos autorais
© © All Rights Reserved
Formatos disponíveis
Baixe no formato PDF, TXT ou leia online no Scribd
Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1/ 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