Table des matières:

Introduction à l'ADC dans le microcontrôleur AVR - pour les débutants : 14 étapes
Introduction à l'ADC dans le microcontrôleur AVR - pour les débutants : 14 étapes

Vidéo: Introduction à l'ADC dans le microcontrôleur AVR - pour les débutants : 14 étapes

Vidéo: Introduction à l'ADC dans le microcontrôleur AVR - pour les débutants : 14 étapes
Vidéo: [Tuto] Comment programmer un microcontrôleur virtuel avec Proteus et MikroC? 2024, Juillet
Anonim
Introduction à l'ADC dans le microcontrôleur AVR | pour les débutants
Introduction à l'ADC dans le microcontrôleur AVR | pour les débutants

Dans ce tutoriel, vous saurez tout sur l'ADC dans le microcontrôleur avr

Étape 1: Qu'est-ce qu'un ADC ?

Un ADC, ou convertisseur analogique-numérique, permet de convertir une tension analogique en une valeur numérique pouvant être utilisée par un microcontrôleur. Il existe de nombreuses sources de signaux analogiques que l'on peut souhaiter mesurer. Il existe des capteurs analogiques qui mesurent la température, l'intensité lumineuse, la distance, la position et la force, pour n'en nommer que quelques-uns.

Étape 2: Comment fonctionne l'ADC dans AVR-Microcontrôleur

L'AVR ADC permet au microcontrôleur AVR de convertir des tensions analogiques en valeurs numériques avec peu ou pas de pièces externes. L'ATmega8 dispose d'un ADC à approximation successive de 10 bits. L'ATmega8 a 7 canaux ADC à PortC. L'ADC a une broche de tension d'alimentation analogique séparée, AVCC. AVCC ne doit pas différer de plus de ± 0,3 V de VCC. La référence de tension peut être découplée de l'extérieur au niveau de la broche AREF. AVCC est utilisé comme référence de tension. L'ADC peut également être configuré pour fonctionner en continu (le mode de fonctionnement libre) ou pour n'effectuer qu'une seule conversion.

Étape 3: Formule de conversion ADC

Formule de conversion ADC
Formule de conversion ADC

Où Vin est la tension sur la broche d'entrée sélectionnée et Vref la référence de tension sélectionnée

Étape 4: Comment configurer l'ADC dans ATmega8 ?

Comment configurer l'ADC dans ATmega8 ?
Comment configurer l'ADC dans ATmega8 ?

Les registres suivants sont utilisés pour la mise en œuvre de l'ADC dans ATmega8

Sélection du multiplexeur ADC

Étape 5: Sélection ADLAR

Sélection ADLAR
Sélection ADLAR
Sélection ADLAR
Sélection ADLAR

Résultat ADC Left Adjust Le bit ADLAR affecte la présentation du résultat de la conversion ADC dans le registre de données ADC. Écrivez-en un à ADLAR pour ajuster le résultat à gauche. Sinon, le résultat est ajusté à droite

Lorsqu'une conversion ADC est terminée, le résultat est trouvé dans ADCH et ADCL. Lorsque ADCL est lu, le registre de données ADC n'est pas mis à jour tant que ADCH n'est pas lu. Par conséquent, si le résultat est laissé ajusté et qu'il ne faut pas plus de 8 bits de précision, il suffit de lire ADCH. Sinon, ADCL doit être lu en premier, puis ADCH. Bits de sélection de canal analogique La valeur de ces bits sélectionne les entrées analogiques qui sont connectées à l'ADC.

Étape 6: Sélection ADCSRA

Sélection ADCSRA
Sélection ADCSRA
Sélection ADCSRA
Sélection ADCSRA

• Bit 7 – ADEN: Activer l'ADC L'écriture de ce bit sur un active l'ADC. En l'écrivant à zéro, l'ADC est désactivé

• Bit 6 – ADSC: ADC Start Conversion En mode Single Conversion, écrivez ce bit sur un pour démarrer chaque conversion. En mode Free Running, écrivez ce bit sur un pour démarrer la première conversion.

• Bit 5 – ADFR: ADC Free Running Select Lorsque ce bit est défini (un), l'ADC fonctionne en mode Free Running. Dans ce mode, l'ADC échantillonne et met à jour les registres de données en continu. Effacer ce bit (zéro) mettra fin au mode de fonctionnement libre.

• Bit 4 – ADIF: indicateur d'interruption ADC Ce bit est activé lorsqu'une conversion ADC se termine et que les registres de données sont mis à jour. L'interruption de conversion ADC terminée est exécutée si le bit ADIE et le bit I dans SREG sont définis. ADIF est effacé par le matériel lors de l'exécution du vecteur de traitement d'interruption correspondant. Alternativement, ADIF est effacé en écrivant un un logique dans le drapeau.

• Bit 3 – ADIE: activation de l'interruption ADC Lorsque ce bit est écrit sur un et que le bit I dans SREG est défini, l'interruption de conversion ADC terminée est activée.

• Bits 2:0 – ADPS2:0: Bits de sélection du pré-échelonneur ADC Selon la fiche technique, ce pré-scalaire doit être réglé de sorte que la fréquence d'entrée ADC soit comprise entre 50 KHz et 200 KHz. L'horloge ADC est dérivée de l'horloge système à l'aide d'ADPS2:0. Ces bits déterminent le facteur de division entre la fréquence XTAL et l'horloge d'entrée de l'ADC.

