unstable
only.Expand description
§LED Controller (LEDC)
§Overview
The LEDC peripheral is primarily designed to control the intensity of LEDs, although it can also be used to generate PWM signals for other purposes. It has multiple channels which can generate independent waveforms that can be used, for example, to drive RGB LED devices.
The PWM controller can automatically increase or decrease the duty cycle gradually, allowing for fades without any processor interference.
§Configuration
Currently only supports fixed-frequency output. High Speed channels are available for the ESP32 only, while Low Speed channels are available for all supported chips.
§Examples
§Low Speed Channel
The following example will configure the Low Speed Channel0 to 24kHz output
with 10% duty using the ABPClock and turn on LED with the option to change
LED intensity depending on duty
value. Possible values (u32
) are in
range 0..100.
let mut ledc = Ledc::new(peripherals.LEDC);
ledc.set_global_slow_clock(LSGlobalClkSource::APBClk);
let mut lstimer0 = ledc.timer::<LowSpeed>(timer::Number::Timer0);
lstimer0
.configure(timer::config::Config {
duty: timer::config::Duty::Duty5Bit,
clock_source: timer::LSClockSource::APBClk,
frequency: Rate::from_khz(24),
})?;
let mut channel0 = ledc.channel(channel::Number::Channel0, led);
channel0
.configure(channel::config::Config {
timer: &lstimer0,
duty_pct: 10,
pin_config: channel::config::PinConfig::PushPull,
})?;
loop {
// Set up a breathing LED: fade from off to on over a second, then
// from on back off over the next second. Then loop.
channel0.start_duty_fade(0, 100, 1000)?;
while channel0.is_duty_fade_running() {}
channel0.start_duty_fade(100, 0, 1000)?;
while channel0.is_duty_fade_running() {}
}
§Implementation State
- Source clock selection is not supported
- Interrupts are not supported
Modules§
Structs§
Enums§
- LSGlobal
ClkSource - Global slow clock source
Traits§
- Speed
- Trait representing the speed mode of a clock or peripheral.