Pessoal, estou tentando entender o PCF8574, e minha intenção é colocar um deles no arduino e debaixo do PCF8574 "pai", colocar mais PCF8574 "filhos" e talvez PCF8574 "netos"... quero fazer uma hierarquia de PCF8574´s!!!
Desta forma o CI "pai" teria 8 filhos e cada filho teria mais 8 filhos, logo o pai teria 64 netos com 8 portas cada um, ou seja um arduino com 2 portas transformadas em (64*8=) 512 portas... razoável né?
Quero entender bem esse expansor para meus próximos projetos.
Segui um tutorial aqui do LdG e adaptei o PCF8574 fazendo-o ascender 8 LED´s usando 2 portas do arduino, a A5 e A4.
Agora... como eu faria pra ligar um novo PCF8574 "filho" na porta P1 (ou P2...etc) do PCF8574 "pai"? Como enviar comando para a porta P3 (ex.) do filho para ascender um LED?
Adicionei as imagens pra ilustrar melhor... do jeito que está, funciona.
Eis o código do bicho:
#include <Wire.h>
void setup()
{
Serial.begin(9600);
Wire.begin();
}
void loop()
{
int y = 1;
while(y <= 128){
ascender(y);
y=y*2;
}
ascender(0);
delay(1000);
}void ascender(int led){
Wire.beginTransmission(56); //Iniciar a transmissão
//Enviar os dados pro PCF8574-AP
Wire.write(led);
Serial.println(led);
Wire.endTransmission(); //Finalizar a transmissão
delay(100);
}
Tags:
Você não precisa de PAI -> FILHO, você está usando o protocolo I2C, no mesmo barramento você pode usar vários deles.
Um deles é esse que você está usando agora "endereço" 56, A = 0, B = 0, C = 0 pelo que entendi, se você colocar os os pinos de endereço como A = 1, B = 0, C = 0 (001) você terá o endereço 57, e assim sucessivamente, podendo ter até 7 deles no mesmo BUS.
Marcelo, entendi a teoria... mas agora fiquei na duvida de como implementar isso... pode me ajudar?
O pino A5 está no C1:P14 e o A4 está no C1:P15... devo ligá-los invertido no C2 (segundo CI) ou ponho o A5 e A4 nas mesmas portas que coloquei no C1 ?
Desta forma no código devo instanciar os comandos no C2 assim :
Wire.beginTransmission(56);
Wire.send(1);
E ao C1 assim:
Wire.beginTransmission(57);
Wire.send(1);
Não entendi bem o conceito de 7 CI no máximo... A,B,C = 0 ? Não quero ficar de alugando e se tiver links, são mais fácies, ok...
Muito obrigado até agora!!!
Correção.
1. Eu me enganei quando coloquei que era no máximo 7 chips como tem 3 bits para definir o endereço você pode ter 8 chips.
2. Antes em vez de usar A1, A2, A3 eu usei A, B, C, como os pinos de definição de endereço
Pelo que entendi desse chip é assim,
Quando os PINOS A0 = 0, A1 = 0, A2 = 0 você está fazendo ele ter o endereço 56, se você no segundo chip colocar A0 = 1, A1 = 0, A2 = 0, esse terá o endereço 57.
Não tem como "cascatear" o protocolo I2C, todos os 8 chips, tem que ter ligado o pino CIn:P14 ao A4 e o pino CIn:P15 ai A5.
Dá uma lida no tutorial sobre o PCF8574, que acho que vai ficar mais claro.
http://labdegaragem.com/profiles/blogs/tutorial-sobre-pcf8574-e-com...
Marcelo, obrigado pela ajuda... acho que resolvi... devo ter feito o post no momento que vc digitava...
Obrigado pela atenção
Marcelo, passei algumas horas ontem a noite procurando entender os ABCs e esse conceito de BUS... consegui.
Coloquei 2 PCFs e os fiz interagir com os LED´s...
Aos que leram minha dúvida deste tópico, o problema inicial foi na montagem dos chips, pois as letras ABC são referente à pinagem do chip onde A se for 0, deve ser ligado no GRN e se for = 1 deve ser ligado no Vcc, desta forma o chip pode ser identificado pelo Arduino que envia o comando pro pinos de cada um respectivamente.
Assim se vc tiver um PCF8574 (tipo AP) e ligar os 3 primeiros (veja o datasheet http://www.littlediode.com/datasheets/pdf/Datasheets-PCF/PCF8574.PDF ) pinos no GRN, vc terá A=0, B=0 e C=0 ! Assim vc vai iniciar a transmissão de dados pelo byte 56 (modelos AP, se não 36!) sendo:
Wire.beginTransmission(56);
Wire.write(128);
Wire.endTransmission();
Se vc ligar o pino A no Vcc, terá A=1, B=0, C=0, assim o numero do chip será 57 conforme datasheet.
O numero 128, deve ser interpretado por vc como binário, sendo assim vc "verá" qual a porta que receberá energia, liberando pro seu LED(ou seilá o que)
Depois vou postar as funções pra facilitar a vida ao controlar as portas expandidas, que é esse o objetivo de implementar esse chip no circuito todo né!
Legal, você pegou a idéia.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por