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