SoftSerial VS Serial

Bonjour à tous,

je suis actuellement bloqué sur une chose idiote, mais qui ne me permet pas d'avancer.
Comment lire les données série qui arrive deuil un produit extérieur (pas depuis le terminal) sur RX0 (d'un arduino UNO).

J'ai bien essayé avec SoftSerial est cela marche nickel, quand je bascule sur la liaison série hardware, fini !!

Je ne comprends pas d'où cela peut venir, ou du moins j'ai peur de ne pas pouvoir me servir de RX0 ET de l'USB en même temps…

Si une âme charitable parse par là pour m'apporter un peu d'aide.

Je vous remercie.

Cordialement, David.

AByGCreation:
Bonjour à tous,

je suis actuellement bloqué sur une chose idiote, mais qui ne me permet pas d'avancer.
Comment lire les données série qui arrive deuil un produit extérieur (pas depuis le terminal) sur RX0 (d'un arduino UNO).

J'ai bien essayé avec SoftSerial est cela marche nickel, quand je bascule sur la liaison série hardware, fini !!

...

Bonsoir
ton probleme est un peu mal exposé
explique mieux ce que tu veux
J'ai comme l'impression que tu veux seulement utiliser le UNO comme passerelle Serie TTL/USB sans aucun autre traitement ?
si c'est le cas tu charge l'exemple blink (pour etre sur que le serial hard ne soit pas sollicité par le 328) et tu connecte ton dispo ttl sur les pins 0 et 1 de ta carte UNO
NB = attention dans ce mode les notations TX/RX sont inversées , il faut raisonner 8 ou 16U 8)

a moins que tu ne te soit juste planté entre tx et rx.
la 1ere question: c'est quoi ton équipement série?

par liaison série, on entend rien et tout, mais surtout une grosse confusion, généralement sur ce qui ce passe niveau hard et ce qu'on fait passer niveau soft.

la liaison série dont tu parle, quel est son standard?

disons par hasard, que c'est une balance, un lecteur RFID, un scanner, une imprimante, ou tout autre equipement qui se connecte a la prise serie SUBD9 qu'on avait anciennement sur les PC, qui maintenant n'existe plus que par un adaptateur USB/SERIE.

ce n'est pas en connectant les broches d'emission/reception (2, 3, et gnd=5) de ces genres d'equipement que tu arriverra a communiquer avec les broches tx/rx de ton UNO.
au pire, tu pourrai meme griller tes pinoches arduino (bon apriori pas pour cette fois, vu que le port USB du UNO fonctionne encore).
electriquement parlant, le standard RS232-PC est en +/-9V, alors que le UNO est en 0-5V.

d'autre part, logicielement parlant, le UNO ouvre le port Serial par defaut en 8/N/1, tu peut regler le debit (9600, 19200, ...) par l'ide, mais pour ce qui est du 8/N/1, faudra jouer avec les registres.

connais tu la config de ton equipement?

ensuite, il y a le protocol. si ce n'est pas un protocol ASCII, peu de chance que tu comprenne quelque chose dans un terminal serie.

si tu ne connais pas ces elements, va falloir s'accrocher ...
si tu ne vois pas de quoi je parle, va falloir s'accrocher aussi, et je te conseillerai alors de lire quelque tutos dabord.

j'suis sur que skywodd en a un de pret sous le coude.

Bonsoir,

Tout à fait d'accord avec ce qui a été dit.

Dans une transmission Rx/Tx asynchrone il y a 2 possibilités du point de vue électrique.

  1. RS232 (norme V28 en français)
  2. ou TTL

De plus, pour obtenir une compatibilité entre 2 organes, il faut voir le débit en bits /sec.
Certains parlent de rapidité de modulation en bauds mais je ne trouve pas cela normal.
Et, les caractères transmis peuvent respecter différents formats.
Nombre de bits : 5, 6, 7 ou 8 bits ?
Avec ou sans bit de parité ? fixe, paire ou impaire ?
Nombre de bits de stop ? Je ne parle pas du start.

En TTL, le coup le plus "vache" c'est quand le signal est inverse d'un TTL normal (les 0 sont des 1 et inversement)

Géryko

Bonjour a tous

A lire le 1er post, j'ai plutôt compris : Comment faire pour utiliser RX avec le matériel série et TX avec la connexion au PC.

En théorie, ça doit fonctionner mais en pratique, il ne faut pas oublier que RX est aussi "connecté" a la liaison USB, d'où conflit en réception. Il y a, si je ne me trompe pas, une résistance entre RX et la liaison USB qui devrait pouvoir faire passer quand même des données d'une autre liaison série, mais pour avoir testé avec du bluetooth, ça ne fonctionne pas.

Sur un Stand Alone, il ne devrait pas y avoir de problème.

A+

Bonjour,

Comment lire les données série qui arrivent d'un produit extérieur (pas depuis le terminal) sur RX0 (d'un arduino UNO).

