<

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