Bug sur PIC commandant des LEDs
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Bug sur PIC commandant des LEDs



  1. #1
    boy30

    Bug sur PIC commandant des LEDs


    ------

    Bonjour, j'y ai passé toute l'après midi pour résoudre le problème mais je n'y suis pas arrivé, donc à défaut de le résoudre, j'ai réussi à "l'isoler".
    La carte sert juste à gérer des digits faits par des segments de trois diodes en parallèles, (j'aurais dû les mettre en série!). Mais j'ai vraiment quelque chose d'étrange, puisqu'en ciblant la panne, je me suis aperçu que dès qu'un des segments a, b ou c n'était pas utile pour l'affichage, alors les autres non-plus ne s'allumaient pas, j'ai re-regardé la doc du 16F876A que j'utilise ici mais je ne vois rien de spécial puisqu'il faut un 0 en sortie du PIC sur un NPN (donc pas de courant rentrant dans le pic) pour allumer le digit correspondant.
    Le test le plus parlant est le suivant: je dis au PIC de faire en sorte de m'afficher 7 sur le digit, il me l'affiche, 8 aussi et d'autres encore, mais 1 ne fonctionne pas, 2 non plus etc...
    En tension pour le segment a, j'ai 0 sur RB1 et 1 sur le reste du port, ce 0V arrive à la base d'un BD139 via une 4.7k, j'y ai aussi 0V, par contre j'ai aussi 0V à son collecteur via une pull-up de 1k au 12V comme si il était saturé mais il ne peut pas l'être avec le Vb qu'il a, a comprends pu comment qu'est-ce qui ce passe, je poste aussi le schéma et le petit code exécuté pour mieux comprendre, j'espère que quelqu'un pourra me guider...
    Le schéma commande des segments:

    carte_bug876.JPG

    avec les sorties correspondantes, du PIC, associées:

    portb_876.JPG

    et le programme gérant cela avec aucune interruption autorisée, pas de pull-up sur PORTB et RB1 à RB7ensortie:
    Code:
    ;*****************************************************************************
    ;                      PROGRAMME PRINCIPAL                                   *
    ;*****************************************************************************
    
    start
    
    ; test pour afficheur 7 segments
    
    	bsf		PORTC, 0	; RC0 à 1
    	bsf		PORTC, 1	; RC1 à 1
    
    ;	movlw	B'00000000'	; test huit => OK
    ;	movlw	B'11111110'	; test blanc => OK
    
    ;	movlw	B'11111100'	; test segment a => NOK
    ;	movlw	B'11111010'	; test segment b => NOK
    ;	movlw	B'11110110'	; test segment c => NOK
    
    ;	movlw	B'11101110'	; test segment d => OK
    ;	movlw	B'11011110'	; test segment e => OK
    ;	movlw	B'10111110'	; test segment f => OK
    ;	movlw	B'01111110'	; test segment g => OK
    
    ;	movlw	D'1'		; test 1 => NOK => a et b ne s'allument pas (rien donc)
    ;	movlw	D'2'		; test 2 => NOK => a et b ne s'allument pas
    ;	movlw	D'3'		; test 3 => OK
    ;	movlw	D'4'		; test 4 => NOK => b et c ne s'allument pas
    ;	movlw	D'5'		; test 5 => NOK => a et c ne s'allument pas
    	movlw	D'6'	; test 6 => NOK => a et c ne s'allument pas
    ;	movlw	D'7'		; test 7 => OK !!! !!!
    ;	movlw	D'8'		; test 8 => OK !!!
    ;	movlw	D'9'		; test 9 => OK
    
    	call	dec7seg		; va décoder en 7 segments
    	movwf	PORTB		; envoi la bonne valeur sur digit1
    
    
    boucle
    
    	movf	TMR0, w	;
    	btfsc	STATUS, Z	; TMR0 != 0?
    	call	special
    
    	goto	boucle	; oui => boucler
    
    special
    	bsf		PORTC, 5	; SC à 1 (RC5)
    	return
    
    ; décodage bcd/7 segemnts pour affichage sur digit
    dec7seg
    	addwf	PCL, f	; additionne (w) au PC
    	retlw	ZERO	; si (w) = 0, return avec ZERO dans w
    	retlw	UN		; si (w) = 1, return avec UN dans w
    	retlw	DEUX	; si (w) = 2, return avec DEUX dans w
    	retlw	TROIS	; si (w) = 3, return avec TROIS dans w
    	retlw	QUATRE	; si (w) = 4, return avec QUATRE dans w
    	retlw	CINQ	; si (w) = 5, return avec CINQ dans w
    	retlw	SIX		; si (w) = 6, return avec SIX dans w
    	retlw	SEPT	; si (w) = 7, return avec SEPT dans w
    	retlw	HUIT	; si (w) = 8, return avec HUIT dans w
    	retlw	NEUF	; si (w) = 9, return avec NEUF dans w
    
    ;***** RB1 à RB7 <=> a à g et RB0 à 0 (1 aurait aussi pu faire l'affaire)
    ZERO		EQU	B'10000000'	; valeur en 7 segments de ZERO
    UN			EQU	B'11110010'	; valeur en 7 segments de UN
    DEUX		EQU	B'01001000'	; valeur en 7 segments de DEUX
    TROIS		EQU	B'01100000'	; valeur en 7 segments de TROIS
    QUATRE		EQU	B'00110010'	; valeur en 7 segments de QUATRE
    CINQ		EQU	B'00100100'	; valeur en 7 segments de CINQ
    SIX			EQU	B'00000100'	; valeur en 7 segments de SIX
    SEPT		EQU	B'11110000'	; valeur en 7 segments de SEPT
    HUIT		EQU	B'00000000'	; valeur en 7 segments de HUIT
    NEUF		EQU	B'00100000'	; valeur en 7 segments de NEUF

    -----
    ....j'ai glissé chef!

  2. #2
    gcortex

    Re : Bug sur PIC commandant des LEDs

    montage shadock. En plus des afficheurs 7 segments géants çà se vend.
    il faut un bon découplage de ton 5V avec par ex des condensateurs tantale.
    et si possible brancher la partie affichage sur une tension différente.

  3. #3
    terriblement

    Re : Bug sur PIC commandant des LEDs

    mettre des diodes en parallèles n'augure rien de bon !

  4. #4
    boy30

    Re : Bug sur PIC commandant des LEDs

    Je n'utilise le 5V que pour un 74XXX et pour le 16F876A avec un condensateur de 100 nf (pas tantale) au plus près de leur alim et du 12V pour l'affichage des digits. Seule la commande des digits (12V) se fait par le port B du PIC (~5V) via les BD139.
    J'ai un soucis dès qu'il s'agit de ne pas allumer un des trois segments a, b ou c, aucun d'entre ou ensemble, cela fonctionne, seulement un pas allumé fait en sorte que les deux autres non plus ne s'allume pas. Pourtant, biensûr, cela fonctionne très bien sous ISIS en simulation mais regarder ce que ça me donne sur le circuit.
    Pour le 6: (manque a et c)

    6_d4.JPG

    alors qu'ils sont bien là pour le 7:

    7_d4.JPG

    reste aussi à poncer un peu les trous des leds et on voit bien là le défaut de la mise en parallèle des leds.
    ....j'ai glissé chef!

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

    Re : Bug sur PIC commandant des LEDs

    100n c'est pas assez
    essaye un 470n

  7. #6
    boy30

    Re : Bug sur PIC commandant des LEDs

    Fichtre!!! J'aurais dû deviner d'après la panne; il faut un transistor saturé pour éteindre (ne pas allumer) un segment et un transistor bloqué pour l'allumer. Les trois ensembles ou aucun d'allumé, ça fonctionne, mais dès qu'un des trois doit être éteint alors que l'autre ou les autres segments doi(ven)t être allumés, ça ne fonctionne plus, il y avait une sorte de porte ET entre eux...
    Que nenni, en testant les segments un à un avec une réplique de la commande sur plaque à essais, je me suis aperçu qu'en alimentant le segment a, b ou c, les trois s'allumaient moins brillamment; ils sont tout simplement reliés entres eux, un seul transistor saturé donc sur les trois suffisaient à éteindre les autres, reste à savoir où ils se "touchent" maintenant, merci pour l'aide tout même si c'était un problème que seul moi pouvait voir.
    ....j'ai glissé chef!

Discussions similaires

  1. Effectuer un branchement de 4 LEDs par broche sur PIC 16F628
    Par invite93ed6d5d dans le forum Électronique
    Réponses: 10
    Dernier message: 09/01/2012, 08h31
  2. allumer des leds grâce au pic et à l'accéléromètre
    Par invitee2e61ccb dans le forum Électronique
    Réponses: 1
    Dernier message: 19/10/2011, 16h32
  3. Bug sur le script des pseudos frames
    Par lordgodgiven dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 31/01/2011, 08h53
  4. Pic pilotant des leds infrarouges ...
    Par invitedd558ae9 dans le forum Électronique
    Réponses: 8
    Dernier message: 29/11/2008, 07h36
  5. Bug sur insoleuse a PIC
    Par invite09837ae2 dans le forum Électronique
    Réponses: 29
    Dernier message: 20/09/2008, 20h51
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...