Prog asm PIC+registre décalage 74HC595

Tchotch Messages postés 7 Statut Membre -  
Tchotch Messages postés 7 Statut Membre -
Bonjour,

J'ai un problème quant à la programmation du PIC pour la communication avec 5 registres à décalage en cascade reliés avec la pin DATA (déjà pour 1 je ne sais pas comment faire). 1 registre est relié à 8 leds. Admettons que je veux allumer la led numéro 4, voilà ma routine:

Movlw 4 ; transfert 4 bits
movwf countLED
rcall LEDS

...

LEDS

bcf PORTB,5 ;Reset Leds

movlw 0xAA ; valeur 10101010
movwf Var ; chargée dans la variable "Var"

Loop
rlcf Var,f ;rotation à gauche de la variable "var"
btfss STATUS,C ;Retenue = 1? si oui sauter l'instruction suivante
bcf PORTE,3 ;sinon on met la ligne DATAS à 0
btfsc STATUS,C ;Retenue à 0? si oui sauter l'instruction suivante
bsf PORTE,3 ;sinon on met la ligne DATAS à 1

bsf PORTC,2 ;\
bsf PORTE,2
nop ; |Générer un front d'horloge sur SH_CP et ST_CP
bcf PORTE,2
bcf PORTC,2 ;/

decfsz countLED,f ;tout les bits sont ils envoyés? Si oui sauter instruction suivante
goto Loop ;sinon on boucle

Le schéma du montage: [url=https://www.casimages.com/i/100525033452942902.jpg.html][img]http://nsa14.casimages.com/img/2010/05/25/mini_100525033452942902.jpg[/img][/url]

4 pins du PIC sont utilisés pour la SH_CP, ST_CP, DS(data), Reset (/MR). Une led à la fois s'allume avec une condition précise: elles ne s'allument qu'en fonction de l'appui sur le bouton poussoir qui lui correspond (condition des BP passe dans le Pic aussi)

Je n'ai pas bien compris le fonctionnement avec les 2 horloges SH_CP et ST_CP, je sais que je dois latcher les autres leds quand je veux en allumer 1 seule à la fois mais je ne sais pas vraiment comment faire. POur l'instant ce que j'ai fait me fait un peu n'importe quoi.

Merci d'avance
A voir également:

3 réponses

selim5777 Messages postés 14 Statut Membre
 
salut tchotch se que tu veux faire est simple donnes moi juste le temps de télécharger le datasheet du 74hc595
0
selim5777 Messages postés 14 Statut Membre
 
salut tchotch
ton programme est faux est ce que tu as déja travailler avec les Pics?

je vais te donner une astuce:
1 - il faut créer un sous programme d'affichage sur les leds, tu feras appel à ce sous programme à chaque fois que tu en à besoin pour le rafraichissement, ce sous programme aura comme entrée un octet de sorte à ce que chaque bit correspond à la led que tu veux allumer tu pourra ainsi allumer tes leds suivant 256 combinaison.

le sous programme sera comme suit :

tu déclareras les registres tout seul biensur:

Affich ; nom du sous programme
movlw d'8'
movwf ContBit ; compteur de bits = 8

Loop
btfss DataVar,0x07 ; verifie la valeur du 7ème bit
bcf PORTE,3
btfsc DataVar,0x07 ; verifie la valeur du 7ème bit
bsf PORTE,3

rlf DataVar

bsf PORTE,2
nop ; |Générer un front d'horloge sur SH_CP et ST_CP
bcf PORTE,2

decfsz ContBit
goto Loop

bsf PORTC,2 ;/
nop
bcf PORTC,2 ;/

return

dans le programme principal tu fais appel comme suit

boucle
movlw 'xxxxxxxx'b à la place des x tu mes des 0 ou des 1 suivant la donnée
movwf DataVar
call Affich
goto boucle

fais attention au déclaration des entrées sorties
si ça marche pas dis le moi je te guiderais
0
Tchotch Messages postés 7 Statut Membre
 
Merci beaucoup, je m'y met!
0
Tchotch Messages postés 7 Statut Membre
 
J'ai essayé de faire ce que tu m'a dit mais cela ne fonctionne pas bien. Je contrôle bien les 8 premières Leds vu que j'envois 8 octets, ma)is elles s'allument aléatoirement et pas forcément une à la fois. Par exemple pour la première led j'envois '10000000'.

Je ne comprend pas trop comment fonctionne ton bout de programme au niveau des horloges. Pourquoi ici tu fais correspondre 8 cycles sur SH_CP (RE2) et 1 cycle sur ST_CP (RC2?
0
selim5777 Messages postés 14 Statut Membre
 
désolé pour le retard j'étais absent hier

je vais t'expliquer

le circuit comprend 2 étages de 8 (bascules) bits.chaque bascule correspond à 1 bit.

pour simplifier on appel A le première étage B le 2ème Qn la nième bascule

AQ5 correspond à la 5ème bascule du 1ère étage.

dans le première étage les 8 bascules sont reliées entre elles en série (cascade) sortie AQ1 --> entrée AQ2 ainsi de suite

dans le deuxième étage la sortie AQ1 --> entrée BQ1

tu auras le schéma suivant

AQ1-->AQ2-->AQ3-->AQ4-->AQ5-->AQ6-->AQ7-->AQ8
| | | | | | | |
BQ1-->BQ2-->BQ3-->BQ4-->BQ5-->BQ6-->BQ7-->BQ8

en réalité les leds sont reliées au 2ème étage c'est à dire B

le signal SH_CP sert à décaler les sorties de l'étage A on a donc besoin de 8 front pour que l'octet soit présent sur les huit bascules mais jusqu'à présent rien ne sort sur les leds.

quand on applique le signal ST_CP les huit sorties de l'étage A seront présente sur l'étage B en parallèle c'est pour cette raison qu'on a besoin du signal ST_CP que lorsqu'on veut obtenir l'affichage

s'il te plait tu peux m'envoyer ton programme complet pour que j'essaie de voir le bug voici mon email selim_sefraoui@hotmail.com c'est mon msn aussi.
0
Tchotch Messages postés 7 Statut Membre
 
Le problème vient de ma broche RE3 (pour la donnée DATA) de mon PIC, je croyais l'avoir configuré en output mais je viens de voir qu'en fait elle peut seulement être en entrée. Il faut que je trouve une alternative.
0
Tchotch Messages postés 7 Statut Membre
 
J'ai changé, cela devrait mieux marcher avec la broche data alors que c'est encore pire! Les leds ne s'allument plus du tout. Il y a un problème avec data je pense. Quel doit être son comportement?
0
Tchotch Messages postés 7 Statut Membre
 
Je viens de m'apercevoir en mode debug qu'une action sur SH_CP (RE2) ramène data (RE1 et non plus RE3 car j'ai changé)) à 0 sans raison (j'ai checké le montage aussi)! J'abandonne pour aujourd'hui, je comprend plus rien là.
0
selim5777 Messages postés 14 Statut Membre
 
tchotch j'ai une question à te poser quel PIC tu utilises ?
0
Tchotch Messages postés 7 Statut Membre
 
18F4520
0