🛠 Audio Shield SGTL5000 : boucle stéréo 44,1 kHz et outil de conception graphique
Objetivos
Adéntrate en el mundo por el que la Teensy 3.2 es famosa: la Teensy Audio Library, que permite el streaming estéreo de 16 bits / 44,1 kHz (reproducción polifónica, síntesis, efectos, análisis FFT, enrutamiento flexible) aprovechando las instrucciones DSP del Cortex-M4. Montarás el Audio Adapter (o «Audio Shield») de PJRC con su codificador SGTL5000, crearás un bucle estéreo entrada → salida, y descubrirás la Audio System Design Tool gráfica, que exporta el código C++ por ti.
Material
- 1 Teensy 3.2 + 1 Audio Adapter PJRC (kit para soldar, codificador SGTL5000, conectores para auriculares/line-in/micrófono, ranuras para tarjeta SD y SPI-flash)
- 1 fuente de audio (salida de auriculares de un teléfono conectada a la toma line-in) + 1 par de auriculares o altavoces amplificados
- Cables cortos entre el shield y la placa — el shield apilado soluciona el problema; en cableado suelto, los hilos MCLK/BCLK/LRCLK/TX/RX «deben ser cortos para evitar problemas»: las longitudes excesivas producen ruido audible (foro PJRC)
- Opcionalmente una tarjeta SD ≤ 32 GB (el soporte para tarjetas > 32 GB solo está disponible desde Teensyduino 1.54)
Conector I2S (Teensy 3.x)
El shield utiliza los pines: 11 (MCLK), 9 (BCLK), 23 (LRCLK), 22 (DOUT → shield), 13 (DIN ← shield), 18/19 (SDA/SCL para configurar el SGTL5000 por I2C). La Teensy 3.2 también posee su propio DAC de 12 bits (A14, mono) y sus entradas ADC para trabajar sin shield.
Código completo
Estructura idéntica a la generada por la herramienta de diseño (objetos documentados en la página de la biblioteca Audio):
#include <Audio.h>
#include <Wire.h> // SGTL5000 configure en I2C (broches 18/19)
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
AudioInputI2S i2sIn; // entree stereo (line-in ou mic du shield)
AudioOutputI2S i2sOut; // sortie stereo (casque / line-out)
AudioConnection patchCord1(i2sIn, 0, i2sOut, 0); // gauche -> gauche
AudioConnection patchCord2(i2sIn, 1, i2sOut, 1); // droite -> droite
AudioControlSGTL5000 sgtl5000;
void setup {
Audio.memory(16); // 16 blocs memoire audio (~16 ko)
sgtl5000.enable; // alimente le codeur
sgtl5000.volume(0.5); // niveau de sortie casque
// Le flux audio tourne en 44,1 kHz / 16 bits pendant que votre code tourne
}
void loop {
// Des objets DSP (effets, mixeurs, FFT...) s'insèrent entre i2sIn et
// i2sOut sans toucher au materiel I2S.
}
La herramienta de diseño gráfica
<https://www.pjrc.com/teensy/gui/> : conectas cajas (entradas, salidas, retardos, reverberación, mezcladores, analizadores FFT…) como en una patchbay, y la herramienta exporta el código C++ completo para pegar en el IDE. La serie oficial de tutoriales en vídeo se incluye en los ejemplos: File > Examples > Audio > Tutorial. Dos Audio Shields en una misma Teensy 3.x permiten 4 entradas / 4 salidas (quad), con el cableado publicado por SparkFun.
Verificación esperada
Auriculares en el shield, fuente en line-in: el sonido sale en estéreo, sin latencia perceptible, mientras loop no hace nada — el flujo es gestionado por las interrupciones y el DMA. Sube el volumen progresivamente (0.5 = la mitad) para no dañar tus oídos. Corta la entrada: el silencio debe ser limpio; un zumbido o ruido de fondo indica cables I2S demasiado largos o una masa mal realizada.
Errores frecuentes
- Cables I2S demasiado largos en montaje «suelto»: ruido audible garantizado — apila el shield o mantén los cables muy cortos.
- Olvidar Audio.memory: sin bloques de memoria asignados, ninguna conexión de audio funciona.
- Tarjeta SD > 32 GB con un Teensyduino antiguo: la biblioteca SD no la detecta — actualiza (≥ 1.54) o formatea a un máximo de 32 GB.
- Volumen de entrada del micrófono incorrecto: el SGTL5000 tiene ajustes de ganancia de micrófono distintos a los de line-in — consulta los ejemplos de la biblioteca.
- Soldadura defectuosa del kit en la tira de pines: el síntoma clásico es una salida muda en un canal — verifica DIN/DOUT (pines 13/22) con continuidad.
- Confundir el DAC integrado de 12 bits (A14, mono) y el codificador del shield (estéreo 16 bits): ambos coexisten pero no sirven para los mismos usos.
Otros tutoriales para esta placa
- Premiers pas sur la Teensy 3.2 : Teensyduino, HalfKay et premier Blink
- Broches, ADC 13 bits, DAC 12 bits et PWM : dompter les E/S de la Teensy 3.2
- Un instrument MIDI USB en 10 minutes : Bounce, boutons et règle d'or du drain
- OctoWS2811 : piloter 8 rubans WS2812 en parallèle par DMA (presque zéro CPU)
- Timers matériels, interruptions imbriquées et FASTRUN : la vitesse Cortex-M4
- Intégration produit : alimentation VIN/VUSB, régulateur 250 mA, RTC à quartz et EEPROM
Ejemplos de código para esta placa
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino