Tension ne fait pas 0-5V mais 2,5-5V (environ)

Bonjour,

Je suis en train de domotiser mon poêle à granulé Ravelli, qui peut communiquer via son câble vers la télécommande (plus d’info sur le forum arduino).
Donc, en me basant sur le travail de Pebeo_78 ici Controle d'un poèle à pellet Interstove par Jeedom, j’ai commancé à vouloir envoyer/recevoir des trames au poêle via Realterm, en utilisant le circuit proposé dans son topic avec un Wemos mini D1 et un levelshifter pour recevoir en 3,3V sur les broches Rx/Tx

Seulement, je ne recevais jamais de retour aux trames envoyées.
J’ai donc branché un oscilloscope pour regarder ce qu’il se passait, et là surprise, la réponse du poêle n’est pas en 0-5V mais en 2,5-5V. Voici ce qu’il se passe à l’entrée de mon électronique :


(attention, j’avais oublié de changer le ratio de la tension, il faut multiplier par 10 pour avoir la bonne valeur de tension)

Du coup à l’entrée du Wemos (après le levelshifter) :


Le signal est coupé et n’est plus lisible pour en extraire des données.

Du coup, n’étant pas super calé en électronique, j’ai besoin de votre aide.

Est-ce que quelqu’un aurait une idée pour transformer ce signal en 0-5V ? Avant de passer à la prochaine étape.

Bonsoir,
la solution est de voir voir les portes à trigger de Schmitt genre 4584.
https://www.electronique-et-informatique.fr/Digit/Digit_6TS1.php#Trigger

Bonjour,
Débranche le tx du contrôleur du poêle vers le circuit level shifter et regarde avec l’oscillo le signal que tu obtiens sur le Tx du contrôleur en retour d’une commande.
Il est possible que l’étage de sortie du contrôleur ne soit pas directement compatible avec le circuit level shifter. Dans ce cas il faudra probablement ajouter une résistance pull up ou pull down.
J’ai une question concernant le graphe de l’oscillo en bleu. Je ne comprends pas pourquoi la première partie du signal semble correcte ?
Cdt

Sur le poêle, il n’y a qu’un fil faisant le Tx et Rx (transmission série asynchrone bi-directionnelle).
La première partie de l’oscilloscope bleu, c’est ce qui est envoyé par le Wemos via Realterm, la seconde partie est la réponse du poêle.

Aussi, avant de brancher le Wemos, j’ai fait une autre mesure en branchant le poêle à la télécommande et en mettant en parallèle le level shifter et en bouclant Tx sur Rx juste après (au lieux de les brancher sur les pins correspondantes de l’esp8266), et ça donnait ceci :


On peut voir que la réponse du poêle (2ème partie) est bonne.

Aussi, s’agissant de la même demande depuis la télécommande que depuis Realterm on voie que la réponse du poêle est la même (au niveau de tension prêt). Donc l’envoie du signal vers le poêle fonctionne.

1 « J'aime »

Bonjour,

ok je comprends. Il s’agit d’une communication serie TTL half-duplex.
Je ne sais pas comment tu as branché le RX et TX du level shifter sur la borne RX/TX du controleur, mais on ne peut pas connecter directement le RX/TX du contrôleur sur le TX du level shifter car il s’agit de deux sortie et il y a un conflit, ce qui provoque le niveau de 2.5V que tu observes.

Pour résoudre ce problème, il va falloir insérer un montage comme ceci:
image

En ce qui concerne le transistor, tu peux prendre un BC109 en boitier TO92 par exemple. Pour la diode, tu peux utiliser une 1N4148.

Afin de simplifier le montage, tu peux essayer de supprimer le level shifter.

Cdt

Salut Pebeo,

