Bonsoir, je cherche des infos sur le cablage du pcf8574. En effet suivant les schémas ont voit les entrées A0,A1,A2 soit à la masse soit au VCC que cela change t'il? J'ai essayé plusieurs librairie et celle donné sur le site me donne une erreur de compilation sur le "WriteLCD(ADDR,'a');" .
J'ai aussi essayé une autre librairie LCD i2c Libraries for Arduino | KB9JJA mais je ne sais pas si il comment brancher les RS, R/W et E, en effet cela diffère d'un schéma à l'autre.
help me
J'ai l'impression qu'il y a 2 sujets dans le message :
comment cabler le pcf84574 ( et comment il fonctionne )
comment faire fonctionner un LCD sur PCF8574
Tout d'abord, l'adressage avec l'arduino :
le PCF8574 a une adresse de base = 0100 XXX Y ( 64 en décimal )
Les XXX Y correspondent en fait à A2, A1, A0 et R/W ...
Explications :
le bit 0 indique si vous voulez accéder au PCF en lecture : R ( =1) ou en écriture W (= 0)
le bit 1 correspond à l'état de l'entrée A0 donc ce bit est à 0 si la borne A0 est à la masse et ce bit est à 1 si la borne A0 est au +5V
le bit 2 correspond à l'état de l'entrée A1 donc ce bit est à 0 si la borne A1 est à la masse et ce bit est à 1 si la borne A1 est au +5V
le bit 3 correspond à l'état de l'entrée A2 donc ce bit est à 0 si la borne A2 est à la masse et ce bit est à 1 si la borne A2 est au +5V
Exemple :
A0 et AI et A2 sont reliés à la masse et vous voulez écrire une donnée ==> l'adresse est 0100 0000 ( 64 D )
A0 et AI et A2 sont reliés à la masse et vous voulez lire une donnée ==> l'adresse est 0100 0001 ( 65 H )
Avec la librairie wire, c'est un peu plus compliqué puisque ce sont les instructions qui déterminent si on accède en lecture ou écriture.
De ce fait, on enlève le bit 0 de l'adresse ce qui donne pour notre exemple ci-dessus : 0100 000X ==> 0010 0000 soit 32D
Notez qu'il éxiste aussi le PCF8574A qui a une adresse de base = 0111 XXX Y ( 112 D )
Un petit sketch pour résumer :
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(57600);
}
void loop() {
//Toutes les sorties mises à 1
Serial.println("Write B11111111.");
Wire.beginTransmission(B0100000); // adresse sur 7 bits
Wire.send(B11111111);
Wire.endTransmission();
delay(1000);
//Toutes les sorties mises à 0
Serial.println("Write B11111111.");
Wire.beginTransmission(B0100000); // adresse sur 7 bits
Wire.send(B00000000);
Wire.endTransmission();
delay(1000);
// lit 1 octet en provenance du PCF8574
Wire.requestFrom(B0100000, 1); // adresse sur 7 bits
while (Wire.available ())
{
int i=Wire.receive (); // Stockage de l'octet = état des 8 lignes PO à P7 du PCF8574
Serial.print("Valeur lue :");
Serial.println(i,BIN);
}
}
Après, pour brancher et faire fonctionner le LCD, avez vous un liens plus complet car je ne trouve pas le schéma sur votre lien. J'ai ouvert une bonne partie des archives ZIP, mais pas de schéma ...
Tout d'abord merci pour votre message plus que complet!
Je me posais justement la question de l'adressage. Je dispose bien de pcf8574P.
Pour la librairie wire, je ne l'ai pas tester, j'ai essayé uniquement la lib LCDI2C4BIT du site arduino. Mais l'exemple ne fonctionne pas. Je vais me pencher sur la lib wire comme ça je comprendrais ce que je fait.
Pour l'utilisation avec le LCD sur le lien que j'ai donner il n'y a justement que la librairie et pas de schéma... d'où m'a question pour le R/W RS et E. Moi je le cable comme donné sur le site arduino.
Avec la librairie wire, c'est un peu plus compliqué puisque ce sont les instructions qui déterminent si on accède en lecture ou écriture.
De ce fait, on enlève le bit 0 de l'adresse ce qui donne pour notre exemple ci-dessus : 0100 000X ==> 0010 0000 soit 32D
Ce n'est pas plutôt 0100 000X ==> 0010 0000 ? Si oui le bit de R/W n'intervient plus donc?
J'ai réussi à le faire fonctionner! C'était principalement un problème d'adresse mais avec A0,A1,A2 à la masse ça me fait comme adresse 0x20 pour la lib Wire.h donc cela fonctionne parfaitement!
Par contre je crois qu'a force de bidouillé j'ai cassé mon LCD, une ligne et de demi en bas qui ne fonctionne plus... et ce même en l'utilisant sans le convertisseur i²c.