🛠 Broches, ADC 13 bits, DAC 12 bits et PWM : dompter les E/S de la Teensy 3.2
Objetivos
Aprovechar las E/S de la Teensy 3.2 como un profesional: 34 pines de E/S, de los cuales 24 son fácilmente accesibles en una protoboard compacta, 21 entradas analógicas repartidas en 2 convertidores, un verdadero DAC de 12 bits en A14, 12 pines táctiles (touchRead) y 12 pines PWM repartidos en 3 grupos de temporizadores con frecuencia independiente. Conectará un potenciómetro, un botón y un LED PWM, y leerá todo en un solo sketch con salida DAC.
Material
- 1 Teensy 3.2 en protoboard (formato compacto: 24 pines accesibles sin soldadura)
- 1 potenciómetro de 10 kΩ en A2 (cursor en el medio, las otras dos patas entre 3,3 V y GND)
- 1 botón pulsador entre el pin 5 y GND (pull-up interno)
- 1 LED + resistencia de 330 Ω en un pin PWM (p. ej. 6)
- Opcional: osciloscopio en A14 para ver la salida DAC
Puntos de arquitectura a conocer
- Lógica de 3,3 V: salida HIGH = 3,3 V, se recomiendan máximo 10 mA por pin; las entradas digitales toleran 5 V (nunca superar 5 V). Excepción crítica: los pines puramente analógicos A10–A14 NO son tolerantes a 5 V — alimentarlos por encima de 3,3 V los destruye.
- ADC: 10 bits por defecto; el hardware permite 16 bits pero «en la práctica solo se pueden explotar normalmente ~13 bits debido al ruido» (página de la tienda PJRC). AREF = 3,3 V por defecto;
analogReference(INTERNAL)da una referencia de 1,2 V. Etapas de amplificación diferencial con ganancia programable (PGA) en los pares A10/A11 y A12/A13. 3 comparadores analógicos integrados. - DAC: un verdadero convertidor de 12 bits en A14 — raro en el mundo compatible con Arduino.
- PWM: 12 pines, 3 grupos de temporizadores independientes —
analogWriteFrequencycambia la frecuencia por grupo; el grupo FTM0 controla los pines 5, 6, 9, 10, 20, 21, 22, 23. - Trampa del LED en el pin 13: cuando el pin 13 se usa como entrada, NO usar INPUT_PULLUP — el LED naranja integrado altera el nivel lógico.
- Todos los pines aceptan pull-up/pull-down e interrupciones por cambio de estado; limitación de slew-rate opcional.
Código completo
// Potentiometre (A2) -> LED PWM (broche 6) + vraie sortie DAC (A14)
// + bouton (broche 5) + touche capacitive (broche 0).
const int POT = A2, BTN = 5, LEDPWM = 6, DAC = A14, TOUCH = 0;
void setup {
Serial.begin(9600);
pinMode(BTN, INPUT_PULLUP); // jamais INPUT_PULLUP sur la broche 13 !
pinMode(LEDPWM, OUTPUT);
analogWriteFrequency(LEDPWM, 20000); // 20 kHz sur le groupe FTM0
analogWriteResolution(12); // resolution 12 bits pour le DAC A14
}
void loop {
int v = analogRead(POT); // 0..1023 par defaut (10 bits)
analogWrite(LEDPWM, map(v, 0, 1023, 0, 255));
analogWrite(DAC, map(v, 0, 1023, 0, 4095)); // veritable DAC 12 bits
Serial.printf("pot=%d touche=%d bouton=%d\n",
v, touchRead(TOUCH), digitalRead(BTN));
delay(50);
}
Verificación esperada
El Monitor serie muestra el potenciómetro (0–1023) y un valor táctil que salta cuando coloca el dedo sobre el pin 0 (touchRead). El osciloscopio en A14 muestra una tensión continua que sigue al potenciómetro — una verdadera salida analógica, no un PWM filtrado. En el pin 6, el PWM funciona a 20 kHz (inaudible en un zumbador, limpio para un driver de LED). El LED sigue al potenciómetro.
Errores frecuentes
- Alimentar un sensor con 5 V y leer en A10–A14: destrucción del pin (no tolerante a 5 V). La tolerancia de 5 V solo se aplica a los pines fuera de A10–A14.
- Esperar 16 bits limpios: el ruido limita a ~13 bits reales — promedie varias lecturas en lugar de apuntar a lo imposible.
- Olvidar que analogWriteFrequency afecta a todo un grupo: los pines del mismo temporizador cambian de frecuencia juntos.
- INPUT_PULLUP en el pin 13 como entrada: el LED consume corriente y altera la lectura — use INPUT simple con resistencia externa.
- Confundir touchRead y digitalRead: la detección capacitiva solo existe en 12 pines dedicados y su umbral depende del cableado (longitud del cable, superficie del electrodo).
- Superar 10 mA por pin: la placa se calienta y la tensión HIGH colapsa; use un transistor o un buffer para las cargas.
Otros tutoriales para esta placa
- Premiers pas sur la Teensy 3.2 : Teensyduino, HalfKay et premier Blink
- Un instrument MIDI USB en 10 minutes : Bounce, boutons et règle d'or du drain
- Audio Shield SGTL5000 : boucle stéréo 44,1 kHz et outil de conception graphique
- 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