Pages: [1] 2 3 ... 5   Go Down
Author Topic: [RESOLU] Utilisation bibliothèques PCF8574 et PCF8575  (Read 6493 times)
0 Members and 1 Guest are viewing this topic.
Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
J'essaye en vain d'utiliser les librairies PCF8574 et PCF8575.
Mon problème ne se situe pas au niveau des entrées ou des sorties mais dans l'utilisation des interruptions.
Pour mon test j'utilise les exemples fournis des les fichiers bibliothèques (le non fonctionnement est identique avec le PCF8574 ou le PCF8575).
Quelqu'un a-t-il fait des essais concluants avec les interruptions de ces librairies ?
J'essaye de reproduire la démo de Skywodd : http://skyduino.wordpress.com/2011/07/25/pcf8575-news-2/
Lorsque je connecte la sortie INT du PCF8575 à la pin 8 de ma UNO R3 (même phénomène avec Duomilanovo) les clignotement deviennent erratiques. Si la pin8 n'est pas relié le comportement est conforme au programme hormis, bien sur, la gestion des interruptions.
Voici le code utilisé :
Code:
#include <PCF8575.h> // Required for ... all

#include <Wire.h> // Required for I2C communication

PCF8575 expander; // Create object from PCF8575 class

void setup(){

  Serial.begin(9600); // Setup serial for read echo
  
  expander.pinMode(0,OUTPUT); // Setup pin D0 as output
  expander.pinMode(15,OUTPUT); // Setup pin D1 as output
  expander.pinMode(3,INPUT); // Setup pin D3 as input

  expander.begin(0x20);
  
  expander.pullUp(3); // Enable pull-up resistor on pin D3 (button)
  
  expander.enableInterrupt(8,ISRgateway); // Enable interrupt by attach interruption handler to arduino pin D8 and save ISRgateway as callback function
  
  expander.attachInterrupt(3,ISRexpander,FALLING); // Attach an virtual interrupt on the pin D3 (button) of the PCF8575
}

void ISRgateway(){
  expander.checkForInterrupt(); // ISRgateway act as an wrapper for attachInterrupt from namespace PCF8575:: to the global scope
}

void ISRexpander(){ // ISRexpander will be call when the PCF8574 pin D3 will goes from high to low
  expander.blink(15,5,200); // Blink the led on pin D0 on PCF8574 (to test TWI into an ISR called function /debug)
}

void loop(){
 expander.blink(0,5,200);
 delay(1000);
} // Loop forever
Si quelqu' un a une piste d'où pourrait provenir ce dysfonctionnement, je suis preneur
Merci pour votre aide
« Last Edit: September 15, 2013, 10:26:18 am by icare » Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Personne n'a d'expérience avec ces librairies ?
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

IDF/SO
Offline Offline
Edison Member
*
Karma: 41
Posts: 2306
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aucune expérience.
Mais n'est-il pas plus simple de gérer soi-même l'interruption plutôt que de passer par une usine à gaz qui veut tout faire, même ce dont tu n'as pas besoin, mais qui n'arrive pas à le faire correctement ?
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3826
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Suffit de patienter un peu et le créateur de la librairie passera surement smiley-wink
Logged


Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Aucune expérience.
Mais n'est-il pas plus simple de gérer soi-même l'interruption plutôt que de passer par une usine à gaz qui veut tout faire, même ce dont tu n'as pas besoin, mais qui n'arrive pas à le faire correctement ?
Il est souvent très agréable de faire soi même mais il me manque souvent les compétences smiley-sad
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Mais n'est-il pas plus simple de gérer soi-même l'interruption plutôt que de passer par une usine à gaz qui veut tout faire, même ce dont tu n'as pas besoin, mais qui n'arrive pas à le faire correctement ?
Hé c'est pas gentil smiley-razz
(bon ok c'est vrai que ça marche pas et que c'est une usine à gaz, bref smiley-mr-green)

Pour faire simple et concis : cette librairie est la toute première librairie Arduino que j'ai réalisé, elle doit avoir plus de deux ans maintenant.
A l'époque je savais même pas à quoi servait un "byte" et les interruptions ont été implémenté de manière un peu bizarre.

