Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
#include <stdio.h>
#include "esp_err.h"
#include "driver/ledc.h"
#include "driver/periph_ctrl.h"
void app_main()
{
periph_module_enable(PERIPH_LEDC_MODULE);
int bit_width = 20; // 1 - 20 bits
int divider = 256; // Q10.8 fixed point number, 0x100 — 0x3FFFF
int duty_cycle = 1 << (bit_width - 1);
float freq_hz = ((uint64_t) LEDC_REF_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_REF_TICK);
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);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.