Dis nous quel est ce produit extérieur et sur quelles bornes tu veux le raccorder sur ta carte Arduino.
Les bornes 0 et 1 ? Les bornes 2 et 3 ? en plus du Gnd.
Est-il est équipé d'une prise série (RS232) ?

Géryko

Bonjour à tous,

Merci de vos réponses rapides !!! c'est un plaisir de se savoir écouté.
Je m'aperçois que je me suis laissé guider par mon impatience pour rédiger ma question, car ça n'est pas clair.

Donc pour vous expliquer plus en détail mon problème :

Je voudrais lire et remonter la téléinfo (classique comme projet) de mon compteur EDF --> 1200bds 7E1, avec un émetteur 433MHz.

Donc premier point lire la sortie téléinfo (via un montage optocoupleur, pull-up et compagnie…), avec la librairie SoftSerial (la dernière version) sur les pins 10-11 --> cela fonctionne je récupère bien les trames et je peux les lire dans le terminal.

Deuxième point envoi de données par RF avec la librairie VirtualWire, essai avec les sketches de base, ma communication sans fil fonctionne je reçoi bien le "hello" de base.

Troisième point faire communiquer les deux, je me suis dit que ce serait super simple….. Hélas les deux librairies utilisent le Timer1 pour fonctionner et entrent en conflit.

J'ai donc essayé de modifier la librairie VirtualWire pour la faire tourné sur le timer2 --> échec !!

Enfin il me restait la solution de lire cette satanée trame par la liaison série Hardware (Pin 0 pour RX) et je serais tranquille pour envoyer mes datas par VirtualWire. Mais cela ne fonctionne pas, j’ai bien essayé de faire bagoter une led derrière un Serial.read(), mais rien...

Voilà deux semaines que je tourne le code dans tous les sens et que rien ne sort de cette fichue liaison.

J'espère avoir étais plus clair.

En tous cas merci de vos réactions et de vos réponses, je ne pensais pas que ce serait aussi rapide.

Cordialement, David.

Bonjour,

C'est beaucoup plus clair.
Encore un petit point qui m'échappe.

Dans le premier point : ça fonctionne sur les pins 10-11 port série pour recevoir et émettre.

En situation extrême (disons point 4) tu utilises Pin 0 pour RX (ou sur pin 1 ? )
Je ne comprends pas ? Ce devrait être la même chose qu'au 1er point ?

Nota :
En situation finale, il serait vraiment dommage d'utiliser la RF pour émettre et le port série pour recevoir.

Géryko

Dans mon dernier essai j'utilise la pin 0 pour recevoir et 1 pour émettre dans le terminal.

Je suis tout à fait d'accord avec toi qu'en déplaçant les pins de 10-11 en 0-1 (c'est à dire en changeant une liaison série logiciel par une liaison matérielle) ce devrait être la même chose, c'est bien pour cela que, désemparé, je me tourne vers la communauté, car je ne comprends pas pourquoi je ne reçois plus rien.

À moins d'une incompatibilité formelle à utilisé la liaison matérielle de l'arduino à cause du FTDI câblée dessus, mais ça réduit l'intérêt je trouve.

Pour ton nota, je n'ai pas compris pourquoi tu me dis de ne pas qu'il est dommage d'utiliser la liaison RF pour émettre. Mon compteur étant "loin" cela m'évite de tirer un câble dans la maison. La réception série est pour le moment utile à des fins de débug.

re
j'ai voulu dire 2 systèmes différents pour établir une seule liaison Tx / RX

@pepe :

donc normalement, si je vire la 1K sur le RX (après avoir programmé), je ne devrais plus être embêté par ma liaison USB (je vais essayer de faire ça propre avec un cavalier de prog).

@geryko :

c'est la seule solution que j'ai trouvé pour m'éviter de tirer du fil, on reçoit la téléinfo par UART et je rebalance (après nettoyage de ce qui m'intéresse) en RF. Peut être que "Linky" nous permettra de nous connecter directement à lui en Bluetooth ou que sais-je… 2015 apparemment (cf : Linky sera déployé à partir de 2015, avec des objectifs revus à la baisse)

@pepe

