Diverses questions sur le module I2C GPIO

Bonjour à tous,

Tout d'abord, je tiens à préciser que je suis relativement débutant, donc désolé si les questions que je pose sont idiotes ou inappropriées... :-[
Je souhaite utiliser un module afin d'ajouter 16 E/S en liaison I2C ( Lien ici )
Ce module a pour moi plusieurs intérêts:

  • 16 ports supplémentaires
  • Des résistances pull interne
  • Une alimentation 5V supplémentaire du module

Je souhaite utiliser 8 des ports en inputs pour connecter divers interrupteurs, les 8 autres alimenteront un module de 8 relais ( Lien ici ).

Mes questions toutes bêtes sont les suivantes:

  • Si je comprend bien le schéma (téléchargeable sur la fiche produit), les résistances pull up interne seraient de 1K. Est ce que cela est suffisant pour pouvoir brancher un interrupteur en direct, sans résistance additionnelle (du genre GND -- Interrupteur -- Broche Entrée)? Dans l'affirmative, est ce que ce matériel réagit de la même manière que le module Arduino à une commande DigitalWrite() sur une broche définie en Entrée?
  • D'après les spécifications du module, le courant sortant max est de 50 mA, ce qui est largement suffisant pour alimenter mes relais qui demandent autours de 20mA. Seulement, le "Power supply current" est donné à 160 mA... Si j'alimente mes 8 relais en même temps, y a t-il un risque que tout ne se passe pas comme prévu (fonctionnement erratique des relais par exemple), du fait que 8x20 mA = 160 mA soit égal au courant max... ? Et, pour alimenter ces 160 mA, cela passe t-il par le bus I2C (avec la broche 5V), ou bien faut-il nécessairement passer pas l'alimentation annexe?

D'avance merci pour l'aide que vous pourrez m'apporter.

Concernant ce module j'ai téléchargé la documentation.

J'ai peux être les yeux bouchés mais dans la datasheet du circuit intégré je n'ai vu nulle part la nécessité de pull up , non en français on dit des résistances de tirage, sous entendu au plus de l'alim.

Par contre j'y ai vu que les sorties pouvait fournir ou accepter du courant ce qui à priori élimine un câblage des sorties en collecteur (ou drains) ouvert qui eux nécessiteraient des résistances extérieures pour refermer le circuit.

J'y ai vu aussi un schéma bordélique.

Si je comprend bien le schéma (téléchargeable sur la fiche produit), les résistances pull up interne seraient de 1K.

Interne à quoi ? Au circuit intégré ou au module ? Vu ce que j'ai dit pour la datasheet c'est au module et pour moi cela se gâte.
Pour moi, mais vu que le schéma est crapouilleux j'emploie le conditionnel, ce serait des résistances en série sur les sorties . Donc rien à voir avec des poules œupes mais plutôt des poules à l'horizontale puisqu'on a l'habitude de représenter ce qui est en série en mode horizontal..
En général on met ces résistances quand on veut protéger les sorties de court-circuits accidentels.
Mais dans ce cas on ne peut plus tirer le courant maximal.
Note que pour commander les relais ce ne sera pas un problème puisque ces relais sont équipés d'un transistor qui fait interface entre le micro et la bobine.

Dans l'affirmative, est ce que ce matériel réagit de la même manière que le module Arduino à une commande DigitalWrite() sur une broche définie en Entrée?

Vu qu'il est présenté comme une amélioration du PCF8574 il est ce qu'on appelle quasi-bidectionnel. C'est à dire qu'en mode sortie il fonctionne comme une sortie du microcontrôleur qui équipe les cartes arduino mais en mode entrée il fonctionne avec les interruptions.
Extrait de la datasheet jointe dans la documentation

The PCA9555 open-drain interrupt output is activated when any input state differs from its
corresponding input port register state and is used to indicate to the system master that
an input state has changed.

