Téléinfo et Ethernet

Bonjour tout le monde :)

Je souhaiterai quelques infos sur une instruction qui ne passe pas à la compilation.

Avec un ami on tache de récupérer les information Teleinfo de son compteur électrique et les rendre disponible sur Ethernet, nous avons donc une carte Leonardo avec un shield Teleinfo et un shield Ethernet.

L'instruction qui ne passe pas est:

UCSR0C = B00000110

Elle est appelée deux fois dans le code, une fois pour mettre en place la communication entre le Teleinfo et l'Arduino, l'autre pour la communication entre L'arduino et le PC (à des fins de tests on aimerait lire les valeurs sur la console)

(Le fichier source vient de Mon Club Elec, auquel on ajoutera la communication Ethernet quand cela fonctionnera)

Dès la vérification l'IDE nous retourne ceci:

Arduino : 1.5.5 (Windows 7), Carte : "Arduino Leonardo"

MonClubElec.pde: In function 'void initSerieTeleinfo()':
MonClubElec:251: error: 'UCSR0C' was not declared in this scope
MonClubElec.pde: In function 'void initSerieArduino()':
MonClubElec:264: error: 'UCSR0C' was not declared in this scope

Est-ce dû a une spécificité de la carte ? Une erreur de notre part ?

Et du coup évidemment on ne voit rien sur la console puisqu'on commente cette ligne pour pouvoir passer la vérif et compiler/uploader le code dans la carte.

Ça n'est pas le plus important quelque part parce qu'on n'aura plus besoin de la console si on parvient à rendre disponible les données sur Ethernet mais c'est pour savoir s'il y a des particularités à connaitre pour cette carte alors que cela semble très bien fonctionner pour les autres qui font la même chose.

La question bonus: Est-ce qu'il est possible de faire fonctionner le shield Ethernet en même temps que le Téléinfo ? J'ai lu qu'ils utilisaient les mêmes pins pour la communication, faudra-t-il alterner aussi la config entre le relevé Téléinfo toutes les minutes et les interrogations de la box domotique sur l'Arduino toutes les minutes ou 2 minutes?

Merci !

Bonjour

Difficile de t'aider sans le code entier (ou le lien exact vers le code ?).

Toutefois, vu le message, on peut penser que la variable USCROC n'est pas accessible dans la fonction initSerieTeleinfo(). Ou, elle n'est pas déclarée de portée globale. D'ailleurs, est-ce un exemple d'écrire

UCSR0C = B00000110

Une autre piste : tu as écrit le chiffre 0 dans USCOC, essaye avec la lettre O. Essaye de cette façon :

byte UCSROC = B00000110;

Désolé pour le manque d'infos, je cherchais le lien vers le code pendant la rédaction du message et j'ai oublié de l'intégrer, le voici: http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertTeleinfoTestSimpleLectureTrame

Le 0 est pourtant ce que j'ai trouvé dans plusieurs code sources, celui ci également: http://arduino.douez.net/energymeter-logiciel/ (le lien vers le téléchargement est en bas de la page)

