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

Convertion binaire To BCD avec pic16f



  1. #1
    bzh.diato

    Exclamation Convertion binaire To BCD avec pic16f

    Bonjour,
    Voila, je galère depuis deux jours sur ce problème.
    J'utilise la routine trouvée ici http://www.dattalo.com/technical/software/pic/bcd.txt.
    Je transmets les valeurs à un MAX7221
    Je cherche à effacer les zéros inutils à gauche de ma valeur
    Par exemple si la valeur "00010" est affichée, je cherche à ne faire apparaitre que " 10".
    Merci pour votre aide.
    Je suis déjà allé consulter le site de Bigonoff et essayé divers idées mais rien à faire. J'obtiens tout sauf ce que je cherche à faire !

    -----


  2. Publicité
  3. #2
    Jack

    Re : Convertion binaire To BCD avec pic16f

    il faut détecter dans ton programme si c'est un '0' inutile, et si c'est le cas au lieu d'envoyer l'octet correspondant à l'allumage d'un 0, tu mets tous les segment à 0 (blank).

    Je ne vois pas trop ce qui te bloque.

    A+

  4. #3
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Re,
    Oui j'ai compris la manip et c'est ce que j'essaye de réaliser par ce bout de code mis à la suite de la convertion est appelé par un call.
    Dans le simulateur de MPLAB, il parrait bon mais lorsqie je l'essaye sur la maquette, niette !
    J'ai certaiement une grosse erreur quelque part mais où ?

    Mon bout de programme qui essaye de réaliser cette fonction :
    Code:
    ;#################################
    ;####			Suppression des Z�o pour			
    ;####			les dizaines et centaines	######
    ;################################
    zero		    CLRF	cent
    			CLRF	dix
    			MOVF 	Hund,0
    			MOVWF 	cent
    ;			movlw	cent
    			andlw b'00001111'
    			movwf	cent
    			movf 	b'00000000',w
    			BCF		STATUS,Z
    			subwf	cent,w
    			btfss	STATUS,Z
    			goto	sortie
    			movf    Hund,w
    			clrf	Hund
                     	addlw   0x0f
            	      	movwf   Hund
    ;			movlw 	0x0f
    ;			movwf	Hund
    ;			;movf	Hund,0
    zerodix 	MOVF 	Tens,0
    			MOVWF 	dix
    ;			;movlw	dix
    			andlw b'00001111'
    			movwf	dix
    			movf 	b'00000000',w
    			BCF		STATUS,Z
    			subwf	dix,w
    			btfss	STATUS,Z
    			goto	sortie
    			movlw 	0x0f
    			movwf	Tens
    			movf	Tens,0
    sortie		return
    Dernière modification par monnoliv ; 24/08/2006 à 20h51.

  5. #4
    Jack

    Re : Convertion binaire To BCD avec pic16f

    je ne suis pas vraiment familier de l'assembleur pic.

    mais je me demandais si ton problème ne venais pas plutôt de l'exploitation du MAX7221.

    A+

  6. #5
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Hello,
    Je ne pense pas car avec deux boutons poussoirs j'incremente et décrémente des valeurs de 1 à 512 et le MAX7221 les affichent correctement. Donc ma routine de dialogue avec le Max est correcte et il est initialisé correctement.
    A+

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

    Re : Convertion binaire To BCD avec pic16f

    Hello,

    pour faire un 'blank' avec ce controleur il faut positionner le digit correspondant à 0x0f

    j'ai lu en diagonale la source mais je ne vois pas dans ce programme à quel endroit les quatre bits d'un quartet sont levés ?

    A+,

    Bruno

  9. Publicité
  10. #7
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Bonjour à tous,

    J'ai compris ce que je devais faire mais je débute en Asm et c'est peut être ma méthode qui n'est pas bonne.
    Je résume les différentes étapes de mon source :
    Je prends la valeur de hund pour la mettre dans W et la copier dans la variable cent.
    J'ajoute à cette variable la valeur "00001111" pour fixer l'état des bits 4,5 et 6 qui sont indéfinis dans toucher à la valeur des bits 0,1,2 et 3 (valeur à afficher) et je l'envois dans cent
    Je charge la valeur "00000000" dans w que je soustrais à cent.
    Je regarde l'état de Z du STATUS, si il est à 1 c'est que les deux valeurs soustraites sont identiques donc c'est un Zéro.
    Si Z est à 1 j'ajoute la valeur 0x0f à cent et l'envois dans Hund. et je continue en faisant la même chose pour Tens. Si Z est à 0 je sors (Hund différent de 0)

    Ps: J'apelle la valeur à afficher sur l'afficheur des centaine par un "movf Hund,0" et sur celui des dizaines par un "movf Tens,0"

    Je pense que, je ne dois pas aller ecrire correctement dans mon "Hund" et Tens en sortie de routine de suppression des Zéro. Jecommence l'assembleur depuis 15 jours et je ne différencie pas encore très bien ce que fait réellement le movf et le movwf.

    Merci à tous de m'aider car une fis résolu cela, j'aurai terminé ma réalisation et c'est un petit plus au niveau de l'affichage que j'aimerai faire.
    A+

  11. #8
    umfred

    Re : Convertion binaire To BCD avec pic16f

    movf registre, destination:
    - si destination = 0, on copie le contenu du registre dans w
    - si destination = 1, on copie le contenu du registre dans lui-même.

    movwf registre:
    - copie w dans le registre.

    Pour revenir, à ton problème de non affichage des zéros non significatifs, il faut simplement regarder si tout d'abord si TenK =0 on ne l'affiche pas; ensuite si Thou = 0 (en plus de TenK), on ne l'affiche pas; idem pour Hund et Tens. et on affiche Ones dans tous les cas.

  12. #9
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Bonjour,
    Je suis d'accord avec vous tous sur la méthode mais mon bout de code qui normalement réalise cette fonction a un problème quelque part.
    On tourne en rond depuis le début. La méthode je l'ai assimilée mais je vous propose plutôt de vous plonger quelques instants dans ce bout de code quelques posts plus hauts + celui 2 posts au dessus de celui ci qui décrit textuellement ce qui j'essaye de réaliser dans ce code.
    J'ai certainement programmé une erreur quelque part mais je n'arrive pas à déterminer où et j'ai plus besoin de votre regard sur ce bout de code que sur la méthode à suivre. C'est juste pour que la critique soit constructive et que ne soit pas posté à la suite la méthode déclinée textuellement par chacun pour revenir au point initial à chaque fois.
    A+

  13. #10
    Invité

    Re : Convertion binaire To BCD avec pic16f

    Hello,

    le problème peut être dans un autre morceau de code, par exemple on ne voit pas l'interface SPI.
    pour ne pas tourner en rond il faudrait poster tout le code, et tout au moins commenter la section incriminée, car la solution vient parfois en exprimant les choses en langage clair

    par exemple j'ai l'impression qu'il y a un mélange entre les AND et les ADD

    Bruno

  14. #11
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Hello,
    bon, je prépare un fichier texte contenant tout le code de la partie affichage de l'entrée jusqu'à sa sortie et je le glisse dans un prochain post.
    Le problème provient peut être d'une confusion de deux commandes. Je pensais plus à celles de movf et movwf. C'est pas impossible aussi avec add et and car je commence de 15 jours en asembleur.
    A+

  15. #12
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Re,
    Juste avant de glisser le code, je rapelle que ca que jecherche à afficher apparait correctement sur mes 7 segements (valeur de 1 à 512) piloté par un MAX7221.
    Je cherche depuis dimanche à supprimer les zéro inutils que se trouvent à gauche de mes chiffres.
    Voici les routes qui m'effectuent toutes ces fonctions (j'ai enlever les déclaration de varialbes et tout le reste. Je démarre à l'appel de la routine de concersion (conv) puis suppression zéro (zero) et affichage (see).
    La routine de suppression de Zéro est commentée.
    Je pencherai plus pour un problème de valeur qui n'irai pas dans le bon registre à la sortie de la routine suppréssion zero pour que celle de l'affichage aille chercher la valeur modifié si zero au bon endroit.
    A° et merci pour ceux qui se pencheront sur ce hic. Je continue à chercherde mon côté, je ne baisse pas les bras
    Le source est aussi en pièce jointe.


    La pièce jointe suffit. Pas la peine d'encombrer les pages
    Fichiers attachés Fichiers attachés
    Dernière modification par Jack ; 25/08/2006 à 16h05.

  16. Publicité
  17. #13
    freepicbasic

    Re : Convertion binaire To BCD avec pic16f

    addlw 0x0f ; j'ajoute 0x0f à w (valeur blank pour max7221)
    Non !

    IORlw 0x0f ; set 0x0f à w (valeur blank pour max7221)
    à condition que la partie haute soit à zéro

    étonnant parce que ici c'est bon;
    movlw 0x0f
    movwf Tens
    movf Tens,0
    sortie return

    Alors pourquoi ne pas faire aussi un movlw ?
    d'ailleurs c'est en commentaire !
    Dernière modification par freepicbasic ; 25/08/2006 à 16h32.

  18. #14
    freepicbasic

    Re : Convertion binaire To BCD avec pic16f

    Qu'est ce que affiche cent ou Ten ?
    parce que si c'est cent il n'est pas modifié !

  19. #15
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    bonjour FreepicBasic
    Merci de t'être penché sur mon soucis.
    Je répond à tes deux posts à travers celui-ci

    Les deux s'affichent le zero des centaines et celui des dizaines

    Je vais modifier mon sources par iorlw et compiler puis essayer sur la maquette
    Pour la partie haute (bis 4 à 7; je suppose), c'est ce que j'essaye de faire dans mon source à cet endroit :
    MOVWF cent
    andlw b'00001111' ; J'ajoute à cent 00001111 pour mettre à zero les bits 7,6,5 et 4 sans changer ceux des 3,2,1 et 0
    movwf cent ; et je remets dans cent

    Mon movwl est en commentaire car j'ai essayé plusieurs solutions

    C'est "Hund" qui est affiché. "Cent" me sert de variable de test.
    Merci à plus. Je répondrai de nouveau à tes question. J'essaye la modif que tu me propose dans un premier temps.
    A+

  20. #16
    freepicbasic

    Re : Convertion binaire To BCD avec pic16f

    tu fais une conversion ASCII avec +0x30
    Ok !
    mais tu ne test pas s'il y a des blancs.
    la conversion est faite avant ou après ?
    car si c'est après , ça risque d'être faux.

  21. #17
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Re,
    Je reviens du test.
    Alors, la modif est un bon début car mon zero des centaines disparait de temps en temps (je n'ai pa fait la modif pour les dizaines) parcontrez je n'ai plus une progression régulière de 1 en 1 de 1 à 512. J'ai des sauts de valeurs par exemple de 399, je retourne à 0001 alors qu'avant ca passait à 400 sans soucis.
    Il y a peut être cette fois le problème de la partie haute qui n'est pas à zéro donc hund, Tens et Ones sont certainement bien incrémentés mais ne contiennent plus la bonne valeur suite au passage dans appel de conv.
    A+

  22. #18
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Re,
    la conversion ascii, je l'ai dévalidée car elle m'ajoute des 1 sur les bits 4 et 5 des valeurs.
    A+

  23. Publicité
  24. #19
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Dans l'ordre :
    Je convertis mes valeurs binaires en BCD
    Je réalise le test dans les variables cent et dxi en y copiant respectivement Hund et Tens dedans pour connaitre sur Hund et cent la presence de la valeur zéro. Si c'est zero detecté par la sustraction par 00000000, je complété par la valeur 00001111 (blank) Hund dans un premienr temps et Tens si nécessaire.
    Ensuite j'affiche Hund, Tens, et Ones

    Cent et dix ne sont que des variables utilisées pour le test (ne sont pas affichées). Le test peut certainement se réaliser sans passer par ces variables mais j'ai pas vu comment faire.
    A+

  25. #20
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Bonjour
    Je pense avoir trouvé quelque chose d'intéresant concernant les cmparaisons de valeurs, je regarderai à cela demain

    http://www-licence.ufr-info-p6.jussi...r.html#si_test
    A+

  26. #21
    Invité

    Re : Convertion binaire To BCD avec pic16f

    Hello,

    ton code n'est pas complet, n'est donc pas compilable, et ne tournera pas en simu avec MPLAB :?

    A+,

    Bruno

  27. #22
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Hello,
    J'ai très bien vu que le code des exemples n'était pas complet.
    C'est surtout pour avoir des exemples sur les comparaisons et en reprendre la structure.
    Au niveau de la soustraction, il y a déjà des différences entre ces exemples et le mien.
    A+

  28. #23
    umfred

    Re : Convertion binaire To BCD avec pic16f

    Ton sous programme 'zero' sert à rien, c'est dans le sous programme 'see' qu'il faut controler si ls registres Hund, Tens, ... est égale a la valeur 0 ou 0x30 (0 en ascii).

    Le plus facile à écrire et pour rendre le code facilement lisible serait d'avoir une fonction d'affichage du style:

    Code:
    ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    ;Sous programme d'affichage
    ;  r_wconf_hbyte contient l'adresse d'affichage (sauf erreur de ma part
    ;  r_wconf_lbyte contient la valeur à afficher
    ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Affiche
    		bcf		CSA		;cs1\=0
    		movf 	r_wconf_hbyte,0	; to w
    		call  	spi_8bit_word	; call subroutine
    ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    		movf	r_wconf_lbyte,0	; to w
    		call 	spi_8bit_word	; call subroutine
    ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    		bsf		CSA		;cs1\=1
                    return
    Pour l'utiliser il suffira de mettre l'adresse dans rr_wconf_hbyte et la valeur dans r_wconf_lbyte.

    En modifiant le code, avec cette fonction, cela donnerait :
    Code:
    see
    
    		movlw	0x09		;0x09 to w
    		movwf	r_wconf_hbyte	;w to register
    		movlw	0xFF		;0xFF to w
    		movwf	r_wconf_lbyte	;w to register
    		call	Affichage	;fonction d'affichage décrite avant
    
    		movlw	0x01		;0x01 to w
    		movwf	r_wconf_hbyte	;w to register
    		movlw	0x0f		;0x00 to w
    		movwf	r_wconf_lbyte	;w to register
    		call	Affichage	;fonction d'affichage décrite avant
    
    
    Affihcage_Centaine
    		movlw	0x02		;0x02 to w
    		movwf	r_wconf_hbyte	;w to register
    		movf 	r_wconf_hbyte,0	; to w
    
    		movf	Hund,0		;moves copy of contents of hundred into w
    		movwf	r_wconf_lbyte	;w to register
    
    		sublw	0x30		; on regarde si Hund vaut 0
    					;je fais un test avec la valeur ASCI de 0,
    					; si ce n'est pas cette valeur , il faut la remplacer
    
    		bne	Affichage_Centaine_Non_Zero
    		movlw	0x0f		;pas d'affiche du caractère
    		movwf	r_wconf_lbyte	;w to register
    
    Affichage_Centaine_Non_Zero
    		call	Affichage	;fonction d'affichage décrite avant
    
    
    Affihcage_Dizaine
    		movlw	0x03		;0x03 to w
    		movwf	r_wconf_hbyte	;w to register
    
            	movf	Tens,0		;moves copy of contents of Tens into w
    		movwf	r_wconf_lbyte	;w to register
    
    		sublw	0x30		; on regarde si Hund vaut 0
    					;je fais un test avec la valeur ASCI de 0,
    					; si ce n'est pas cette valeur , il faut la remplacer
    
    		bne	Affichage_Centaine_Non_Zero
    		movlw	0x0f		;pas d'affiche du caractère
    		movwf	r_wconf_lbyte	;w to register
    
    Affichage_Dizaine_Non_Zero
    		call	Affichage	;fonction d'affichage décrite avant
    
    
    Affichage_Unité
    		movlw	0x04		;0x04 to w
    		movwf	r_wconf_hbyte	;w to register
    
    		movf	Ones,0		;moves copy of contents of Ones to w
    		movwf	r_wconf_lbyte	;w to register
    
    		sublw	0x30		; on regarde si Hund vaut 0
    					;je fais un test avec la valeur ASCI de 0,
    					; si ce n'est pas cette valeur , il faut la remplacer
    
    		bne	Affichage_Centaine_Non_Zero
    		movlw	0x0f		;pas d'affiche du caractère
    		movwf	r_wconf_lbyte	;w to register
    
    Affichage_Unité_Non_Zero
    		call	Affichage	;fonction d'affichage décrite avant
    
    		return

    PS: Pour les commentaires, indique plutot le but du code rentré que la traduction de la ligne, ca sera plus parlant ainsi (par exemple affichage d'un caractère blanc, initialisation de l'afficheur, ....)

  29. #24
    freepicbasic

    Re : Convertion binaire To BCD avec pic16f

    http://perso.orange.fr/pat.deaubonne/DOWNLOAD/AFFICH.C
    Un prog réalisé en turboC pour le MAX7219, il y a quelques années.

    ça peut peut être aider un peu.

  30. Publicité
  31. #25
    bzh.diato

    Re : Convertion binaire To BCD avec pic16f

    Bonjour,
    Je regarderai de plus prêt à vos propositions dès lundi car je pars monter le matos pour un concert ce soir et demain journée repos.
    Je vous tiendrai au courant.
    Le projet est de réaliser un démultiplexeur pour DMX512 (éclairage scénique). J'ai trouvé un source pour la réception de la trame DMX, et j'adapte un affichage MAX7221 + BP pour gérer le premier canal DMX à décoder à la place des DIPs qui servent à programmer cette adresse. J'ai réussis à adapter tout cela mais je bute sur ces zéros. C'est pas vital mais ça ferai plus chouette !
    A+ et encore merci. Bonne soirée même si elle est pas musicale !

Sur le même thème :

Discussions similaires

  1. Réponses: 14
    Dernier message: 18/12/2007, 07h36
  2. Conversion binaire --> BCD
    Par joeytrib dans le forum Électronique
    Réponses: 2
    Dernier message: 17/09/2006, 18h12
  3. Conversion BCD / binaire
    Par Gérard dans le forum Électronique
    Réponses: 8
    Dernier message: 12/06/2006, 20h19
  4. Binaire BCD
    Par joeytrib dans le forum Électronique
    Réponses: 4
    Dernier message: 09/06/2006, 19h43
  5. Conversion Binaire Naturel Vers Bcd
    Par JérémyLOOTENS dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 08/02/2006, 11h05