J'ai pu voir que l'exemple fourni est encore en extension pde. Il y a plus de 5 ans que l’extension est passée en ino (depuis la sortie de l'IDE 1.0) donc j'aurai quelques doutes sur le contenu de cet exemple..

Si un module équivalent 8bits peut te convenir il y a eu sur ce forum une grosse action pour écrire une bibliothèque réellement fonctionnelle pour le PCF8574 (8 bits au lieu de 16). Il est possible de mettre jusqu'à 8 PCF8574 sur un bus I2C soit 64 sorties supplémentaires, cela devrait être suffisant.

Une petite recherche sur ce forum te permettrait de retrouver cette bibliothèque, à moins qu'un gentil participant a son écriture ressorte le lien plus vite.

Bonjour

Pour la même chose, je ne m'embête plus avec des circuits spécialisés, comme le PCA9555 ou le plus répandu PCF8574.

Un second arduino (au format pro mini, ça coûte une misère) permet de créer n'importe quel IO expander, avec une richesse de fonctionnalités décuplée.

Dans tous les cas le point important est de vérifier la consommation des relais.
C'est quel modèle exactement?

Bonjour,

Le PCF8574 c'est seulement 2 octets à envoyer sur le bus I2C.

Utiliser une librairie pour réaliser une tâche aussi simple serait dommage.

Utiliser une librairie pour réaliser une tâche aussi simple serait dommage.

En général je suis d'accord avec ce genre de réflexion. Egalement écrire une classe pour une RTC alors que l'on ne peux instancier qu'un seul et unique objet me parait pour un microcontrôleur perdre des octets pour pas grand chose.

Sauf que pour utiliser le mode quasi directionnel du PCF c'est un peu plus compliqué. Et le PCF tu peux en utiliser jusqu'à 2 fois 8.
En gros tu fixe un état dans le registre des I/O, jusque là fastoche. Si jamais tu impose sur l'I/O un état qui diffère de ce qui est écrit dans le registre le pcf déclenche une impulsion sur sa pin int. Tu dois considérer cette impulsion comme une interruption et dans la routine d'interruption il faut aller lire les pins pour savoir laquelle à changer d'état.
Ce n'est pas du vrai bidirectionnel mais du "quasi" bidirectionnel.

Crois moi que ce n'est pas une tâche simple. Je n'ai pas participé à l'élaboration de cette librairie mais il y a eu un gros travail de groupe.

Bonjour,
il me semble que pour ce type d'extension on utilise plutôt le MCP23017
entre autres améliorations, il permet de choisir le type de sortie (open drain ou push-pull), et en entrée (100k en push-pull ou rien)

plus complet = moins simple, donc l'utilisation d'une bibliothèque "quivabien" est sans doute la bienvenue

Un second arduino (au format pro mini, ça coûte une misère) permet de créer n'importe quel IO expander

sans doute intéressant dans certains cas, mais cela oblige la maintenance d'un 2ème soft

dans ce cas on peut aussi voir si un arduino mega permet de se passer d'un 2ème module, d'une bibliothèque spéciale ou d'un 2ème soft

68tjs:
En général je suis d'accord avec ce genre de réflexion. Egalement écrire une classe pour une RTC alors que l'on ne peux instancier qu'un seul et unique objet me parait pour un microcontrôleur perdre des octets pour pas grand chose.

Sauf que pour utiliser le mode quasi directionnel du PCF c'est un peu plus compliqué. Et le PCF tu peux en utiliser jusqu'à 2 fois 8.
En gros tu fixe un état dans le registre des I/O, jusque là fastoche. Si jamais tu impose sur l'I/O un état qui diffère de ce qui est écrit dans le registre le pcf déclenche une impulsion sur sa pin int. Tu dois considérer cette impulsion comme une interruption et dans la routine d'interruption il faut aller lire les pins pour savoir laquelle à changer d'état.
Ce n'est pas du vrai bidirectionnel mais du "quasi" bidirectionnel.

Crois moi que ce n'est pas une tâche simple. Je n'ai pas participé à l'élaboration de cette librairie mais il y a eu un gros travail de groupe.

C'est intéressant, en quelques lignes tu as synthétisé le principe de fonctionnement du composant et prémâcher un algorithme, que demande le peuple ?

Je ne remets pas en cause la librairie et tout le travail fait en amont, au contraire je félicite toutes ces personnes pour leur effort.

Ce que je trouve déplorable c'est que bien souvent leur utilisation est abusive parce que l'utilisateur veut immédiatement une solution et ne prend plus le temps de se poser pour savoir comment tel ou tel composant fonctionne, l'esprit créatif n'est même pas mis à profit et pourtant des solutions existent pour cité trimarco232.

Mais bon après, tout est une histoire de point vue que je respect.

Bonjour à tous

Désolé pour le délais relativement long pour ma réponse, un problème de connexion internet et un planning pour le moins chargé en ce moment ont eu raison de ma réactivité...

Merci pour vos réponses, c'est très instructif, et cela montre aussi qu'à un problème, les solutions sont multiples...
Du coup, c'est la solution de relier deux cartes arduino qui m'a finalement le plus séduit, une solution à laquelle je n'avait pas du tout pensé... Possibilités plus importantes, évolutivité, possibilités de scinder tâches principales et tâches subalternes, les avantages me semblent nombreux effectivement. Donc let's go!