🛠 A 1 kHz sine on the 12-bit DAC (A0)
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
- Tratar A0 como si fuera PWM: es el pin del DAC; analogWriteResolution(12) ofrece el rango completo de 0 a 4095.
- Sobrecargar el pin: los GPIO están limitados a 8 mA, por lo que utiliza un amplificador para los altavoces, nunca los conectes directamente a A0.
- Esperar una frecuencia precisa a nivel de muestra: este bucle sencillo presenta una ligera deriva; utiliza un temporizador para mayor precisión.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinodac-analogique.inoArduinoentree-analogique.inoArduinopwm-respiration.inoArduinoservo-balayage.inoArduino