analogique-12-bits.ino

Teensy 3.2 · Fichier : analogique-12-bits.ino · Langage : Arduino · Usage : Exploiter la résolution 12 bits de l'ADC Teensy

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"));
}

← Retour à la fiche