🛠 Variation d'intensité d'une LED avec le PWM

ODROID-C4 (Hardkernel) · intermediaire · Schéma : IMG-odroid-c4-intermediaire-1-odroidc4-pwm-led.svg — LED avec résistance de 330 Ω reliée à une broche PWM du connecteur 40 broches de l'ODROID-C4 et au GND, signal carré illustré.

Objectifs

Faire varier l'intensité d'une LED externe sur l'ODROID-C4 en utilisant la sortie PWM du SoC Amlogic S905X3 (le connecteur 40 broches expose jusqu'à 6 canaux PWM). Vous apprendrez à exporter un canal via /sys/class/pwm, à raisonner en période (ns) et rapport cyclique (duty_cycle), et à écrire une respiration (breathing) en bash.

Matériel

Code complet

#!/usr/bin/env bash
# respiration.sh - fade d'une LED sur pwmchip0 / channel 0
# Adapter le numéro de chip/canal selon le brochage confirmé.
CHIP=/sys/class/pwm/pwmchip0
sudo sh -c "echo 0 > $CHIP/export" 2>/dev/null || true
sleep 0.3
CH=$CHIP/pwm0
sudo sh -c "echo 20000 > $CH/period"      # période 20 kHz (50 µs)
sudo sh -c "echo 1 > $CH/enable"
for step in $(seq 0 20 100) ; do          # montée 0 -> 100 %
  duty=$(( 20000 * step / 100 ))
  sudo sh -c "echo $duty > $CH/duty_cycle"
  sleep 0.05
done
for step in $(seq 100 -20 0) ; do         # descente 100 -> 0 %
  duty=$(( 20000 * step / 100 ))
  sudo sh -c "echo $duty > $CH/duty_cycle"
  sleep 0.05
done
sudo sh -c "echo 0 > $CHIP/unexport"

Vérification attendue

La LED monte progressivement en luminosité puis redescend en environ une seconde, sans clignotement perceptible (20 kHz). cat $CH/duty_cycle suit les valeurs écrites. Après le script, pwmchip0 ne contient plus de dossier pwm0 (canal libéré). Si $CHIP n'existe pas, listez ls /sys/class/pwm/ et vérifiez que le overlay PWM est activé dans /boot/armbianEnv.txt (overlay_add=).

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels