PIC 16F > MikroC > Opensource > float to ascii conversion …
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

PIC 16F > MikroC > Opensource > float to ascii conversion …



  1. #1
    PorkePIC

    PIC 16F > MikroC > Opensource > float to ascii conversion …


    ------

    Ci dessous une routine pour convertir un nombre en virgule flottante en chaîne de caractères. Plutôt que d'utiliser des fonctions toutes faites de la bibliothèque de MikroC, j'aimerais utiliser cette routine en opensource. Un peu familier du C et de MikroC, néanmoins je ne comprends pas bien l'organisation de cette routine, le principe de conversion utilisé, la succession des différentes boucles for, while, leurs conditions logiques utilisées pour y entrer, l'initialisation des différentes variables. Elle fonctionne car je l'ai utilisé dans un programme pour réaliser un thermomètre numérique avec le capteur LM35.
    Pourriez vous m'éclairer ? Un algorithme simple m'aiderait à comprendre.
    Code:
    void float2aascii (float x, unsigned char *str, char precision)
    {
     // Converts a floating point number to an ASCII string.
     // Version limited at 5 decimals maximum.
     // x is stored into str, which should be at least 30 chars long.
     int ie, i, k, ndig;
     double y;
     if (precision >= 5)
        {
         precision = 5;
        }
        else
              {
               precision++;
              }
     ndig = precision;
     ie = 0;
     // If x is negative, write minus and reverse.
    if (x < 0.00000)
        {
         *str++ = '-';
         x = -x;
        }
    // Put x in range 1 <= x < 10.
     if (x > 0.000000)
        {
         while (x < 1.000000)
         {
          x *= 10.000;
          ie--;
         }
        }
     while (x >= 10.0000)
     {
      x = x / 10.0000;
      ie++;
     }
     // In f format, number of digits is related to size.
     ndig += ie;
    // round x is between 1 and 10 and ndig will be printed to right of decimal point …
     for (y = i = 1; i < ndig; i ++)
           {
            y = y / 10.0000;
           }
     x += y / 2.0000;
     if (x >= 10.0000)
        {
         x = 1.0000;
         ie++;
        }
     if (ie < 0)
        {
         *str++ = '0';
         *str++ = '.';
         if (ndig < 0)
            {
             ie = ie - ndig;
            }
         for (i = -1; i > ie; i --)
               {
                *str++ = '0';
               }
        }
     for (i = 0; i < ndig; i ++)
            {
             k = x;
             *str++ = k + '0';
             if (i == ie)
                {
                 *str++ = '.';
                }
             x -= (y = k); 
             x *= 10.0000;
            }      
     *str = '\0';
    }

    -----

  2. #2
    Murayama

    Re : PIC 16F > MikroC > Opensource > float to ascii conversion …

    Bonjour!

    Mots clés appréciés quand on demande quelque chose : bonjour, s'il vous plaît, merci, etc...

    néanmoins je ne comprends pas bien l'organisation de cette routine, le principe de conversion utilisé,
    la succession des différentes boucles for, while, leurs conditions logiques utilisées pour y entrer, l'initialisation
    des différentes variables.


    Le mieux, c'est d'essayer de comprendre par vous-même. Prenez un nombre au hasard, par exemple -3.8,
    et parcourez l'algorithme par la pensée ou avec un crayon si vous en avez besoin.
    Dans le cas de -3.8, le premier test (if (x < 0)) va d'abord écrire un '-' dans le résultat et inverser le nombre
    qui devient 3.8.
    Ensuite? Si le nombre est strictement supérieur à 0 (i.e. non nul) alors on le multiplie par 10 jusqu'à ce qu'il
    soit supérieur ou égal à 1, et décrémenter l'exposant. Dans notre cas, 3.8 l'est déjà, donc l'exposant sera 0.
    Bon, je vous laisse continuer. Ensuite, recommencez avec 0.0038 puis 3800 pour voir la différence.
    Une bonne chose serait peut-être d'utiliser le debugger et regarder par où passe l'algorithme.

    Pascal

  3. #3
    gienas
    Modérateur

    Re : PIC 16F > MikroC > Opensource > float to ascii conversion …

    Citation Envoyé par PorkePIC Voir le message
    Ci dessous une routine …
    Bonjour à toi aussi PorkePIC et tout le groupe

    Bienvenue sur les forums.

    Ce type de discussion, qui n'est pas du domaine de l'électronique, a été déplacé dans le forum adapté. C'est expliqué ici:

    http://forums.futura-sciences.com/el...de-poster.html


    Comme déjà signalé par Murayama que je salue également, notre charte précise que l’on doit dire bonjour et merci pour toute demande d’aide. Tout, ici, est bénévole, on n’y entre pas incognito en payant à la sortie, et donc où le service est dû.

  4. #4
    PorkePIC

    Re : PIC 16F > MikroC > Opensource > float to ascii conversion …

    Bonjour Pascal,
    1) Entendu pour les formules de politesse.  Je comprends. Ce n’est pas mon habitude de les omettre.
    2) Merci pour l’exemple, mais c’est que je dois prendre le temps de faire, le bon crayon à papier et la gomme. Il m’est arrivé parfois de comprendre une routine en la modélisant dans une feuille Excel, ou en l’écrivant en VBA et en affichant dans des colonnes l’évolution des variables ligne après ligne en l’exécutant pas à pas.
    3) C’est ce que j’ai pensé à faire en dernier recours, mais je vais peut être commencer par ça, en utilisant le Debugger du compilateur et en choisissant les variables que je veux monitorer en exécutant la routine pas a pas. Je mieux c’est que je sorte cette routine du code source de mon thermomètre digital et à que je re écrive un source minimaliste juste pour tester cette routine. En allumant éventuellement quelques LED de différentes couleurs branchées sur un port de sortie et la ligne de code subtilement placé dans les boucles for ou while et m’assurer ainsi si elles sont exécutées ou pas.
    Merci 
    Eric
    Dernière modification par PorkePIC ; 10/12/2022 à 12h16.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. conversion float en int sans troncature en c
    Par Zarb1 dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 28/01/2013, 18h42
  2. conversion unicode -> Ascii + ascii étendu français VB.NET
    Par riri95 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 06/12/2012, 14h20
  3. Conversion de float sur STM32F4
    Par kronanberg dans le forum Électronique
    Réponses: 0
    Dernier message: 15/02/2012, 10h38
  4. [C] - Conversion de Float en BCD - Possible ?
    Par jorg1n dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 22/12/2010, 09h15
  5. conversion ASCII
    Par invite3abb5cbf dans le forum Logiciel - Software - Open Source
    Réponses: 11
    Dernier message: 05/06/2005, 23h35