fade-pwm.ino
Le PWM du 4809 diffère du 328P (timers TCA/TCD au lieu de Timer0/1/2) mais l'API analogWrite reste identique : ce fade triangulaire 0-255 sur la broche 10 montre l'usage courant, avec la fréquence par défaut sans papillotement visible.
Matériel requis
Un Arduino Nano Every (ATmega4809 à 20 MHz, brochage identique au Nano, USB micro-B, convertisseur UART séparé, broches 5 V, pile de compatibilité avec le Nano classique). Nano Every, LED + résistance 330 Ω sur une broche PWM (D9, D10, D11, D3...).
Câblage
LED (+) → résistance → D10, cathode → GND ; les broches PWM portent le signe ~ sur le silicium.
Fonctionnement
analogWrite charge la consigne du timer : rapport cyclique 0-255/256. Le pas de 2 à 100 Hz donne une montée régulière ; le cycle complet fait ~2,5 secondes.
Exécution
Installez le package Arduino megaAVR Boards dans l'IDE, sélectionnez Arduino Nano Every, téléversez. Le Serial USB est séparé du Serial1 matériel (broches RX/TX) : le code série classique fonctionne tel quel.
Variantes
Sur le 4809 vous pouvez pousser la fréquence PWM bien plus haut (motorisation) via les registres TCA/TCD, ou piloter une base de transistor pour une puissance plus forte.
fade-pwm.ino
// Fade sur le Nano Every : analogWrite 8 bits sur broche PWM.
// Le 4809 permet aussi de changer la frequence PWM (TCA/TCD).
const int LED = 10; // broche PWM (marquee ~ sur le silicium)
int niveau = 0;
int pas = 2;
unsigned long dernier = 0;
void setup() {
pinMode(LED, OUTPUT);
analogWriteResolution(8); // 0..255 par defaut
Serial.begin(9600);
}
void loop() {
if (millis() - dernier < 10) return; // 100 Hz de rafraichissement
dernier = millis();
niveau += pas;
if (niveau >= 255) { niveau = 255; pas = -2; }
if (niveau <= 0) { niveau = 0; pas = 2; }
analogWrite(LED, niveau);
// le cycle complet dure ~2,5 s : visible a l'oeil, sans papillotement
static int dernierPrint = -10;
if (abs(niveau - dernierPrint) > 30) {
dernierPrint = niveau;
Serial.println(niveau);
}
}