LCD + Arduino + pcf8574

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 :slight_smile:

Bonne soirée.

Bonjour,

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 ...

A+

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.

La lib -> Arduino Playground - I2CPortExpanderAndLCDs (seul problème c'est un mcp utilisé et pas un pcf)
Le cablage

P0-D4
P1-D5
P2-D6
P3-D7
P4-rien
P5-RS
P6-E
P7-R/W
A0,A1,A2-masse

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?

Bonjour,

Je vais regarder pour le cablage ce qu'indique la librairie ... ( à suivre )

Ce n'est pas plutôt 0100 000X ==> 0010 0000 ? Si oui le bit de R/W n'intervient plus donc?

oui c'est cela, on enlève le bit 0 car :

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.

A+

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!

Merci infiniment pour votre aide!

Cool ! :slight_smile: Content de t'avoir rendu service.
Ca va me servir quand je passerais au branchement d'un LCD sur mon installation.

A+

Voila si ça peut aider quelqu'un
Convertisseur i²c->LCD

Voici les librairies et un exemple que j'ai réécrit avec des commentaires en français.
Voila les fichiers de base Arduino Playground - I2CPortExpanderAndLCDs

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.

Merci encore et bonne soirée.