Convertisseur Analogique Numerique (ADC) en ASM - Mcu/Cpu (hardware et périphériques) > 8 bits - Articles et téléchargements
Convertisseur Analogique Numerique (ADC) en ASM - Mcu/Cpu (hardware et périphériques) > 8 bits - Articles et téléchargements
Pseudo Pass se souvenir de moi     Créer un compte
ARTICLES et TELECHARGEMENTS ~ FORUMS ~ LIENS  
 
             
 
proposer
 
   
             
 
Catégories
 
   
             
 
Recherche
 
   
 
Articles-et-telechargements > Mcu/Cpu (hardware et périphériques) > 8 bits > Convertisseur Analogique Numerique (ADC) en ASM

Convertisseur Analogique Numerique (ADC) en ASM

Publié par david le 04/10/2005 (7162 lectures)
L'utilisation du convertisseur n'est pas compliquée si l'on respecte tant au niveau hardware qu'au niveau software la configuration préconisée dans la datasheet.

La résolution diffère selon la référence (jusqu'à 12 bits). Certains ne disposent pas de tension de référence. La référence se fait donc via la tension d'alimentation.

Pour connaître la résolution maximale de votre convertisseur, il suffit d'appliquer la formule suivante :
VDDAD/(2Nb_resol) soit pour une alimentation du convertisseur de 5V et une résolution de 8 bits, on aura une résolution au maximum de 5/28 = 5/256 = 19,5mV.

Il faut préciser que la tension VDDAD n'est pas toujours commune avec l'alimentation du micro. Cette broche doit être alimentée en 5V. On a ensuite 2 broches qui servent à déterminer la plage que l'on souhaite au minimum et au maximum. Ces broches sont VREFH et VREFL. La tension minimale et de 1,5V pour VREFH et bien évidement 0V ou VREFL.

Si l'on veut mesurer avec précision un plage de 1,7V à 2,9V, il suffira d'appliquer VREFL=1,7V et VREFH=2,9V. La précision du convertisseur ne sera donc plus la même On a donc (VREFH-VREFL)/2NB_resol = (2,9-1,7)/28 = 1,2/28 = 4,68mV en 8bit.

N'oubliez pas de bien filtrer vos tension d'alimentation du microcontrôleur, du convertisseur et des tensions de références sinon vos résultats ne vont pas être corrects ou du moins précis, car c'est ce que l'on cherche ici.

La partie hardware n'est pas très compliquée car elle est déjà "configurée". On passe maintenant à la partie software.

Il n'y a que 2 registres à configurer et on peut le faire n'importe quand.

Il faut en premier lieu configurer le registre ADSCR :
- Bit 7 : indique la fin de la conversion,
- Bit 6 : autorise les interruptions lorsque la conversion est terminée (vecteur de reset ADC Conversion Complete, on doit remettre à 0 le Bit7),
- Bit 5 : indique si l'on veut effectuer une conversion permanente ou une unique,
- Bit 4 à Bit 0 : indique la broche que l'on veut mesurer.

Il faut noter que l'on peut changer de broche quand l'on veut, il suffit de mettre a jour ce registre. Il permet, pour avoir, une bonne précision de mesurer VREFH et VREFL via le convertisseur. Attention: tous les micros ne disposent pas de cette broches et donc de cette fonction.

On configure ensuite le registre ADCLK.
Ce registre va servir d'horloge pour la conversion, sa fréquence ne doit pas être en dessous de 1 Mhz mais de s'en rapprocher le plus possible. Pour cela, il faut choisir le diviseur approprié.

- Bit 7 à Bit 5 : choix du prédiviseur par 1, 2, 4, 8 ou 16,
- Bit 4 : il permet soit de prendre l'horloge du bus soit une horloge externe.


Voilà, votre convertisseur est maintenant configuré. Votre résultat de conversion se trouve dans le registre ADR.


En voici un petit exemple pour un QT2 avec un bus interne à 3,2Mhz. Ce programme permet de régler la luminosité d'un écran suivant la tension aux bornes d'une LDR, il adapte donc la luminosité de l'écran à la luminosité ambiante.

* config:
* PA0 (entree) entree analogique

mov #%00101110,DDRA ; PA1, PA2, PA3, PA5 en sortie
mov #%00010000,PTAPUE ; résistance de tirage PA4 sur les entrees
mov #%00001110,PORTA ; met le PORT A à 0, sauf les BP car niveau bas = actif
mov #%00100000,ADSCR ; conversion en continue, pas d'interruption, active sur broche PA0
mov #%00100000,ADICLK ; divise par 2 le bus de frequence pour le CAN

************************************************
* Boucle de mesure de luminosite
* 3 niveaux de luminosites (valeur à verifier)
* valeur lu sur CAN sur port PA0

LUMINOSITE_ECRAN:
lda ADR ; on lit le registre de conversion
cmpa #$C0
bhs LUMINOSITE_FORTE ; si compris entre FF et C0 on va à LUMINOSITE_FORTE
cmpa #$80
bhs LUMINOSITE_MOYENNE ; si compris entre C0 et 90 on va à LUMINOSITE_MOYENNE
bne LUMINOSITE_FAIBLE ; si inferieur à 80 on va a LUMINOSITE_FAIBLE

LUMINOSITE_FAIBLE:
lda IMPULSION
cmpa #50
beq SORTIE ; on sait que le soft a deja ete execute donc on ne re-execute pas
mov #50,IMPULSION
jmp LUM_MOINS

LUMINOSITE_MOYENNE:
lda IMPULSION
cmpa #25
beq SORTIE ; on sait que le soft a deja ete execute donc on ne re-execute pas
cmpa #20
beq DIMINUE_LUMINOSITE_MOYENNE ; si on a deja augmente la luminosite, on la baisse
cmpa #50
beq AUGMENTE_LUMINOSITE_MOYENNE ; si on a deja baisse la luminosite, on l'augmente
DIMINUE_LUMINOSITE_MOYENNE:
mov #25,IMPULSION
jmp LUM_MOINS
AUGMENTE_LUMINOSITE_MOYENNE:
mov #25,IMPULSION
jmp LUM_PLUS

LUMINOSITE_FORTE:
lda IMPULSION
cmpa #20
beq SORTIE ; on sait que le soft a deja ete execute donc on ne re-execute pas
mov #20,IMPULSION
jmp LUM_PLUS

SORTIE:
jmp Boucle_principale


A noter qu'en conversion continue, le bit 7 de ADSCR ne passe jamais à 1 sauf si les interruptions sont actives. Dans ce cas la, n'oubliez pas de le remettre à 0 pour éviter de revenir sans arrêt sur cette interruption.


Article précédent Article suivant
Article précédent Les registres Le port serie SCI en ASM Article suivant
Les commentaires appartiennent à leurs auteurs. Nous ne sommes pas responsables de leur contenu.
Auteur Commentaire en débat
Powered by XOOPS© The XOOPS Project
Contacter les administrateurs

Convertisseur Analogique Numerique (ADC) en ASM - Mcu/Cpu (hardware et périphériques) > 8 bits - Articles et téléchargements