Le deuxième ne fonctionne pas sur notre montage non plus parce qu'il utilise un montage maison plutôt que le shield Teleinfo, cela demande une adaptation que j'ai tentée mais sans succès pour le moment (en dehors de ça il fait exactement ce qu'on souhaite)

Dans tous les cas, nous souhaitions voir les infos rélevées du compteur sur la console pour confirmer que cela fonctionne bien (et que l'option est bien activée sur le compteur de mon ami), j'ai l'impression qu'il y a un conflit entre l'Ethernet et la communication Série vers console de l'éditeur Arduino

Edit: AH ! Merci de l'info sur l'USART0! Je l'ignorais totalement Je fais tester la modification, on pourra déjà voir les trames passer c'est une très bonne nouvelle !

..: l'erreur ne tient pas à un 'O' à la place du '0' : il n'y a pas d'USART0 dans un 32u4, il n'existe que l'USART1 ! c'est donc UCSR1C qu'il faut écrire ...

Ok, désolé : je croyais que c'était une variable.

Bonsoir Je remonte ce sujet parce que nous avons fait de nouveaux essais et de nouveaux échecs

Toujours avec le code de "mon club elec" en y faisant les modifications que vous m'avez indiquées

Et un ajout trouvé dans un code fourni dans les exemples:

while(!Serial) {
;
}

Nécessaire pour la Leonardo d'après le commentaire. Sans ça, on ne reçoit effectivement rien sur la laison Série

On arrive maintenant à voir certains messages sur le port série, deux que j'ai ajoutés pour tester "Led on Led Off" (avec un clignotement de la led 13) puis le message "Attente trame téléinfo"

Ensuite on suppose qu'il boucle dans l'attente de la trame, le premier caractère STX ne semble jamais arriver alors que la LED bleue (data) du shield clignote très bien (en fait elle s'éteint à peine tellement elle clignote vite, mais c'est visible à l'œil nu) la LED compteur 1 est allumée fixe.

On se demande si c'est le comportement normal de réception des trames, ou si ça ne devrait pas clignoter moins vite et dans ce cas, pourquoi clignote t-elle aussi rapidement ? Est-ce qu'elle reçoit de la m**** ? Est-ce que le compteur fait n'importe quoi ?

Normalement on devrait au moins lire le numéro de compteur quand le teleinfo n'est pas activé sur le compteur non ? Le câble reliant le shield au compteur fait 50cm maxi (en 1.5 multibrins) et nous avons enlevé le shield Ethernet pour le test.

Nous avons essayé d'activer le compteur 2 à la place du 1, au cas où et le comportement est un peu différent. La LED bleue (data) clignote de la même façon, celle du compteur 2 est allumée fixe. Mais si on ouvre le moniteur série ou un autre programme pour afficher les communications série la LED data s'éteint immédiatement et la led du compteur 1 s'allume fixe avec celle du compteur 2 Un peu bizarre mais à la limite ça n'est pas grave si on peut faire marcher l'entrée 1, il n'y a qu'un seul compteur à mesurer

Merci !

Re

Est-ce que quelqu'un pourrait nous apporter son aide pour ce shield ? Juste pour arriver à lire les infos du compteur, ou déterminer s'il y a un problème matériel au pire.

Le shield Téléinfo étant neuf il ne devrait pas avoir de problème, et le compteur devrait au minimum retourner l'info ACD0 d'après ce que j'ai lu.

Merci

Ce shield n'est pas prévu pour fonctionner sur la Due. Il fonctionne en 5V. Les entrée de la Due n'accepte que du 3,3V. Oups mal lu

C'est une Leonardo que nous utilisons

J'ai eu peur en lisant ton message au début, le temps de me souvenir du nom de notre carte :)

Au lieu de faire un programme aussi compliqué, Dans setup: Initialiser la liaison en mode teleinfo. Désactiver compteur 2 Activer compteur 1

Dans loop: Faire une boucle d'attente tant qu'aucun caractère n'est reçu Lire le caractère reçu L'émettre sur le port série

Sur ton PC ouvrir un terminal en 1200bauds 7 bits parité paire Si tout va bien tu dois voir les caractères reçus. Si tu ne vois rien c'est que rien n'est reçu.

C'est bien ce qu'on a fait, en reprenant le code fourni par http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertTeleinfoTestSimpleLectureTrame vu que ça ne marchait pas avec tout le reste.

Malheureusement on ne reçoit effectivement rien et après avoir cherché de longues heures je viens quérir un coup de main :)

Merci

Si tu mettais ton code ce serait quand même plus simple.

C’est le même que Mon Club Elec avec juste la correction sur la communication série de la Leonardo:

Ou cette version en ayant commenté tout ce qui concerne la commmunication Ethernet:

Comme je l'ai dit plus haut, il faut faire un programme simple pour vérifier si le hardware est correct avant d'aller plus loin.

Ce n'est pas ce que fait le premier code ? Il sélectionne un seul compteur, le premier, et renvoie sur la liaison série toute la trame qu'il récupère On ne traite rien du tout de ce qu'on lit (sauf qu'on ne lit rien du tout :( )

Epy: On ne traite rien du tout de ce qu'on lit (sauf qu'on ne lit rien du tout :( )

Si tu traites des choses. Tu attends d'avoir reçu le STX pour commencer la réception, par exemple, ce qui fait que s'il y a le moindre problème tu ne trouves pas le STX et tu ne le sais pas car tu ne vois aucun caractère. Le programme le plus simple attend un caractère, n'importe lequel, et il l'envoie sur la liaison série. Comme ça tu vois tout ce qui arrive et tu peux te faire une idée du problème.

Ah, d'accord. Je pensais que si on ne recevait pas ce STX on ne lirait rien du tout d'intéressant Je vais modifier en fonction et revenir poster si je trouve ce qui se passe (ou pas)

Merci

Bonjour Après presque 2ans nous avons pu nous remettre dans ce projet qui était resté en l'état

Le code utilisé est toujours celui de MonClubElec avec pour seule modif le port de comm correspondant à la Leonardo (cf début du topic) et l'affichage du premier caractère reçu

Après une petite matinée dessus nous lisons "des choses" sur le port série mais que des caractères illisibles

Ce qui me surprend c'est la vitesse de transmission de ces caractères, la LED bleue du shield comme les caractères arrivant sur le terminal défilent à grande vitesse (la LED scintille au lieu de clignoter tellement c'est rapide) J'ai lu ici que cette LED bleue devait clignoter toutes les 5s et non aussi rapidement.

Je peux me tromper, mais je suppose vu le clignotement que le problème se situe entre le compteur et le shield et non entre le shield, l'arduino et le PC J'ai déconnecté puis reconnecté les bornes (I1 et I2) avec des fils courts (30cm environ) et ai vérifié qu'ils ne se touchaient pas

Quelqu'un aurait un retour d'expérience là dessus ?

Merci

Hello Quelqu'un aurait-il un montage fonctionnel avec un shield Téléinfo pour comparer le clignotement de la led ? merci

hello

•Une fois le programme lancé, toutes les 5 secondes la LED verte s'allume et la led bleue clignote ce qui indique que des données sont reçues. •Puis la trame est affichée dans le Terminal série.

a mon avis: la led verte s'allume en fixe pendant 1 instant signalant que le compteur 1 est en cours de traitement. la led bleue, elle, clignote rapidement ( à la vitesse des bits transmis ).

je pense que le fonctionnement est correct.

des caractères illisibles

ton moniteur est bien en 115200 bauds ?

nota: un extrait du mode d'emploi:

Une fois ce paramétrage terminé vous pouvez mettre en place le cavalier. Après initialisation de la carte Arduino la led verte doit s'allumer et en même temps la led bleue, cette dernière indique la présence d'un signal de téléinfo. Après un certain temps, dépendant de votre type d'abonnement, la led verte doit s'éteindre et la led orange doit s'allumer, elle aussi accompagnée de la led bleue (si le compteur 2 n'est pas branché la led bleu ne s'allumera pas, et le programme basculera sur le compteur 1 et il ne tentera plus de lire le compteur 2) Le

Merci :) Bon, si ça te semble correct, tant mieux

Le terminal est bien a 115 200, ce que je me demande maintenant c'est est-ce que j'ai bien mis le réglage qu'il faut pour le nombre de bits de stops et la parité. J'ai utilisé un terminal Linux, je n'étais pas sûr que le terminal de l'IDE Arduino aie les bons réglages il ne propose que la vitesse. Il ne devrait pas y avoir de problème d'encodage en Série n'est-ce pas (OS en UTF-8) ?

Il va falloir que je retente avec plusieurs réglages alors (malheureusement le seul compteur sur lequel je puisse tester est à 1h30 de route donc ça ne sera pas immédiat)

J'ai bien enlevé le cavalier pour l'upload sur la carte et l'ai remis ensuite.

Normalement le code de "MonClubElec" désactive bien le 2e compteur, la led ne doit pas du tout s'allumer (et c'est ce qu'elle fait)

Merci pour les infos