#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
#include "hardware/pwm.h"
#ifndef SYS_CLK_HZ
#define SYS_CLK_HZ 125000000u
#endif
void set_pwm_pin(uint pin, uint freq, uint duty_c);
int main() {
uint32_t freq = 1000;
uint32_t pin = 5;
uint32_t duty_c = 5000;
stdio_init_all();
set_pwm_pin(0, 1000, 0); // D = 0%
set_pwm_pin(2, 1000, 2500); // D = 25%
set_pwm_pin(4, 1000, 5000); // D = 50%
set_pwm_pin(6, 1000, 7500); // D = 75%
set_pwm_pin(8, 1000, 10000);// D = 100%
while (true) {
printf("Hello, Wokwi!\n");
sleep_ms(250);
}
}
// duty_c between 0..10000
void set_pwm_pin(uint pin, uint freq, uint duty_c) {
gpio_set_function(pin, GPIO_FUNC_PWM);
uint slice_num = pwm_gpio_to_slice_num(pin);
pwm_config config = pwm_get_default_config();
float div = (float) (SYS_CLK_HZ) / (freq * 10000);
pwm_config_set_clkdiv(&config, div);
pwm_config_set_wrap(&config, 10000);
pwm_init(slice_num, &config, true); // start the pwm running according to the config
pwm_set_gpio_level(pin, duty_c); //connect the pin to the pwm engine and set the on/off level.
}