Matière MAI82 Systèmes embarqués et Systèmes temps réel
TD2
La conversion analogique numérique
Exercice 1
Selon le schéma ci-dessous la conversion analogique numérique comprend deux étapes.
Lesquelles? En déduire le temps d’échantillonnage.
Le temps TAD est le temps nécessaire pour la conversion d’un bit qui doit être ≥ 1.6 µs selon le
fabricant et il correspond à la période de l’horloge du CAN (TAD = div x 1/fosc).
• Quel sera donc le temps de conversion totale.
• En déduire la fréquence maximale d'échantillonnage si on admet un temps d’acquisition
Tacq compris entre 10 µs et 20 µs et un temps d’attente de 2µs avant de lancer une nouvelle
conversion.
Exercice 2
Etablir les différentes étapes à suivre pour effectuer une conversion analogique numérique
Etudier le cas du polling.
Exercice 3.
Sachant que Vref=5V et Vin=2V.
1. Trouver le pas de quantification.
2. Calculer le résultat de la conversion.
3. En déduire le contenu des registres ADRESL et ADRESH sachant qu'on utilise la
justification à gauche.
Exercice 4
On désire afficher en binaire à l'aide de diodes LED reliées aux ports B et C le résultat de la
conversion d'une grandeur analogique à l'entrée RA5 d'un PIC16F877 piloté par un quartz de
15Mhz. Sachant que l'on utilise l'horloge interne pour la conversion, le résultat de la conversion
est justifié à gauche, la tension de référence est de 2.5V à l'entrée AN3 (RA3).
1. Quelle est le pas de conversion?
2. Quel est le résultat de conversion en Hexa pour une tension d'entrée de 1V.
3. Calculer le facteur de division.
4. Trouver en Hexadécimal le contenu des registres TRISB, TRISA, TRISC, ADCON0,
ADCON1.
5. Ecrire un programme en MikroC qui permet d'afficher le résultat de conversion.
Dr [Link] ep MEBARKIA 1
Solution du TD2
Exercice1
La conversion analogique numérique comprend deux étapes:
- Echantillonnage blocage.
- Conversion proprement dite.
• Le temps d'échantillonnage (Te) est la somme des temps d'acquisition (Tacq) et de
conversion(Tcon).
Te=Tacq+Tconv. Tconv=12TAD.
• Le temps de conversion totale (TconvTot) est 10TAD (temps nécessaire pour la conversion
des 10bits) + 2TAD donc:
TconvTot=(10+2)*1.6µs=19.2µs.
• Le La fréquence maximale d'échantillonnage:
Femax=1/Temin
avec Temin=Tconvmin+2TAD
(le fabricant recommande un temps d'attente de 2µs avant de lancer une nouvelle conversion, ce
temps d'attente peut être égal à 2TAD).
Tconvmin= Tacqmin+Tconv.
AN: Tacqmin=10µs Tconv=12TAD
Fmax≤32Khz pour un temps d'attente de 2µs
Fmax≤30.8Khz pour un temps d'attente de 2TAD=3.2 µs
Exercice2
Voir le cours section VI.3. le point 4.
4. Attendre à ce que la conversion soit terminée :
- Signalée par la mise à ‘0’ du bit GO/DONE, ou par une interruption
En mode polling, attendre que le bit GO/DONE dans ADCON0 devienne égal à zéro
(ceci est réalisé par Hard lorsque l'opération de conversion est terminée).
En mode interruption : attendre le déclenchement de l'interruption lorsque le bit ADIF
du registre PIR1 devienne égal à 1.(Chap Interruptions). Dans ce cas, une fois le résultat
est stocké dans les registres ADRESH : ADRESL, il faut mettre le bit ADIF à zéro si on
a besoin de relancer une nouvelle conversion.
Exercice3
1. Pas de quantification: q=5V/(210-1)=0.0048875V.
2. Résultât de la conversion:
R=int(Vin-Vref-)/q
R=int(2V-0V)/0.004887V=int(409.2)=409.
409)10=199)h=01 1001 1001)2
3. Justification à gauche donc les contenus des registres ADRESH et ADRESL sont:
ADRESH : 01 1001 10
ADRESL: 01 0000 00
Dr [Link] ep MEBARKIA 2
Exercice4
1. q=2.5V/1023=0.0024437V
2. R=int[(Vin-Vref-)/q]
R=int[(1V- 0V)/0.002443V]=int(409.21)=409)10.
R=409)10=199)h=01 1001 1001)2
3. facteur de division DIV:
TAD=DIV/fosc et TAD>1.6µs donc DIV≥TAD*fosc.
DIV≥24 on prend DIV=32 d'après la table donnée par le fabricant du Microcontrôleur.
4. les contenus des registres:
TRISA=0x20 // la grandeur analogique est à l'entrée RA5.
TRISB=0x00 // le PORTB est configuré en sortie
TRISC=0x00 // le PORTC est configuré en sortie
ADCON0 : configuration de l'entrée analogique & choix l'horloge de conversion & le bit
de démarrage de conversion & bit de service
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO_DONE ADON
1 0 1 0 0 0 --------- 1
ADCON1: configuration des E/S et des tensions de référence & justification du résultat à
gauche
ADFM PCFG3 PCFG2 PCFG1 PCFG0
0 ----------- ---------- ---------- 0 0 0 1
Donc ADCON0 = 0xA1
ADCON1 = 0x01
Dr [Link] ep MEBARKIA 3
5. Le programme:
unsigned char LR=0, ADH=0, ADL=0,// variables intermédiaires sur 16 bits
void main()
{
TRISA=0x20; // la grandeur analogique est à l'entrée RA5.
TRISB=0x00; // le PORTB est configuré en sortie
TRISC=0x00; // le PORTC est configuré en sortie
ADCON0=0xA1; // configuration de l'entrée analogique & choix l'horloge de conversion & le
bit de démarrage de conversion & bit de service
ADCON1=0x01; // justification à gauche
do {
ADCON0=0xA1; //validation de la conversion
Delay_us(20); // le temps d'acquisition
ADCON0=0xA7; // début de conversion donc ADCON0. GO_DONE=1 // ou bien 0xA5
while (ADCON0. GO_DONE= =1) { } //la conversion n'est pas encore terminée.
ADH=ADRESH<<2; // décalage à gauche de ADRESH
ADL=ADRESL>>6; // décalage à droite de ADRESL
LR=ADH+ADL; // ajustement du résultat
PORTB=LR;
PORTC=ADRESH>>6;
}
while(1);
}
Dr [Link] ep MEBARKIA 4