Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

Conversion binaire-decimal?Aïe aïe aïe




  1. #1
    darkmall

    Question Conversion binaire-decimal?Aïe aïe aïe

    Bonsoir,

    Voilà mon problème est simple, j'ai un nombre binaire sur 8 bits et j'aimerais le convertir en un nombre (grandeur physique) en décimal.

    Je m'explique, mon PIC 16F877A effectue une conversion A/D(je m'en fiche des 2 bits de poids faible) et j'aimerais afficher le résultat sur le LCD. Le pas de ma conversion est de 20mV/div.

    Exemple:
    J'ai, comme résultat de conversion : 10011010 (donc 154 en décimal)

    J'ai 154 x 0.02 = 3.08V

    Cependant je n'ai aucune idée comme procédé pour le malaxage de ces nombres...j'ai essayé une combine en passant par l'hexa...mais rien du tout. C'est au moment de multiplié par 0.02 que cela ce complique(normal d'ailleurs), j'ai pensé faire x2(le résultat de la conversion) puis prendre par paquet que 4bits et affiché ceux-ci mais le problème c'est que j'arrive à plus de 8bits de données...

    Une peu d'aide ne serais pas de refus...si vous avez des indices n'hésiter pas je chercherais par moi même, mais là je galère vraiment.

    Merci d'avance A+

    -----


  2. Publicité
  3. #2
    Jack

    Re : Conversion binaire-decimal?Aïe aïe aïe

    C'est un sujet maintes fois abordé. Une méthode est de faire des divisions successives par 10 et de conserver les restes et le résultat final.

    exemple: 103(10) = 1100111(2)
    et 10(10) = 1010(2)
    Vérifions avec l'algorithme:
    1100111/1010 = 1010, reste 11 = 3(10)
    1010/1010 = 1 reste 0

    résultat final:1
    reste1 : 0
    reste2 : 3

    donc on retrouve bien 103.

    En fait c'est le principe du changement de base.

    Petite remarque, un quantum de 19,6 mV serait plus proche de la vérité que 20 mV

    A+

  4. #3
    darkmall

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Purée mais oui!!! il me semblais bien qu'il y avait quelque chose avec b'1010' mais je ne me souvenais plus!

    Merci beaucoup, reste plus qu'a écrire tout ca en assembleur!


  5. #4
    Chikouist

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Bonjour;

    Sinon tu fais un codage paramétré, c'est à dire que les valeurs que tu n'arrive pas à coder correspoderont à des valeurs entières codables.

    Mais pour récupérer tes données aprés il faut faire l'opération inverse. on peut en parler en détail si tu veux
    The brain was always the most important muscle...

  6. #5
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Il faut considérer le résultat final en centième de volt.
    Pour cela on multiplie la lecture (154 ) par 100 et 0.02 par 100.
    Soit
    15400 / 2
    2 est un simple décalage vers la droite.

    100 donne 1100100 en binaire

    en partant de la droite les poids 4 , 32 et 64

    154 x 4 = 616 (2 décalage à gauche)
    154 x 32 = 4928 (5 décalage à gauche)
    154 x 64 = 9856 (6 décalage à gauche)

    donc 6 décalages à gauche d'int 16 bits à faire

    le resultat de x 100,
    soit 616 + 4928 + 9856 = 15400
    3 additions 16bits à faire

    15400/2
    1 décalage à droite à faire
    A+, pat

  7. A voir en vidéo sur Futura
  8. #6
    darkmall

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Citation Envoyé par Chikouist Voir le message
    Bonjour;

    Sinon tu fais un codage paramétré, c'est à dire que les valeurs que tu n'arrive pas à coder correspoderont à des valeurs entières codables.

    Mais pour récupérer tes données aprés il faut faire l'opération inverse. on peut en parler en détail si tu veux
    Oui dit toujours je connais pas( je suis pas sur de comprendre mais essai...)

    Citation Envoyé par freepicbasic
    en partant de la droite les poids 4 , 32 et 64

    154 x 4 = 616 (2 décalage à gauche)
    154 x 32 = 4928 (5 décalage à gauche)
    154 x 64 = 9856 (6 décalage à gauche)

    donc 6 décalages à gauche d'int 16 bits à faire
    Qu'entend tu parle des poids 4, 32 et 64 tu pense aux bits 2, 5 et 6( en fait ceux qui sont à 1) non?

    ok pour les 6 décalages mais comment faire pour travailler sur 16bits (2 registres ensembles?)


    Citation Envoyé par freepicbasic
    le resultat de x 100,
    soit 616 + 4928 + 9856 = 15400
    3 additions 16bits à faire

    15400/2
    1 décalage à droite à faire
    heu ca je comprends pas vraiment...

    Elles apparaissent ou mes valeurs converties?(dsl mais la je rame complet!)

    @+

  9. #7
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Qu'entend tu parle des poids 4, 32 et 64 tu pense aux bits 2, 5 et 6( en fait ceux qui sont à 1) non?
    oui


    Code:
    calc1L eQU 30
    calc1H eQU 31
    calc2L eQU 32
    calc2H eQU 33
    calc3L eQU 34
    calc3H eQU 35
    resultL eQU 36
    resulH eQU 37
    
    forever
    Movlw D'154'
    call Calcul
    goto forever
    
    
    
    calcul
    
    ; convertion du char en int 16
    ; calc1 contiendra le résultat des décalage successifs
    ; on sauvera au passage dans calc2 et calc3.
    ; et on final calc1 aura 154 x 64 
    movwf Calc1L
    clrf  Calc1H
    
    ; 2 décalages 16 bits
    ; efface la retenue éventuelle
    bcf	STATUS,C
    ; on commence par le poids faible puisqu'on va vers la gauche
    shl	Calc1L
    ; décalage avec la retenue
    shl	Calc1H
    bcf	STATUS,C
    shl	Calc1L
    shl	Calc1H
    
    
    ; on sauve au passage ce premier résultat
    ;Sauve le premier résultat 154 x 4
    Movf  Calc1L,w
    movwf calc2L
    Movf  Calc1H,w
    movwf calc2H
    
    
    ; 2 + 3 décalages  16 bits
    bcf	STATUS,C
    shl	Calc1L
    shl	Calc1H
    bcf	STATUS,C
    shl	Calc1L
    shl	Calc1H
    bcf	STATUS,C
    shl	Calc1L
    shl	Calc1H
    
    
    ; on sauve au passage ce second résultat
    ;Sauve le second résultat 154 x 32
    Movf  Calc1L,w
    movwf calc3L
    Movf  Calc1H,w
    movwf calc3H
    
    
    ; 2 + 3 + 1 décalages
    bcf	STATUS,C
    shl	Calc1L
    shl	Calc1H
    
    
    ; inutile de sauver ce dernier résultat on l'utilise directement
    ;Calc1 contient le résultat de 154 x 64
    
    
    ; additionne les 3 résultats
    ;____________________________
    ; initialise à zéro l'int resultat du calcul
    clrf resultH
    clrf resultL
    ; remarque ;
    ; on aurait puis mettre calc1 à l'intérieur 
    ; ou bien utiliser result à la place de calc1 
    ; on économisait 1 int
    
    
    
    ; addition des 2 ints des 2 premier calculs
    ; calc1 et calc2
    
    ; additionne les poids faible
    movf calc1L
    addwf calc2L,w
    ; sauve le résultat
    movwf resultL
    ; test s'il y a dépassement (retenue)
    btfsc STATUS,C
    ; oui faire +1 sur le résultat haut
    incf  resultH,f
    ; additionne les poids forts
    movf calc1H
    addwf calc2H,w
    ; additionne la retenue éventuelle
    addwf resultH,w
    ; sauve le resultat poids fort
    movwf resultH
    
    
    ; addition des 2 ints resulta troisième le calcul
    ; result et calc3
    
    ; additionne les poids faible
    movf calc3L
    addwf resultL,f
    ; test s'il y a dépassement (retenue)
    btfsc STATUS,C
    ; oui faire +1 sur le résultat haut
    incf  resultH,f
    movf calc3H
    ; additionne les poids fort
    addwf resultH,f
    
    
    dernier calcul la divison par 2
    ; 1 décalage  /2
    ; efface la retenue éventuelle
    bcf	STATUS,C
    ; on commence par le poids fort puisqu'on va vers la droite
    shr	resultH
    ; second décalage avec la retenue
    shr	resultL
    A+, pat

  10. Publicité
  11. #8
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Citation Envoyé par darkmall Voir le message
    heu ca je comprends pas vraiment...
    commutativité d'une équation du premier degré;
    http://mathematiques.ac-dijon.fr/res...s/algebre1.htm

    a x ( b + c + d) = ab + ac + ad
    154 x (4 + 32 + 64) = (154 x 4) + (154 x 32) + (154 x 64)
    154 x 100 = (154 x 4) + (154 x 32) + (154 x 64)

    Elles apparaissent ou mes valeurs converties?(dsl mais la je rame complet!)
    Dans resultH et resultL
    A+, pat

  12. #9
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Le post #7 est Non testé et a vérifier.
    C'est juste à titre d'exemple.
    A+, pat

  13. #10
    darkmall

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Salut,

    Merci pour ces merveilleuses explications je me sens moins perdu!

    Je vais essayé de faire une conversion à ta manière en m'inspirent de ton exemple!

    Merci beaucoup!
    Je te tiens au courant de mes éventuelles réussites!!!

    @+

  14. #11
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    les rotations c'est rlf et rrf chez Microchip et non pas shr et shl (qui est chez Motorola)
    et il faut mettre le f
    rlf adresse,f

    ou alors pour être compatible;
    Code:
    shr MACRO adr
       rrf adr,f
    ENDM
    
    shl MACRO adr
       rlf adr,f
    ENDM
    j'ai pas mis de return a la fin ...
    A+, pat

  15. #12
    darkmall

    Exclamation Re : Conversion binaire-decimal?Aïe aïe aïe

    Alors...voilà j'ai fais le programme!

    J'ai rentré comme valeur à convertir d'154' et j'ai d'7700' en sortie, donc là tout est ok!

    Mais maintenant, j'ai 7700 ce qui correspond à mes 3.08V non?? Comment décomposé 7700 afin d'obtenir la valeur 3.08? Soustraction par 10(en comptant les retenues?J'étais parti sur ca comme idée au début...)??

    Merci A+
    Dernière modification par darkmall ; 03/07/2008 à 23h13.

  16. #13
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    euh !!!

    7700/100/2=3.85
    pas 3.08 !
    c'est normal ?

    Mais maintenant, j'ai 7700 ce qui correspond à mes 3.08V non?? Comment décomposé 7700 afin d'obtenir la valeur 3.08? Soustraction par 10(en comptant les retenues?J'étais parti sur ca comme idée au début...)??
    La conversion classique binaire décimale.
    C'est on soustrait les milliers , puis les centaines puis les dizaines et reste les unités. (voir l'AN526 de Microchip)
    en faisant des boucles.
    Après on ajoute 0x30 pour avoir un chiffre ASCII sur chaque digit.
    Pour le '.' c'est juste une question d'affichage entre 2 digits.
    A+, pat

  17. #14
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    soustraction binaire de 16 bits

    "Rendez à César...";
    (extrait de ce prog)
    http://pagesperso-orange.fr/guerza/s...doc/Ass311.asm

    Code:
    sub16s
    	comf	AccB_H,f	; Complément à deux
    	comf	AccB_L,f	; du soustracteur
    	incf	AccB_L,f
    	btfsc	STATUS,Z
    	incf	AccB_H,f	; Tombe dans l'addition
    
    ;***************************************
    ;
    ;	Addition binaire signée 16 bits
    ;
    ;	Entrée : AccA et AccB
    ;	Réalise : AccA + AccB
    ;	Résultat : AccA
    ;
    ;***************************************
    
    add16s
    	movf	AccB_L,w	; Addition 16 bits
    	addwf	AccA_L,f	; AccA = AccA + AccB
    	btfsc	STATUS,C	; Retenue ?
    	incf	AccA_H,f	; OUI
    	movf	AccB_H,w	; NON
    	addwf	AccA_H,f
    	return
    A+, pat

  18. #15
    darkmall

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Citation Envoyé par freepicbasic Voir le message
    euh !!!


    La conversion classique binaire décimale.
    C'est on soustrait les milliers , puis les centaines puis les dizaines et reste les unités. (voir l'AN526 de Microchip)
    en faisant des boucles.
    Après on ajoute 0x30 pour avoir un chiffre ASCII sur chaque digit.
    Pour le '.' c'est juste une question d'affichage entre 2 digits.
    Mais 7700/100/2 = 38.5 (c'est parce que l'on est au centième?) je comprends pas si je fais 154 * 0.02(ma résolution (en réalité 19.6mV)) j'arrive a 3.08V et non 3.85V!?!!?

    ok donc si j'ai bien compris je soustrais 100, puis une fois que j'ai moins de 100, je soustrais 10 jusqu'à ce que j'ai plus que les unités?

    Pour l'affichage LCD avec conversion de valeur et déplacement des curseurs, le programme je l'ai déjà fais et il fonctionne( au moins ca, cela fonctionne...)

    J'ai regardé pour l'AN526, mais je n'ai pas vu les soustractions 16bits... Es que les programmes de l'AN526 sont compatible avec les PIC16Fxxx?car c'est seulement marqué PIC16Cxxx!

    Merci encore de ta patience, cela me fait vraiment plaisir d'apprendre toutes ces petites astuces!

    @+

  19. #16
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Citation Envoyé par darkmall Voir le message
    Mais 7700/100/2 = 38.5 (c'est parce que l'on est au centième?) je comprends pas si je fais 154 * 0.02(ma résolution (en réalité 19.6mV)) j'arrive a 3.08V et non 3.85V!?!!?
    Attention au convertisseur AN
    La référence est de 5V et le découpage de 256 la lecture fera 5.12 V si l'on lit 5V sans y faire Attention.


    ok donc si j'ai bien compris je soustrais 100, puis une fois que j'ai moins de 100, je soustrais 10 jusqu'à ce que j'ai plus que les unités?
    Oui

    Pour l'affichage LCD avec conversion de valeur et déplacement des curseurs, le programme je l'ai déjà fais et il fonctionne( au moins ca, cela fonctionne...)
    OK
    J'ai regardé pour l'AN526, mais je n'ai pas vu les soustractions 16bits... Es que les programmes de l'AN526 sont compatible avec les PIC16Fxxx?car c'est seulement marqué PIC16Cxxx!
    Voir le post #14 , j'ai mis un exemple soustraction et Addition sur 16 bits.
    A+, pat

  20. #17
    gedonet

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Bonjour
    Sur cette page: http://micropic.free.fr/pic2.html il y a une routine bcd.asm à cette adresse: http://micropic.free.fr/bcd.asm qui permet de convertir pour affichage sur un LCD, un 8 bits vers 3 decimales, un 16 bits vers 5 decimales, un 8 bit en hexa ou afficher un 8 bits en binaire.
    Je l'ai utilisée, elle est pas mal.
    Sur le même site, on trouve une routine math.asm http://micropic.free.fr/pic6.html pour des additions, soustractions, multiplications et divisions sur des 16 bits
    Gilles

  21. #18
    darkmall

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Citation Envoyé par freepicbasic Voir le message
    Attention au convertisseur AN
    La référence est de 5V et le découpage de 256 la lecture fera 5.12 V si l'on lit 5V sans y faire Attention.

    Voir le post #14 , j'ai mis un exemple soustraction et Addition sur 16 bits.
    OK, j'ai déjà tapé le programme de la soustraction/addition (en suivant l'exemple) cet après-midi et j'ai testé en vitesse, et cela ne fonctionne pas(ceci dit que je n'ai jamais eu un programme qui a fonctionné du premier coup...normal!).

    Je verrais cela demain car là j'ai plus trop la tête à ça!!

    Citation Envoyé par gedonet
    Bonjour
    Sur cette page: http://micropic.free.fr/pic2.html il y a une routine bcd.asm à cette adresse: http://micropic.free.fr/bcd.asm qui permet de convertir pour affichage sur un LCD, un 8 bits vers 3 decimales, un 16 bits vers 5 decimales, un 8 bit en hexa ou afficher un 8 bits en binaire.
    Je l'ai utilisée, elle est pas mal.
    Sur le même site, on trouve une routine math.asm http://micropic.free.fr/pic6.html pour des additions, soustractions, multiplications et divisions sur des 16 bits
    Gilles
    Merci pour les liens je regarderais cela en détail demain mais cela me semble très complet!!!

    Merci beaucoup à vous, bonne nuit les p'tits gars!

  22. #19
    darkmall

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Bonjour,

    Voili voilou je fini de corriger mon programme mais cela ne joue toujours pas(à mon avis), je m'explique.

    J'ai 7700 comme valeur ce qui correspond à 154(*100/2), je commence mes soustraction de 100 j'incrémente a chaque soustraction de 100 une variable(dans mon cas :val_save), puis une fois arrivé à moins de 100, je soustrais de 10, et incrémente ma variable pour chaque soustraction (dans mon cas resultat_l), jusqu'à ce que je sois a moi de 10.

    Donc dans mes variables j'ai :

    Variable de soustraction par 100 : val_save=32
    Variable de soustraction par 10 : resultat_l=8
    Reste : 4

    Je doit bien arrivé à 38.5 non?donc je ne comprend pas d'ou vient l'erreur puisque toute les soustractions sont correctes en simulation!

    Merci de votre aide!!!!

    A++

  23. #20
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    un int 16 bits est sur 65535.
    Une conversion binaire /décimale devra avoir 5 chiffres.
    et il faudra diviser par 10000, 1000 , 100 , 10 , unité
    Et on ne devra pas dépasser 10 , ça parait évident puisqu'on est en base 10 (décimale).
    donc pas plus de 10 boucles par colonne.

    On devrait arriver à 3850.
    A+, pat

  24. #21
    darkmall

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Bijour,

    Alors me revoilà, programme presque fini...(enfin je crois...)

    Alors j'obtiens 03850 (cool non?)

    Le problème c'est que je ne suis pas entièrement convaincu, si j'ai comme valeur binaire(qui sort de mon convertisseur) h'FF j'obtiens en sortie 06370...mais ca je ne comprends pas j'ai beau faire moulttes calculs je n'y arrive pas!

    Un ch'ti peu d'aide ne serais pas de refus....

    @++

  25. #22
    darkmall

    Re : Conversion binaire-decimal?Aïe aïe aïe

    Toujours personne qui ne peux m'aider??

  26. #23
    freepicbasic

    Re : Conversion binaire-decimal?Aïe aïe aïe

    le code SVP.
    A+, pat

Discussions similaires

  1. le passage en 3/2! aie aie aie
    Par snoozer dans le forum Orientation après le BAC
    Réponses: 17
    Dernier message: 12/05/2007, 10h43
  2. prépa véto :aie aie aie?
    Par une_lycéenne_ dans le forum Orientation après le BAC
    Réponses: 12
    Dernier message: 18/10/2006, 13h29
  3. géométrie aïe aïe aïe !!!!
    Par VIOLON dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 24/12/2005, 12h03
  4. MSN et FREE AIE AIE AIE
    Par jpex dans le forum Internet - Réseau - Sécurité générale
    Réponses: 2
    Dernier message: 08/04/2004, 18h23