analogique-12-bits.ino

Teensy 4.1 · Archivo : analogique-12-bits.ino · Lenguaje : Arduino · Uso : Exploiter la résolution 12 bits de l'ADC Teensy

Los ADC de Teensy llegan a 12 bits (0-4095) frente a 10 en los Arduino clásicos. Este sketch combina el promedio hardware (analogReadAveraging) y una ventana deslizante por software para una tensión muy estable de una LDR o un potenciómetro.

Hardware

Un Teensy 4.1 (NXP i.MX RT1062, Cortex-M7 @ 600 MHz, lógica de 3,3 V, Ethernet y almacenamiento flash adicional) alimentado por USB. 1 potenciómetro de 10 kΩ (o divisor con LDR) entre 3,3 V y GND, cursor a A0.

Cableado

Cursor del potenciómetro a A0, extremos a 3,3 V y GND. Nunca superar 3,3 V en una entrada analógica Teensy.

Funcionamiento

analogReadResolution(12) eleva la conversión a 4095 pasos; analogReadAveraging(8) ya promedia en hardware. La ventana deslizante de 16 valores suaviza picos residuales.

Ejecución

Teensyduino en el Arduino IDE, placa « Teensy 4.1 », Subir y botón del Teensy Loader. Pines de 3,3 V; el 4.1 añade Ethernet, USB host y pines adicionales.

Variantes

Pasa a 13/14 bits según la placa (más lento), o muestrea de forma continua con el ADC DMA para 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"));
}

← Volver a la ficha