Módulo I2c
Módulo I2c
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.
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.
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.
Onde:
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.
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.