H
hawk1943
Guest
Salut à tous,
Comme certains d'entre vous savent que je suis en utilisant un 16F636 pour traiter les données à partir d'un DS18B20 et la sortie des données de température à hyperterminal ...
Mais la façon dont je suis la conversion des données est évidemment faux que je reçois des données inexactes ...
Quelqu'un pourrait-il nous aider à traduire les données ...
Seulement, je voudrais si possible ajouter une virgule au code de séparer les deux valeurs ...
Fondamentalement c'est ce que je reçois ...
DONNEES brouillons = E4 10 C FF 7F 0 0 5 50
DONNEES brouillons = B1 10 5 FF 7F 0 0 1 6B
DATA = Bloc-notes A5 10 4 FF 7F 0 0 1 6C
La température à la fois les données ont été enregistrées a été de degré à 23,3
C'est ainsi que je traduis les données manuellement
550 = 1360 x 0,0625 = 85 - vous obtenez toujours cette valeur à la mise sous tension ...
16C = 364 x 0,0625 = 22,75
16B = 363 x 0,0625 = 22,6875
La résolution est de 16 bits si je ne peux donc aussi faire 363/16 = 22,6875
7F sont les données de configuration octets ...il est donc en cours d'exécution à 12 bits ...
Mais comment pourrais-je faire cela dans le code C?
J'ai quelques code tiré de la note d'application DS18B20 162 mais comme je l'ai trouvé la note d'application est plutôt contradictoires Je préfère ne pas l'utiliser ...
En fait, j'ai essayé la sortie du code, et constaté qu'il ne produit pas la bonne température sur la valeur ...
Mais au fond, c'est la façon dont ils vous montrer comment faire ...
Code:if (<temp_msb = 0x80)
(
temp_lsb = (temp_lsb / 2); / / passage à recevoir un diplôme de l'ensemble
)temp_msb temp_msb = & 0x80; / / masquer tous, mais le bit de signeif (> = 0x80 temp_msb)
(
temp_lsb = (~ temp_lsb) 1; / / complément de deux
)if (> = 0x80 temp_msb)
(
temp_lsb = (temp_lsb / 2); / / passage à recevoir un diplôme de l'ensemble
)if (> = 0x80 temp_msb)
(
temp_lsb = ((-1) temp_lsb *); / / ajouter le bit de signe
)printf ("\ n \ r tempc =% d degrés C \ r \ n", (int) temp_lsb); / temp / impression.
C
Comme certains d'entre vous savent que je suis en utilisant un 16F636 pour traiter les données à partir d'un DS18B20 et la sortie des données de température à hyperterminal ...
Mais la façon dont je suis la conversion des données est évidemment faux que je reçois des données inexactes ...
Quelqu'un pourrait-il nous aider à traduire les données ...
Seulement, je voudrais si possible ajouter une virgule au code de séparer les deux valeurs ...
Fondamentalement c'est ce que je reçois ...
DONNEES brouillons = E4 10 C FF 7F 0 0 5 50
DONNEES brouillons = B1 10 5 FF 7F 0 0 1 6B
DATA = Bloc-notes A5 10 4 FF 7F 0 0 1 6C
La température à la fois les données ont été enregistrées a été de degré à 23,3
C'est ainsi que je traduis les données manuellement
550 = 1360 x 0,0625 = 85 - vous obtenez toujours cette valeur à la mise sous tension ...
16C = 364 x 0,0625 = 22,75
16B = 363 x 0,0625 = 22,6875
La résolution est de 16 bits si je ne peux donc aussi faire 363/16 = 22,6875
7F sont les données de configuration octets ...il est donc en cours d'exécution à 12 bits ...
Mais comment pourrais-je faire cela dans le code C?
J'ai quelques code tiré de la note d'application DS18B20 162 mais comme je l'ai trouvé la note d'application est plutôt contradictoires Je préfère ne pas l'utiliser ...
En fait, j'ai essayé la sortie du code, et constaté qu'il ne produit pas la bonne température sur la valeur ...
Mais au fond, c'est la façon dont ils vous montrer comment faire ...
Code:if (<temp_msb = 0x80)
(
temp_lsb = (temp_lsb / 2); / / passage à recevoir un diplôme de l'ensemble
)temp_msb temp_msb = & 0x80; / / masquer tous, mais le bit de signeif (> = 0x80 temp_msb)
(
temp_lsb = (~ temp_lsb) 1; / / complément de deux
)if (> = 0x80 temp_msb)
(
temp_lsb = (temp_lsb / 2); / / passage à recevoir un diplôme de l'ensemble
)if (> = 0x80 temp_msb)
(
temp_lsb = ((-1) temp_lsb *); / / ajouter le bit de signe
)printf ("\ n \ r tempc =% d degrés C \ r \ n", (int) temp_lsb); / temp / impression.
C