fade-pwm.ino
El PWM del 4809 difiere del 328P (timers TCA/TCD en vez de Timer0/1/2) pero la API analogWrite sigue idéntica: este fade triangular 0-255 en el pin 10 muestra el uso común, con frecuencia por defecto sin parpadeo visible.
Hardware
Un Arduino Nano Every (ATmega4809 a 20 MHz, mismo formato que el Nano, USB micro-B, chip UART separado, pines de 5 V, compatibilidad directa con el Nano clásico). Nano Every, LED + resistencia de 330 Ω en un pin PWM (D9, D10, D11, D3...).
Cableado
LED (+) → resistencia → D10, cátodo → GND; los pines PWM llevan la marca ~ en el silicio.
Funcionamiento
analogWrite carga la consigna del timer: ciclo de trabajo 0-255/256. El paso de 2 a 100 Hz da una subida regular; el ciclo completo dura ~2,5 segundos.
Ejecución
Instala el paquete Arduino megaAVR Boards en el IDE, selecciona Arduino Nano Every y carga. El Serial USB está separado del Serial1 de hardware (pines RX/TX): el código serie clásico funciona tal cual.
Variantes
En el 4809 puedes subir la frecuencia PWM mucho más (motorización) vía registros TCA/TCD, o pilotar una base de transistor para más potencia.
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);
}
}