Calcul avec micro-contrôleur
Répondre à la discussion
Affichage des résultats 1 à 17 sur 17

Calcul avec micro-contrôleur



  1. #1
    invitee1deb610

    Smile Calcul avec micro-contrôleur


    ------

    Bonne journée a tous
    je suis débutant dans le C embarquée, j'ai enfin réussi a configurer mon ADC, l'acquisition et les résultats de l'adc sont avec une bonne exactitude, il me reste a récupérer la valeur analogique réel
    par exemple je suis entrain de mesurer le voltage d'une batterie avec micro-contrôleur (MC9S12DP256B) de freescale. le résultat est un mot binaire 8bit. pour calculer la valeur que je souhaite il faut que je la multiplie par VDDA et je la divise par 255. il en résulte un calcule float (réel) et je me sens pas a laise avec. comment faire pour récupérer la valeur analogique réel. est-ce que le micro-controleur accepte des divisions ? comment configurer la virgule flottante
    merci a vous!
    vous serez mes sauveurs si vous me répondez

    -----

  2. #2
    gcortex

    Re : Calcule avec micro-contrôleur

    division par 256 -> ignorer l'octet de poids faible

    mais le poids fort sera un entier de 0 à 5 -> trouver une astuce

  3. #3
    simon.

    Re : Calcule avec micro-contrôleur

    Si tu programmes en C, a priori, tu n'as rien de spécial à faire. C'est le boulot du compilateur. Gerer les flottants, ou bien faire des divisions alors que le microcontroleur ne sait pas le faire en matériel, c'est son job. Déclare simplement des variables de type float et fais ton calcul avec.


    Par contre, tu peux te demander si tu as vraiment besoin d'utiliser tes flottants. Tu pourrais choisir de representer ta tension, par exemple, sur un entier de 16 bits, en millivolts.

    Par exemple si ton VDDA c'est 5V: alors tension_en_mv = 5000 * resultat_adc / 255;

    Il faut juste faire gaffe aux dépassements...

  4. #4
    amoniaque

    Re : Calcule avec micro-contrôleur

    Salut,

    Ta configuration de float se fait en général par le compilateur qui attribut soit 32 soit 64bits par float, ce qui en ferra découler un nombre de chiffre significatifs différents. Par exemple pour du 32bits le nombre de chiffres significatifs doit être de 8 si ma mémoire est bonne.

    Si vraiment du veux t'amuser avec de longs chiffres réels il y a aussi les double : http://www.commentcamarche.net/contents/c/ctype.php3.

    Sinon ton calcul semble correct si VDDA est ta tension de réf' de l'ADC. Et tu n'as pas vraiment d'autres choix pour avoir cette valeur analogique "réelle".

    Ton µC accepte les divisions en effet, mais comme toujours : attention aux arrondis !

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

    Re : Calcule avec micro-contrôleur

    le micro-contrôleur sur lequel je travail est de 8bit

  7. #6
    simon.

    Re : Calcule avec micro-contrôleur

    Citation Envoyé par MAXWELL27 Voir le message
    le micro-contrôleur sur lequel je travail est de 8bit
    Certes, mais ton compilateur C te permet quand même de travailler avec des entiers de 16, 24, voire 32 bits, et des flottants.

    Par contre comme il ne fait que 8 bits "d'un coup", il doit faire un grand nombre d'opérations sur 8 bits pour trouver le résultat d'une opération sur 32 bits par exemple.

    C'est comme toi, t'as que 10 doigts, mais tu sais manipuler de grands nombres !

  8. #7
    amoniaque

    Re : Calcule avec micro-contrôleur

    Citation Envoyé par MAXWELL27 Voir le message
    le micro-contrôleur sur lequel je travail est de 8bit
    Si c'est ta réponse à ma réponse alors je dirais : si tu considères ça alors tu considères que tu ne peux avoir que des byte et booléens avec ton µC ?
    Que ce soit du 8-16 ou 32bits, il peut travailler avec tous les types du langage utilisé. C'est jusque pour allouer une variable, l'adressage ne sera pas le même.
    Par exemple pour long int (4octets) il prendra 4 plages mémoire pour un µC 8bits, 2 plages mémoire pour un µC 16bits et 1 plage pour un µC 32bits.

    L'analogie de Simon à propos des 10doigts est bien parlante.

  9. #8
    invitee1deb610

    Re : Calcule avec micro-contrôleur

    j'ai taper un code comme vous dites car moi aussi j'ai penser que ça peu fonctionner
    voila le code

    float get_voltage(void)
    {
    const float VDDR = 4.98;
    const float gain = 2.96;
    const float all_bits = 255.00;
    float anl_voltage;
    anl_voltage = ((VDDR*gain*ADC_read(0))/all_bits);
    return anl_voltage;


    }
    le message d'erreur qu'il m'affiche est:
    _FSFLOAT in ObjectCode/MCUinit.c.o is undefined //concerne les float
    _FMUL in ObjectCode/MCUinit.c.o is undefined //concerne la multiplication
    _FDIV in in ObjectCode/MCUinit.c.o is undefined //concerne la division

  10. #9
    pazcal

    Re : Calcule avec micro-contrôleur

    En même temps si ton ADC est 8 bits, ça fait 256 valeurs max. Une LUT (Look up table) avec les valeurs précalulées et tu oublies tous tes problèmes.
    Ca prend 256 octets en mémoire pour avoir tes valeurs sur 8 bits sans aucun traitement. Si tu veux plus de précision, tu passes en fractionnaire Q2.14, et tu auras une précision de 6*10e-5. Inutilie de passer par du float, surtout que la lib math est gourmande.
    A plus
    Dernière modification par pazcal ; 20/04/2011 à 16h14.

  11. #10
    invitee1deb610

    Smile Re : Calcule avec micro-contrôleur

    je travail avec l'environnement CODEWARRIOR de freescale

  12. #11
    simon.

    Re : Calcule avec micro-contrôleur

    Pour les erreurs, à toi de regarder dans la doc du compilateur ce qu'il faut ajouter pour le support des opérations sur les flottants.

  13. #12
    invitee1deb610

    Re : Calcule avec micro-contrôleur

    Merci a vous
    si j'arrive a trouver quelque chose je vous donne la solution

  14. #13
    pazcal

    Re : Calcule avec micro-contrôleur

    Tu devrais lire mon post précédent, la lib math est inutile...
    A plus

  15. #14
    Jack
    Modérateur

    Re : Calcule avec micro-contrôleur

    Citation Envoyé par MAXWELL27 Voir le message
    je travail avec l'environnement CODEWARRIOR de freescale
    Le calcul en virgule flottante est très gourmand en mémoire. En embarqué, ça compte.

    Donc, quand tu a créé ton projet avec code warrior, as-tu coché la case qui indique que tu veux travailler avec les flottants?

    A+

  16. #15
    jiherve

    Re : Calcule avec micro-contrôleur

    Bonsoir,
    une remarque : les flottants (ieee) ne sont pas des réels stricto sensu c'est un tout petit sous ensemble fini de rationnels ils appartiennent cependant bien au corps des réels.
    Le calcul en flottant est trés gourmand aussi en temps sur une machine dépourvue d'unité de calcul flottante, et avec 8 bits en entrée c'est totalement inapproprié, solution de facilité commune à bon nombre de softeux.
    JR
    l'électronique c'est pas du vaudou!

  17. #16
    invite98765423456
    Invité

    Re : Calcule avec micro-contrôleur

    Je ne sais pas ce que veut dire "très gourmand" en temps machine et "très gourmand" en mémoire, mais un 9S12DP256 (8-16 bits) a quand même 12k de ram et un cycle d’instruction qui doit être à 40MHz. Le "très gourmand en temps CPU sur ce µC doit donc être de l'ordre de quelques µSec et le "très gourmand" en mémoire ram (sur la pile) pour une multiplication float peut être une centaine d'octets...

    Alors, dire que une ou deux multiplications flottantes pourraient mettre à mal ce µC, cela me semble un peu exagéré (j'ai fait ce genre de calcul sur un petit cpu 8 bits à 8 Mhz).

    Par contre, dans l'instruction C, je ferais un "cast":
    anl_voltage = ((VDDR*gain*(float)ADC_read(0) )/all_bits);

    Le compilateur (CodeWarrior est assez intelligent pour calculer directement la valeur de VDDD*gain/all_bits.
    th.

  18. #17
    jiherve

    Re : Calcule avec micro-contrôleur

    Re
    en fait le problème n'est pas vraiment là, quoique cela dépende de ce qu'il faut faire en plus, mais plutôt au niveau de l'usage immodéré du calcul flottant alors qu'il n'est pas nécessaire.
    J'ai encore en mémoire (j'en ris encore) d'une horloge implémentée en flottant et qui passé un certains laps de temps retardait systématiquement.
    again and again:http://download.oracle.com/docs/cd/E..._goldberg.html
    JR
    l'électronique c'est pas du vaudou!

Discussions similaires

  1. Réponses: 11
    Dernier message: 22/11/2010, 13h33
  2. Micro-contrôleur
    Par invitef06f0671 dans le forum Électronique
    Réponses: 14
    Dernier message: 03/11/2010, 14h23
  3. réalisation d'un thermomètre avec ou sans micro contrôleur?
    Par Canaillou2k5 dans le forum Électronique
    Réponses: 11
    Dernier message: 30/03/2010, 20h21
  4. Micro contrôleur
    Par invitef1db8509 dans le forum Électronique
    Réponses: 5
    Dernier message: 01/07/2009, 08h11
  5. micro controleur
    Par invite07d46e5b dans le forum Électronique
    Réponses: 2
    Dernier message: 05/04/2008, 14h24
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...