Parcourir ce sujet :
1 Utilisateur(s) anonymes
16 bits signés, float, et chaine de caractères |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Salut tous !
Je me confronte à un problème de type et de conversion de données. Mon capteur de température me délivre 9 octets que je stocke dans un tableau comme U8 au8RomCodeTs [8]; Les 2 premiers octets donne la température avec une résolution de 12 bits, dont voici le format :
LS BYTE | BIT 7 | BIT 6 | BIT 5 | BIT 4 | BIT 3 | BIT 2 | BIT 1 | BIT 0 |
Exemple pour 125°C on a 0000 0111 1101 0000, donc signé par 0 donc positif. Mais comment faire pour manipuler tout ça ? Ce que je voudrais faire : - Faire rentrer mes 16bits signés dans un float 32 ??? Est-ce possible ??? Me permettra donc de manipuler ces valeurs, et de les comparer. Un truc du style :
F32 f32temp = au8RomCodeTs[0] + au8RomCodeTs[1]
- Ensuite, la question qui tue, comment convertir un F32 en chaine de caractère, afin d'afficher la température sur mon LCD ?? Merci pour vos conseils ![]()
Posté le : 10/04/2016 15:33
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Citation :
Mon capteur de température me délivre 9 octets que je stocke dans un tableau comme U8 au8RomCodeTs [8]; Ensuite, concernant tes conversions, es-tu sur de devoir passer par des float? A mon avis, il est bien plus simple de rester en tier, quitte à placer la virgule au bon endroit au dernier moment pour l'affichage.
Posté le : 10/04/2016 16:24
|
|
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Oui pour le [8] c'est une erreur de saisie.
Oui ce serait plus simple comme tu dis en le gardant par un entier, mais comment gérer au moins une décimale dans mes calculs sans un float ?
Posté le : 10/04/2016 16:58
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
tu peux travailler en virgule fixe.
Tu peux par exemple faire en sorte que tes nombres entiers expriment des centièmes de degré. Ainsi, un résultat de 2352 exprimera 23,52 degrés. Il suffira donc de convertir 2352 en chaine de caractère et d'insérer le point décimal dans la chaine.
Posté le : 10/04/2016 18:14
|
|
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Accro
![]() ![]() Inscrit:
08/11/2007 20:51 De Lauzerville
Messages:
286
![]() |
Peut être en multipliant par 10, et diviser par dix pour afficher la valeur ?
Posté le : 10/04/2016 18:57
|
|
Le microcontroleur, ça fait peur comme une grosse pizza, on ne sait déjà pas par où commencer.
|
||
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Bon déjà j'essaye de faire rentrer mes 2 octets dans signed short pour voir ce que ça donne, mais pour l'instant, mais visiblement ma syntaxe n'est pas la bonne ...
Posté le : 10/04/2016 19:11
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
Je verrais bien un truc du genre:[/code]
short temp = ((short)au8RomCodeTs[1] << 8) | au8RomCodeTs[0];
Posté le : 10/04/2016 20:32
|
|
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Re,
Jacques, c'est bien la bonne méthode. Cependant, j'opte pour cette solution, à savoir, la température dans un unsigned ou signed char, je me passerais des décimales (dans ce projet, les décimales, c'est un grand luxe!)
U8 tempFormat(U8 u8scratchpad[9])
Merci à toi. Maintenant, il faut que je passe ce nombre décimal en une chaine de caractère ...
Posté le : 10/04/2016 20:44
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Pilier de la communauté
![]() ![]() Inscrit:
27/09/2005 18:07 De Metz
Messages:
1354
![]() |
tu as 2 solutions:
- la fonction itoa, qui convertit un integer en ascii, mais qui n'existe pas dans toutes les bibliothèques. - sprintf qui est standard, lourde, mais qui permet vraiment toutes les conversions possibles
Posté le : 10/04/2016 21:17
|
|
![]() |
Re: 16 bits signés, float, et chaine de caractères |
||
---|---|---|
Accro
![]() ![]() Inscrit:
28/09/2005 14:02 De Catalunya (66)
Messages:
581
![]() |
Je ne connais aucune de ces 2 solutions. Je suis en train de faire un truc à base division avec les restes ... et je vous dis quoi !
Posté le : 10/04/2016 23:45
|
|
Les octets s'envolent, les écrits restent !
|
||
![]() |
Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.