🛠 Broches, ADC 13 bits, DAC 12 bits et PWM : dompter les E/S de la Teensy 3.2
Objectifs
Exploiter les E/S de la Teensy 3.2 comme un pro : 34 broches d'E/S dont 24 facilement accessibles sur une breadboard compacte, 21 entrées analogiques réparties sur 2 convertisseurs, un vrai DAC 12 bits sur A14, 12 broches tactiles (touchRead) et 12 broches PWM réparties en 3 groupes de timers à fréquence indépendante. Vous câblerez un potentiomètre, un bouton et une LED PWM, et vous lirez le tout dans un seul sketch avec sortie DAC.
Matériel
- 1 Teensy 3.2 sur breadboard (format compact : 24 broches accessibles sans soudure)
- 1 potentiomètre 10 kΩ sur A2 (curseur au milieu, les deux autres pattes entre 3,3 V et GND)
- 1 bouton poussoir entre la broche 5 et GND (pull-up interne)
- 1 LED + résistance 330 Ω sur une broche PWM (ex. 6)
- Optionnel : oscilloscope sur A14 pour voir la sortie DAC
Points d'architecture à connaître
- Logique 3.3 V : sortie HIGH = 3,3 V, 10 mA recommandés au maximum par broche ; les entrées numériques tolèrent 5 V (ne jamais dépasser 5 V). Exception critique : les broches purement analogiques A10–A14 ne sont PAS 5 V tolerant — les alimenter au-delà de 3,3 V les détruit.
- ADC : 10 bits par défaut ; le matériel permet 16 bits mais « en pratique seuls ~13 bits sont normalement exploitables à cause du bruit » (page boutique PJRC). AREF = 3,3 V par défaut ;
analogReference(INTERNAL)donne une référence de 1,2 V. Étages d'amplification différentielle à gain programmable (PGA) sur les paires A10/A11 et A12/A13. 3 comparateurs analogiques intégrés. - DAC : un vrai convertisseur 12 bits sur A14 — rare dans le monde Arduino-compatible.
- PWM : 12 broches, 3 groupes de timers indépendants —
analogWriteFrequencychange la fréquence par groupe ; le groupe FTM0 pilote les broches 5, 6, 9, 10, 20, 21, 22, 23. - Piège LED broche 13 : quand la broche 13 est utilisée en entrée, ne PAS utiliser INPUT_PULLUP — la LED orange intégrée fausse le niveau logique.
- Toutes les broches acceptent pull-up/pull-down et interruptions pin-change ; limitation de slew-rate en option.
Code complet
// 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);
}
Vérification attendue
Le Moniteur série affiche le potentiomètre (0–1023) et une valeur tactile qui bondit quand vous posez le doigt sur la broche 0 (touchRead). L'oscilloscope sur A14 montre une tension continue qui suit le potentiomètre — une vraie sortie analogique, pas un PWM filtré. Sur la broche 6, le PWM tourne à 20 kHz (inaudible sur un buzzer, propre pour un pilote de LED). La LED suit le potentiomètre.
Erreurs fréquentes
- Alimenter un capteur en 5 V et lire sur A10–A14 : destruction de la broche (non 5 V tolerant). La tolérance 5 V ne s'applique qu'aux broches hors A10–A14.
- Attendre 16 bits propres : le bruit limite à ~13 bits réels — moyennez plusieurs lectures plutôt que de viser l'impossible.
- Oublier que analogWriteFrequency touche tout un groupe : les broches du même timer changent de fréquence ensemble.
- INPUT_PULLUP sur la broche 13 en entrée : la LED tire le courant et fausse la lecture — utilisez INPUT simple avec résistance externe.
- Confondre touchRead et digitalRead : la détection capacitive n'existe que sur 12 broches dédiées et son seuil dépend du câblage (longueur de fil, surface d'electrode).
- Dépasser 10 mA par broche : la carte chauffe et la tension HIGH s'effondre ; utilisez un transistor ou un buffer pour les charges.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino