THÈME 1: MICROCONTRÔLEURS
ÉVALUATIONS
Séquence 3 : Convertisseur analogique numérique
Evaluation n°1 :
Cocher les réponses correctes
Le résultat de la conversion analogique numérique occupe 12 bits
Le résultat de la conversion analogique numérique est stocké dans un seul registre
Le résultat de la conversion est stocké dans deux registres à huit bits chacun
Le résultat de la conversion peut être justifié à droite ou à gauche
Le registre OPTION_REG permet d’exploiter le C.A.N intégré dans le microcontrôleur
16F876A
Tous les microcontrôleurs intègrent un C.A.N
ADCON1 est un registre à 8 bits. Il permet de faire le choix entre les entrées analogiques
et les entrées numériques
Le résultat de la conversion analogique numérique est stocké dans les registres ADRESL
et ADRESH
Au reset ADCON1 =(00000000)2 cela signifie que les 5 broches du portA du PIC16F876
sont configurés en entrées analogiques.
La configuration du bit 7 (ADFM) du registre ADCON1 permet de choisir entre la
justification à droite ou à gauche du résultat de la conversion.
Evaluation n°2 :
On désire convertir en numérique une tension comprise entre 0 et 5V obtenue aux bornes d’un
potentiomètre branché sur la broche RA3/AN3 et afficher le résultat de la conversion. Ce dernier
occupe 10 bits (B9 B8 B7 B6 B5 B4 B3 B2 B1 B0). Il est affiché sous forme binaire (avec une
justification à droite) conformément au montage ci-dessous.
B9 B8 B7 B6 B5 B4 B3 B2 B1 B0
?
?
?
?
?
?
?
?
?
?
U1
9 21
OSC1/CLKIN RB0/INT
10 22
OSC2/CLKOUT RB1
23
RB2
2 24
RA0/AN0 RB3/PGM
3 25
RV1 4
RA1/AN1 RB4
26
RA2/AN2/VREF-/CVREF RB5
5 27
RA3/AN3/VREF+ RB6/PGC
6 28
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
9%
11
RC0/T1OSO/T1CKI
1 12
MCLR/Vpp/THV RC1/T1OSI/CCP2
13
RC2/CCP1
1k 14
RC3/SCK/SCL
15
RC4/SDI/SDA
16
RC5/SDO
17
RC6/TX/CK
18
RC7/RX/DT
PIC16F876A
Figure 1
1- En se référant au document constructeur, compléter la configuration du registre ADCON1 pour
pouvoir répondre aux exigences du cahier des charges. Donner toutes les possibilités.
1
PIC 16F876
Tensions
PIC 16F877 De
4 bits PCFG
PORTE PORTA références
PCFG0 PCFG0 PCFG0 PCFG0 AN7/RE2 AN6/RE1 AN5/RE0 AN4/RA5 AN3/RA3 AN2/RA2 AN1/RA1 AN0/RA0 Vref+ Vref-
0 0 0 0 A A A A A A A A VDD VSS
0 0 0 1 A A A A Vref+ A A A RA3 VSS
0 0 1 0 D D D A A A A A VDD VSS
0 0 1 1 D D D A Vref+ A A A RA3 VSS
0 1 0 0 D D D D A D A A VDD VSS
0 1 0 1 D D D D Vref+ D A A RA3 VSS
0 1 1 X D D D D D D D D VDD VSS
1 0 0 0 A A A A Vref+ Vref- A A RA3 RA2
1 0 0 1 D D A A A A A A VDD VSS
1 0 1 0 D D A A Vref+ A A A RA3 VSS
1 0 1 1 D D A A Vref+ Vref- A A RA3 RA2
1 1 0 0 D D D A Vref+ Vref- A A RA3 RA2
1 1 0 1 D D D D Vref+ Vref- A A RA3 RA2
1 1 1 0 D D D D D D D A VDD VSS
1 1 1 1 D D D D Vref+ Vref- D A RA3 RA2
Registre ADCON1 :
ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0
……. 0 0 0 ……. ……. ……. …….
……. 0 0 0 ……. ……. ……. …….
……. 0 0 0 ……. ……. ……. …….
……. 0 0 0 ……. ……. ……. …….
2- Compléter en langage MikroC le programme ci-dessous.
unsigned…………... ; // Déclaration d'une variable N de type entier non signé
void main {
TRISA=……………;// PORTA configuré en entrées
TRISB=…….;TRISC=……..….; // PORTB et PORTC configurés en sorties
ADCON1=0x80 ;
adc_init; // Initialisation du module convertisseur
while (1) {
N =………………..…….. ;// Lecture de la valeur lue par le convertisseur sur le canal 3
PORTB=……………..;PORTC=……...……….;// Affichage du résultat de la conversion
}
}
Evaluation n°3 :
Lorsque la température d’un four électrique varie entre 0 et 150°C, le capteur RV délivre un
signal analogique U qui varie entre 0 et 5 V qui se présente à la sortie du convertisseur
analogique numérique sur 10 bits :
5V→ 1111111111(2) = 1023(10)
2
- Pour afficher la température sur trois digits, on exploite trois afficheurs à sept segments Aff3,
Aff2 et Aff1 comme le montre la figure ci-après.
- Deux diodes D1 et D2 de signalisation permettent d’avertir l’utilisateur lorsque la température
dépasse les limites suivantes : limite inférieure : 50°C et limite supérieure : 100°C
D2 s’allume lorsque la température du four est supérieure à 100°C.
D1 s’allume lorsque la température du four est inférieure à 50°C
Figure 2
1- Exprimer la valeur de la conversion N1 en fonction de la tension U
……………………………………………………………………………….
……………………………………………………………………………….
2- On donne le programme en MikroC relatif au contrôle de la température du creuset.
sbit D1 at RC6_bit;
sbit D2 at RC7_bit;
unsigned int N1;
float N2;
char Tu,Td,Tc,T ;
void main () {
TrisB=0x00; TrisC=0x00;
adcon1=0x80;
adc_init();
while (1)
{
N1=adc_get_sample(3);
N2=((N1/1023.0)*150.0);
T= (char) N2;
Tu = T %10;
Td=((T / 10) % 10);
Tc=(T / 100) % 10;
PORTB= Tc + Td*16;
PORTC=Tu;
if (T < 50) D1=1 ; else D1=0;
if ( T> 100 ) D2=1 ; else D2=0;
}}}
3
A partir du programme précédent et pour différentes valeurs de la tension analogique U
appliquée sur l’entrée RA3, compléter le tableau ci-dessous en :
- Calculant la valeur de N1 du C.A.N.
- Déterminant la valeur de température T correspondante.
- Précisant les digits affichés sur les trois afficheurs Aff1, Aff2 et Aff3.
- Indiquant l’état logique des diodes D1 et D2.
U (V) N1 T (°C) Aff3 Aff2 Aff1 D2 D1
1.25 V (1.25*1023)/5= 255 (255/1023)*150= 37 …… …… …… …… ……
2.75V …………………….. …………………….. …… …… …… …… ……
4.20V …………………….. …………………….. …… …… …… …… ……
Evaluation n°4 :
On désire comparer deux tensions analogiques V1 et V2 appliquées respectivement sur chacune
des broches RA0 et RA1.
L’affichage du résultat de la comparaison se fait sur un afficheur à 7 segments à cathodes
communes comme le montre la figure 3. En effet :
• Si la tension V1>V2 alors afficher la lettre S.
• Si la tension V1=V2 alors afficher la lettre E.
• Si la tension V1<V2 alors afficher la lettre I.
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
RV1 35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
1k 5
RA2/AN2/VREF-/CVREF RB5
39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
V1 +88.8 7
RA5/AN4/SS/C2OUT
Volts 15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO
RV2 RC6/TX/CK
25
26
RC7/RX/DT
1k 19
RD0/PSP0
20
RD1/PSP1
21
V2 +88.8
RD2/PSP2
RD3/PSP3
22
Volts 27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A
Figure 3
4
Compléter le programme en MikroC ci-dessous qui répond au cahier des charges.
unsigned int valeur_V1, valeur_V2;
void main()
{
………………………..// PORTB configuré en sorties
ADCON1=0X………; //PortA en mode analogique et justification à droite
……………………….; //Initialiser le PORTB à 0
………………………; //Initialiser le C.A.N
……………….. //Boucle infinie
{
valeur_V1= ……………………; //Lecture de la conversion sur le canal 0
valeur_V2=………………….....; //Lecture de la conversion sur le canal 1
if (valeur_V1 ==valeur_V2) PORTB=…….…; // Afficher E
if (………………………………….………….) PORTB = 6 ; //Afficher I
if (……………………………………………..) PORTB=……..; //Afficher S
}
}