dimanche 1 mars 2020

Présentation




Bienvenu sur ce blog où je vais partager mon expérience avec le poêle à pellet Martina Hydro de la marque Palazzetti. En effet lorsque j’ai voulu connecter ce dernier à mon installation domotique je n’ai trouvé que très peu d’information concernant ce poêle et plus généralement sur les poêles de la marque Palazzetti (dont l’électronique est de la marque Fumis by Atech electronics). J’ai donc décidé d’ouvrir la bête afin de comprendre son électronique et à partir des documents trouvés (manuel, photo, soft) de décortiquer le système pour arriver à mes fins…

samedi 29 février 2020

Une petite apllication en c# pour tester la communication

Pour nos amis développeurs voici une petite application pour tester la communication entre le poêle et le PC
https://sourceforge.net/p/palazzetti-simple-com

Elle est développée en C# pour être compilable sous Visual studio. Cela permet d'avoir quelques briques de code pour le codage et le décodage des trames Palazzetti.

mercredi 1 janvier 2020

La liaison série


La communication entre le poêle et les matériels tiers se fait grâce à une liaison série multi point. Le poêle étant le master c’est lui qui envoie les commandes via le bus Tx (du poêle) et les esclaves écoutent sur ce même bus puis répondent sur le bus Rx (du poêle). Afin de permettre de brancher les esclaves sur le même bus ceux-ci sont ramenés à la tension Vdd (+3.3V) via une résistance de pull up. A partir du circuit PCB on retrouve le schéma électronique de la liaison série.

 



Il y a en plus des deux signaux classique pour une liaison ssérie de type UART un signal de type 1-Wire créé à partie d'un réseau de transistors de type NPN et de résistances. Remarque sur ma Connection Box seul les signaux Rx et Tx sont utilisés.
Lorsqu'on analyse les signaux à l'oscilloscope voici ce qu'on obtient:



On voit bien que le signal Tx émis sur la pin 2 est inversé sur la pin 1 les niveaux de tension sont de type TTL autour de 3V (0V - bit=0 et 3V - bit=1) avec la largeur d'un bit autour de 25us soit 1/25us donne 38400 bauds


Lorsque le master émet sa trame sur la pin 2 (Tx) les esclaves eux sont en haute impédance sur la ligne Rx on a donc une recopie du signal Tx. Par contre le signal Rx devient différent du signal Tx lorsqu'un esclave répond au maitre (non représenté sur le chronogramme). En effet le master maintient au niveau logique 0 la ligne TX pendant que l'esclave répond sur la ligne Rx.



Voici le schéma de câblage du connecteur RJ12




Au final il suffit d'utiliser un convertisseur USB vers TTL et de configurer le microswitch vers 3.3V
Adaptateur-USB-to-TTL 

RJ12 connection to USB/TTL converter

