🛠 Mini sample player on the 12-bit DAC

Arduino UNO R4 Minima · avance · Schéma : IMG-uno-r4-minima-avance-2-mini-lecteur-audio-dac.svg — UNO R4 Minima, broche A0 vers un petit amplificateur (TPA2006) puis haut-parleur, tableau de 256 échantillons 8 bits en flash, sortie audio annotée.

Objetivo

Construir un pequeño reproductor de muestras: almacenar una forma de onda de 8 bits en la memoria flash, reescalarla para el DAC de 12 bits en A0 y transmitirla a una tasa fija. El presupuesto es generoso para un microcontrolador: 256 KB de flash y 32 KB de SRAM, por lo que cientos de muestras de unos pocos segundos caben en el espacio de código.

Esqueleto del código

const uint8_t SND[] PROGMEM = { /* 8-bit PCM, e.g. 8 kHz */ };
const size_t N = sizeof(SND);
const float RATE = 8000.0f;

void setup {
  analogWriteResolution(12);
}

void loop {
  static uint32_t t0 = micros;
  static size_t i = 0;
  uint32_t n = (micros - t0) / (1000000UL / (uint32_t)RATE);
  if (n < N) {
    uint8_t s = pgm_read_byte(&SND[n]);
    analogWrite(A0, (s - 128) * 8 + 2048);  // 8->12 bit, mid-scale
  } else {
    analogWrite(A0, 2048);                  // silence = mid rail
    if (micros - t0 > (N * 1e6f) / RATE + 100000) { t0 = micros; i = 0; }
  }
}

Notas

> NO VERIFICADO: la tasa máxima de muestreo sin errores y la transmisión del DAC basada en DMA en la R4 no están documentadas en las páginas consultadas; el bucle anterior está temporizado por CPU.

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales