Skyduino:~#
[Librairie Arduino] PCF8574 – PCF8575

Description :
Cette librairie à pour but de commander un PCF8574 (ou un PCF8575 voir plus bas) via le bus I2C et au moyen de fonction simple comme digitalWrite, digitalRead, …

EDIT
La version 2.0 est maintenant disponible sur Github.

Changelog :
– compatibilité Arduino 1.0.x et Arduino 002x
– optimisation diverses et variées
– refonte totale du code pour la gestion des interruptions
– documentation revue à la hausse (via doxygen)

Fichiers sources :
https://github.com/skywodd/pcf8574_arduino_library

Discussion

32 réflexions sur “[Librairie Arduino] PCF8574 – PCF8575

  1. Bonjour!
    Vous pouvez mettre à jour la bibliothèque PCF8575.h pour que cela fonctionne avec l’IDE 1.0.1?

    Merci.

    Publié par Fernando | 17 septembre 2012, 22 h 24 min
    • J’ai prévu une nouvelle version plus propre et plus légére, mais pour le moment je manque cruellement de temps.

      Pour le moment pour avoir la librairie PCF8575 sous arduino 1.0.1 il suffit de suivre les consignes entres parenthèses sous le lien de téléchargement😉

      Publié par skywodd | 18 septembre 2012, 18 h 41 min
  2. Merci!

    Publié par Fernando | 18 septembre 2012, 19 h 07 min
  3. Bonjour!
    Pouvez-vous me dire si votre bibliothèque pour une utilisation avec l’Arduino Mega 2560 de connecter le SCL et SDA pour les PCF8575 broches 20 et 21 de l’Arduino et le besoin de mettre un peu de résistance entre eux.

    Le mien a été acheté ici:

    https://www.sparkfun.com/products/8130?

    Reconnaissant.
    Fernando Garcia

    Publié par Fernando Garcia | 3 décembre 2012, 4 h 08 min
    • J’ai pas trop compris la question …
      – Ma librairie marche sans problème avec l’arduino mega2560.
      – Il faut connecter le PCF8575 aux broches 20 (SDA) et 21 (SCL) de l’arduino mega2560.

      Concernant le module de sparkfun :
      – Il faut mettre des résistances aux niveaux de SDA, SCL et INT.
      – Il faut souder les jumpers A0, A1, A2 à l’arrière de la carte du coté GND.

      Publié par skywodd | 3 décembre 2012, 19 h 58 min
  4. Merci!!

    Publié par fernandorgarcias | 5 décembre 2012, 23 h 53 min
  5. The idea is really good. Working with this library is very comfortable. However unfortunately it is 90% inefficient, it is necessary about 100 bytes of SRAM for each expander. It is just too much memory for this porpuse, having into account that we are working with microcontrollers with very little quantity of SRAM. Arduino UNO (ATMega328) has only 2048 bytes. I think it would be a good idea making another version much more simple without interruptions so that it will need much less SRAM memory.

    Publié par Wood Drawer | 16 décembre 2012, 13 h 42 min
    • The library will be rewritten from scratch, it’s planned.
      Lot of optimizations are possible and some things are just horribly coded …
      It’s planned but as now I don’t have the time to …maybe during the holidays …

      Publié par skywodd | 16 décembre 2012, 18 h 34 min
  6. Hello!

    My only PCF8575 provides between 1.6 and 2.6 volts in output.
    The power supply is 5 V and have resistors of 10 K between sda / scl and VCC.
    Any suggestions to solve the problem being?

    Publié par Fernando Garcia | 24 décembre 2012, 21 h 17 min
  7. Bonjour,

    Bravo et merci beaucoup pour cette librairie très utile.
    Je viens de rencontrer un petit problème.
    J’utilise 5 PCF8574 pour un système de domotique qui a essentiellement deux fonctions : la gestion du chauffage et celle de l’arrosage automatique.
    J’ai donc :
    expander1.begin(0x20); // adresse PCF 8574 UIA 1
    expander2.begin(0x21); // adresse PCF 8574 UIA 2
    expander3.begin(0x22); // adresse PCF 8574 UIA 3
    expander4.begin(0x23); // adresse PCF 8574 UIC 1
    expander5.begin(0x24); // adresse PCF 8574 UIC 2
    Losqu’un des expander est absent, (ce qui arrive en été puisque je coupe le chauffage et en hiver puisque je coupe l’arrosage) le programme se bloque. Pour le faire fonctionner il faut que je supprime (commente) les lignes des expanders absents.
    Y a t’il un moyen pour éviter cela, ou encore mieux pour savoir si un expander est absent sur la liaison I2C, je pourrai alors mettre des tests pour les désactiver ?

    Cordialement
    Guy

    Publié par Guy | 6 octobre 2014, 17 h 21 min
    • La librairie attend une réponse du PCF8574 quand tu changes l’état d’une sortie ou quand tu lis l’état des entrées.
      C’est pour cela que le programme se bloque si le PCF8574 ne répond pas.

      Sinon, je vois mal pourquoi les expander disparaissent quand tu est en été ?
      Tu les déconnectent physiquement ? Si oui je pense que tu as un problème de conception dans ton système.

      Publié par Skywodd | 6 octobre 2014, 19 h 50 min
  8. Merci pour ta réponse.

    >>> Tu les déconnectes physiquement ?
    Les expander sont sur des cartes différentes une pour le chauffage et une pour l’arrosage, ces cartes ne sont pas alimentées lorsque les fonctions ne sont pas en service.
    Dans mon cas tout l’intérêt de l’I2C est de relier les différentes cartes avec les 3 même fils, et non pas les 17 ou 25 fils des E/S nécessaires, si j’avais tous les expander sur la même carte.

    >>> La librairie attend une réponse du PCF8574 quand tu changes l’état d’une sortie ou quand tu lis l’état des entrées. C’est pour cela que le programme se bloque si le PCF8574 ne répond pas.
    N’y a t’il pas un moyen de faire en sorte que ce retour attendu ne soit pas bloquant ?

    Publié par Guy | 6 octobre 2014, 21 h 16 min
    • >> Les expander sont sur des cartes différentes une pour le chauffage et une pour l’arrosage, ces cartes ne sont pas alimentées lorsque les fonctions ne sont pas en service.

      Pour moi ça ressemble à un défaut de conception. Si les modules peuvent disparaître du jour au lendemain ça veut dire qu’ils devraient être indépendant les un des autres.
      Sous entendu : chaque module devraient avoir son propre microcontrôleur et un bus style RS485 pour relier tout le monde ensemble.

      >> N’y a t’il pas un moyen de faire en sorte que ce retour attendu ne soit pas bloquant ?

      Franchement comme ça, j’ai pas d’idée. La librairie Wire pour l’I2C est bloquante de base …
      Peut être ça : http://forum.arduino.cc/index.php/topic,70705.0.html

      Publié par Skywodd | 8 octobre 2014, 14 h 27 min
  9. Hi, first thanks for losing some of your time to make others we save, I wanted to ask how I can add more PCF to code?
    I put this but I fails …
       expander.begin (0x41);
       expander2.begin (0x43);

    Thank You. JR Greetings!

    Publié par Jose | 14 mars 2015, 0 h 10 min
  10. Bonjour,

    Je suis un peu surpris car j’avais utilisé cette génialissime librairie auparavant. Mais elle ne marche plus
    Je télécharge ce jour sur GitHub les fichiers pour le PCF8574, je fais mes essais et je me rends compte que je ne peux pas compiler.

    En fait, même pour le fichier d’exemple (ButtonBlink), sans rien toucher, la compilation ne se fait pas:/
    Une idée de ce que je dois changer ?

    Version arduino mise à jour aujourd’hui (via ubuntu)

    ———-
    ButtonBlink.ino: In function ‘void ISRdemo()’:
    ButtonBlink.ino:53:19: error: no matching function for call to ‘PCF8574::toggle()’
    ButtonBlink.ino:53:19: note: candidate is:
    In file included from ButtonBlink.ino:13:0:
    /home/desktop/sketchbook/libraries/PCF8574/PCF8574.h:118:7: note: void PCF8574::toggle(uint8_t)
    void toggle(uint8_t pin);
    ^
    /home/desktop/sketchbook/libraries/PCF8574/PCF8574.h:118:7: note: candidate expects 1 argument, 0 provided

    Publié par bopnrgiboxClement | 12 avril 2015, 16 h 42 min
  11. meme problème. « no such file directory ». quelqu’un a la solution ?

    Publié par mimix | 6 mai 2015, 8 h 00 min
    • C’est quoi le message d’erreur complet ?
      Avec l’ide Arduino 1.6 plein de choses ont été modifiées, plus aucun code pre-1.0 ne fonctionne correctement même ceux écrit avec la double compatibilité pre/post-1.0.

      Publié par Skywodd | 9 mai 2015, 10 h 10 min
      • ButtonBlink.ino:13:45: fatal error: PCF8575.h: No such file or directory
        compilation terminated.
        Erreur lors de la compilation.

        avec arduino 1.6.3 en ajoutant la bibliothèque via l’interface en allant chercher le zip, et en sélectionnant l’exemple pour le PCF8575.

        Publié par mimix | 11 mai 2015, 13 h 16 min
      • j’ai essayé en remettant arduino 1.0.6 etj’ai ça:

        ButtonBlink.ino:13:45: error: PCF8575.h: No such file or directory
        ButtonBlink:16: error: ‘PCF8575’ does not name a type
        ButtonBlink.ino: In function ‘void setup()’:
        ButtonBlink:25: error: ‘expander’ was not declared in this scope
        ButtonBlink.ino: In function ‘void ISRgateway()’:
        ButtonBlink:43: error: ‘expander’ was not declared in this scope
        ButtonBlink.ino: In function ‘void ISRdemo()’:
        ButtonBlink:53: error: ‘expander’ was not declared in this scope
        ButtonBlink.ino: In function ‘void loop()’:
        ButtonBlink:63: error: ‘expander’ was not declared in this scope

        Publié par mimix | 11 mai 2015, 13 h 39 min
      • Installation manuelle ou via la nouvelle option d’install auto par zip ?
        Vu le message d’erreur, je penche pour l’option 2). Si c’est bien le cas, une install manuelle comme au bon vieux temps de 1.0.x devrait marcher.
        J’ai pas encore regarder la doc de la nouvelle option d’install depuis l’ide.

        Publié par Skywodd | 18 mai 2015, 16 h 06 min
  12. Déjà essayé… tu penses bien que c’est ce que j’ai vérifié en premier.

    Publié par mimix | 18 mai 2015, 17 h 00 min
  13. I have a question is possible to use simultaneously one PCF8574 and pcf8575?

    Publié par Jose | 27 juin 2015, 20 h 15 min
    • Yes, you just have to install the two library.

      Publié par Skywodd | 3 juillet 2015, 17 h 13 min
      • Hi, Thanks for the answer, that I’ve tried and I get error. This is what I get:
        #include « PCF8575.h »
        #include « PCF8574.h »
        …..

        PCF8575 Expander;
        PCF8575 Expander2;
        PCF8574 Expander3;
        void setup () {
        …..


        expander3.begin (0x22);

        }

        void () {


        ..}

        Compile and I get this error:

        PCF8574 \ PCF8574.cpp.o: In function `PCattachInterrupt (unsigned char, void (*) (), int) ‘:
        /PCint.h:16: Multiple definition of `PCattachInterrupt (unsigned char, void (*) (), int) ‘
        PCF8575 \ PCF8575.cpp.o: /PCint.h: 16: first defined here
        PCF8574 \ PCF8574.cpp.o😦 data.port_to_pcmask + 0x0). Multiple definition of `port_to_pcmask ‘
        PCF8575 \ PCF8575.cpp.o😦 data.port_to_pcmask + 0x0). First defined here
        PCF8574 \ PCF8574.cpp.o: In function `PCdetachInterrupt (unsigned char) ‘:
        /PCint.h:51: Multiple definition of `PCdetachInterrupt (unsigned char) ‘
        PCF8575 \ PCF8575.cpp.o: /PCint.h: 51: first defined here
        PCF8574 \ PCF8574.cpp.o: In function `__vector_9 ‘:
        /PCint.h:104: Multiple definition of `__vector_9 ‘
        PCF8575 \ PCF8575.cpp.o: /PCint.h: 104: first defined here
        PCF8574 \ PCF8574.cpp.o: In function `PCINT1_vect ‘:
        /PCint.h:107: Multiple definition of `PCINT1_vect ‘
        PCF8575 \ PCF8575.cpp.o: /PCint.h: 107: first defined here
        PCF8574 \ PCF8574.cpp.o: In function `PCINT2_vect ‘:
        /PCint.h:110: Multiple definition of `PCINT2_vect ‘
        PCF8575 \ PCF8575.cpp.o: /PCint.h: 110: first defined here
        Thank You! greetings Jose Ramon

        Publié par Jose | 5 juillet 2015, 12 h 22 min
      • Sorry, I’ve forget about the PCint part of the code.
        If you’re using hardware interruption pins (D2/D3) for the PCF74xx INT signal, you can mod the libraries to remove the PCint part.
        But as is, without modifications, the two libraries can work together in the same code.

        Publié par Skywodd | 9 juillet 2015, 11 h 29 min
      • Hi, thanks for the answer, I do not use the INT pin PCF8574, as would have to modify the library? I do not have much practice with this … Thanks, greetings.

        Publié par Jose | 9 juillet 2015, 16 h 06 min
      • Hey, now that I’ve had time I’ve looked and I think that’s it, you just have to comment the line of interruptions? not to do anything more in the library … Thanks Greetings and have a great summer!

        Publié par Jose | 26 juillet 2015, 19 h 46 min
      • Hi,
        Yes just comment the lines for the PCint part and everything should work.

        Publié par Skywodd | 28 juillet 2015, 19 h 12 min
  14. Bonjour
    Je débute avec ce module. J’ai regardé l’exemple, mais avant de faire une bêtise, est il possible d’avoir plus de renseignement sur le branchement des entrées et sorties:
    -dans quel sens faut mettre la led en config sortie ?
    -comment mettre le bp sur une entrée ?
    -et comment brancher si on choisit le mode Input-Pullup ?

    Publié par yannick | 19 mars 2016, 23 h 19 min
  15. Bonjour
    La librairie marche t’elle avec l’ide arduino actuel (1.6.9) ?

    Publié par Stéphane Le Marec | 23 juin 2016, 11 h 11 min

Rétroliens/Pings

  1. Pingback: La domotique chez Benchi - I2C Arduino et le PCF8574 - 13 août 2011

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.