Vous êtes sur la page 1sur 27

Convertisseur

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)

Les signaux analogiques sont appliquées à l’entrée


du CAN, broche du port 5 (port 16 bits).

L’entrée du convertisseur est multiplexée de façon à


sélectionner une des 16 entrées disponibles.

La sélection de la voie d’entrée se fait soit par


programmation du registre de configuration du CAN.

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

Afin de réduire les temps d’exécution,


l’opération de division sera réalisée par
un opérateur logique.

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

Le convertisseur dispose de 4 modes de


fonctionnement différents:

• Conversion unique d’un canal sélectionné


(Fixed Channel Single Conversion)
• Conversion continue d’un canal sélectionné
(Fixed Channel Continuous Conversion)
• Conversion unique d’un groupe de canaux
sélectionnés (Auto Scan Single Conversion)
• Conversion continue d’un groupe de canaux
sélectionnés (Auto Scan Continuous
Conversion)
• Conversion déclenchée lorsque le précédent
résultat a été lu (Wait for ADDAT Read
Mode)
• Injection d’une conversion d’un canal spécifique
à l’intérieur d’une conversion continue
(Channel Injection Mode) 6
Les registres mis en jeu

Dans les modes de fonctionnement que nous


utiliserons, seuls les registres ADDAT, ADCON et
P5 seront mis en jeu.

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.

Quand la conversion est terminée:


• les 10 bits résultats ainsi que le n° du
canal sont copiés dans le registre
ADDAT.
• ADBSY et ADST sont automatiquement
mis à 0. 9
Configuration: conversion
unique d’un canal
sélectionné
ADM = 00B
ADCH = n° du canal sélectionné.
ADST = 0. ADST doit être positionné à 1 au
moment où l’on désire commencer la
conversion.
ADWR = 0
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.

ADCON
AD AD AD AD AD AD AD - ADM ADCH
CTC STC CRQ CIN WR BSY ST

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.

L’indicateur ADBSY reste positionné à 1 pendant


toute la durée des conversions.

Le canal sélectionné est converti, le résultat et le n°


du canal sont copiés dans le registre ADDAT.

• Si ADWR=0, une nouvelle conversion du même


canal démarre dès que la précédente est
terminée. Le résultat est copié dans le registre
ADDAT. ADDAT peut être rafraîchi avant que le
résultat précédent n’a a été lu.

• Si ADWR=1, une nouvelle conversion du même


canal démarre dès que le résultat de la
conversion précédente a été lu. Le résultat est
copié dans le registre ADDAT. Chaque résultat
de conversion doit être lu pour qu’une nouvelle
conversion commence.

La mise à 0 de ADST arrête le processus de


conversion à la fin de la conversion courante.14
Mode de conversion continue
sur un canal sélectionné

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.

Ce sous-programme reçoit l’adresse de la table


par l’intermédiaire du pointeur 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 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

donnees SECTION DATA


ValTension DSW 10
donnees ENDS

prog SECTION CODE


main PROC
GLOBAL main
MOV R0,#ValTension
CALL cc_UC,lect_CAN
fin:
JMP cc_UC,fin
main ENDP

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

Dans ce mode, une seule conversion de chaque


canal est réalisée en commençant par le canal
dont le n° est spécifié dans ADCH jusqu’au
canal 0 inclus.

Dès que ADST= 1, la série de conversion


démarre. Chaque résultat de conversion de
chacun des canaux du groupe est copié dans
le registre ADDAT. Le résultat de la dernière
conversion «rafraîchit » le registre ADDAT
sans attendre la lecture du résultat précédent
(ADWR=0) ou après la lecture du résultat
précédent (ADWR=1).
ADBSY reste positionné à 1 pendant tout le
processus de conversion.
A la fin de la série de conversion, ADST et
ADBSY sont automatiquement remis à 0.
19
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

Recopie n° canal +10 bits résultat

ADDAT

Avec l’option Wait for Read, ADWR=1

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

donnees SECTION DATA


Canal0 DSW 1
Canal1 DSW 1
Canal2 DSW 1
donnees ENDS

prog SECTION CODE


main PROC
GLOBAL main
CALL cc_UC,lect_CAN
MOV canal0,R0
MOV canal1, R1
MOV canal2,R2
fin:
JMP cc_UC,fin
main ENDP 25
Mode de conversion continue
sur un groupe de canaux
Dans ce mode, une série de conversions de
chaque canal du groupe est réalisée en
commençant par le canal dont le n° est
spécifié dans ADCH jusqu’au canal 0 inclus.

Dès que ADST= 1, les séries de conversions


démarrent. Une série de conversion
redémarre automatiquement après la
conversion de la précédente. Le résultat de la
dernière conversion «rafraîchit » le registre
ADDAT sans attendre la lecture du résultat
précédent (ADWR=0) ou après la lecture du
résultat précédent (ADWR=1)

ADBSY reste positionné à 1 pendant tout le


processus de conversion.
Lorsque ADST est repositionné à 0, la
conversion de la série en cours s’arrête dès
que la canal 0 a été converti, ADBSY est
remis automatiquement à 0. 26
Mode de conversion continue
sur un groupe de canaux

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.

Vous aimerez peut-être aussi