En faisant ainsi, tu penses qu’il est possible de ne plus avoir besoin du level shifter alors que le poêle est avec des signaux en 0-5V, et le Wemos a des signaux 0-3,3V sur ces Tx/Rx ?
Ou plus probablement en faisant ainsi, ça sépare/assemble proprement les deux signaux avant de passer chacun dans un canal du level shifter ? Et donc sans avoir des tensions divisée par deux, comme vu au dessus.

Bonjour,
essaie sans level shifter, je pense que ça passe.

Je t’ai répondu un peu vite hier, je complète ma réponse. Si tu regardes l’oscillograme que tu as relevé sur le montage, le niveau haut est à 4V. Si tu retires la chute de tension dans la diode de 0,6V on obtient 3,4V, pour 3,3V.c’est parfait. Dans l’autre sens, il n’y a pas de risque.
Cdt

Bonjour @Pebeo_78,
Merci pour la réponse plus détaillée qui m’a bien aidée, et le circuit.

Je viens de faire différents essais, et oici ce qu’il en ressort :

1. Avec électronique proposé :


Sachant, que la voie A est le signal d’entrée/sortie du poêle
la voie B est le signal à l’entrée du Rx du Wemos
la voie C est le signal à la sortie du Tx du Wemos

2. En ajoutant une double porte NAND dont la tension d'alimentation de cette porte est en 3,3V (fourni par le Wemos) :


Sachant que la B est le signal en entrée de la double NAND
la voie D est le signal en sortie de la double NAND
Sur la voie D, le signal varie entre 3,5V et 2,6V. Je trouve bizarre que ça ne redescende pas à 0V. J’aurai peut-être du mettre une NAND suivi d’un transistor.

3. Même principe, mais avec une alimentation de cette porte NAND en 5V :


Sur la voie D, le signal varie entre 4,5V et 1,2V. Je trouve bizarre que ça ne redescende pas à 0V.

Il en ressort :
Avec le n°1, realterm ne voie pas la réponse du poêle. Ce qui ne m’étonne pas du tout.
Avec le n°2, realterm ne voie pas la réponse du poêle. Je ne sais pas pourquoi, mais est-ce que ça signifie forcément que le plugin script ne sera pas capable de recevoir les données ? Il faudra que je fasse le test.
Avec le n°3, realterm voie bien la réponse du poêle, et correspond à ce que je m’attendais.

Du coup, l’électronique à l’air de bien fonctionner ainsi. Il faut que je fasse un peu la partie codage maintenant pour vérifier tout ceci.
Par contre, je voie que les trames type que j’utilisais pour la demande d’état du poêle doit être « 0x21 0x00 0x10 0x07 0x04 », mais pour que ça marche je dois envoyer « 0x21 0x00 0x10 0x07 0x04 0x38 0x95 ». Je pense donc qu’il y a des bits de parité à la fin du message.
Est-ce que vous sauriez m’indiquer comment calculer les bits de parité à mettre ? Ou une méthode à utiliser. J’ai récupéré différentes trames (en espionnant les discussions entre le poêle et la télécommande), donc je peux vérifier si ça fonctionne.

Bonjour,

peux tu partager quelques trames supplémentaires ? Sur une seule trame c’est difficile de conclure.

Cdt

Voici quelques exemples de trames, sachant que ce sont tout le temps les 2 derniers octets qui sont supplémentaires (octets de parité / de contrôle d’erreurs / …). Le 3ème octet en partant de la fin (pour ces premiers exemples du moins) correspondent à la valeur consigne envoyé.
J’ai mis sur la 1ère ligne la demande de la télécommande, et sur la 2ème ligne la réponse du poêle

Demande de température de consigne à 17°C :

0x21 0x00 0x02 0x00 0x53 0x11 0xC4 0x3C
0x11 0x00 0x02 0x00 0x53 0x11 0xEB 0xB0

Demande de température de consigne à 18°C :

0x21 0x00 0x02 0x00 0x53 0x12 0xF4 0x5F
0x11 0x00 0x02 0x00 0x53 0x12 0xD8 0xD3

