Étape 8: Comment fonctionne l’ADC
Approximations successives ADC signifie que le connecteur Active Directory prend 13 cycles d’horloge pour terminer la conversion (et des cycles d’horloge 25 pour la première conversion). Il y a un signal d’horloge dédiée à l’ADC est « calculé » de l’horloge principal de l’Arduino ; C’est parce que l’ADC est un peu lent et ne peut pas suivre le rythme des autres parties du microcontrôleur. Elle nécessite une fréquence d’horloge d’entrée entre 50 et 200 kHz pour obtenir la résolution maximale. Si une résolution inférieure à 10 bits est nécessaire, la fréquence d’horloge d’entrée à l’ADC peut être supérieure à 200 kHz pour obtenir une fréquence d’échantillonnage plus élevée.
Mais combien plus élevés pouvons-nous utiliser ? Il y a un couple de bons guides sur l’ADC à l’Open Labs de musique que je suggère de lire :
- http://www.openmusiclabs.com/Learning/Digital/ATmega-ADC/
- http://www.openmusiclabs.com/Learning/Digital/ATmega-ADC/in-Depth/
Mon objectif étant d’obtenir un oscilloscope rapide, j’ai décidé de limiter la précision à 8 bits. Cela a plusieurs bonus :
- le tampon de données peut stocker plus de données ;
- vous ne perdez pas les 6 bits de RAM par référence ;
- l’ADC peut acquérir plus rapidement.
Le Prédiviseur permet de diviser la fréquence, par certains facteurs, en définissant les bits ADPS0-1-2 du Registre ADCSRA. Voyant l’intrigue de la précision de l’Article de laboratoires de musique ouverte, nous pouvons voir que pour 8 bits de précision la fréquence aille jusqu'à 1,5 MHz, bon ! Mais étant donné que la capacité de changer le facteur diviseur nous permet de modifier le taux d’acquisition, nous pouvons l’utiliser également pour modifier l’échelle de temps de l’oscilloscope.
Il y a un bon reportage sur les registres de sortie : nous pouvons décider de l’ajustement des mèches de conversion, en définissant le ADLAR bit dans le registre ADMUX. Si c’est 0 qu'ils sont droite ajustée et vice versa (Voir l’image). Étant donné que j’ai voulu 8-bits de précision je l’ai mis à 1 pour je puisse lire juste le registre ADCH et ignorer l’ADCL.
J’ai décidé d’avoir un seul canal d’entrée pour éviter d’avoir à changer de canal en arrière à chaque conversion.
Une dernière chose au sujet de l’ADC, il a des modes de fonctionnement différents chacun avec une source de déclenchement différentes :
- Mode de fonctionnement libre
- Comparateur analogique
- Requête d’interruption externe 0
- Minuterie/Counter0 comparer Match A
- Débordement de minuterie/Counter0
- Minuterie/Counter1 comparer Match B
- Débordement de minuterie/Counter1
- Événement de Capture de minuterie/Counter1
J’ai été intéressé par le mode cours libre qui est un mode dans lequel l’ADC continuellement convertit l’entrée et lève une interruption à la fin de chaque conversion (vecteur associé : ADC_vect).