2016-12-09 2 views
1

J'utilise un capteur dht11 et obtiens les bits bruts, où les 8 premiers bits sont l'intégrale de l'humidité et suivent 8 bits les décimales de l'humidité. Les 8 bits suivants sont l'intégrale de la température, suivis des décimales 8 bits de la température. À la fin, il y a une somme de contrôle de 8 bits.Quel est le format utilisé pour les décimales dans le capteur dht11?

J'ai lu certaines fiches techniques, mais je n'ai trouvé aucune information sur la façon dont les décimales doivent être lues.

Est-ce que quelqu'un sait s'il s'agit d'un simple décimal à virgule fixe à 8 bits ou dois-je le faire différemment?

Toute aide est appréciée

+0

Oui, ils utilisent le mot 'décimal'. Cela me semble trompeur, je dirais "fractionnaire" ... Btw il semble qu'aucune échelle n'est appliquée, donc vous devez juste diviser votre valeur de 16 bits (octet haut-bas) par 2^8 pour obtenir la valeur physique. – omegatre

+0

sry Je ne peux pas vraiment vous suivre. Je m'attends à ce que le premier 8 bits soit les valeurs intégrales et les 8 suivantes les valeurs décimales. Donc le nombre disons 2.5 serait 0000 0010 1000 0000 Les 8 premiers bits sont l'intégrale, les 8 derniers sont simplement fixes. Je ne sais pas pourquoi je devrais le diviser par 2^8 – Kev1n91

+0

De votre exemple: 0000 0010 1000 0000 = 640 décimal, et 640/256 = 2.5 décimal – omegatre

Répondre

2

De la fiche dht11, seules les valeurs positives pour l'humidité et la température peuvent être retournés, donc pas peu réservé pour le signe. Il s'agit d'une représentation en point fixe Q8.8 (voir aussi https://en.wikipedia.org/wiki/Q_(number_format)). Pour traduire de la représentation à la valeur physique, vous devez diviser par 2^8, où 8 est le nombre de bits fractionnaires. Par exemple:

0000 0010 1000 0000 = 640 decimal 
640/256 = 2.5 decimal