Because im not an expert at hardware level, could you try to explain the following attributes:
- ledc_channel_config_t.duty
ledc_timer_config_t.duty_resolution
Should i use
LEDC_APB_CLK_HZ which gives 80MHz or
LEDC_REF_CLK_HZ with 1MHz?
For example without tesing:
Code: Select all
periph_module_enable(PERIPH_LEDC_MODULE);
int bit_width = 8; // idk
int divider = 80; // 80MHz / 80 ~ 1MHz
int duty_cycle = 1 << (bit_width - 1); // ?? 128
float freq_hz = ((uint64_t) LEDC_APB_CLK_HZ << 8) / (float) divider / (1 << bit_width);
printf("frequency: %f Hz\n", freq_hz);
ledc_timer_set(LEDC_HIGH_SPEED_MODE, LEDC_TIMER_0, divider, bit_width, LEDC_APB_CLK_HZ );
ledc_timer_rst(LEDC_HIGH_SPEED_MODE, LEDC_TIMER_0);
ledc_timer_resume(LEDC_HIGH_SPEED_MODE, LEDC_TIMER_0);
ledc_channel_config_t channel_config = {
.channel = LEDC_CHANNEL_0,
.duty = duty_cycle,
.gpio_num = GPIO_NUM_2,
.speed_mode = LEDC_HIGH_SPEED_MODE,
.timer_sel = LEDC_TIMER_0
};
ledc_channel_config(&channel_config);