<
Programme de test de la carte testpic
J'ai écrit un petit programme pour vous permettre d'essayer la carte testpic. Ce programme permet, par l'appuie sur les boutons, d'allumer les leds avec une tempo de 500ms pour rendre visible l'allumage et en aussi de créer un anti-rebond. Ce sont deux choses auquel on ne pense pas dans les débuts en programmation, un logiciel fonctionne très bien dans le simulateur et ne veut plus rien savoir en fonctionnement réel du fait de la rapidité du microcontrôleur, par exemple, allumer une led à une instruction et l'éteindre l'instruction suivante cela revient à allumer la led pendant 1 microseconde ,c'est beaucoup trop rapide pour nos yeux .Donc il ne faut pas hésiter à recourir à des tempos. Au début j'écrivais moi même les tempos mais si les calculs ne sont pas trop compliqués c'est du temps perdu alors qu'il existe un petit logiciel qui fait très bien cela il s'appelle Picdel et vous le trouverez à cette adresse : http://www.aurelienr.com/electronique/radiotelec/picdel.zip , c'est un freeware et il ressemble à ça.
Vous rentrez la fréquence du quartz (en générale 4MHz pour le 16F84), la temporisation que vous souhaitez en ms vous cliquer sur "Calculate Cycles" puis sur "Genrate Code" ,il vous donne le code ainsi que les variables utilisées à ne pas oublier de déclarer .
Le bouton bp1 en plus de faire allumer la led1 permet de faire défiler les chiffres de 0 à 9 sur l'afficheur. Vous trouverez le fichier testpic.asm et testpic.hex pour le 16F84 ici, ainsi que la version pour le 16f628 ici.
J'ai utilisé la carte testpic pour mesurer les créneaux d'une radiocommande (je fais de l'aéromodélisme) si le programme vous intéresse , mais j'ai été confronté au problème d'afficher un octet, la mesure du créneau, avec un seul afficheur aussi j'ai écrit une routine que je vous propose qui décompose l'octet en 3 parties les 3 bits de poid faible, les 3 suivants et les 2 derniers il suffit de les afficher l'un après l'autre puis de les recomposer avec un logiciel en basic qui ne comprend qu'une opération : octet=1°chiffre+(2°chiffre * 8)+(3°chiffre * 64) que vous trouverez la avec son source. C'est vraiment l'afficheur du pauvre mais qui peut dépanner.
;pour coupe1
movf caract,w ;l'octet qui est dans caract est ecrit dans w
andlw D'7' ;appliquer le masque pour les 3 premiers bits
movwf coupe1 ;3 premiers bits dans coupe1
movf coupe1,w ;coupe1 dans w
movwf PORTA ;afficher coupe1
bsf led2 ;allumer led2 pour indiquer que coupe1 est pret
;pour coupe2
movf caract,w ;caract dans w
andlw D'56' ;appliquer le masque pour les 3 bits suivants
movwf coupe2 ;3 bits suivants dans coupe2
rrf coupe2,f
rrf coupe2,f
rrf coupe2,f ;bit deplacer à droite
;test sw2
btfsc sw2 ;attendre sw2 pour autoriser l'affichage de coupe2
goto $-1 ; non boucler
movf coupe2,w
movwf PORTA ;afficher coupe2
bcf led2 ;eteindre led2
bsf led3 ;allumer led3 pour indiquer que coupe2 est pret
;pour coupe3
movf caract,w ;caract dans w
andlw D'192' ;appliquer le masque
movwf coupe3 ;2 derniers bits dans coupe3
rlf coupe3,f
rlf coupe3,f
rlf coupe3,f ;bit deplacer à gauche
;test sw3
btfsc sw3 ;attendre sw3 pour autoriser l'affichage de coupe3
goto $-1
movf coupe3,w
movwf PORTA ;afficher coupe3
bcf led3 ;eteindre led3
bsf led4 ;allumer led4 pour indiquer que coupe3 est pret