[C] - Conversion de Float en BCD - Possible ?
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

[C] - Conversion de Float en BCD - Possible ?



  1. #1
    invite3c35244f

    [C] - Conversion de Float en BCD - Possible ?


    ------

    Bonjour,

    dans le cahier des charges de mon projet, on me demande d'envoyer des données via liaison série (Protocole MODBUS), et je dois transmettre des données de type float (exemple : +/- XXX,X).

    Et on me dit :
    "Le codage décimal des valeurs s'effectue en BCD sous forme +/-XXX,X" et cela avec 16 bits...

    Est ce possible?

    Merci d'avance

    -----

  2. #2
    Jack
    Modérateur

    Re : [C] - Conversion de Float en BCD - Possible ?

    oui, bien sûr. En quel langage?

    "Le codage décimal des valeurs s'effectue en BCD sous forme +/-XXX,X" et cela avec 16 bits...
    petit problème cependant: 4digits, ça fait bien 16 bits. Mais comment est alors codé le signe si on veut afficher de -999,9 à +999,9?

    Tu es sûr que les données ne sont pas codées sur 4 octets?

    A+
    Dernière modification par Jack ; 21/12/2010 à 17h55.

  3. #3
    invite3c35244f

    Re : [C] - Conversion de Float en BCD - Possible ?

    Bonjour Jack,

    petit problème cependant: 4digits, ça fait bien 16 bits. Mais comment est alors codé le signe si on veut afficher de -999,9 à +999,9?

    Tu es sûr que les données ne sont pas codées sur 4 octets?
    il est noté aussi dans le cahier des charges que les valeurs possibles vont de -799,9 à +799,9. Et, les MSB correspond au signe de la valeur.

    Donc, j'en ai déduis cela :
    Donnée converti sur 2 octets en BCD, le bit de poids fort du mot de 16 bits correspond au signe (d'où la valeur max de 7XX,X).
    Et en ce qui concerne la virgule, "je m'en fou", ... A moins que tu saches comment faire ?

    Si j'ignore la virgule, je vois donc comment faire pour convertir mon float.

    Merci d'avance

  4. #4
    Jack
    Modérateur

    Re : [C] - Conversion de Float en BCD - Possible ?

    il est noté aussi dans le cahier des charges que les valeurs possibles vont de -799,9 à +799,9. Et, les MSB correspond au signe de la valeur.
    avec cette info, 16 bits suffisent effectivement.

    Et en ce qui concerne la virgule, "je m'en fou", ... A moins que tu saches comment faire ?
    ce n'est effectivement pas un problème, en gérant l'affichage comme du texte.

    Si j'ignore la virgule, je vois donc comment faire pour convertir mon float.
    tu n'as toujours pas dit quel langage tu utilises.

    A+

  5. A voir en vidéo sur Futura
  6. #5
    invite3c35244f

    Re : [C] - Conversion de Float en BCD - Possible ?

    Bonjour,

    tu n'as toujours pas dit quel langage tu utilises.
    Je l'ai écris dans l'intitulé du sujet,"[C]" , le language C. (compilateur C18 de Microchip)... mais c'est vrai que je ne l'ai pas rappeler dans mon premier message... autant pour moi.

    Et voila comment je compte faire:
    Code:
    float toto;
    unsigned int totobcd = 0;
    
    unsigned short totox10 = 0;
    unsigned short QuotInit, ResultEntierDiv;
    unsigned char Dig1 = 0, Dig2 = 0, Dig3 = 0, Dig4 = 0;
    unsigned char polarity = 0;
    
    
    toto = -21.543;
    
    if(toto >= 0)
    	{
    	polarity = 0;
    	}
    if(toto < 0)
    	{
    	toto = -toto;
    	polarity = 1;
    	}
    
     totox10 = (unsigned short)(toto*10.000);
    
     QuotInit = totox10;
     ResultEntierDiv = QuotInit/10;								//
     Dig1 = QuotInit%10;										//// Extraction du Digit 1
     QuotInit = ResultEntierDiv;								//
    
     ResultEntierDiv = QuotInit/10;								//
     Dig2 = QuotInit%10;										//// Extraction du Digit 2
     QuotInit = ResultEntierDiv;								//
    
     ResultEntierDiv = QuotInit/10;								//
     Dig3 = QuotInit%10;										//// Extraction du Digit 3
     QuotInit = ResultEntierDiv;								//
    
     ResultEntierDiv = QuotInit/10;								//
     Dig4 = QuotInit%10;										//// Extraction du Digit 4
     QuotInit = ResultEntierDiv;								//
    
    totobcd = (polarity&0x01)*32768 + (Dig4&0x07)*4096 + (Dig3&0x0F)*256 + (Dig2&0x0F)*16 + (Dig1&0x0F);
    Qu'en pensez vous?

    Merci d'avance,

  7. #6
    invite3c35244f

    Re : [C] - Conversion de Float en BCD - Possible ?

    Je me suis fais une petite fonction...

    Code:
    /***************************************************************
    Nom   : unsigned int FloatTo16bitsBCD (float DataFloat)
    Role  : Conversion d'une variable de type Float en mot de 16 bits
    ****************************************************************/
    unsigned int FloatTo16bitsBCD (float DataFloat)
    {
    unsigned char FloatPolarity = 0;
    unsigned short floatx10 = 0;
    unsigned short QuotInit, ResultEntierDiv;
    unsigned char Dig1 = 0, Dig2 = 0, Dig3 = 0, Dig4 = 0;
    unsigned int Float16BitBCD = 0;
    
     if(DataFloat >= 0)
    	{
    	FloatPolarity = 0;
    	}
     if(DataFloat < 0)
    	{
    	DataFloat = -DataFloat;
    	FloatPolarity = 1;
    	}
    
     floatx10 = (unsigned short)(DataFloat*10);
    
     QuotInit = floatx10;
     ResultEntierDiv = QuotInit/10;								//
     Dig1 = QuotInit%10;										//// Extraction du Digit 1
     QuotInit = ResultEntierDiv;								//
    
     ResultEntierDiv = QuotInit/10;								//
     Dig2 = QuotInit%10;										//// Extraction du Digit 2
     QuotInit = ResultEntierDiv;								//
    
     ResultEntierDiv = QuotInit/10;								//
     Dig3 = QuotInit%10;										//// Extraction du Digit 3
     QuotInit = ResultEntierDiv;								//
    
     ResultEntierDiv = QuotInit/10;								//
     Dig4 = QuotInit%10;										//// Extraction du Digit 4
     QuotInit = ResultEntierDiv;								//
    
     Float16BitBCD = (FloatPolarity&0x01)*32768 + (Dig4&0x07)*4096 + (Dig3&0x0F)*256 + (Dig2&0x0F)*16 + (Dig1&0x0F);
    
     return (Float16BitBCD);
    
    }
    Et ça marche parfait...

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/08/2010, 18h26
  2. Probleme de conversion 8 bit to BCD
    Par invite211f2610 dans le forum Électronique
    Réponses: 15
    Dernier message: 02/05/2010, 17h25
  3. Réponses: 5
    Dernier message: 30/07/2009, 13h57
  4. Conversion binaire --> BCD
    Par invitea3d69760 dans le forum Électronique
    Réponses: 2
    Dernier message: 17/09/2006, 19h12
  5. Conversion BCD / binaire
    Par Gérard dans le forum Électronique
    Réponses: 8
    Dernier message: 12/06/2006, 21h19