prof. Jacques Lepot
Le convertisseur anlogue/digital (AD)
Introduction

Le convertisseur analogue/digital (ADC) permet au programme de réaliser la mesure d' une tension électrique présente sur une patte.
C'est un voltmètre digital à l'intérieur du microcontrôleur. Il peut prendre une mesure unique ou réaliser l'échantillonage d'une grandeur continue dans le temps. C'est le passage obligé du domaine analogique vers le domaine digital.
Il existe plusieurs types de convertisseurs AD, approximation successives, flash, etc .. Ils sont tous caractérisés par leur précision et leur vitesse.

Le convertisseur de l'ATMEGA
Tous les micros ATMEGA sont équipés d'un ADC à approximation successives, celui du MEGA8 a les caractéristiques suivantes :

Nombre de bits : 10
Plus le nombre de bits est élevé, plus la conversion est précise.
Le convertisseur mesure une tension analogique présente sur une entrée et la convertit en un nombre entier de 10 bits.
Cela donne 1024 valeurs possibles entre le minimum et le maximum. Il y a donc au minimum une erreur d'arrondi qui est de +/- 1/1000 d'une mesure à pleine échelle.

Tension de référence : 3 possibilités Vcc ,INTERNE ou EXTERNE
La tension de référence fixe le maximum de l'échelle de conversion,
si on applique à l'entrée du convertisseur une valeur égale (ou plus grande) que la référence, on lira 1023.
Le minimum correspond toujours à 0V, dans ce cas on lit 0. Le convertisseur ne peut donc convertir que des signaux compris entre 0V et la tension de référence.

La référence interne est de 2,6V (1.1V pour le 88). Dans ce cas la gamme allant de 0 à 2,6V est divisée en 1024 pas, chaque pas correspond donc à : 2,6 V / 1024 = 2,54 mV
Il suffit donc de multiplier le résultat de la lecture par 2,54 pour obtenir la tension présente sur l'entrée en mV.

Vitesse : 15.000 conversions par seconde au maximum, durée d'une conversion, max : 260 us
C'est beaucoup trop lent pour traiter un signal vidéo (minimum 4.000.000 éch/sec) ou un signal audio hifi (80.000 éch/s), mais suffisant pour digitaliser la voix ou la température d'un thermomètre.

Nombre d'entrées : 6
Il n'y a qu'un convertisseur mais il peut être connecté à une parmis 6 entrés ( PC0 à PC5 ). Le registre ADMUX permet de choisir la patte du port C qui est connectée au convertisseur.

Le convertisseur possède 2 modes de fonctionnement :

FREE RUN, une fois démarré par une instruction, il effectue des conversions de manière continue, Il n'y à toujours le résultat de la dernière conversion dans les registres ADCH et ADCL.

SINGLE, une instruction du programme doit demander une conversion, et attendre au moins 260us (mais cela peut varier avec une clock différente) avant de lire le résultat, le convertisseur signale par un bit de statut et/ou une interruption, qu'il a terminé, on peut alors lire le résultat dans ADCH et ADCL.

Les registres du convertisseur

C'est par ces registres que votre programme communique avec le convertisseur.

ADC (ACH et ADCL): Résultat de la conversion.

Comme ce micro est un " 8 bits ", il n'y à pas de registre pouvant contenir une valeur de 10 bits, il faut 2 registres de 8 bits ADCL et ADCH, l'un contiendra 8 bits l'autre 2. On peut choisir, c'est le rôle du bit ADLAR.

Si ADLAR=0 alors on a les 8 bits les plus faibles dans ADCL et 2 bits dans ADCH

Si ADLAR=1 alors, les 8 bits les plus forts sont dans ADCH et les 2 plus faibles dans ADCL.
>> Si on peut se contenter d'une conversion 8 bits, c'est le plus simple, dans ce mode, il suffit de lire ADCH pour avoir le résultat.

ADMUX : Choix de la référence et choix du canal, chaque bit correspond à une fonction

REFS1 REFS0 : Référence, par défaut 00 = externe, utiliser 11 pour interne.
ADLAR : alignement du résultat
MUX3..0 Numéro du canal : 0000=0, … , 0101=5

Exemple, initialisation pour canal 0 (patte PC0) avec référence interne :
ADLAR = 128+64+32

ADCSRA : Contrôle et statut, chaque bit correspond à une fonction

ADEN : Écrire 1 dans ce bit pour mettre en route, 0 pour arrêter le convertisseur
ADSC : Écrire 1, en mode single, demande une conversion, en mode free, démarre les conversions. Écrire 0 n'a pas d'effet
ADFR : Écrire 1 pour mettre en mode free run.
ADIF : A lire, indique que la conversion demandée est finie en passant à 1
ADIE : Écrire 1 pour permettre une interruption à la fin de la conversion.
ADSP2..1 : Vitesse de fonctionnement, 000 est le plus rapide.(par défaut)
Exemple, démarrer le convertisseur et démarrer les conversions en mode free, vitesse maxi.
ADCSRA = 128+64+32;

En bascom il y à 4 instructions pour opérer le convertisseur AD.

CONFIG ADC pour choisir la référence et le mode FREE ou SINGLE
START ADC et STOP ADC
et la fonction GETADC(no_canal) qui retourne un WORD, résultat de la conversion du canal donné comme argument.

En C Arduino il y à 1 fonction pourutiliser le convertisseur AD.

sensorValue = analogRead(sensorPin);

la valeur retournée est comprise entre 0 et 1023, 0 pour 0V et 1023 pour 5V.
Vous pouvez utiliser la fonction map(value, fromLow, fromHigh, toLow, toHigh) pour convertir les valeurs vers un nouvel intervalle,
mais attention, ce sont toujours des nombres entiers.

 

Attention: les pattes qui sont utilisées pour le convertisseur doivent êtres configurées en entrée et sans R pull-up.