analogique-12-bits.ino
Les ADC Teensy montent à 12 bits (0-4095) contre 10 sur Arduino classique. Ce croquis combine la moyenne matérielle (analogReadAveraging) et une fenêtre glissante logicielle pour une tension très stable sur une résistance dépendante de la lumière ou un potentiomètre.
Matériel requis
Un Teensy 3.2 (NXP Kinetis MK20DX256, Cortex-M4 @ 72 MHz, logique 3,3 V) alimenté par USB. 1 potentiomètre 10 kΩ (ou LDR en diviseur) entre 3,3 V et GND, curseur sur A0.
Câblage
Curseur du potentiomètre sur A0, extrémités sur 3,3 V et GND. Ne jamais dépasser 3,3 V sur une entrée analogique Teensy.
Fonctionnement
analogReadResolution(12) porte la conversion à 4095 pas ; analogReadAveraging(8) moyenne déjà en matériel. La fenêtre glissante de 16 valeurs lisse les pics résiduels.
Exécution
Installer le plugin Teensyduino dans l'Arduino IDE, choisir la carte « Teensy 3.2 », cliquer sur Téléverser puis sur le bouton du Teensy Loader. Attention : broches en 3,3 V.
Variantes
Basculer sur 13/14 bits selon la carte (plus lent), ou échantillonner en continu avec l'ADC DMA pour de l'audio.
analogique-12-bits.ino
// ADC 12 bits (0..4095) avec moyenne glissante sur A0.
const int CANAL = A0;
const int NB = 16; // taille de la fenetre glissante
uint16_t echantillons[NB];
int index = 0;
bool plein = false;
unsigned long derniereMesure = 0;
void setup() {
analogReadResolution(12); // 12 bits sur les Teensy (defaut 10)
analogReadAveraging(8); // moyenne materielle sur 8 echantillons
Serial.begin(9600);
}
void loop() {
if (millis() - derniereMesure < 100) return;
derniereMesure = millis();
echantillons[index] = analogRead(CANAL);
index = (index + 1) % NB;
if (index == 0) plein = true;
int n = plein ? NB : index;
if (n == 0) return;
long somme = 0;
for (int i = 0; i < n; i++) somme += echantillons[i];
long moyenne = somme / n;
float tension = moyenne * 3.3 / 4095.0; // entree max 3,3 V
Serial.print(F("brut=")); Serial.print(moyenne);
Serial.print(F(" -> ")); Serial.print(tension, 3);
Serial.println(F(" V"));
}