Réaliser un Dé électronique a base de Pic 16F84

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:

schema_clap_raph.gif (21067 octets) 




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:

clap_raph.gif (25136 octets)
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:
~ Ouvrez le logiciel ARES Lite

~ 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.
Dès que l'on actionne l'interrupteur les chiffres doivent défiler (de
1 à 6).

Aucun commentaire:

Enregistrer un commentaire