Denis Rabasté IUFM Aix Marseille
programmation des microcontrôleurs PIC 1/4
Gestion du CAN
Parmi les périphériques intégrés avec le microcontrôleur, se trouve un convertisseur analogique numérique que nous allons maintenant mettre en œuvre.
Principe de fonctionnement
Huit entrées avec échantillonneur bloqueur sont multiplexées vers le CAN 10 bits à approximations successives, comme le montre la figure suivante :
Le résultat de la conversion sera stocké dans les registres « ADRESH » et « ADRESL », respectivement pour la partie haute et basse, avec un format dépendant de la configuration ;
gestion du CAN
Denis Rabasté IUFM Aix-Marseille
programmation des microcontrôleurs PIC 2/4
Le convertisseur est configuré deux registre « ADCON0 » et « ADCON1 » :
Le registre ADCON0 permet de :
- sélectionner la fréquence d’échantillonnage (bits « ADSC1 » et « ADSC0 ») ; - de sélectionner le canal (bits « CS1 » et « CS0 ») ;
- de mettre en fonction ou non le CAN (bit « ADON ») ;
- de connaître l’état de la conversion par le bit d’état « GO/DONE ».
Le registre ADCON1 permet de :
- justifier à droite ou à gauche les 10 bits du résultat dans les 16 bits de « ADRESH » et
« ADRESL » (bits « ADFM ») ;
- - d’affecter les références de tensions VREF+ et VREF- du CAN soit à l’alimentation soit aux entrées RA3 et RA2 ;
- de configurer en analogique ou en numérique les différentes entrées concernées (bits
« PCFG3 » à « PCFG0 ») ;
Attention :
- les bits « TRIS » correspondants aux entrées analogiques souhaitées doivent être configuré à 1 (entrée) ;
- la mise en service du CAN par « ADON » et le déclenchement de la conversion par
« GO/DONE » ne doit pas se faire dans la même instruction ;
Lorsque la conversion est terminée : - le bit « GO/DONE » passe à 0 ;
- le bit drapeau « ADIF » (registre « PIR1 ») passe à 1, générant une interruption si « ADIE » (registre « PIE1 ») est à 1, ainsi que « PEIE » et « GIE ».
Pour faire une acquisition : - configurer le CAN ;
- les autorisations d’interruptions si nécessaire ;
- attendre le temps de charge du boqueur (ordre de grandeur 20 µs) ; - lancer la conversion par mise à 1 de « GO /DONE » ;
- puis scruter ce bit ou attendre une interruption (dans ce cas ne pas oublier de remettre le drapeau à 0)
Programmation
Ouvrir un nouveau projet TP4_CAN pour PIC16F877A, y inclure le fichier « Prog1.asm » du répertoire
« Ressources \ TP4_CAN », sauvegarder le fichier dans votre répertoire sous un nom différent, supprimer la version d’origine du projet.
Analyser le programme (reproduit en annexe), on notera en particulier : - l’utilisation de la directive « MACRO » ;
- la configuration du CAN.
gestion du CAN
Denis Rabasté IUFM Aix-Marseille
programmation des microcontrôleurs PIC 3/4
Compiler, simuler et programmer.
Lors de la simulation ,on peut noter qu’il faut 5 instructions entre l’ordre de conversion et le passage à 0 de « GO/DONE » ; en effet, la fréquence du CAN est fosc/2 et les instructions sont cadencées à fosc/4 ; pour un convertisseur 10 bits, cela fait donc bien les 10 coups d’horloge nécessaires.
Modifier le code source pour que la fin de conversion génère une interruption qui déclenchera l’acquisition.
Tester votre solution.
Annexe 1 : commande du CAN
;********************************************************************************:
; Ce programme fait l'acquisition de la tension du potentiomètre de la carte PICDEM2PLUS
; et affiche le poids fort sur les 4 DEL du port B * *
;********************************************************************************
LIST P=16F877A ; directive qui définit le processeur utilisé
#include <P16F877A.INC> ; fichier de définition des constantes
;******************************************************************************
; BITS DE CONFIGURATION
;******************************************************************************
__CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF
;********************************************************************************
; MACRO *
;********************************************************************************
;passage en banque 0 BANK0 macro
bcf STATUS,RP0
bcf STATUS,RP1
endm
;passage en banque 1 BANK1 macro
bsf STATUS,RP0
bcf STATUS,RP1
endm
;passage en banque 2 BANK2 macro
bcf STATUS,RP0
bsf STATUS,RP1
endm
;passage en banque 3 BANK3 macro
bsf STATUS,RP0
bsf STATUS,RP1
endm
;********************************************************************************
; DEMARRAGE SUR RESET *
;********************************************************************************
org 0x0 ; Adresse de départ après reset
goto debut
org 0x10 ; adresse de début du programme
gestion du CAN
Denis Rabasté IUFM Aix-Marseille
programmation des microcontrôleurs PIC 4/4
debut
;********************************************************************************
; PROGRAMME PRINCIPAL *
;********************************************************************************
call init
boucle
bsf ADCON0,GO ; Lancement de la conversion Attente
btfsc ADCON0,GO ; fin de conversion ? goto Attente
swapf ADRESH,w ; mise des 4 LSB dans les MSB de W movwf PORTB ; affichage en sortie
goto boucle ; rebouclage
;********************************************************************************
; SOUS PROGRAMMES *
;********************************************************************************
;********************************************************************************
; INITIALISATION *
;********************************************************************************
init
; initialisation du PORTB en sortie
BANK0 ; passage en banque 0
clrf PORTB ; RAZ des bascules D du port B clrf PORTA ; RAZ des bascules D du port A
BANK1 ; passage en banque 1
movlw b'00000000'
movwf TRISB ; PORTB en sortie movlw b'11111111'
movwf TRISA ; Mise en entrée du bit 0 de PORTA (entrée CAN)
; initialisation du CAN
BANK0 ; passage en banque 0
movlw b'00000001' ; horloge Fosc/2 (ADCSx=0), sélection de RA0 (CHSx=0) movwf ADCON0 ; alimentation du CAN (ADON=0)
BANK1 ; passage en banque 1
movlw b'00000000' ; 10 bits à gauche (ADFM=0) Fosc/2 (ADCS2=0)
movwf ADCON1 ; Entrée AN0 analogique Vref+=Vdd Vref-=Vss (PCFGx=0)
BANK0 ; retour en banque 0
return
;********************************************************************************
END