ledc_fade.c
El LEDC del H2 rampa solo: ledc_set_fade_with_time calcula los pasos y el hardware aplica la rampa mientras la CPU duerme. Dos llamadas por ciclo para un ida-vuelta 0-100 % en 1 s.
Hardware necesario
Una placa ESP32-H2 (RISC-V a 96 MHz, radio IEEE 802.15.4 solo — sin Wi-Fi) tipo DevKitM-1, alimentada por USB. 1 LED + resistencia de 330 Ω en GPIO8 (o el LED de usuario).
Cableado
Ánodo del LED en GPIO8 por 330 Ω, cátodo GND. Vale cualquier pin enrutable al LEDC low-speed.
Funcionamiento
Un timer LEDC fija la frecuencia (5 kHz) y la resolución (10 bits); el canal lleva el ciclo de trabajo. fade_start sin espera lanza la rampa que el periférico desenrolla sin tarea CPU. Prográmelo con ESP-IDF (idf.py set-target esp32h2); el puerto USB-Serial/JTAG (GPIO26/27) sirve de consola y puerto de flash. Mantenga Boot + Reset para modo download si hace falta.
Para ir más lejos
Dos canales en las patas R y B de un LED RGB para un degradado de color, o sincronizar la rampa con la radio 802.15.4.
ledc_fade.c
// ledc_fade.c — rampe automatique du LEDC (hardware fade).
#include "driver/ledc.h"
#include "esp_log.h"
#define CANAL LEDC_CHANNEL_0
#define PIN GPIO_NUM_8
static const char *TAG = "fade";
void app_main(void)
{
ledc_timer_config_t timer = {
.speed_mode = LEDC_LOW_SPEED_MODE, .duty_resolution = 10,
.timer_num = LEDC_TIMER_0, .freq_hz = 5000, .clk_cfg = LEDC_AUTO_CLK,
};
ESP_ERROR_CHECK(ledc_timer_config(&timer));
ledc_channel_config_t ch = {
.channel = CANAL, .duty = 0, .gpio_num = PIN,
.speed_mode = LEDC_LOW_SPEED_MODE, .timer_sel = LEDC_TIMER_0,
};
ESP_ERROR_CHECK(ledc_channel_config(&ch));
ledc_fade_func_install(0);
while (1) {
ESP_LOGI(TAG, "montee");
ledc_set_fade_with_time(LEDC_LOW_SPEED_MODE, CANAL, 1023, 1000);
ledc_fade_start(LEDC_LOW_SPEED_MODE, CANAL, LEDC_FADE_NO_WAIT);
vTaskDelay(pdMS_TO_TICKS(1100));
ESP_LOGI(TAG, "descente");
ledc_set_fade_with_time(LEDC_LOW_SPEED_MODE, CANAL, 0, 1000);
ledc_fade_start(LEDC_LOW_SPEED_MODE, CANAL, LEDC_FADE_NO_WAIT);
vTaskDelay(pdMS_TO_TICKS(1100));
}
}