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

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

  1. Avatar de Fernando

    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
    • Avatar de Skywodd

      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. Avatar de Fernando

    Merci!

    Publié par Fernando | 18 septembre 2012, 19 h 07 min
  3. Avatar de Fernando Garcia

    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
    • Avatar de Skywodd

      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. Avatar de fernandorgarcias

    Merci!!

    Publié par fernandorgarcias | 5 décembre 2012, 23 h 53 min
  5. Avatar de Wood Drawer

    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
    • Avatar de Skywodd

      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. Avatar de Fernando Garcia

    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. Avatar de Guy

    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
    • Avatar de Skywodd

      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. Avatar de Guy

    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
    • Avatar de Skywodd

      >> 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. Avatar de Jose

    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. Avatar de bopnrgiboxClement

    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. Avatar de mimix

    meme problème. « no such file directory ». quelqu’un a la solution ?

    Publié par mimix | 6 Mai 2015, 8 h 00 min
    • Avatar de Skywodd

      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
      • Avatar de mimix

        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
      • Avatar de mimix

        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
      • Avatar de Skywodd

        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. Avatar de mimix

    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. Avatar de Jose

    I have a question is possible to use simultaneously one PCF8574 and pcf8575?

    Publié par Jose | 27 juin 2015, 20 h 15 min
    • Avatar de Skywodd

      Yes, you just have to install the two library.

      Publié par Skywodd | 3 juillet 2015, 17 h 13 min
      • Avatar de Jose

        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
      • Avatar de Skywodd

        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
      • Avatar de Jose

        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
      • Avatar de Jose

        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
      • Avatar de Skywodd

        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. Avatar de yannick

    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. Avatar de Stéphane Le Marec

    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
  16. Avatar de Kaleb Stone

    This is a ggreat post

    Publié par Kaleb Stone | 21 janvier 2025, 5 h 50 min

Rétroliens/Pings

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

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

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.

Concevoir un site comme celui-ci avec WordPress.com
Commencer