🛠 GPIO et PWM sur le Teensy 4.1 : 55 broches en 3,3 V, ni 5 V tolérées ni traîne
Objectifs
Exploiter les E/S du Teensy 4.1 : 55 broches au total, dont 42 facilement accessibles sur une plaque sans soudure (contre 40/24 sur le 4.0). La rangée supplémentaire apporte des broches PWM dédiées (24, 25, 46, 47, 53 figurent dans la carte PWM officielle). Nous allons lire un bouton, générer une variation de luminosité en PWM, et intérioriser les deux règles d'or : aucune broche ne tolère plus de 3,3 V (changement radical avec le Teensy 3.2 !) et le courant de sortie recommandé est de 4 mA par broche (valeur prudente de la page produit).
Matériel
- 1 Teensy 4.1 + câble micro-USB de données
- 1 bouton poussoir (broche 24 vers GND, pull-up interne)
- 1 LED + résistance (~100 à 330 Ω) sur la broche 6
- Un potentiomètre 10 kΩ entre 3,3 V, GND et la broche A0 (broche Arduino 14)
Les règles électriques
- Sortie HIGH = 3,3 V ; ne jamais appliquer plus de 3,3 V sur une broche, numérique ou analogique. Un signalier 5 V passe par un translateur de niveau.
- Toutes les broches disposent des résistances de pull-up, pull-down et keeper, et de l'interruption sur changement d'état.
- Le PWM : 35 broches PWM, 22 groupes pouvant tourner à des fréquences indépendantes via
analogWriteFrequency. Les canaux de QuadTimer4 sont réservés par OctoWS2811 et la temporisation ADC de la bibliothèque Audio — évitez-les en PWM généraliste. - Piège documenté sur la broche 13 : en entrée, ne jamais utiliser
INPUT_PULLUP, la LED embarquée polarise la broche.
Code complet
const uint8_t BTN = 24; // broche exclusive du 4.1
const uint8_t LED_PWM = 6; // broche FlexPWM
const uint8_t LED_STAT = 13;// LED orange : jamais INPUT_PULLUP ici
void setup {
pinMode(BTN, INPUT_PULLUP);
pinMode(LED_STAT, OUTPUT);
analogWriteFrequency(LED_PWM, 1000); // 1 kHz, indépendant des autres groupes
analogWrite(LED_PWM, 0);
}
void loop {
if (digitalRead(BTN) == LOW) {
// A0 (broche 14) : 0..1023 sur 0..3,3 V fixes
int v = map(analogRead(14), 0, 1023, 0, 255);
analogWrite(LED_PWM, v);
digitalWrite(LED_STAT, HIGH);
} else {
analogWrite(LED_PWM, 0);
digitalWrite(LED_STAT, LOW);
}
delay(10);
}
Vérification attendue
Bouton relâché : LED éteinte. Bouton enfoncé : la luminosité suit le potentiomètre. Le M7 à 600 MHz avec ses mémoires TCM rend les écritures de broches minuscules en cycles CPU — pour un clignotement à haute fréquence, préférez digitalToggle (une seule écriture de bit compilée).
Erreurs fréquentes
- Brancher un capteur 5 V en direct : griller une broche est documenté comme le risque n°1 du passage 3.2 → 4.x.
- Dépasser 4 mA par broche sans transistor : la page produit est explicite sur ce plafond conservateur (le tableau techspecs mentionne 10 mA — concevez pour 4).
- Confondre numérotations : la broche analogique A0 est la broche Arduino 14 sur tous les Teensy.
- Oublier le rebond logiciel :
delay(10)dépanne, un vrai projet utilise une bibliothèque d'anti-rebond (ex. Bounce).
Autres tutoriels pour cette carte
- Premiers pas sur le Teensy 4.1 : Teensyduino, Teensy Loader et premier Blink
- Entrées analogiques du Teensy 4.1 : 18 broches, 2 ADC, 0-3,3 V fixes et zéro DAC
- Logger sur carte SD via le port SDIO natif du Teensy 4.1
- Serveur web embarqué : l'Ethernet natif 10/100 du Teensy 4.1 (DP83825)
- Boîte à rythmes USB MIDI : classes MIDI, MIDIx16 et port hôte USBHost_t36
- Ingénierie mémoire du Teensy 4.1 : TCM, DMAMEM, EXTMEM, flash QSPI et EEPROM
Exemples de code pour cette carte
clignotante.inoArduinotouche-capacitive.inoArduinoanalogique-12-bits.inoArduinomidi-piano.inoArduinopwm-respiration.inoArduinoservo-angle.inoArduino