Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Conversion de et vers EIS5
#1
Bonjour,

Pour interconnecter du 1-wire avec eibd, je suis à le recherche de la
"formule" pour convertir des températures en 2-byte. J'ai trouvé ça
(http://faq.knx.org/search_faq?product=11&faq=41) :
---
To convert from decimal representation to DPT_Value_Temp (9.001), the
following steps shall be done:
1. The value has to be noted with a precision of 0,01
EXAMPLE 315 °C is noted as 31500
2. This is divided by 2 until you have a value smaller than 2047. With
each division, the Exponent is incremented. This gives the smalled
exponent, which is the most accurate coding.
EXAMPLE 1968,75 with 4 devisions by 2.
3. The mantissa can only carry the integer part of the value, so
1968,75 becomes 1968. Here of course, truncation errors occur.
4. The integer value of the mantissa is binary encoded.
EXAMPLE 1968 becomes 11110110000b
5. The DPT_Value_Temp value is composed as in the given format: M EEEE
MMM MMMM MMMM
EXAMPLE 0 0100 111 1011 0000 is hexadecimally noted 27B0h.

NOTE 1 Of course, an optimisation is possible: due to the truncation,
27B0h is not really 315: it is 314,88. The value 27B1h is more
precise: this is 315,04.
NOTE 2 An interesting only tool can be found here: http://www.tapko.de/Tools.31.0.html
---

Donc pour 46.32°C

46.32*100=4632
4632/2 = 2316
2316/2 = 1158

1158 en bin = 100 1000 0110

Donc 2 divisions par 2 (en bin 10)

résultat en bin : 0001 0100 1000 0110 -> en hex 1486

donc je send par eibd : groupwrite ip:192.168.5.5 9/5/3 14 86

et arrive dans ETS : 46.32 !

Parfait, maintenant j'ai un souci avec les °C négatives ...

j'imagine que pour -46.32°C il faut mettre le bit de poid fort à 1
donc :

1001 0100 1000 0110 -> en hex 94 86

donc je send par eibd : groupwrite ip:192.168.5.5 9/5/3 94 86
et arrive dans ETS : -35.6 ???????????

Donc si quelqu'un peux m'expliquer ce que j'ai raté, je suis preneur !
Après il faudra que je fasse la formule de manière automatique sous
linux, mais ça devrait pas être trop compliqué !

Merci de votre aide !

Roby
#2
On 24 juil, 12:16, Roby <goo...@macuba.net> wrote:
> j'imagine que pour -46.32°C il faut mettre le bit de poid fort à 1

Non, la mantisse est codée en complément à 2 sur 12 bits.
Donc on remplace 1158 par 2^12-1158 = 4096-1158 = 2938

2938 = 101101111010 en binaire = MMMMMMMMMMMM
L'exposant est toujours 2 = 0010 en binaire = EEEE

On mélange ces deux valeurs selon le format MEEEEMMMMMMMMMMM.
On obtient 1001001101111010 en binaire, soit 937a en hexa.

Et on confirme que 937a donne -46.32 sur http://www.tapko.de/Tools.31.0.html

Pascal
#3
Ah ok Smile merci beaucoup !


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)