- Qu'est-ce que ADC (conversion analogique-numérique)
- ADC dans le microcontrôleur AVR Atmega16
- Composants requis
- Schéma
- Configuration des registres de contrôle ADC dans Atmega16
- Programmation Atmega16 pour ADC
Une caractéristique commune qui est utilisée dans presque toutes les applications intégrées est le module ADC (convertisseur analogique-numérique). Ces convertisseurs analogique-numérique peuvent lire la tension de capteurs analogiques tels que le capteur de température, le capteur d'inclinaison, le capteur de courant, le capteur Flex, etc. Dans ce tutoriel, nous allons apprendre ce qu'est ADC et comment utiliser ADC dans Atmega16. Ce tutoriel comprend la connexion d'un petit potentiomètre à la broche ADC de l'Atmega16 et 8 LED sont utilisées pour afficher la tension changeante de la valeur de sortie ADC par rapport au changement de la valeur d'entrée ADC.
Auparavant, nous avons expliqué ADC dans d'autres microcontrôleurs:
- Comment utiliser ADC dans ARM7 LPC2148 - Mesure de tension analogique
- Comment utiliser ADC dans STM32F103C8 - Mesure de tension analogique
- Comment utiliser ADC dans MSP430G2 - Mesure de tension analogique
- Comment utiliser ADC dans Arduino Uno?
- Utilisation du module ADC du microcontrôleur PIC avec MPLAB et XC8
Qu'est-ce que ADC (conversion analogique-numérique)
ADC signifie convertisseur analogique-numérique. En électronique, un ADC est un appareil qui convertit un signal analogique comme le courant et la tension en code numérique (forme binaire). Dans le monde réel, la plupart des signaux sont analogiques et tout microcontrôleur ou microprocesseur comprend le langage binaire ou numérique (0 ou 1). Ainsi, afin de faire comprendre aux microcontrôleurs les signaux analogiques, nous devons convertir ces signaux analogiques sous forme numérique. ADC fait exactement cela pour nous. Il existe de nombreux types d'ADC disponibles pour différentes applications. Peu de ADC populaires sont flash, approximations successives et sigma-delta.
Le type le moins coûteux d'ADC est l' Approximation successive et dans ce didacticiel l'ADC à approximation successive sera utilisé. Dans un ADC de type à approximation successive, une série de codes numériques, correspondant chacun à un niveau analogique fixe, sont générés successivement. Un compteur interne est utilisé pour comparer avec le signal analogique en cours de conversion. La génération est arrêtée lorsque le niveau analogique devient juste plus grand que le signal analogique. Le code numérique correspond au niveau analogique est la représentation numérique souhaitée du signal analogique. Ceci termine notre petite explication sur les approximations successives.
Si vous souhaitez explorer l'ADC en profondeur, vous pouvez vous référer à notre précédent tutoriel sur l'ADC. Les ADC sont disponibles sous forme de circuits intégrés et les microcontrôleurs sont également livrés avec des ADC intégrés de nos jours. Dans ce tutoriel, nous utiliserons ADC intégré d'Atmega16. Discutons de l'ADC intégré d'Atmega16.
ADC dans le microcontrôleur AVR Atmega16
Atmega16 a un ADC 10 bits et 8 canaux intégré. 10 bits correspondent à cela si la tension d'entrée est de 0 à 5 V, elle sera divisée en 10 bits, c'est-à-dire 1024 niveaux de valeurs analogiques discrètes (2 10 = 1024). Maintenant, 8 canaux correspondent aux 8 broches ADC dédiées sur Atmega16 où chaque broche peut lire la tension analogique. Complete PortA (GPIO33-GPIO40) est dédié au fonctionnement ADC. Par défaut, les broches PORTA sont des broches IO générales, cela signifie que les broches du port sont multiplexées. Afin d'utiliser ces broches comme broches ADC, nous devrons configurer certains registres dédiés au contrôle ADC. C'est pourquoi les registres sont appelés registres de contrôle ADC. Voyons comment configurer ces registres pour commencer à faire fonctionner l'ADC intégré.
Broches ADC dans Atmega16
Composants requis
- CI microcontrôleur Atmega16
- Oscillateur à cristal 16Mhz
- Deux condensateurs 100nF
- Deux condensateurs 22pF
- Bouton poussoir
- Fils de cavalier
- Planche à pain
- USBASP v2.0
- Led (toute couleur)
Schéma
Configuration des registres de contrôle ADC dans Atmega16
1. Registre ADMUX (registre de sélection du multiplexeur ADC) :
Le registre ADMUX sert à sélectionner le canal ADC et à sélectionner la tension de référence. L'image ci-dessous montre un aperçu du registre ADMUX. La description est expliquée ci-dessous.
- Bit 0-4: bits de sélection de voie.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Canal ADC sélectionné |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1 |
ADC1 |
0 |
0 |
0 |
1 |
0 |
ADC2 |
0 |
0 |
0 |
1 |
1 |
ADC3 |
0 |
0 |
1 |
0 |
0 |
ADC4 |
0 |
0 |
1 |
0 |
1 |
ADC5 |
0 |
0 |
1 |
1 |
0 |
ADC6 |
0 |
0 |
1 |
1 |
1 |
ADC7 |
- Bit-5: Il est utilisé pour ajuster le résultat à droite ou à gauche.
ADLAR |
La description |
0 |
Ajuster à droite le résultat |
1 |
Ajuster le résultat à gauche |
- Bit 6-7: Ils sont utilisés pour sélectionner la tension de référence pour ADC.
REFS1 |
REFS0 |
Sélection de la référence de tension |
0 |
0 |
AREF, Vref interne désactivé |
0 |
1 |
AVcc avec condensateur externe sur la broche AREF |
1 |
0 |
Réservé |
1 |
1 |
Référence de tension interne 2,56 avec condensateur externe sur la broche AREF |
Maintenant, commencez à configurer ces bits de registre dans le programme de sorte que nous obtenions une lecture ADC interne et une sortie sur toutes les broches de PORTC.
Programmation Atmega16 pour ADC
Le programme complet est donné ci-dessous. Gravez le programme dans Atmega16 en utilisant JTAG et Atmel studio et tournez le potentiomètre pour faire varier la valeur ADC. Ici, le code est expliqué ligne par ligne.
Commencez par créer une fonction pour lire la valeur convertie ADC. Passez ensuite la valeur du canal en tant que 'chnl' dans la fonction ADC_read .
unsigned int ADC_read (unsigned char chnl)
Les valeurs des canaux doivent être comprises entre 0 et 7 car nous n'avons que 8 canaux ADC.
chnl = chnl & 0b00000111;
En écrivant «40», c'est-à-dire «01000000» dans le registre ADMUX, nous avons sélectionné PORTA0 comme ADC0 où l'entrée analogique sera connectée pour la conversion numérique.
ADMUX = 0x40;
Maintenant, cette étape implique le processus de conversion ADC, où en écrivant UN en bit ADSC dans le registre ADCSRA, nous commençons la conversion. Après cela, attendez que le bit ADIF renvoie la valeur lorsque la conversion est terminée. Nous arrêtons la conversion en écrivant «1» au bit ADIF dans le registre ADCSRA. Lorsque la conversion est terminée, renvoyez la valeur ADC.
ADCSRA - = (1 <
Ici, la tension de référence ADC interne est sélectionnée en définissant le bit REFS0. Après cela, activez ADC et sélectionnez le prédécaleur sur 128.
ADMUX = (1 <
Maintenant, enregistrez la valeur ADC et envoyez-la à PORTC. Dans PORTC, 8 LED sont connectées qui afficheront la sortie numérique au format 8 bits. L'exemple que nous avons montré fait varier la tension entre 0V et 5V en utilisant un pot de 1K.
i = ADC_read (0); PORTC = i;
Le multimètre numérique est utilisé pour afficher la tension d'entrée analogique dans la broche ADC et 8 LED sont utilisées pour afficher la valeur 8 bits correspondante de la sortie ADC. Tournez simplement le potentiomètre et voyez le résultat correspondant sur le multimètre ainsi que sur les LED incandescentes.
Le code complet et la vidéo de travail sont donnés ci-dessous.