Je suis en train de développer une petite télécommande qui s'appuie d'une part sur un arduino nano et d'autre part sur un display 4D system 128.
Les commandes seront émises depuis le display. L'arduino interprétera et exécutera les commandes.
Avant de relier les deux systèmes par deux fils Rx et Tx, j'ai fait des essais de chaque système, indépendamment, via un moniteur série. Chaque système répond correctement, comme souhaité.
Là où je bloque, c'est lorsque je fais mes essais " grandeur réelle", avec chaque système raccordé via deux fils Rx et Tx.
La communication ne s'établit pas.
En creusant un peu, je m'aperçois que le protocole coté Arduino ne perçoit pas (via la fonction available) les caractères envoyés par le display.
Je ne sais plus par quel bout prendre l'affaire.
est-ce que quelqu'un a déjà eu ce problème ?
quel moyen de débogage je pourrais mettre en place pour avancer ?
Quel modèle Arduino ?
Un petit schéma de principe sur les connexions entre modules pourrait peut être nous éclairer.
(même un gribouillu papier photographié avec une webcam ou un téléphone c'est mieux que rien ;))
Une erreur simple, que beaucoup de "nouveaux" font: il faut relier le Rx Arduino avec le Tx 4D, et le Tx Arduino avec le Rx 4D. Et non pas les Rx ensembles, Tx ensembles.
N'oublie pas que l'ATmega328 n'a qu'une seule liaison série.
Donc si tu essaye de t'en servir à la fois pour communiquer avec le PC et l'écran en même temps, tu risque d'avoir des problèmes de conflit électriques d'une part et logiciel d'autre part.
La ProMini328 n'ayant pas d'interface USB intégrée comment fais-tu tout cela ?
Le PC est-il relié ?
Comment débogues tu ?
Effectivement. Pour tester mon montage, je déconnecte le FTDI que j'utilise pour téléverser mon programme de l'arduino. Le PC n'est donc pas relié pendant mes essais, et du coup, le débogage est super-galère.
Naïvement, je pensais qu'en testant unitairement chaque module via un moniteur série, ça marcherait tout seul lorsque je brancherait 8)
Donc, pour creuser, je mets "des petits indicateurs lumineux" dans le protocole. Notamment, je voulais savoir si après avoir émis un caractère, la condition "if ( prot_pStream->available() )" de prot_loop était valide. Ce qui n'est pas le cas. Maintenant, je n'arrive pas à savoir si le problème est logiciel ou "électrique" (au sens transmission des signaux).
Pour le debug, j'ai aussi une Duemilanove, il y aurait peut-être un truc à faire avec ???
Programme modifié pour debug (une LED a été ajouté sur TEST_PIN)
void prot_loop()
{
// variable pour recevoir le prochain caractère reçu
char c;
// indicateur pour boucler dans la fonction tant qu'il y a des caractères dispo
// Par defaut : true : on boucle ici jusqu'à épuisement des caractères
// false dans certains état de l'automate : RECEIVED car comme on ne consomme
// pas les caractères, on resterait bloqué
bool loop_on_available = true;
if ( prot_pStream->available() )
{
digitalWrite(TEST_PIN, HIGH);
delay(200);
digitalWrite(TEST_PIN, LOW);
while ( loop_on_available && prot_pStream->available() )
...
Je viens de transférer mon programme sur la Duemilanove et ça fonctionne nickel. Avec le même raccordement entre le Display et l'Arduino, enfin tout pareil.
Est-ce que quelqu'un aurait une explication ? Y a t-il une différence de gestion du port série ?
alpaph:
Est-ce que quelqu'un aurait une explication ? Y a t-il une différence de gestion du port série ?
Au niveau de la gestion non, mais au niveau du câblage il me semble qu'il y a une astuce à base de résistances pour faire cohabiter le chipset FTDI avec la "liaison série utilisateur" sur D0/D1.
Si tu débranche ton câble FTDI de l'arduino ProMini cela reviens au même, tu doit avoir un problème autre pars (câblage, fréquence F_CPU, config port série, ...).
Peut-être un problème de masse : sa connexion entre l'arduino et le display n'est pas directe. Dans la théorie c'est bon puisque indirectement, par le biais des régulateurs, elles sont reliées. En pratique il y a peut-être une perturbation.
B@tto:
Peut-être un problème de masse : sa connexion entre l'arduino et le display n'est pas directe. Dans la théorie c'est bon puisque indirectement, par le biais des régulateurs, elles sont reliées. En pratique il y a peut-être une perturbation.
Une masse reste une masse, qu'elles soit connectées au niveau du régulateur ou directement ça revient au même ...
Ça serait différent si il y avait une masse virtuelle, mais ce n'est pas le cas sur les cartes arduino ...