Une refonte totale du code était prévu il y a plus de 6 mois maintenant mais j'ai jamais eu le temps de m'y mettre.
En gros je suis même pas sûr de pouvoir faire remarcher mon propre code ... c'est pour dire.
Vu que j'ai une pile de mail qui commence à s'empiler depuis avant-hier sur le sujet je vais tenter ce week-end de refaire une librairie propre en partant de zéro.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Je peux te dire que je galère avec ce code (que de souffrance pour un non pro du code) pour le point <0 mais il y a énormément de >0 car j'ai appris plein de chose.
Si tu pouvais y jeter un oeil ce serait sympa.
@+
« Last Edit: August 14, 2013, 03:30:19 pm by icare » Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Je pense que je viens d'être frapper par la loi de Peter (tout être fini par atteindre son niveau d'incompétence).
Je laisse tomber mais je reste à l'écoute si jamais Skywodd refait sa lib.
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Jaloux des jeunes neurones qui courent à 200 à l'heure, j'ai essayé avec le seul qui me reste (de neurone) de comprendre la conception de bibliothèque. J'ai pris comme exemple le PCF8574 pour faire mes expériences. J'ai joint, en annexe, un commencement de logiciels qui allument des LEDs connectées au PCF (LED entre le + et les sortie P? du PCF8574.
Si les "dieux" du C, du C++ et de la POO veulent bien se pencher sur les quelques lignes de programme et me dire si je suis dans la "droite ligne du parti".
Je suis parti du principe de la boîte très complexe avec une interface utilisateur relativement simple et sans faire exploser la boîte, bien sûr.
J'attends avec impatience vos remarques pour éviter d'être lyncher par tous les concepteurs POO de la terre que je risque de rencontrer  smiley
@+

* psl_130816_pcf8574_02.zip (2.8 KB - downloaded 14 times.)
« Last Edit: August 17, 2013, 08:48:42 am by icare » Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

IDF/SO
Offline Offline
Edison Member
*
Karma: 41
Posts: 2306
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Quote from: 68tjs on August 14, 2013, 12:13:30 pm
Mais n'est-il pas plus simple de gérer soi-même l'interruption plutôt que de passer par une usine à gaz qui veut tout faire, même ce dont tu n'as pas besoin, mais qui n'arrive pas à le faire correctement ?
Hé c'est pas gentil smiley-razz

skywodd personne n'était visé en particulier et surtout pas toi, je ne connaissais même pas l'auteur de cette bibliothèque..
C'était juste une réflexion générale suite à des tentatives douloureuses d'utiliser des bibliothèques récupérées sur le web.

Rectification :
"Personne n'était visé en particulier"
Si en fait : les gars de chez arduino qui savent vendre des cartes mais qui n'ont pas été capables, ou qui n'ont pas voulu se donner la peine (la tchatche oui, mais les actes...) de créer un dépôt de bibliothèques vérifiées et avec une documentation  normalisée.
Rien que le fait de proposer un canevas pour renseigner les points suivants :
- les pins, timers, interruptions, interfaces de communication utilisées, 
- une documentation Doxigen pour la description et l'emploi des méthodes.
n'induirait pas une charge insurmontable pour l'auteur et simplifierait grandement la vie des utilisateurs.
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Rectification :
"Personne n'était visé en particulier"
Si en fait : les gars de chez arduino qui savent vendre des cartes mais qui n'ont pas été capables, ou qui n'ont pas voulu se donner la peine (la tchatche oui, mais les actes...) de créer un dépôt de bibliothèques vérifiées et avec une documentation  normalisée.
Rien que le fait de proposer un canevas pour renseigner les points suivants :
- les pins, timers, interruptions, interfaces de communication utilisées, 
- une documentation Doxigen pour la description et l'emploi des méthodes.
n'induirait pas une charge insurmontable pour l'auteur et simplifierait grandement la vie des utilisateurs.
La team Arduino c'est devenu du "business for money" pure et simple, la preuve : il ne font même plus les cartes eux même.
Ils sous-traitent à des entreprises qui voguent sur le côté OpenHardware du projet Arduino pour vendre des cartes SIM (shield GSM) et un chipset GSM, ou des processeurs Atheros.
La dernière carte "Arduino Yun" est l'ensemble parfait du futur du projet Arduino : pas de schéma, pas de doc, rien de concret, pas même de tuto pour le OpenWRT embarqué.
On sent le mix d'un routeur Atheros et d'une carte leonardo mais c'est tout. Et vu le chipset Atheros en question il ne faut même pas espérer un datasheet tout est sous NDA.

Pour la doc actuelle : pas besoin de commenter ...
Pour la doc doxygen (y pas i smiley-wink) ça les forceraient à documenter des morceaux de code dont les commentaires sont à laisser sur place n'importe quel développeur un minimum consciencieux.
Pour le dépôt centralisé des librairies ils l'ont fait. Mais l'ide ne possède aucune fonction pour télécharger les librairies disponibles et le simple fait de devoir envoyer ses librairies à la team Arduino sans pouvoir faire de suivi de version (et devoir remplir un formulaire à chaque fois) font que personne n'as fait la démarche.
(le topic en question : http://forum.arduino.cc/index.php/topic,73531.0.html)

Ps: je suis en train de regarder pour la librairie PCF8574 v2. Ce sera rétro-compatible avec les codes basés sur la v1, le code crade en moins smiley-wink
Par contre il faudra toujours utiliser des résistances de tirage matériels, les résistances de tirage logiciels sont vraiment inutilisables.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Up,

Version 2.0 :
https://github.com/skywodd/pcf8574_arduino_library/

A voir si ça marche sur le long terme mais pour le moment ça semble fonctionner.
J'ai ajouté un petit code de test avec 3 leds et 1 bouton.

Attention aux fonctions set(), clear() et write(), elles ne prennent pas en compte l'état/mode des broches (je ferait peut être une petite modif là dessus, à voir).
Situation à probléme : write(255) (ou set())  avec une broche placée en INPUT dans le lot : l'état de l'input sera forcée, il y a donc risque de rater une interruption si on les utilisent.

Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Merci Skywodd, je vais tester de ce pas
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1307
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Un premier essai avec interrupt une erreur de compilation :
PCF8574.cpp: In constructor 'PCF8574::PCF8574()':
PCF8574.cpp:28: error: expected primary-expression before '{' token
PCF8574.cpp:28: error: expected primary-expression before '{' token

L'erreur semble provenir des lignes suivantes de PCF8574.cpp :
Code:
....
PCF8574::PCF8574() :
_PORT(0), _PIN(0), _DDR(0), _address(0)
#ifdef PCF8574_INTERRUPT_SUPPORT
, _oldPIN(0), _pcintPin(0), _intMode({0}), _intCallback({0}) //<<<-----
#endif
{
}
....
Si je remplace la ligne :
Code:
, _oldPIN(0), _pcintPin(0), _intMode({0}), _intCallback({0})
par :
Code:
, _oldPIN(0), _pcintPin(0), _intMode(), _intCallback()
ça compile
Comment faire pour initialiser les tableaux par cette méthode d'écriture du constructeur ?
@+

[edit1]
J'ai fait la modification suivante et la compilation de l'exemple va jusqu'à la fin (reste à tester) :
Code:
/*
PCF8574::PCF8574() :
_PORT(0), _PIN(0), _DDR(0), _address(0)
#ifdef PCF8574_INTERRUPT_SUPPORT
, _oldPIN(0), _pcintPin(0), _intMode({0}), _intCallback({0})
#endif
{
}
*/
PCF8574::PCF8574(){
  _PORT = 0;
  _PIN = 0;
  _DDR = 0;
  _address = 0;
#ifdef PCF8574_INTERRUPT_SUPPORT
  _oldPIN = 0;
  _pcintPin = 0;
  for(int i = 0; i<=7; i++){
    _intMode[i] = 0;
  }
  for(int i = 0; i<=7; i++){
    _intCallback[i] = 0;
  }
#endif
}
Mais je ne suis sur que ce soit la bonne méthode !
@+

[EDIT2]
Le programme exemple fonctionne, il ne me reste plus qu'à approfondir les tests et comprendre le fonctionnement
@+

[EDIT3]
Avec :
Code:
PCF8574::PCF8574() :
_PORT(0), _PIN(0), _DDR(0), _address(0)
#ifdef PCF8574_INTERRUPT_SUPPORT
// , _oldPIN(0), _pcintPin(0), _intMode({0}), _intCallback({0})
, _oldPIN(0), _pcintPin(0), _intMode(), _intCallback()
#endif
{
}
Le programme fonctionne également (en attendant des tests plus approfondis) mais je ne sais pas comment les variables  _intMode(), _intCallback() sont initialisées.
@+
« Last Edit: August 22, 2013, 12:07:01 am by icare » Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5405
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Un premier essai avec interrupt une erreur de compilation :
PCF8574.cpp: In constructor 'PCF8574::PCF8574()':
PCF8574.cpp:28: error: expected primary-expression before '{' token
PCF8574.cpp:28: error: expected primary-expression before '{' token

L'erreur semble provenir des lignes suivantes de PCF8574.cpp :
(...)
ça compile
Chez moi ça compile sans probléme ...
Mais j'ai une version à jour de AVR-GCC (le compilateur, actuellement je suis en version 4.7.2), c'est peut être la qu'est le probléme ...

Comment faire pour initialiser les tableaux par cette méthode d'écriture du constructeur ?
Ça dépend du standard C++ que supporte le compilateur ...

Le programme exemple fonctionne, il ne me reste plus qu'à approfondir les tests et comprendre le fonctionnement
(...)
Le programme fonctionne également (en attendant des tests plus approfondis) mais je ne sais pas comment les variables  _intMode(), _intCallback() sont initialisées.
En C++ les champs sont initialisés à 0 donc dans le cas de la librairie c'est bon smiley-wink

Je vais faire un petit update de tout ça smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1] 2 3 ... 5   Go Up
Jump to: