Module ledc

Source
Available on crate feature 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§

channel
LEDC channel
timer
LEDC timer

Structs§

Ledc
LEDC (LED PWM Controller)
LowSpeed
Used to specify LowSpeed Timer/Channel

Enums§

LSGlobalClkSource
Global slow clock source

Traits§

Speed
Trait representing the speed mode of a clock or peripheral.