… merci il me reste à modifier mon interface, faut que je trouve un peu de temps… (le développement avec un enfant en bas âge, 10mois, ce n’est pas toujours facile, je fais les modifs et je vous tiens au courant.

Merci encore.

AByGCreation:
... on reçoit la téléinfo par UART et je rebalance (après nettoyage de ce qui m'intéresse) en RF

Bonjour
Je dois etre un peu à l'ouest aujourd'hui :grin: , mais je n'ai toujours pas bien compris ce que tu souhaite faire ?
un petit crobard simple ?

là j'en suis à : en fait tu veux splitter ce qui rentre vers l'arduino en serial Hard vers une liaison serial/usb (destinée à un serial monitor sur PC) , l'arduino faisant sa tambouille serial hard/serial soft au passage ,

@Artouste

Petit crobard qui va bien (vite fait sous fritzing…).

Je reçois le signal issu du compteur EDF, par le biais de l'opto je peux lire les données si je suis en SoftwareSerial, mais dans la configuration où je me mets sur RX (D0), impossible d'obtenir ces datas.

L'idée après c'est de relancer en HF ces données en épurant ce qui ne m'intéresse pas.

Untitled Sketch_schéma.pdf (530 KB)

Je ne comprend pas bien le schéma, il en manque une partie coté polarisation de la DEL (LED).
Par quoi est alimenté la DEL du TLP621 ?
La 1N4001 ok c'est pour court-circuiter des tensions inverses, la DEL ne supportant que 5V en inverse.
Mais quel courant traverse la DEL ? Et quel est la nature de ce courant : alternatif ou continu ?

Dans ce qui suit je suppose :

  • que le courant est continu.
  • que tu as entre les mains la datasheet du TLP621. --> impossible de travailer sans

OK pour la remarque de pepe : 22 mA dans le photo-transistor c'est parfaitement inutile.
Cette valeur c'est toi qui l'a choisi, ou tu la trouvée sur un schéma tout fait ?

Le problème que j'entrevois, comme pepe je crois avoir compris, c'est que la DEL ne reçoit pas assez de courant pour injecter assez de photons dans la base du photo-transistor pour réussir à le saturer.
La pin RX du micro présente une impédance d'entrée de l'ordre du Megohms (1 million d'ohms), tu peux sans risque augmenter la résistance de charge du photo-transistor et la passer de 220 ohms à 1k voire 10 k.

Avec 10 k il passera un courant de 0,5 mA dans le transistor de sortie.
Il faut maintenant connaître le rapport de conversion (Current Transfer Ratio) --> voir datasheet
Or pour la référence que tu donnes il peut être de 50% ou de 150% selon le sous modèle.
Pour le savoir il faut la référence complète du CI : il y a d'autre lettres après TLP621.
Maintenant tu a toutes les informations pour calculer le courant minimal qui doit circuler dans la DEL

Et si tu n'as pas la possibilité de changer le courant dans la DEL, eh bien tu fais le calcul inverse et tu détermine la valeur maximale admissible de la résistance de charge du photo-transistor pour qu'il soit saturé.

Bonsoir,

Je suis comme 68tjs, je n'arrive pas à comprendre le schéma global.
J'aimerais bien comprendre aussi, ça m'interesse. (profiter de cette bonne expérience)

Le module RF transmet au compteur.
Le récepteur RF est situé à proximité du compteur je pense. (via un câble raccordé au compteur ?)

En réception le signal vient du compteur ? (via un câble raccordé au compteur ?)
Donc tu utilises 2 supports différents pour communiquer avec ton compteur ?
Désolé, je suis peut-être dur de la feuille ?

C'est ce que je disais dans un précédent message.

Bien à vous tous
Géryko

en plus des remarques hardware, j'ai encore un doute.
7E1, tu l'as obtenu comment?
tu dis que ca marche, sauf sur pin0-Rx.
j'ai beau relire, j'ai toujours pas compris dans quel cas ca marche, ni qu'est ce qui marche.
et le code avec, svp. celui qui marche.
(on suppose que celui qui ne marche pas est juste un changement N° de pin?)

non, coté arduino, comment il a geré le 7E1?

Une erreur à ce niveau provoquerait donc la réception erronée de la moitié des caractères, et non pas une absence de réception.

a condition que statistiquement la parité soit exacte a 50%.
je voulais verifier ca dans son code.

la lecture du code ne risque pas de m'inspirer, la liaison serie, j'en implémente depuis environ 30 ans ,toute interface matériel confondue (dans le genre exotique : une liaison morse-CB en asm Z80 sur un amstrad-CPC).
je ne suis certainement pas un dieu en la matiere, mais des surprises du genre que 100% des datas ne soient pas visible et/ou correct pour cause de parité, j'en ai deja eu.
bien que le probleme soit certainement plus hard que soft, tu l'as suffisament soulevé avec 68tjs et c'est un point a régler, on n'a aucune infos sur le genre de trames échangées.
la lecture du code peut soulever un probleme auquel personne ne pense actuelement, et pas plus moi que quiconque.
c'est un point qu'il convient de s'assurer, meme s'il n'y a aucun probleme dans le code.