Prog asm PIC+registre décalage 74HC595
Tchotch
Messages postés
7
Statut
Membre
-
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
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:
- Prog asm PIC+registre décalage 74HC595
- Registre windows - Guide
- Pic hunter - Télécharger - Téléchargement & Transfert
- Pic collage gratuit - Télécharger - Photo & Graphisme
- Départ de la pic ✓ - Forum Consommation & Internet
- Roissy hub bscc pic ✓ - Forum Consommation & Internet
3 réponses
salut tchotch se que tu veux faire est simple donnes moi juste le temps de télécharger le datasheet du 74hc595
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
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
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?
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?
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.
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.