La connexion au poêle se fait directement dans le connecteur à l’arrière de celui-ci. Si le connecteur est déjà utilisé (par exemple par la Connection BOX) vous pouvez utiliser un splitter 6 voies branché soit à l’arrière de l’écran tactile (comme indiqué dans le manuel d'utilisation du logiciel LabTools 2.7) soit dans le connecteur à côté de l'interrupteur du poêle.




Voici le câble que j'ai confectionné:




Il n'y a plus qu'à faire communiquer votre poêle avec le logiciel adéquate type LabTools

Les trames


Les informations échangées sur la liaison série sont sous la forme de trames qui respectent toujours le même format:

Frame format:
ID
D0
D1
D2
D3
D4
D5
D6
D7
PAD
CS


  • Une trame ou "frame" à une longueur de 11 octets (Byte)
  • Le premier octet est un numéro d’identifiant ID qui est l’opération de lecture ou d’écriture à destination d’un périphérique.
ID

0x00
Synchronisation PC
0x01
Write data from PC|Box into board
0x02
Read data from board to PC|Box
0x06
Write data from PC into date time board
0x07
Synchronisation Display
0x08
Write data from Display into board
0x09
Read data from board to Display

  • 8 octets contenant les données échangées
  • 1 octet de remplissage "padding"vaut 0x40 quand la trame est émise par le poêle sinon 0x00
  • Le dernier octet CS est un checksum est vaut la somme des 10 premiers octets


Lecture d’un registre




Lorsque l’on veut lire une valeur depuis la carte (read data from board) il faut:
  • Attendre la trame avec l’ID = 0x00 en effet le maître se met en écoute après cette trame pendant environ 30ms
  • Envoyer une trame avec ID=0X02 suivi de l’adresse du registre à lire sur 2 octets avec D0 le poids faible (Add.LowByte) et D1 le poids fort de l’adresse (Add.HighByte)  
ID
Add
Add
D2
D3
D4
D5
D6
D7
PAD
CS
0x02
LowByte
HighByte
0
0
0
0
0
0
0
XX

  • Attendre la trame de réponse avec ID=0x02 contenant la valeur du registre en D0 
0x02
D0
D1
D2
D3
D4
D5
D6
D7
0x40
CS

D0 correspond à la valeur du registre à l’adresse Add
D1 correspond à la valeur du registre à l’adresse Add+1
D2 correspond à la valeur du registre à l’adresse Add+2
etc...
D7 correspond à la valeur du registre à l’adresse Add+7


Exemple:
Lecture de la version du poêle - Read board version in register - 0x1E04 (0x is hexadecimal prefix notation)

  • Attendre la trame de synchronisation - Waiting synchro frame from serial port
ID
D0
D1
D2
D3
D4
D5
D6
D7
PAD
CS
0x00
xx
xx
xx
xx
xx
xx
xx
xx
0x40
xx


  • Envoyer la trame de lecture - Write reading frame to serial port        
ID
ADD.LB
ADD.HB
D2
D3
D4
D5
D6
D7
PAD
CS
0x02
0x04
0x1E
0
0
0
0
0
0
0
24

  • Lire la trame de réponse - Read response frame from serial port
ID
Val reg 0x1E04
Val reg 0x1E05
Val reg 0x1E06
Val reg 0x1E07
Val reg 0x1E08
Val reg 0x1E09
Val reg 0x1E0A
Val reg 0x1E0B
PAD
CS
0x02
0x2D
0
0x27
0
0x81
0
0x0A
0
0x40
0x21


Le numéro de version (stocké dans le registre 0x1E04) est le 1er octet de donnée (d0) = 0x2D soit 45
Le numéro de model (stocké dans le registre 0x1E06) est le 3ieme octet de donnée (d2) = 0x27 soit 39

Stove board version stored in register 0x01E04 is 0x2D = 45 and Stove model number stored in register 0x1E06 is 0x27 = 39




Écriture d’un registre



Lorsque l’on veut écrire une valeur dans la carte (write data to board) il faut:
  • Attendre la trame avec l’ID = 0x00 le maître se met en écoute après cette trame
  • Envoyer une trame avec ID=0X01 suivi de l’adresse du registre à écrire sur 2 octets avec D0 le poids faible et D1 le poids fort de l’adresse et D2 la valeur à écrire sur 1 octet.
ID
Add
Add
D2
D3
D4
D5
D6
D7
PAD
CS
0x01
LowByte
HighByte
Val
0
0
0
0
0
0
XX

Remarque: 
Lorsque le cycle d'écriture est terminé. Il est conseillé de faire à la suite du cycle d'écriture, un cycle de lecture de la valeur du même registre afin de vérifier que le cycle d'écriture précédent a réussi.

Exemple:
Écriture de la température de consigne de l'eau du ballon tampon (config 3) à 65°C soit 0x41 dans le registre 0x1C54 - Writing set point temperature of water tank storage to 65°C
  • Attendre la trame de synchronisation - Waiting synchro frame from serial port
ID
D0
D1
D2
D3
D4
D5
D6
D7
PAD
CS
0x00
xx
xx
xx
xx
xx
xx
xx
xx
0x40
xx
  • Envoyer la trame d'écriture - Send writing frame to serial port        
ID
ADD.LB
ADD.HB
D2
D3
D4
D5
D6
D7
PAD
CS
0x01
0x54
0x1C
0x41
0
0
0
0
0
0
0xB2