Go Down

Topic: Problème récupération téléinfo (Read 3 times) previous topic - next topic

pezioz

Bonjour,

Je suis un petit bricoleur dans l'âme, et depuis quelques temps j'étais tenté par découvrir l'Arduino. Et je me suis donc dis autant faire un module qui me serait utile... ce module est la récupération de mes données de consommations électriques via Arduino.

Voila qui pose les bases :)

Nous en arrivons maintenant au coeur du problème: la trame récupérée est illisible.

Voila le code :
Code: [Select]
#include <SoftwareSerial.h>

SoftwareSerial cptSerial(2,3);

void setup() {
cptSerial.begin(1200);
  Serial.begin(1200);

  Serial.println("Go!!!!");
}
void loop()
{
  Serial.write((byte) cptSerial.read() & 0x7F);
}


Alors j'ai essayé avec et sans optocoupleur (avec une résistance de 330ohm entre la sortie tic et l'optocoupleur) et j'ai même essayé sur un autre ordinateur (le mien étant sous Linux avec Arduino 1.0.1 et l'autre sous windows avec Arduino 1.0.2). Une autre chose bizarre est qu'avec les 2 ordinateurs, je n'ai pas le même résultats (les caractères affiché ne sont pas les mêmes).

J'avoue que la je ne vois pas d'où ça vient.... donc si vous avez des idées ce serait avec grand plaisir que je les écouterai (enfin lirai) :)

Pezioz

barbudor

Bonjour

Un peu plus de détails sur le schéma que tu utilises serait le bien venu.
As tu un moyen de vérifier à l'oscilloscope ?
As tu bien mis aussi le terminal série d'Arduino à 1200 baud puisque c'est ce que tu règles dans ton sketch.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

skywodd

Bonjour,

Est tu sûr de bien avoir configuré ton terminal série à 1200 bauds (8bits, 1 bit de stop, pas de parité) ?

Autre chose :
Code: [Select]
Serial.write((byte) cptSerial.read() & 0x7F);
Avant de lire un octet il faut être sûr qu'il y a quelque chose à lire ;)

Code: [Select]
while(cptSerial.available() < 1); // Bloque le programme en attendant un octet
Serial.write((byte) cptSerial.read() & 0x7F);
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

pezioz

Bonjour,

@barbudor: Alors non je n'ai pas les moyens de voir mon signal sur un oscilloscope. :( Et en ce qui concerne le terminal série, oui je l'ai bien réglé en 1200 bauds.

@skywodd: J'ai essayé avec cptSerial.available() < 1, mais ça me donne le même résultat.

Le schema de mon installation est attaché à mon post.

Donc comme vous pouvez le voir, par rapport à ce que j'avais dit, j'ai rajouter une résistance de tirage entre l'optocoupleur et a carte arduino.

C'est à devenir dingue, je n'arrive pas à récupérer ne trame cohérente.

Je vous remercie de votre aide.... j'ai peur de devenir chauve à force de m'arracher les cheveu ;)

al1fch

#4
Dec 10, 2012, 10:33 am Last Edit: Dec 10, 2012, 10:51 am by al1fch Reason: 1
Bonjour
-sur le schéma la sortie de l'optocoupleur est inversée, il faut mettre l'émetteur du transistor à la masse (simple erreur de schéma ou aussi erreur de câblage ?)
-les leds d'optocoupleurs supportent mal les tensions inverses, mieux vaux mettre une diode en parallèle et en inverse.
-quel est le modele d'optocoupleur utilisé ?

Je découvre le signal 'téléinfo' et je ne comprend pas ou et comment serait effectuée dans ton cas la démodulation du signal.
A moins qu'il existe plusieurs variantes de 'téléinfo' et que le signal ne soit pas toujours du type décrit içi :
http://www.planete-domotique.com/blog/2010/03/30/la-teleinformation-edf/
Sur ces schémas  le signal téléinfo est alternatif et modulé (présence/absence de 50kHz). Un optocoupleur rapide est utilisé suivi d'une mise en forme et d'une démodulation par monostable. Il est peut etre possible de faire plus simple, juste avec un optocopleur 'lent,' mais ça demande sans doute un certain tâtonnement pour trouver la bonne résistance de pull-up....

fdufnews

#5
Dec 10, 2012, 10:51 am Last Edit: Dec 10, 2012, 10:53 am by fdufnews Reason: 1
L'information de téléinfo module une porteuse à 50kHz. Ton montage fonctionne correctement si l'optocoupleur est lent, sinon l'arduino reçoit des impulsions supplémentaires et il perd les pédales.
Un montage plus élaboré là : http://www.planete-domotique.com/blog/2010/03/30/la-teleinformation-edf/

Accessoirement, il faut aussi que la sortie de l'information téléinfo soit activée sur ton compteur. Sinon tu ne récupères que l'identifiant du compteur si mes souvenirs sont bons.

bluemax2001


pezioz

Rebonjour,

