{{tag>hardware arduino}} ====== Entrées analogiques ====== ATmega 328 possède 5 entrées analogiques broches A0 à A4. Le CAN a une résolution de 10 bits, il convertit une tension analogique en une valeur numérique, un nombre entre 0-1023 codé sur un entier (int) en environ 100 us. Comme l'ATmega 328 est cadencé à 16 MHz, on a un échantillonnage max d'environ 10000 échantillons/s. Pour fonctionner le CAN compare la tension d'entrée An avec une tension de référence AREF. On doit toujours avoir: * An %%<=%% AREF * An < Vcc (tension d'alimentation du microcontroleur) La fonction **analogReference()** permet de modifier la tension AREF utilisée par le CAN ^ DEFAULT | AREF = 5V. Ici la résolution est de 5/1024 = 4.8mV. | ^ INTERNAL | AREF = 1.1V. Dans ce cas la résolution est de 1.1/1024 = 1.0mV | ^ AREF | La tension présente sur la broche AREF est utilise comme tension de référence par le CAN. | Si la broche AREF est utilisée, il faut impérativement faire un appel a la fonction **analogReference(AREF)** avec toute lecture de l'entrée analogique avec analogRead(). L'ATmega 328 n'a pas de CNA mais il est capable de générer des signaux PWM sur certaines broches (3, 5, 6, 9, 10 et 11). Le rapport cyclique (temps à l’état HIGH / temps à l’état LOW) de ces signaux rectangulaires d'une période d'environ 490 Hz peut être modifié via la fonction **analogWrite()**. Le rapport cyclique est codé sur un byte (0-255). * Une valeur faible du rapport cyclique indique que le passé temps à l’état LOW est beaucoup plus important que le temps à l’état HIGH. Le tension moyenne est proche de 0V. * Une valeur forte du rapport cyclique indique que le passé temps à l’état LOW est faible devant le temps à l’état HIGH. Le tension moyenne est proche de 5V. Pour générer le signal PWM sur les broches 3, 5 et 6 analogWrite() utilise la même ressource (timer) du microcontrôleur que les fonction milli() et delay() ce qui peut entraîner des conflits. Remarque: Les entrées analogiques peuvent être configurées en sorties numéériques comme les différentes lignes du port parallèle. Cet appel à la fonction pinMode() n'est donc pas faux: void setup() { pinMode(A0, OUTPUT); }