Demande de vitesse de ventilation frontale à vitesse 1 :

0x21 0x00 0x02 0x00 0x58 0x01 0x0A 0xF7
0x11 0x00 0x02 0x00 0x58 0x01 0x25 0x78

Demande de vitesse de ventilation frontale à vitesse 2 :

0x21 0x00 0x02 0x00 0x58 0x02 0x3A 0x94
0x11 0x00 0x02 0x00 0x58 0x02 0x15 0x18

Demande de vitesse de ventilation frontale à vitesse 3 :

0x21 0x00 0x02 0x00 0x58 0x03 0x2A 0xB5
0x11 0x00 0x02 0x00 0x58 0x03 0x05 0x39

Demande de vitesse de ventilation frontale à vitesse 4 :

0x21 0x00 0x02 0x00 0x58 0x04 0x5A 0x52
0x11 0x00 0x02 0x00 0x58 0x04 0x75 0xDE

Demande de vitesse de ventilation frontale à vitesse 5 :

pas mesuré

Demande de vitesse de ventilation frontale à vitesse 6 :

0x21 0x00 0x02 0x00 0x58 0x06 0x7A 0x10
0x11 0x00 0x02 0x00 0x58 0x06 0x55 0x9C

.
.
Un dernier un peu différent, puisque le nombre d’octet des trames est différent, même si les octets de parité sont toujours les 2 derniers.
Demande d’information sur les compteurs d’heure :

0x21 0x00 0x06 0xD1 0x30
0x11 0x00 0x06 0xC7 0x02 0xC7 0x02 0xE7 0x00 0x2E 0xC6

Je viens de faire un nouveau test de circuit, et j’obtiens ceci :


En bleu, les trames en entrée/sortie du poêle
En veert, les trames à l’arrivée sur le Rx du Wemos.

Sur l’oscilloscope ça m’a plu de voir ceci, parce les courbes en vert oscillent entre 0V et ~3,3V, comme je voudrais. Toutefois, via Realterm je ne voie rien :pleading_face:
Y-a-t-il une raison à ceci ?

Bonjour,
les deux derniers octets de la trame représentent le CRC16 type xmodem. En cherchant sur internet, tu trouveras le code pour générer ce CRC à partir des octets de la trame en hexa.
Ci-dessous un lien vers un calculateur de crc en ligne. Tu retrouveras les crc de tes trames en entrant les valeurs en hexa à la suite. Ex 210002005311 qui renvoie un crc de c43c.

Le principe du CRC, c’est de prendre tous les octets de la trame sans les deux derniers. Ensuite on calcule le CRC avec ces données et on compare avec la valeur des deux derniers octets de la trame. Si les deux valeurs sont identiques, la trame a bien été décodée, sinon la trame est corrompue. Ça c’est pour la réception.
Pour l’émission ,on calcule le CRC avec les données et on ajoute le résultat du CRC16 soit deux octets à la suite des données.

Par exemple, pour la vitesse de ventilation niveau 5 qui manque, ça donnerait ceci:

0x21 0x00 0x02 0x00 0x58 0x05 0x4A 0x73
0x11 0x00 0x02 0x00 0x58 0x05 0x65 0xFF

Cdt

1 « J'aime »

Bonsoir,

Je possède également un poêle Ravelli, le Soffio, qui est aussi utilisé avec une télécommande Touch Radio.

Je suis vraiment intéressé par le sujet et je cherche un moyen de domotiser le poêle.

Au besoin je suis partant pour faire des tests de mon côté.

En tous cas je suis le sujet et j’espère qu’une solution sera trouvée.

A très vite

C’est noté.
Je te ferai signe en fonction de mon avancé (j’espère dans les prochains jours)

Si tu penses à du matos que je devrais préparer ou commander, histoire d’être prêt quand tu auras besoin, n’hésite pas à me le dire.
Bon courage.

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.