analogique-12-bits.ino

Teensy 4.0 · 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 4.0 (NXP i.MX RT1062, Cortex-M7 @ 600 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

Avec Teensyduino dans l'Arduino IDE, choisir « Teensy 4.0 », Téléverser puis valider dans le Teensy Loader. Les broches sont en 3,3 V ; le 4.0 est pin-compatible avec le 3.2.

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