probleme vitesse afficheur 7 segments...

spheris

Senior Member
Bonjour,
peut etre un manques de rapidité je ne sais pas mais voilà:

J'ai un picaxe 20m2 qui dois afficher des valeurs recues depuis le port serie sur C.5

les 4 afficheurs sont tous reliés en parallele sur B.0 à B.7
les anodes sont respectivement reliées à
C.0 pour l'afficheur 1 (AF1 dans le prog)
C.1 pour l'afficheur 2 (AF2)
C.2 pour l'afficheur 3 (AF3)
C.3 pour l'afficheur 4 (AF4)

Ainsi par exemple pour afficher 1435 je procède ainsi:
(on s'affranchi de la partie réception série pour le moment)

Code:
b1=1
b2=4
b3=3
b4=5

main:
b6=b1
gosub digit
high C.1
pause 40
low C.1
b6 = b2
gosub digit
high C.2
pause 40
low C.2
gosub digit
high C.3
pause 40
low C.3
gosub digit
high C.4
pause 40
low C.4
goto main

digit:
select case b6
gosub efface
select b6
case 0
	pinsB = %1011111
case 1
	pinsB = %1100000
case 2
	pinsB = %1010111	
case 3
	pinsB = %1001101
case 4
	pinsB = %1011111
case 5
	pinsB = %1010111
case 6
	pinsB = %1001111
case 7
	pinsB = %1110000
case 8
	pinsB = %1111111
case 9
	pinsB = %1111011
end select
return
Les chiffres s'affichent bien mais j'ai un sintillement désagréable sur les afficheurs.
J'ai l'impression qu'il manque de vitesse ou mon code n'est pas bon.
Merci pour votre aide.

fichier schéma en piece jointe.
7seg.jpg
 

dje8269

Senior Member
Bonjour,

Je ne suis pas un expert !. Mais je te conseil de mettre un transistor genre BC547 sur chaque afficheur, car le courant consommé par celui-ci quand tu voudras affiché un 8 par exemple sera trop fort pour le pauvre PICAXE . Voir la DS pour la consommation du digit et celle du picaxe sur la sortie. Pour un µC 20mA sur une sortie c'est déjà beaucoup ! alors à mon avis 7 leds du Digits allumées en même temps dépasseront les 20mA.

Dans ton programme il faut que tu réduise les pauses en fonction de la vitesse de ton picaxe, car la persistance rétienne se situe à 20ms. une pause de 5ms devra être bien mieux, voir 2 ms . faire des essais pour apprécié la différence

De plus il y a une sub "efface" qui ne tombe nul part ?

tu également peux améliorer en mettant à la suite plusieurs choses .

Par exemple :

Code:
b6=b1
gosub digit
high C.1   -> tu allume un Digit pendant 40ms
pause 40
low C.1    -> tu éteins le digit, donc rien n'est allumé pendant la les deux lignes suivantes.
b6 = b2   - > tu enregistre ta donnée , rien d'allumé
gosub digit   -> tu affecte la valeur au PORT , rien d'allumé
high C.2    -> et seulement maintenant tu allume, ce qui créer un trou et donc un clignotement.
Essaye comme ca :

Code:
b6=b1
gosub digit
high C.1   -> tu allume un Digit pendant 2ms
pause 2
b6 = b2  
gosub digit   
low C.1      -> Tu éteins
high C.2    -> Tu allume le suivant tout de suite après avoir éteint, pas de trou.

Bonne journée
 

spheris

Senior Member
merci pour votre aide mais je n'ai pas réussi à enlever ce clignotement .
Je suis donc repassé sur un afficheur LCD série.
Merci.
 

dje8269

Senior Member
Il est dommage de passer aussi vite sur un problème aussi léger !

mais c'est votre choix je n'insiste pas ! :confused:
 

MGU

Senior Member
J'ai l'impression qu'il manque de vitesse ou mon code n'est pas bon.
Bonjour,

Pour augmenter la vitesse, il y a setfreq
Pour le code, j’essaierais un lookup, l’accès doit être plus rapide que select case, à voir.

MM
 

PieM

Senior Member
Bonjour,

Pour augmenter la vitesse, il y a setfreq
Pour le code, j’essaierais un lookup, l’accès doit être plus rapide que select case, à voir.

MM
Oui, et en plus éviter les gosub ! un gosub sur M2 c'est plus de 3 ms....

en plus les codes segments sont erronés: le 0 et le 4 sont identiques, ainsi que le 2 et le 5 !

Essaie ça en modifiant le code des segments et éventuellement la durée pulsout

Code:
[COLOR=Purple]b1[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]1[/COLOR]
[COLOR=Purple]b2[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]4[/COLOR]
[COLOR=Purple]b3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]3[/COLOR]
[COLOR=Purple]b4[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]5[/COLOR]

[COLOR=Purple]dirsB [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy]$FF

#MACRO [/COLOR][COLOR=Black]affich[/COLOR][COLOR=Blue]([/COLOR][COLOR=Black]digit, chiffre[/COLOR][COLOR=Blue])
lookup [/COLOR][COLOR=Black]chiffre,[/COLOR][COLOR=Blue]([/COLOR][COLOR=Navy]%1011111[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1100000[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1010111[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1001101[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1011111[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1010111[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1001111[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1110000[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1111111[/COLOR][COLOR=Black],[/COLOR][COLOR=Navy]%1111011[/COLOR][COLOR=Blue])[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]pinsB[/COLOR]
[COLOR=Blue]pulsout [/COLOR][COLOR=Black]digit, [/COLOR][COLOR=Navy]10000
#ENDMACRO[/COLOR]

[COLOR=Black]main:[/COLOR]
[COLOR=Blue]do[/COLOR]
[COLOR=Black]affich[/COLOR][COLOR=Blue]([/COLOR][COLOR=Navy]8[/COLOR][COLOR=Black], [/COLOR][COLOR=Purple]b1[/COLOR][COLOR=Blue]) [/COLOR][COLOR=Green]' affiche b1 sur C.1 (=8)[/COLOR]
[COLOR=Black]affich[/COLOR][COLOR=Blue]([/COLOR][COLOR=Navy]9[/COLOR][COLOR=Black], [/COLOR][COLOR=Purple]b2[/COLOR][COLOR=Blue])  [/COLOR][COLOR=Green]' etc...[/COLOR]
[COLOR=Black]affich[/COLOR][COLOR=Blue]([/COLOR][COLOR=Navy]10[/COLOR][COLOR=Black], [/COLOR][COLOR=Purple]b3[/COLOR][COLOR=Blue])[/COLOR]
[COLOR=Black]affich[/COLOR][COLOR=Blue]([/COLOR][COLOR=Navy]11[/COLOR][COLOR=Black], [/COLOR][COLOR=Purple]b4[/COLOR][COLOR=Blue]) 
loop[/COLOR]
 
Last edited:
Top