CAN et cc5x - Page 2
Répondre à la discussion
Page 2 sur 3 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 65

CAN et cc5x



  1. #31
    marc2009

    Re : CAN et cc5x


    ------

    Citation Envoyé par Gérard Voir le message
    Je ne m'en sers pas parce que le compilateur se débrouille.
    Il lance la conversion et écrit le résultat où je lui dis de le mettre.

    Ton C me semble léger, heureusement que le Basic existe !




    les compilateurs sont différents et le langage est différent

    -----

  2. #32
    mictour

    Re : CAN et cc5x

    Le résultat est en binaire.
    Pour passer en décimal je te propose une routine de conversion :
    (Pour que ça marche, justifie à droite)

    char s[6]; // on défini un tableau...

    for (i = 0; i<6; i++)
    {
    s[i] = 0; // tableau à zero
    }

    Cette routine est optimisée, ne la modifie qu'en connaissance de cause.

    void unslongtoa(unsigned long u16)
    {
    char i,temp;
    s[5] = '\0';
    for (i = 4; ;i--)
    {
    temp = u16 % 10;
    temp += '0';
    s[i]=temp;
    if (i==0) break;
    u16 /= 10;
    }
    }

    Tu appelles la routine, en général dans le MAIN,
    Il ne reste plus qu'à "récupérer" le résultat, par exemple :

    for (i = 0; i < 5; i++)
    {
    putchar(s[i]); // vers un lcd ou rs232 etc..
    }

    Bonne prog, mictour

  3. #33
    Gérard

    Re : CAN et cc5x

    Et pourquoi veux-tu le résultat en décimal ?
    Tu peux comparer un nb binaire avec un nb décimal.

  4. #34
    marc2009

    Re : CAN et cc5x

    Citation Envoyé par Gérard Voir le message
    Et pourquoi veux-tu le résultat en décimal ?
    Tu peux comparer un nb binaire avec un nb décimal.
    ah bon ?

    disons que j'utilise la méthode mictour : j'aurais donc le résultat dans tmp ( 16 bits )

    donc je pourrais faire if (tmp==531) {...} ?
    Dernière modification par marc2009 ; 23/04/2009 à 19h34.

  5. #35
    marc2009

    Re : CAN et cc5x

    Citation Envoyé par mictour Voir le message
    Le résultat est en binaire.
    Pour passer en décimal je te propose une routine de conversion :
    (Pour que ça marche, justifie à droite)

    char s[6]; // on défini un tableau...

    for (i = 0; i<6; i++)
    {
    s[i] = 0; // tableau à zero
    }

    Cette routine est optimisée, ne la modifie qu'en connaissance de cause.

    void unslongtoa(unsigned long u16)
    {
    char i,temp;
    s[5] = '\0';
    for (i = 4; ;i--)
    {
    temp = u16 % 10;
    temp += '0';
    s[i]=temp;
    if (i==0) break;
    u16 /= 10;
    }
    }

    Tu appelles la routine, en général dans le MAIN,
    Il ne reste plus qu'à "récupérer" le résultat, par exemple :

    for (i = 0; i < 5; i++)
    {
    putchar(s[i]); // vers un lcd ou rs232 etc..
    }

    Bonne prog, mictour
    je vais voir si j'arrive a utiliser le nombre en binaire déjà. Par contre, je vois pas comment intégrer ta méthode dans le programme :s

  6. #36
    Gérard

    Re : CAN et cc5x

    Tu peux aussi convertir 531 en binaire.
    531 = 1000010011b = 213h

  7. #37
    marc2009

    Re : CAN et cc5x

    Citation Envoyé par Gérard Voir le message
    Tu peux aussi convertir 531 en binaire.
    531 = 1000010011b = 213h
    attends. Tu as le résultat en binaire dans tmp, nous sommes d'accord. Mais dans le if, je dois mettre une valeur en décimale ou une valeur en binaire ? ( if (tmp==213h) ...ou if (tmp==valeur binaire) ) le programme ne convertit pas la valeur dans le if en binaire/décimale ... ?

    ++

  8. #38
    Gérard

    Re : CAN et cc5x

    C'est toi qui te poses des questions, à mon avis, dans le if tu mets tmp==531.

    Quelle est la notation par défaut bin, dec, hex pour les nombres ?

    En Proton+, sans rien, c'est en décimal.

  9. #39
    marc2009

    Re : CAN et cc5x

    Citation Envoyé par Gérard Voir le message
    C'est toi qui te poses des questions, à mon avis, dans le if tu mets tmp==531.

    Quelle est la notation par défaut bin, dec, hex pour les nombres ?

    En Proton+, sans rien, c'est en décimal.
    bah si tu mets rien, c'est en décimal. Quand tu mets 0b, c'est binaire et 0x c'est hexa.

    sinon, le compilateur "traduit" lui même le 531 ? ( étant donné que tmp est une variable 16 bits en binaire )

    ++

  10. #40
    Gérard

    Re : CAN et cc5x

    Citation Envoyé par marc2009 Voir le message
    bah si tu mets rien, c'est en décimal. Quand tu mets 0b, c'est binaire et 0x c'est hexa.
    OK, je voulais juste attirer ton attention, ce n'est pas valable pour tous les compilateurs.
    Il me semble que MPLAB travaille par défaut en hex. (à confirmer)

    Citation Envoyé par marc2009 Voir le message
    sinon, le compilateur "traduit" lui même le 531 ? ( étant donné que tmp est une variable 16 bits en binaire )

    ++
    Je pense que oui.

  11. #41
    marc2009

    Re : CAN et cc5x

    mais je pense que c'est une histoire de compilateur, car pour bu décimale, j'ai pas encore vu de préfixe à mettre.

    sinon, je vais essayer.

  12. #42
    Gérard

    Re : CAN et cc5x

    Est ce que tu travailles avec MPLAB ?
    Si oui, tu peux simuler et tu verras l'évolution de tes variables.

  13. #43
    marc2009

    Re : CAN et cc5x

    Citation Envoyé par Gérard Voir le message
    Est ce que tu travailles avec MPLAB ?
    Si oui, tu peux simuler et tu verras l'évolution de tes variables.
    oui, mplab et cc5x.

    Euh...je sais pas comment simuler Enfin, si je vois comment mais où je dois regarder... qu'est ce que je dois faire pour que ça évolue ( enfin tu vois ce que je veux dire )

    ++

  14. #44
    mictour

    Re : CAN et cc5x

    Bonjour à vous deux,
    Bien sur chaque compilateur a sa propre syntaxe, si non ça serait trop simple !
    pour CC5X :
    tmp = 531; // décimal
    tmp = 0x213; // hexa
    tmp = 0b.1000010011; ou, plus lisible : 0b.10.0001.0011; // binaire

    Quant à l'appel de la routine il suffit de faire
    unslongtoa(tmp);
    avec le résultat dans s[i];
    sauf que ... "uns long to a" comme son nom l'indique converti en ASCII !!!

    Donc la routine :
    for (i = 0; i < 5; i++)
    {
    putchar(s[i]); // vers un lcd ou rs232 etc..
    }
    envoie le 1, puis le 3, enfin le 5 codé en ASCII.

    Avec toutes mes excuses pour vous avoir "enduit" d'erreur.
    Sans autre précision (0b, ou 0x) le compilateur est en décimal.


    donc je pourrais faire if (tmp==531) {...} ? OUI.
    De même que if (tmp==0x213) etc...

    Bonne fin de nuit ... mictour.

  15. #45
    marc2009

    Re : CAN et cc5x

    Bonjour mictour ,

    donc je pourrai faire if (tmp==513) si j'utilise ta routine, c'est ça ? Ou ce n'est pas nécessaire de l'utiliser ( cc5x comprend ? )

  16. #46
    mictour

    Re : CAN et cc5x

    Bonjour marc2009,

    Tu utilises simplement le petite note du #29 :

    uns16 tmp;
    Puis faire cette affectation :
    tmp.high8 = ADRESH;
    tmp.low8 = ADRESL;

    ...Et tu oublies la routine unslongtoa, inutile pour ton test
    comme je te le dis en #44.
    Bonne prog, mictour.

  17. #47
    marc2009

    Re : CAN et cc5x

    Merci beaucoup pour ton aide mictour, on verra si c'est bon

    --> je retourne à l'autre post

  18. #48
    marc2009

    Re : CAN et cc5x

    euh juste avec ta méthode ( de #46), faut que je justifie à droite ou à gauche ?

    Merci

  19. #49
    mictour

    Re : CAN et cc5x

    Bonjour marc2009,

    A droite toutes !
    Décaler à gauche sert surtout à ne garder que les 8 bits de poids fort.

    Bonne journée, mictour.

  20. #50
    marc2009

    Re : CAN et cc5x

    Citation Envoyé par mictour Voir le message
    Bonjour marc2009,

    A droite toutes !
    Décaler à gauche sert surtout à ne garder que les 8 bits de poids fort.

    Bonne journée, mictour.
    j'ai toujours pas trop compris ces trucs de poids plus fort et faible ...

    ok, donc je justifie à droite.

  21. #51
    mictour

    Re : CAN et cc5x

    Bonjour marc2009,

    Pas si difficile :
    par rapport au convertisseur A/D :
    poids fort : ADRESSH
    poids faible :ADRESSL
    Dans une variable : poids faible : le ou les bits les plus à "droite"
    poids fort : le ou les bits les plus à "gauche" selon le contexte ...
    Bonne prog ... mictour.

  22. #52
    marc2009

    Re : CAN et cc5x

    Citation Envoyé par mictour Voir le message
    Bonjour marc2009,

    Pas si difficile :
    par rapport au convertisseur A/D :
    poids fort : ADRESSH
    poids faible :ADRESSL
    Dans une variable : poids faible : le ou les bits les plus à "droite"
    poids fort : le ou les bits les plus à "gauche" selon le contexte ...
    Bonne prog ... mictour.
    oui mais je veux dire pourquoi par exemple avec ta méthode justifier a droite et pas à gauche ?

    Et... que fais exactement
    Code:
    tmp.high8 = ADRESH;
    tmp.low8 = ADRESL;
    ? Je pensais que si l'on essayait "d'additionner" les 2 variables de 8 bits au sein d'une variable 16bits, ça ferait n'importe quoi ... ou ta méthode est différente ?!

    Merci

  23. #53
    mictour

    Re : CAN et cc5x

    Je te joint un petit tableau ... j'espére que ça passe !
    Bonne soirée, mictour
    Images attachées Images attachées

  24. #54
    marc2009

    Re : CAN et cc5x

    ah ok, car les 0 à gauche ne compte pas dans la conversion binaire/décimale/hexa etc .. c'est ca ?

    Mais alors, comment fonctionne ta méthode ? car on dit que ça fait n'importe quoi si on "additionne" 2 variables 8 bits au sein d'une variable 16 bits ...

    Merci

  25. #55
    mictour

    Re : CAN et cc5x

    ... Mais qui t'a parlé d'addition ?
    Le pic place les bits 0 à 7 dans ADRESL,
    et ceux de poids fort (Lol) dans ADRESH.

    Dans l'exemple du tableau ça donne
    (en supposant qu'il s'agisse du résultat d'une conversion) :

    ADRESL (bit0 à bit7) = 19 en décimal
    ADRESH bit8 et bit9) = 2 ....
    Total, après avoir reconstitué le résultat : 2*256 + 19 = 531.

    Alors ? mictour.

  26. #56
    marc2009

    Re : CAN et cc5x

    Pourquoi 2*256+19 ?

  27. #57
    mictour

    Re : CAN et cc5x

    ... Regarde le tableau, en même temps que le petit calcul du #55,
    tu devrais y arriver tout seul. souviens-toi du principe de la numération de position.
    Si tu un peu oublié voici un lien :
    http://www.elektronique.fr/cours/cod...exadecimal.php

    http://www.elektronique.fr/cours/cod...re-decimal.php

    Bonne soirée, mictour.

  28. #58
    Gérard

    Re : CAN et cc5x

    Le cours 1 de Bigo traite des conversions bin/dec/hex.

  29. #59
    marc2009

    Re : CAN et cc5x

    ah c'est ça

    oui moi et la conversion ... xD

    0000 0010 0001 0011 donne bien après conversion 531

  30. #60
    Gérard

    Re : CAN et cc5x

    La calculatrice de Windows fait les conversions (en mode affichage scientifique).

Page 2 sur 3 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. CC5X et MPLAB
    Par invite177078b9 dans le forum Électronique
    Réponses: 0
    Dernier message: 09/04/2009, 10h00
  2. CC5X : Définition de tableaux.
    Par invitee17aeca5 dans le forum Électronique
    Réponses: 4
    Dernier message: 13/06/2008, 16h40
  3. pb prog CC5X 16F877
    Par invite4d22160b dans le forum Électronique
    Réponses: 1
    Dernier message: 01/11/2007, 08h10
  4. MPLAB et CC5X
    Par invite127fde78 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 01/06/2007, 07h28
  5. Mplab + Cc5x (16f737)
    Par invite127fde78 dans le forum Électronique
    Réponses: 1
    Dernier message: 31/05/2007, 15h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...