16 bits signés, float, et chaine de caractères [Forums - Langage C]
16 bits signés, float, et chaine de caractères [Forums - Langage C]
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
Recherche
 
   
 

Parcourir ce sujet :   1 Utilisateur(s) anonymes



(1) 2 3 »


16 bits signés, float, et chaine de caractères
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
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 |
           
2^3     2^2     2^1     2^0     2^-1    2^-2    2^-3    2^-4

MS BYTE 
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9  BIT8
           S       S       S       S       S       2
^6     2^5     2^4


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 !
Transférer la contribution vers d'autres applications Transférer


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
Hors Ligne
Citation :
Mon capteur de température me délivre 9 octets que je stocke dans un tableau comme U8 au8RomCodeTs [8];
Ton tableau ne pourra accueillir que 8 octets, pas 9.

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
Transférer la contribution vers d'autres applications Transférer


Re: 16 bits signés, float, et chaine de caractères
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
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 !
Transférer la contribution vers d'autres applications Transférer


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
Hors Ligne
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
Transférer la contribution vers d'autres applications Transférer


Re: 16 bits signés, float, et chaine de caractères
Accro
Inscrit:
08/11/2007 20:51
De Lauzerville
Messages: 286
Hors Ligne
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.
Transférer la contribution vers d'autres applications Transférer


Re: 16 bits signés, float, et chaine de caractères
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
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 !
Transférer la contribution vers d'autres applications Transférer


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
Hors Ligne
Je verrais bien un truc du genre:[/code]
short temp = ((short)au8RomCodeTs[1] << 8) | au8RomCodeTs[0];


Posté le : 10/04/2016 20:32
Transférer la contribution vers d'autres applications Transférer


Re: 16 bits signés, float, et chaine de caractères
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
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])
{
    
U8 u8temp;
    
u8temp = (u8scratchpad[1] << u8scratchpad[0] >> 4);
    
    return 
u8temp;                          
                            
}


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 !
Transférer la contribution vers d'autres applications Transférer


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
Hors Ligne
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
Transférer la contribution vers d'autres applications Transférer


Re: 16 bits signés, float, et chaine de caractères
Accro
Inscrit:
28/09/2005 14:02
De Catalunya (66)
Messages: 581
Hors Ligne
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 !
Transférer la contribution vers d'autres applications Transférer



 Haut   Précédent   Suivant
(1) 2 3 »



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.

[Recherche avancée]


Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

16 bits signés, float, et chaine de caractères [Forums - Langage C]