Étape 7: Si vous voulez profiter de la valeur ADC, vous devez effectuer certains travaux énumérés ci-dessous

  • Définir la valeur ADC
  • Configurer la broche LED de sortie
  • Configurer le matériel ADC
  • Activer l'ADC
  • Démarrer les conversions analogiques-numériques
  • TANT QUE pour toujours

SI la valeur ADC est supérieure à la valeur définie, allumez la LED SINON éteignez la LED

Étape 8: Définir la valeur ADC

Code: uint8_t ADCValue =128;

Étape 9: Configurer la broche de la LED de sortie

Code: DDRB|= (1 << PB1);

Étape 10: Configurer le matériel ADC

Configurer le matériel ADC

Cela se fait en définissant des bits dans les registres de contrôle de l'ADC. Tout d'abord, définissons le préscalaire pour l'ADC. Selon la fiche technique, ce préscalaire doit être réglé de sorte que la fréquence d'entrée du CAN soit comprise entre 50 KHz et 200 KHz. L'horloge ADC est dérivée de l'horloge système. Avec une fréquence système de 1MHz, un pré-échelonneur de 8 donnera une fréquence ADC de 125 Khz. La pré-mise à l'échelle est définie par les bits ADPS dans le registre ADCSRA. Selon la fiche technique, les trois bits ADPS2:0 doivent être réglés sur 011 pour obtenir le 8 préscaler.

Code: ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

Ensuite, définissons la tension de référence ADC. Ceci est contrôlé par les bits REFS dans le registre ADMUX. Ce qui suit définit la tension de référence sur AVCC.

Code: ADMUX |= (1 << REFS0);

Pour définir le canal transmis par le multiplexeur à l'ADC, les bits MUX dans le registre ADMUX doivent être définis en conséquence. Puisque nous utilisons ADC5 ici

Code: ADMUX&=0xF0; ADMUX|=5;

Afin de mettre l'ADC en mode de fonctionnement libre, définissez le bit ADFR bien nommé dans le registre ADCSRA:

Code: ADCSRA |= (1 << ADFR);

Une dernière modification des paramètres sera effectuée pour faciliter la lecture de la valeur ADC. Bien que l'ADC ait une résolution de 10 bits, cette quantité d'informations n'est souvent pas nécessaire. Cette valeur de 10 bits est répartie sur deux registres de 8 bits, ADCH et ADCL. Par défaut, les 8 bits les plus bas de la valeur ADC se trouvent dans l'ADCL, les deux bits supérieurs étant les deux bits les plus bas de l'ADCH. En définissant le bit ADLAR dans le registre ADMUX, nous pouvons aligner à gauche la valeur ADC. Cela place les 8 bits les plus élevés de la mesure dans le registre ADCH, le reste dans le registre ADCL. Si nous lisons ensuite le registre ADCH, nous obtenons une valeur de 8 bits qui représente notre mesure de 0 à 5 volts sous la forme d'un nombre de 0 à 255. Nous transformons essentiellement notre mesure ADC de 10 bits en une mesure de 8 bits. Voici le code pour définir le bit ADLAR:

Code:

ADMUX |= (1 << ADLAR); Cela termine la configuration du matériel ADC pour cet exemple. Deux autres bits doivent être définis avant que l'ADC ne commence à prendre des mesures.

Étape 11: Activer l'ADC

Pour activer l'ADC, définissez le bit ADEN dans ADCSRA:

Code: ADCSRA |= (1 << ADEN);

Étape 12: Commencer les conversions analogiques-numériques

Pour démarrer les mesures ADC, le bit ADSC dans ADCSRA doit être défini:

Code: ADCSRA |= (1 << ADSC);

À ce stade, l'ADC commencerait à échantillonner en continu la tension présentée sur l'ADC5. Le code à ce stade ressemblerait à ceci:

Étape 13: PENDANT QUE POUR TOUJOURS

La seule chose qui reste à faire est de tester la valeur ADC et de régler les LED pour afficher une indication haut/bas. Étant donné que la lecture ADC dans ADCH a une valeur maximale de 255, une valeur de test de th a été choisie pour déterminer si la tension était élevée ou basse. Une simple instruction IF/ELSE dans les boucles FOR nous permettra d'allumer la bonne LED:

Code

if(ADCH > ADCValeur)

{

PORTB |= (1 << PB0); // Allumer la LED

}

autre

{

PORTB&= ~(1 << PB0); // Éteindre la LED

}

Étape 14: À la fin, le code complet est

Code:

#comprendre

int principal (vide)

{

uint8_t ADCValue =128;

DDRB |= (1 << PB0); // Définir LED1 comme sortie

ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Réglez l'ADC préscalaire sur 8 - // Taux d'échantillonnage 125KHz 1MHz

ADMUX |= (1 << REFS0); // Définir la référence ADC sur AVCC

ADMUX |= (1 << ADLAR); // Ajuster le résultat ADC à gauche pour permettre une lecture facile sur 8 bits

ADMUX&=0xF0;

ADMUX|=5; // Les valeurs MUX devaient être modifiées pour utiliser ADC0

ADCSRA |= (1 << ADFR); // Définir l'ADC en mode d'exécution libre

ADCSRA |= (1 << ADEN); // Activer l'ADC

ADCSRA |= (1 << ADSC); // Lancer les conversions A2D while(1) // Loop Forever

{

if(ADCH > ADCValue)

{

PORTB |= (1 << PB0); // Allume la LED1

}

autre

{

PORTE &= ~(1 << PB1); // Éteindre la LED1

}

}

renvoie 0;

}

Première publication de ce tutoriel Cliquez ici

Conseillé: