Introduction
En se basant sur l'utilisation de notre librairie de gestion LCD 16x2, nous allons maintenant vous donner un exemple d'utilisation du convertisseur analogique/numérique (ADC) 10 bits présent dans les microcontrôleurs AVR.
Nous avons décidé d'utiliser le convertisseur en mode free run avec interruptions, ce qui signifie que le convertisseur tourne en boucle à la fréquence d'horloge à laquelle il est configuré et à chaque fin de conversion lève une interruption.
Afin d'avoir une bonne précision sur la conversion, l'ADC est configuré afin de tourner à 115 kHz. Si vous changez d'horloge par rapport à celle utilisée dans l'exemple, il vous faudra également changer la valeur de la division (prescaler) afin de garder une fréquence entre 100 et 200 kHz et ainsi privilégier la précision sur la vitesse. Pour obtenir une meilleur précision, sachez qu'il est possible de mettre le microcontrôleur dans mode "repos" pendant lequel il ne fait rien et permet de réduire le bruit sur la mesure (mode noise reduction).
Dans notre cas d'utilisation, nous avons observé une différence entre la valeur affichée sur l'écran LCD et la valeur mesurée par un voltmètre de quelques dizaines de mV (entre 10 et 50) environ. Cette différence s'explique par le bruit présent sur la carte qui vient fausser la mesure.
N'hésitez pas à nous poser des questions sur la mise en oeuvre de programme sur le forum.
L'exemple est compilable avec gcc (fournit avec Winavr).
Quelques explications sur le code
Le principe du programme est assez simple et suit la chronologie suivante :
- 1. Initialisation de l'écran LCD
- 2. Configuration et lancement en Free run de l'ADC
- 3. Lancement de la boucle infinie du programme principal
- 4. A chaque interruption levée par l'ADC, calcul de la nouvelle valeur décimale correspondant à l'acquisition
- 5. Dans la boucle principale, mise à jour de la valeur à l'écran à intervalles donnés
Comme vous pourrez le voir, la valeur décimale est basée sur l'hypothèse que la tension récupérées au niveau du potentiomètre est capable de monter à 5V. Un LSB au niveau de la valeur récupérée sur l'ADC correspond donc à 1/1024ème de 5V.
Le compilateur que nous utilisons est AVR-GCC. La mise en oeuvre des interruptions s'en retrouve donc extrêmement simplifiée. En effet, il suffit d'utiliser la fonction ISR avec pour paramètre le type d'interruption (référez-vous à la documentation du compilateur pour connaître les valeurs possibles : disponible ici). Le contenu de la fonction est alors appelé lorsque l'interruption est levée.
Téléchargez le fichier
Source (.c)
* Clic droit -> Enregistrer la cible du lien sous
Configuration
Il est nécessaire que vous connectiez le module myAVR LCD à la carte myAVR. Sur la carte myAVR, connectez le potentiomètre 1 au bit 0 du port C.
Le programme a été testé à la fréquence d'horloge indiquée dans le fichier source d'exemple mais peut tout à fait être modifié selon votre configuration. Attention cependant il vous sera nécessaire de changer la configuration de l'ADC dans ce cas pour re-régler la fréquence.
Photo
