Le but de ce montage est de remplacer un dé numéroté de 1 à 6. Et par la même occasion apprendre à programmer les microcontrôleurs PIC.
Description:
Voici le schéma du montage:L'afficheur peut être de type anode commune ou de type cathode commune. Le PIC est branché normalement, il est configuré en mode power up reset d'ou l'absence de circuiterie de reset. Le principe de fonctionnement est le suivant: on appuie sur le bouton poussoir, l'afficheur compte alors très rapidement 1,2,3,4,5,6,1,2... Au moment ou l'on relache le bouton, la vitesse de comptage décroit progressivement et le bouton n'est alors plus pris en compte. La vitesse de comptage décroit petit à petit jusqu'à l'arrêt du comptage, l'afficheur garde alors une valeur affichée jusqu'à ce que l'on rappuie sur le bouton et que démarre un nouveau cycle.
Le programme:
Le programme permet de piloter un afficheur à anode commune, pour cela il faut relier le strap au plus de l'alimentation. Pour piloter un afficheur à cathode commune, il suffit de brancher le strap entre la cathode commune et le moins de l'alimentation. Il faut aussi modifier le programme en complémentant les octets retournés lors de l'affichage. Voici le programme:
;****************************************************************************** ; 04/05/2000 ; DE ELECTRONIQUE ; afficheur de type anode commune ;****************************************************************************** processor 16f84 ;type de pic utilisé __config B'11111111110001' ;oscillateur quartz, pas de #include "p16f84.inc" ; chien de garde, pas de protection ; reset à la mise sous tension ;inclure la librairie p16f84 ;définition des variables delais equ 0CH ;delais* servent à la temporisation delais1 equ 0DH ; delais2 equ 0EH ;vitesse permet de régler la durée vitesse equ 0FH ;de la temporisation compte equ 10H ;compte permet de compter de 1 à 6 temp equ 11H ;temp est une variable temporaire bsf STATUS,RP0 ;on passe au banc mémoire 1 movlw B'10000000' ;les pattes 0/5 du port movwf TRISB ;B en sorties bcf STATUS,RP0 ;on passe au banc mémoire 0 clrf PORTB ;on met le port B à zéro debut clrf vitesse ;vitesse est mise à zéro bsf vitesse,3 ;vitesse est mise à huit btfsc PORTA,0 ;on teste le port A goto debut ;si on n'appuie pas sur la touche ;on retourne à début, sinon, on va à boucle1 boucle1 movlw 06H ;on initialise le registre compte movwf compte ;à la valeur 6 boucle2 movf compte,0 call affiche ;appel du sous programme affiche movwf PORTB ;la valeur retournée par affiche ;est mise dans le portB call tempo ;appel du sous programme tempo movf vitesse,1 ;vérification de la valeur de la btfsc STATUS,Z ;variable vitesse (si zéro, on goto debut ;retourne à début decf compte,1 ;on décrémente compte btfsc STATUS,Z ;on le teste: goto boucle1 ;si il est à zéro, on va à boucle1 nop ;sinon, on va à boucle2 mais on attend nop ;2 cycles d'horloge pour compenser la goto boucle2 ;différence entre boucle1 et boucle2 ;sous-programmes tempo movf vitesse,0 ;on met vitesse dans temp movwf temp movlw 08H ;on charge w à 8 subwf temp,1 ;on soustrait W de temp btfsc STATUS,Z ;si le bit Z vaut zéro on saute btfsc PORTA,0 ;si on n'appuie pas sur la touche addwf vitesse,1 ;on ajoute 8 à vitesse clrf delais ;RAZ de delais movf vitesse,W ;on charge delais1 avec vitesse movwf delais1 movlw 02H ;on met delais2 à 2 movwf delais2 tempo1 decfsz delais,1 ;on décrémente delais goto tempo1 ;on va à tempo1 si delais vaut 0 decfsz delais1,1 ;on décrémente delais1 goto tempo1 ;on va à tempo1 si delais1 vaut 0 movf vitesse,W ; on met vitesse dans delais1 movwf delais1 decfsz delais2,1 ;on décrémente delais2 goto tempo1 ;on va à tempo1 si delais2 vaut 0 return ;retour de l'éxécution du programe ;(après la dernière instruction call) affiche addwf PCL,1 ;on charge le registre PCL par la nop ;valeur qu'il contient plus la valeur retlw b'00000010' ;de W retlw b'00010010' ;On se déplace ainsi à l'adresse: retlw b'00011001' ;adresse de 'addwf PCL,1' + W retlw b'00110000' ;ilfaut intercaler une instruction nop retlw b'00100100' ;car W varie de 1 à 6 Enfin, on retlw b'01111001' ;retourne dans W la valeur à afficher end |
Realisation:
Voici l'implantation des composants et le typon du circuit:
Vous devez telecharger le typon en cliquant ici tout en appuyant sur la touche MAJUSCULE
Je rappelle qu'il faut telecharger le logiciel ARES Lite qui est gratuit. Il est disponible sur le site suivant: http://www.multipower-fr.com
ici il faut ouvrir le fichier de la manière suivante:
Je rappelle qu'il faut telecharger le logiciel ARES Lite qui est gratuit. Il est disponible sur le site suivant: http://www.multipower-fr.com
ici il faut ouvrir le fichier de la manière suivante:
~ Ouvrez le logiciel ARES Lite
~ Cliquez sur File, puis sur Load Layout.
~ Cliquez sur File, puis sur Load Layout.
Essais:
Lorsque vous branchez le montage: Si vous utilisez un afficheur à anode commune, les 7 segments doivent s'allumer.
Si vous utilisez un afficheur à cathode commune, il doit être entièrement éteint.
Si vous utilisez un afficheur à cathode commune, il doit être entièrement éteint.
Dès que l'on actionne l'interrupteur les chiffres doivent défiler (de 1 à 6).
Aucun commentaire:
Enregistrer un commentaire