🛠 A 1 kHz sine on the 12-bit DAC (A0)

Arduino UNO R4 Minima · debutant · Schéma : IMG-uno-r4-minima-debutant-3-dac-sine-a0.svg — UNO R4 Minima, broche A0 reliée à un buzzer piézo amplifié ou une entrée d'oscilloscope, sortie sinusoïdale 1 kHz dessinée, badge DAC 12 bits.

Objetivo

Controlar el DAC real de 12 bits del R4 en el pin A0 - no PWM, sin necesidad de filtro RC - para generar una onda sinusoidal analógica que puedas escuchar a través de un amplificador o ver en un osciloscopio.

Código

#include <math.h>
const float FREQ = 1000.0f;   // Hz

void setup { analogWriteResolution(12); }  // 0..4095

void loop {
  static uint32_t t0 = micros;
  float phase = fmodf((micros - t0) / 1e6f * FREQ, 1.0f);
  float v = 2048.0f + 2047.0f * sinf(2.0f * PI * phase);
  analogWrite(A0, (int)v);    // true DAC output
}

Acopla A0 a un piezoeléctrico mediante un pequeño condensador o conecta la entrada de un amplificador/osciloscopio. A0 es una salida analógica real, por lo que, a diferencia del PWM, no hay rizado que filtrar.

Resultado esperado

Un tono de aproximadamente 1 kHz; en un osciloscopio, una onda sinusoidal escalonada con un desplazamiento DC de alrededor de 1,65 V. La frecuencia es aproximada porque la temporización del bucle sigue las llamadas a micros.

Errores comunes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales