Modifications

Aller à : navigation, rechercher

Programmer l'ATmega328P sans Arduino

54 octets ajoutés, 23 octobre 2021 à 10:53
aucun résumé de modification
Dans le programme la première chose à écrire se sont les directives préprocesseur qui permettent d’appeler les pointeurs des adresses de registres dont vous allez avoir besoin :
<br/>'''#define _ADCSRA (*(volatile unsigned char *)(0x7a))'''
<br/>'''#define _ADMUX (*(volatile unsigned char *)(0x7c))'''
Nous souhaitons démarrer le convertisseur analogique/numérique, et effectuer une lecture d'une façon périodique, c'est pourquoi nous pouvons écrire deux fonctions : startAnalog et readAnalog
<br/>Nul besoin de plus dans cette fonction principale.
La fiche technique du microcontrôleur indique que la ligne du convertisseur analogique/numérique a une capacité de 14pF.
<br/>Soit le calcul du temps alloué à la charge du condensateur de la capacité de 14pF à la fréquence du multiplexeur : <br/>'''1000000µs / (16000000Hz / 32) = 2µs'''
La formule de charge du condensateur de la capacité de 14pF avec une impédance d'entrée de 1kΩ (le condensateur la capacité est considéré considérée assez chargé chargée à partir de 99% soit 5 fois la constante de temps) :<br/>'''1000Ω * 0.000000000014F * 5t = 0.00000007s = 70ns'''
<br/>Avec une impédance de 1kΩ en entrée le condensateur met 70ns à se charger à 99%.
La formule de charge du condensateur de la capacité de 14pF avec une impédance d'entrée de 100kΩ (le condensateur la capacité est considéré considérée assez chargé chargée à partir de 99% soit 5 fois la constante de temps) :<br/>'''100000Ω * 0.000000000014F * 5t = 0.000007s = 7µs'''
<br/>Avec une impédance de 100kΩ en entrée le condensateur met 7µs à se charger à 99%.
Toujours dans la fiche technique du microcontrôleur, il est indiqué que le multiplexeur du convertisseur analogique numérique peut fonctionner avec une impédance en entrée de 1kΩ à 100kΩ, ceci est cohérent avec le choix du pré-diviseur d'horloge qui peut aller de 2 à 128, cela se retrouve par calcul (le condensateur la capacité est considéré considérée assez chargé chargée à partir de 99% soit 5 fois la constante de temps) :<br/>'''(1 / (16000000Hz / 2)) / (0.000000000014F * 5t) = 1785.714Ω ≈ 1.7kΩ'''<br/>'''(1 / (16000000Hz / 128)) / (0.000000000014F * 5t) = 114285.714Ω ≈ 114kΩ'''
Il est indiqué également que le convertisseur analogique/numérique est optimisé pour une impédance en entrée de 10kΩ, ci-dessous la formule de charge du condensateur de la capacité de 14pF avec une impédance d'entrée de 10kΩ (le condensateur la capacité est considéré considérée assez chargé chargée à partir de 99% soit 5 fois la constante de temps) :<br/>'''10000Ω * 0.000000000014F * 5t = 0.0000007s = 700ns'''
<br/>Avec une impédance de 10kΩ en entrée le condensateur met 700ns à se charger à 99%.
En respect de la fiche technique du microcontrôleur évoquant une optimisation avec une impédance de 10kΩ, un pré-diviseur d'horloge par exemple de 32 convient comme le montre le calcul suivant :
<br/>'''((1 / (16000000Hz / 32)) / 0.000000000014F) / 10000Ω = 14.285t 285τ ≈ 14t'''<br/>Le condensateur sera chargé au dela de 99% (puisque 99% = 5t).
Contrairement à ce qui est souvent dit, une fréquence de fonctionnement du microcontrôleur plus élevée n'est pas forcément intéressante, un exemple avec une fréquence de microcontrôleur plus basse réglée sur 8MHz :
<br/>'''(1 / (8000000Hz / 2)) / (0.000000000014F * 5t) = 3571.428Ω ≈ 3.5kΩ'''<br/>'''(1 / (8000000Hz / 128)) / (0.000000000014F * 5t) = 228571.428Ω ≈ 228kΩ'''
<br/>Les calculs ci-dessus montrent que la capacité de la ligne du convertisseur analogique/numérique sera davantage chargée avec un microcontrôleur cadencé à 8MHz, mais cela signifie qu'avec une impédance d'entrée de 1kΩ vous pouvez dans les deux cas (8MHz ou 16MHz) choisir un pré-diviseur d'horloge de 2 seulement, en revanche avec une impédance d'entrée de 100kΩ il faut choisir un pré-diviseur d'horloge de 128 pour un microcontrôleur cadencé à 16Mhz, et un pré-diviseur d'horloge de 128 ou 64 pour un microcontrôleur cadencé à 8Mhz.
Calcul de l'impédance maximale en entrée en fonction du pré-diviseur d'horloge de 32 pour charger le condensateur la capacité à 99% :<br/>'''(1 / (16000000Hz / 32)) / (0.000000000014F * 5t) = 28571,428Ω ≈ 28kΩ''' max en entrée<br/>Avec 10kΩ en entrée, un microcontrôleur cadencé à 16MHz, et un pré-diviseur d'horloge de 32, la charge du condensateur aurra de la capacité aura largement le temps de faire plus que 5 x la constante de temps et donc de se charger à plus de 99%.
Maintenant vous pouvez renseigner un octet cohérent avec votre matériel pour le registre ADCSRA !
<br/>Si vous n'utilisez qu'un port ADC vous ne verrez sans doute pas de phénomène négatif au fait d'utiliser une impédance d'entrée trop élevée par rapport à la fréquence de multiplexage choisie, car la capacité sera remplie chargée sur plusieurs échantillons successifs, mais la malfaçon n'en reste pas moins présente et sera bien visible lorsque vous utiliserez plusieurs ports.
59
modifications

Menu de navigation