Académique Documents
Professionnel Documents
Culture Documents
analogique/numérique
On appelle Convertisseur Analogique Numérique
(CAN) un dispositif qui transforme des valeurs
analogiques de tension en valeurs numériques
(mots binaires codés sur 4, 8, 10,12 bits ...).
Ces valeurs numériques sont proportionnelles
aux valeurs analogiques.
Il s’agit de mesurer des tensions analogiques
dans la gamme 0-5V.
Les valeurs numériques sont alors dans la
gamme 0-15 pour un CAN 4 bits, 0-255 pour
un CAN 8 bits, 0-1023 pour un CAN 10 bits.
Signal analogique
Signal numérique
1023 5V
0 0V temps
1
CAN
Le C167 dispose d’un convertisseur Analogique
Numérique interne de 10 bits de résolution.
Tension
Valeur
analogique
numérique
(gamme 0-5v) CAN codée sur 10
10 bits bits (0-1023,
0x0-0x03FF)
2
Équivalence
tension analogique/valeur
numérique
Les tensions analogiques converties sont
dans la gamme 0-5V.
Les valeurs numériques résultats sont
dans la gamme 0-1023.
Une valeur numérique N correspond donc
à une tension V (en mV) telle que:
N V / q V /(Vref / 1024)
Vref 5000mV
3
Équivalence
tension analogique/valeur
numérique
V N 5000 / 1024
L’évaluation de l’expression demande des
précautions:
• Attention!!! Nx5000 représente une
grandeur entière codée avec 32 bits.
• Afin de réduire les temps d’exécution,
l’opération de division peut être réalisée
par un opérateur logique.
4
Déroulement d’une
conversion
Les 16 entrées du port 5 sont multiplexées.
L’entrée sélectionnée est échantillonnée et
mémorisée par un échantillonneur bloqueur
(S+H).
La conversion A-N est réalisée et la valeur
numérique résultat (10bits) est stockée dans le
registre ADDAT (16bits).
5
Modes de fonctionnement
7
Configuration du mode de
fonctionnement
8
Mode de conversion unique
d’un canal sélectionné
La conversion commence dès que
ADST=1.
L’indicateur ADBSY se positionne à 1
pendant toute la durée de la
conversion.
Le convertisseur sélectionne le canal
spécifié par ADCH. La tension
analogique présente sur la broche
correspondante du port 5 est présentée
au CAN.
ADCON
AD AD AD AD AD AD AD - ADM ADCH
CTC STC CRQ CIN WR BSY ST
n°
0 0 0 0 0 0 0 0 0 0 00 canal
10
Registre ADDAT
Les 4 bits CHNR reflètent le n° du canal
sélectionné parmi les canaux 0-15.
Les 10 bits ADRES représentent la
valeur numérique traduisant la tension
analogique.
11
Exemple 1
Rédiger un sous-programme transparent qui
permet de lire la tension analogique
présente sur la broche 2 du port 5.
Ce sous-programme renvoie au programme
appelant la valeur numérique correspondant
à la tension analogique via le registre R0.
Configuration CAN:
ADCON
AD AD AD AD AD AD A - ADM ADCH
CTC STC CR CIN WR BSY D
Q ST
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
12
Codage 1
lecture PROC
/* Configuration du convertisseur */
MOV ADCON,#0x0002
/* Mise en route du convertisseur */
BSET ADST
/* Attente de la fin de conversion */
attente:
JB ADBSY,attente ; tant que ADBSY=1
/* Lecture du résultat */
MOV R0,ADDAT ; lecture resultat
AND R0,#0x03FF ; masquage du n° du
; canal
RET
lecture ENDP
13
Mode de conversion continue
sur un canal sélectionné
Dès que ADST = 1, le processus de conversion
démarre.
ADM = 01B
ADCH = n° du canal sélectionné.
ADST = 0. ADST doit être positionné
à 1 au moment où l’on désire
commencer les conversions.
ADWR = 0 ou 1 selon l’option choisie
Les bits ADCTC, ADSTC, ADCRQ,
ADCIN sont positionnés à zéros car
nous ne considèrerons pas ces
options dans le cadre de ce cours.
15
Exemple 2
Rédiger un sous-programme qui permet de lire
l’évolution de la tension analogique présente
sur la broche 3 du port 5 et de stocker les 10
premières valeurs dans une table étiquetée
ValTension dans la section de données.
Une conversion n’a lieu que si la précédente a
été lue et stockée dans la table.
Configuration CAN:
ADCON
AD AD AD AD AD AD A - ADM ADCH
CTC STC CR CIN WR BSY D
Q ST
0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1
16
Codage Exemple 2
name CAN_continue
$include(reg167.inc)
assume DPP3:system, DPP0:donnees
17
Codage Exemple 2 suite
lect_CAN PROC
PUSH R0
PUSH R1
PUSH R2
; Configuration CAN et Mise en route
; mode conversion continue du canal 3 avec attente de
; lecture
MOV ADCON,#0x0213
BSET ADST
attente: ;Attente de la fin de la 1ere conversion
MOV R1, ADDAT
AND R1, #0xF000
CMP R1,#0x3000
JMP cc_NE, attente
MOV R2,#10
lecture: ; Lecture du résultat
MOV R1,ADDAT
AND R1,#0x03FF
MOV [R0],R1 ;Copie de la valeur dans la table
ADD R0,#2
SUB R2,#1
JMP cc_NZ,lecture
POP R2
POP R1
POP R0 18
RET
Mode de conversion unique
sur un groupe de canaux
ADM = 10B
ADCH = Le groupe de canaux
sélectionnés est composé de
ADCH+1 canaux (n° ADCH,
ADCH-1, ADCH-2,…,0).
ADST = 0. ADST doit être
positionné à 1 au moment où l’on
désire commencer la série de
conversion.
ADWR = 0 ou 1 selon l’option
choisie.
Les bits ADCTC, ADSTC, ADCRQ,
ADCIN sont positionnés à zéros
car nous ne considèrerons pas ces
20
options dans le cadre de ce cours.
Exemple 3
Écrire un sous-programme qui
permet de convertir une fois les
canaux 2, 1 et 0.
Les 10 bits résultats de conversion
sont respectivement transmis au
programme appelant par les
registres R0, R1 et R2.
21
Exemple 3 suite
Sans l’option Wait for Read, ADWR=0
N° canal
2 1 0
converti
ADDAT
N° canal
2 1 0
converti
ADDAT
Lecture ADDAT
Lecture resultat Lecture resultat22
canal2 canal1
Codage exemple 3
lect_CAN PROC
PUSH R15
PUSH R14
; mode conversion unique des canaux 2,1,0 avec attente
de lecture
MOV ADCON,#0000001000100010B
; début de la série de 3 conversions
BSET ADST
BCLR USR0
lecture:
;lecture ADDAT
MOV R15,ADDAT
MOV R14,R15
AND R15,#0xF000
CMP R15,#0x0000 ; Test du n° du canal
converti
JMP cc_EQ,canal0
CMP R15,#0x1000
JMP cc_EQ, canal1
canal2:
MOV R2,R14
; Lecture des 10 bits resultat
AND R2,#0x03FF
BSET USR0
JMP cc_UC,lecture
23
Codage exemple 3
canal1:
MOV R1,R14
; isolement 10 bits resultats
AND R1,#0x03FF
JMP cc_UC,lecture
canal0:
MOV R0,R14
; isolement 10 bits resultats
AND R0,#0x03FF
JNB USR0,lecture
POP R14
POP R15
RET
lect_CAN ENDP
24
Codage Exemple 3
name CAN_continue
$include(reg167.inc)
assume DPP3:system, DPP0:donnees
ADM = 11B
ADCH = Le groupe de canaux
sélectionnés est composé de
ADCH+1 canaux (n° ADCH,
ADCH-1, ADCH-2,…,0).
ADST = 0. ADST doit être
positionné à 1 au moment où l’on
désire commencer les séries de
conversion.
ADWR = 0 ou 1 selon l’option
choisie.
Les bits ADCTC, ADSTC, ADCRQ,
ADCIN sont positionnés à zéros
car nous ne considèrerons pas ces
27
options dans le cadre de ce cours.