gestion des résistances de pull-up / pull-down software
correction de petit bug
fonction i2c disponible depuis les interruptions
Bonjours,
Alors voila depuis deux jours je me suis lancer dans la fabrication de deux librairies, une pour piloter un NS73M (puce émetteur fm) et plus récemment une pour piloter un PCF8574 (expanseur I/O I2C 8 bits).
La libraire pour le NS73M étant terminé j'ai attaqué (et finit) celle pour le PCF8574.
Elle permet d'utiliser les fonctions classique (pinMode, digitalWrite, digitalRead,blink,toggle,set,clear) en utilisant un expanseur I2C comme des I/O normales.
La librairie est en pièce jointe au post
Seulement je me posai une question comment faire si je veux ajouter mes deux libraires au playground ? (et dans quelle sections ?)
C'est ma deuxième libraire donc comme pour la première tout avis ou conseil sera le bienvenue.
Pour rappel la 1er librairie était ici.
Ohoh PCF8574 je comptais justement faire un tuto sur une extension relais commandé en i2c basée sur ce CI (et peut-être faire une librairie pour l'occaz), du coup ça risque d'être pas mal la
Alors déjà le PCF8574 est un périphérique d'entré/sortie I2C donc oui plusieurs PCF peuvent être chainé en utilisant le même bus I2C.
Il permet d'avoir accès à 8 entrées (ou sorties) LOGIQUE (uniquement) en utilisant seulement les pin A4 et A5 (port I2C des cartes arduino) comme bus de contrôle.
Pour le schémas fritzing j'ai jamais réussi à faire un truc propre, en réalité c'est le même qu' ICI sans les résistances de pull-up.
Ma librairie fourni les fonctions suivantes :
pinMode(int pin, int mode) -> Configure une patte en entrée ou en sortie.
digitalWrite(int pin,int value) -> Écrit un niveau logique sur la patte .
int digitalRead(int pin) -> Lit un niveau logique sur la patte .
write(int value) -> Écrit une valeur (int 8 bits) sur le port entier du PCF (les pâtes en entrée ne sont pas affectées) .
int read() -> Lit la valeur du port entier du PCF (sortie et entrée).
clear() -> Met toute les pattes en sortie à "0" logique.
set() -> Met toute les pattes en sortie à "1" logique.
toggle(int pin) -> Inverse l'état logique de la pattes (uniquement si est configuré en sortie).
blink(int pin,int time,int wait) -> Fait clignoter la patte pour fois en attendant ms entre chaque bascullement.
Remarque importante pour le PCF8574 (P) l'adresse de base (A0~2 à la masse) est 0x20 MAIS pour le PCF8574A (P) elle est 0x38 .
à ton avis est ce que c'est bien pour utiliser sur des matrices de leds en niveau 0 / Full ?
je voudrais me faire une surface de controle avec rotatif et éclairage par leds des positions des rotos .
à ton avis est ce que c'est bien pour utiliser sur des matrices de leds en niveau 0 / Full ?
je voudrais me faire une surface de controle avec rotatif et éclairage par leds des positions des rotos .
bonjours,
Par logique j'entends 0 volts ou 5 volts en sortie du pcf8574 ou 0 volts = "0" logique et 5 volts = "1" logique.
Ensuite le pcf8574 ne permet d'avoir un courant important (50mA) qu'avec un courant ENTRANT (courant sortant = 50µA).
Pour la suite de ton post j'ai pas tout compris si le but est d'utiliser un encodeur rotatif avec un retour lumineux de la position voila un exemple de montage:
Montage led:
[5V]---[LED (A -|>|- K)]---[330 ohm]---[I/O PCF8574]
Montage encodeur (seulement d'une sortie):
[I/O PCF8574]
|
[5V]---[10K]---+---[ENCODEUR]---[0V]
Heureux de t'avoir était utile karistouf.
Juste un petit détail au passage pour ceux qui viendrai fouiller ma librairie la déclaration de function_pointer est dans la source car au début j'avais en tête de pouvoir utiliser chaque pattes pour déclenchez une interruption chose que le PCF8574 n'est pas arrivé à gérer (fallait mettre toute les pattes en sortie c'était pas viable).
EDIT: j'ai fait une petite vidéo vite fait pour montrer le résultat (c'est un peu crade mais bon :P).
(Visitez ma chaine youtube si vous voulez voir d'autre de mes projets ;))
Juste un petit détail au passage pour ceux qui viendrai fouiller ma librairie la déclaration de function_pointer est dans la source car au début j'avais en tête de pouvoir utiliser chaque pâtes pour déclenchez une interruption chose que le PCF8574 n'est pas arrivé à gérer (fallait mettre toute les pâtes en sortie c'était pas viable).
Euuu je comprends pas : tu n'es pas arrivé à gérer les interruptions du tout ou juste dans ta librairie ?
Bonjours,
En fait j'avais deux solutions soit utiliser l'interruption du pcf8574 pour m'annoncer un changement d'état d'une patte ou vérifier avec un timer l'état des pâtes à un intervalle précis.
Le problème est que dans la première je n'est réussi à obtenir une interruption de la part du pcf8574 qu'en passant toute les pattes à 0 ce qui pose problème pour le reste.
Dans la seconde solution l'utilisation d'un timer me sembler trop lourde donc j'ai abandonné l'idée des interruptions.
Après si quelqu'un connais la méthode pour avoir une interruption sur INT je modifierai mon code pour permettre les fonctions attachInterrupt et detachInterrupt http://focus.ti.com/lit/an/scpa032/scpa032.pdf (page 8 et montage avec résistance pull-up au 5V)
je ne me souviens pas avoir eu spécialement de problème, mais en relisant la datasheet je ne vois pas trop où tu peux bloquer : l'interruption est générée quand ce que tu as "écrit" n'est pas ce qui est réellement (ex : tu as forcé à 0100000 et en réalité tu as 0000000). Mais dans tout les cas tu dois forcement jouer avec les pull-up et les pull-down. Après j'ai jamais fait de librairie donc je ne visualise pas totalement non plus le problème peut-être ...
(Re)Bonjours à tous !
Alors voila la gestion des interruptions marche au poil et pour me faire pardonner de ma petite boulette ^^"" j'ai intégré la libraire PCint qui permet de mettre la patte récupérant l'interruption du PCF8574 sur n'importe quelle patte digital au analogique.
Je finis de faire l'exemple et la doc et d'ici ce soir je vous post le .zip
Bonsoir a tous
je suis un nouveau venu dans le monde arduino,jeune retraite de l'electronique je voudrais redecouvrir les micro-proc programmable.
j'essaie de mettre au point un positionneur automatique de parabole sur le satellite astra.
avec un arduino,je bute sur un probleme depuis 2 jours a savoir la gestion des interuption I2C avec pcf8574 qui gere un clavier 10touches.
ma routine acquisition fonctionne bien si je l'ecris dans la boucle principale "loop".
si je la positionne dans une routine interuption a l'appuie sur un bouton je rentre bien dans ma routine mais je plante l'arduino, blocage.
j'utile la bibliotheque "wire" de arduino.
merci de votre reponse