@fdufnews: Oui ma sortie téléinfo est activée sur mon compteur. L'optocoupleur utilisé est ls PC817 (datasheet : http://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDwQFjAB&url=http%3A%2F%2Fwww.datasheetcatalog.org%2Fdatasheet%2FSharp%2FmXruvuu.pdf&ei=Z9fFULfXCK6P4gTMp4GgBQ&usg=AFQjCNGsD85IT74dLn8jahRAXGyqR7IqTg)

@al1fch: Pour le sens de branchement de l'optocoupleur je pourrais te le dire ce soir. Le modèle d'optocoupleur est celui que j'ai cité juste au dessus. Et pour le diode inverse je savais pas. En attendant que j'en commande un je peux continuer sans?

Merci beaucoup de votre aide ... ca fais du bien de se sentir moins seul :)

Je vous tiens au jus ce soir!


al1fch

Quote
@al1fch: Pour le sens de branchement de l'optocoupleur je pourrais te le dire ce soir. Le modèle d'optocoupleur est celui que j'ai cité juste au dessus. Et pour le diode inverse je savais pas. En attendant que j'en commande un je peux continuer sans?

Si l'amplitude du signal teleinfo ne dépasse pas 5V (?) l'optocoupleur choisi peut tenir 'un cetain temps' puisqu'il supporte 6V en inverse......
Tu n'as pas une petite diode, voire une petite led à mettre en parallèle avec l'entrée de l'optocoupleur ?

pezioz

Bonjour à tous,

Alors je reviens vers vous pour vous epliquer ce que j'ai fais hier soir.

Comme me l'a suggéré skywodd j'ai un peu modifié mon code pour prendre en compte les octets uniquement lorsque ceux ci sont disponible (c'est vrai ca sonne mieux avec available ;) ):

Code: [Select]
while(cptSerial.available() < 1); // Bloque le programme en attendant un octet
Serial.write((byte) cptSerial.read() & 0x7F);


Et j'ai modifié mon schema elec en rajoutant une diode inverse en entrée de l'optocoupleur comme l'a suggéré al1fch. J'ai aussi bien verifié le branchement de l'optocoupleur en sortie.

Alors avec tout ça que se passe-t-il? => Rien :( ... je ne récupère aucun octets.
Ensuite j'ai essayé de modifier le UCSROC mais le problème est que je ne sais pas trop ce que je fais.

De plus je suis sur que ma teleinfo fonctionne, car avant j'avais un capteur commercial et il me récupérait bien ma teleinfo. Donc c'est forcement un problème soft ou hard. Pour le soft je me dis quand même que le programme est pas bien compliqué, et que ce même code fonctionne chez d'autres personnes (vu sur internet). Et le hard j'ai fais toutes les modifs que vous m'avez preconisées.

Aidez moi svp, là je sèche vraiment!

En ésperant qu'une idée de génie me traversera l'esprit aujourd'hui (laissez moi un peu révé ;) ).

Bonne journée à vous en tout cas et encore merci de l'aide que vous m'apportez :)

Pezioz

bluemax2001

Si tu as vu mon lien, au dessus, je n'ai pas réussi à avoir le signal depuis un UNO et l'optocoupleur + R par contre il fonctionne très bien avec mon 2560. Je ne sais pas pourquoi ...


al1fch

#11
Dec 11, 2012, 01:05 pm Last Edit: Dec 11, 2012, 01:41 pm by al1fch Reason: 1
L'émetteur de l'opto coupleur est donc bien à la masse sur le montage réel ?

Aucun octet récupéré ? pas d'oscilloscope disponible ?

Tenter dans un premier temps d'augmenter par palier la résistance de tirage entre Vcc et le collecteur de l'optocoupleur :
10k -> 22k -> 47k ->100K  Si ça ne donne rien réduire  cette résistance  10k -> 4,7k -> 2,2k -> 1k

Un montage ultra simplifié comme celui là  (un opto + deux résistances) est très tributaire des caractéristiques individuelles du composant utilisé. Les opto-coupleurs ont en général de fortes dispersions dur certains de leurs parametres (ratio courant sortie/courant entrée, bande passante...). On compte içi sur l'optocoupleur et sa lenteur relative pour démoduler grossièrement le signal.... c'est une utilisation un peu marginale de ce composant et il n'est pas surprenant que ça demande un peu d'adaptation

barbudor

Tu peux une petite mise a jour de ton schéma ?
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Artouste


...
Tenter dans un premier temps d'augmenter par palier la résistance de tirage entre Vcc et le collecteur de l'optocoupleur :
10k -> 22k -> 47k ->100K  Si ça ne donne rien réduire  cette résistance  10k -> 4,7k -> 2,2k -> 1k


Bonjour al1fch
Bonne suggestion , et si dispo pour test plus simple sur "paillasse" utiliser un potentiomètre (100K ou 220K* ) câblé en résistance variable
et voir si "ça fini par tomber en marche" et que donc "ça cause dans le poste", si c'est le cas ensuite cerner les limites basses/hautes de R et "taper" sur une valeur fixe de R
"standard" au plus proche de la moyenne.
Perso si dispo je prendrais un 100 ou 220K en courbe log  8)

al1fch

Bonjour Artouste
potentiometre OK mais pas sans résistance de  'butée' 1K en série  :smiley-mr-green:

Go Up