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

Double afficheurs 7 segments



  1. #1
    Haox

    Double afficheurs 7 segments


    ------

    Bonjour tout le monde,

    Pour ceux qui me connaissent (a), mon programme fonctionne enfin !!
    Enfin il marche presque.

    En réalité, je le test en mode Debugger avec le MPLAB ICD 2.
    Mes deux 7 segments affichent bien ce qu'ils doivent afficher, seulement un des 7 segments (le 7 segments des unités) est très faiblement alimenté. Du coup je suis obligé d'éteindre les lumières pour voir les chiffres bougés et encore il faut vraiment faire attention... Par contre, le 7 segments des dizaines s'affichent correctement.

    Pour ceux qui ne connaissent pas mon projet, je répète les grandes lignes.

    Je mesure la force qu'on met pour attraper des objets. Pour ça j'ai des capteurs de pression à résistance variable qui font varier la tension du circuit de 0 à 4,5V. Mon PIC18F2525 fait 8 conversions analogiques-N, il fait la moyenne, puis un pourcentage de la moyenne. De là, je compte le nombre de dizaine et le nombre d'unité. Et je veux les afficher à l'aide de l'interruption du timer0 toutes les 20ms.

    Le programme est écrit, mais comme je l'ai dit au début du message, mon cadran des unités n'est pas assez éclairé et je ne sais pas pourquoi...
    Mes 7 segments sont des TDSR 5160 à cathode commune. Ils sont pilotés par 2 transistors branchés sur les PORTC,0 et PORTC2.

    Quelqu'un aurait une idée du problème ?

    Voici mon code :

    Code:
    ;*********************************************************************
    ;                        	   INTERRUPTION        	                 *
    ;*********************************************************************
    
    			;					AFFICHAGE				  ;
    			; Cette interruption sert à afficher toutes	  ;
    			; les 20ms sur les cadrans 7 segments les     ;
    			; données stockées dans les registres ones 	  ;
    			; et tens									  ;
    			;**********************************************
    
    	org 	0x08
    
    
    	movlw	MASK_PIR1OFF
    	movwf	PIR1,0
    
    AFFICHAGE
    
    
    	movlw 	UPPER(tabl_segment)		; charger bits 16 à 21 de l’adresse
    	movwf 	TBLPTRU 				; dans pointeur UPPER
    	movlw 	HIGH(tabl_segment) 		; charger bits 8 à 15 de l’adresse
    	movwf 	TBLPTRH 				; dans pointeur HIGH
    	movlw 	LOW(tabl_segment) 		; charger bits 0 à 7 de l’adresse
    	movwf 	TBLPTRL 				; dans pointeur LOW
    
    	clrf	PORTC
    
    	BCF		PORTC,0,0				; On configure RC0 et RC2 en sortie
    	BCF		PORTC,2,0
    
    	movlw	0x01					; on met 1 dans w
    	movwf	casel					; on charge 1 dans casel
    
    	cpfseq	casel,0					; comparer casel à w, et sauter s'ils sont égaux
    	
    	bra		AFITENS					; si différent alors on va afficher les dixaines
    	
    	movf	ones,w,0				; mettre le nombre d'unité dans w
    	addwf	TBLPTRL,1,0				; ajouter ones dans le pointeur de la table L
    
    	tblrd	*						; lire la table à l'adresse du pointeur
    
    	movf	TABLAT,w				; mettre le résultat de la table dans w
    	movwf	PORTB					; envoyer la valeur de la table vers l'afficheur 7 segments
    	
    	BCF		PORTC,0					; allumer uniquement le cadran des unités
    
    	BRA		NVCASEL					; aller à NVCASEL de façon à sélectionner un nouveau cadran
    
    AFITENS
    
    	movlw	0x02					; charger 2 dans w
    	cpfseq	casel,0					; comparer si casel est égal à deux
    									; si oui alors sauter l'instruction suivante
    	bra		NVCASEL					; sinon aller à NVCASEL
    
    	movf	tens,w,0				; charger les tens dans w
    	clrf	TBLPTRL
    	addwf	TBLPTRL,1,0				; Ajouter les tens dans le pointeur de la table
    
    	tblrd	*						; lire la table 
    
    	movf	TABLAT,w				; charger la valeur de la table pointer dans w
    	movwf	PORTB					; envoyer la valeur vers l'afficheur
    
    	BSF		PORTC,0
    	BCF		PORTC,2					; allumer uniquement le cadran des dixaines
    
    NVCASEL
    
    	RLNCF	casel,1,0				; faire une rotation de bit vers la gauche
    	movlw	0x02					; si casel > 2 alors le remettre à 1
    	cpfsgt	casel,0					; si = à 2 alors retourner pour afficher les dixaines
    	bra		AFITENS
    
    	bcf		INTCON,TMR0IF			; enlever le flag de l'interruption
    
    	movlw	0x63					; charger w pour le timer low
    	movwf	TMR0L					; charger le registre low du timer
    	movlw	0xFF					; charger w pour le timer high
    	movwf	TMR0H					; charger le registre high du timer
    	
    
    	movlw	MASK_PIR1ON				; Autoriser l'interruption du timer2
    	movwf	PIR1
    
    	retfie	FAST

    -----

  2. #2
    invite03481543

    Re : Double afficheurs 7 segments

    Bonjour,

    si l'afficheur des unités affiche la bonne valeur attendue, le problème est peut-être coté hard.
    Comment avez-vous polarisé votre transistor qui commande le digit et qu'avez-vous mis comme valeurs de résistances pour les segments?
    A+

  3. #3
    Haox

    Re : Double afficheurs 7 segments

    Merci de votre réponse,

    Le pb est résolu, c'était un pb de code. Le cadran pour l'unité ne restait pas assez longtps sur 1. Donc je le voyais presque pas!

Discussions similaires

  1. connection afficheurs 7 segments
    Par nonolight dans le forum Électronique
    Réponses: 9
    Dernier message: 24/11/2007, 14h35
  2. Compteur - Afficheurs 7 segments
    Par italiano76 dans le forum Électronique
    Réponses: 68
    Dernier message: 14/05/2007, 18h24
  3. Afficheurs segments
    Par YTK dans le forum Électronique
    Réponses: 4
    Dernier message: 26/11/2006, 16h17
  4. Afficheurs 7 segments
    Par joeytrib dans le forum Électronique
    Réponses: 12
    Dernier message: 09/06/2006, 08h25
  5. afficheurs 7 segments bleu !
    Par Ryback08 dans le forum Électronique
    Réponses: 5
    Dernier message: 12/01/2004, 18h55
Découvrez nos comparatifs produits sur l'informatique et les technologies.