2017-08-11 19:11:12 +02:00
# LEDC Module
| Since | Origin / Contributor | Maintainer | Source |
| :----- | :-------------------- | :---------- | :------ |
2019-01-13 21:19:03 +01:00
| 2017-07-05 | [Lars Stenberg ](https://github.com/larsstenberg ) | [Lars Stenberg ](https://github.com/larsstenberg ) | [ledc.c ](../../components/modules/ledc.c )|
2017-08-11 19:11:12 +02:00
This module provides access to the [LEDC ](http://esp-idf.readthedocs.io/en/latest/api-reference/peripherals/ledc.html ) PWM driver.
# LEDC Overview
The LED control module is primarily designed to control the intensity of LEDs, although it can be used to generate PWM signals for other purposes as well. It has 16 channels which can generate independent waveforms that can be used to drive e.g. RGB LED devices. For maximum flexibility, the high-speed as well as the low-speed channels can be driven from one of four high-speed/low-speed timers. The PWM controller also has the ability to automatically increase or decrease the duty cycle gradually, allowing for fades without any processor interference.
## ledc.newChannel()
Configures a PIN to be controlled by the LEDC system.
#### Syntax
```lua
2020-06-30 13:52:12 +02:00
myChannel = ledc.newChannel({
2017-08-11 19:11:12 +02:00
gpio=x,
bits=ledc.TIMER_10_BIT || ledc.TIMER_11_BIT || ledc.TIMER_12_BIT || ledc.TIMER_13_BIT || ledc.TIMER_14_BIT || ledc.TIMER_15_BIT,
mode=ledc.HIGH_SPEED || ledc.LOW_SPEED,
timer=ledc.TIMER_0 || ledc.TIMER_1 || ledc.TIMER_2 || ledc.TIMER_3,
channel=ledc.CHANNEL_0 || ledc.CHANNEL_1 || ledc.CHANNEL_2 || ledc.CHANNEL_3 || ledc.CHANNEL_4 || ledc.CHANNEL_5 || ledc.CHANNEL_6 || ledc.CHANNEL_7,
frequency=x,
2022-05-20 07:36:36 +02:00
invert=false,
2017-08-11 19:11:12 +02:00
duty=x
});
```
#### Parameters
List of configuration tables:
- `gpio` one or more (given as list) pins, see [GPIO Overview ](../gpio/#gpio-overview )
- `bits` Channel duty depth. Defaults to ledc.TIMER_13_BIT. Otherwise one of
- `ledc.TIMER_10_BIT`
- ...
- `ledc.TIMER_15_BIT`
- `mode` High-speed mode or low-speed mode
- `ledc.HIGH_SPEED`
- `ledc.LOW_SPEED`
- `timer` The timer source of channel
- `ledc.TIMER_0`
- ...
- `ledc.TIMER_3`
- `channel` The timer source of channel
- `ledc.CHANNEL_0`
- ...
- `ledc.CHANNEL_7`
- `frequency` Timer frequency(Hz)
2022-05-20 07:36:36 +02:00
- `invert` Inverts the output. False, with duty 0, is always low.
2017-08-11 19:11:12 +02:00
- `duty` Channel duty, the duty range is [0, (2**bit_num) - 1]. Example: if ledc.TIMER_13_BIT is used maximum value is 4096 x 2 -1 = 8091
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`channel` ledc.channel
2017-08-11 19:11:12 +02:00
#### Example
```lua
2020-06-30 13:52:12 +02:00
myChannel = ledc.newChannel({
2017-08-11 19:11:12 +02:00
gpio=19,
bits=ledc.TIMER_13_BIT,
mode=ledc.HIGH_SPEED,
timer=ledc.TIMER_0,
channel=ledc.CHANNEL_0,
frequency=1000,
duty=4096
});
```
# LEDC channel module
All interactions with the LEDC subsystem is done on the channel object created using the newChannel method.
## ledc.channel:stop()
Disable LEDC output, and set idle level.
#### Syntax
`channel:stop(idleLevel)`
#### Parameters
- `idleLevel` Set output idle level after LEDC stops.
- `ledc.IDLE_LOW`
- `ledc.IDLE_HIGH`
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:stop(ledc.IDLE_LOW)
```
## ledc.channel:setfreq()
Set channel frequency (Hz)
#### Syntax
`channel:setfreq(frequency)`
#### Parameters
- `frequency` What frequency should be set
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:setfreq(2000)
```
## ledc.channel:getfreq()
Get channel frequency (Hz)
#### Syntax
`channel:getfreq()`
#### Parameters
None
#### Returns
- 0 error
- Others current LEDC frequency
#### Example
```lua
channel:getfreq()
```
## ledc.channel:setduty()
Set channel duty
#### Syntax
`channel:setdutyduty)`
#### Parameters
- `duty` What duty should be set
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:setduty(4096)
```
## ledc.channel:getduty()
Get channel duty
#### Syntax
`channel:getduty()`
#### Parameters
None
#### Returns
- (-1) parameter error
- Others current LEDC duty
#### Example
```lua
channel:getduty()
```
## ledc.channel:reset()
Resets the timer
#### Syntax
`channel:reset()`
#### Parameters
None
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:reset();
```
## ledc.channel:pause()
Pauses the timer
#### Syntax
`channel:pause()`
#### Parameters
None
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:pause();
```
## ledc.channel:resume()
Resumes a paused timer
#### Syntax
`channel:resume()`
#### Parameters
None
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:resume()
```
## ledc.channel:fadewithtime()
Set LEDC fade function, with a limited time.
#### Syntax
`channel:fadewithtime(targetDuty, maxFadeTime[, wait])`
#### Parameters
- `targetDuty` Target duty of fading.
- `maxFadeTime` The maximum time of the fading ( ms ).
- `wait` Whether to block until fading done.
- `ledc.FADE_NO_WAIT` (default)
- `ledc.FADE_WAIT_DONE`
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:fadewithtime(4096, 1000);
```
## ledc.channel:fadewithstep()
Set LEDC fade function, with step.
#### Syntax
`channel:fadewithstep(targetDuty, scale, cycleNum[, wait])`
#### Parameters
- `targetDuty` Target duty of fading.
- `scale` Controls the increase or decrease step scale.
- `cycleNum` Increase or decrease the duty every cycle_num cycles
- `wait` Whether to block until fading done.
- `ledc.FADE_NO_WAIT` (default)
- `ledc.FADE_WAIT_DONE`
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:fadewithstep(1000, 10, 10);
```
## ledc.channel:fade()
Set LEDC fade function.
#### Syntax
2022-11-11 02:49:16 +01:00
`channel:fade(duty, direction, scale, cycleNum, stepNum [, wait])`
2017-08-11 19:11:12 +02:00
#### Parameters
- `duty` Set the start of the gradient duty.
- `direction` Set the direction of the gradient.
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
- `ledc.FADE_DECREASE`
- `ledc.FADE_INCREASE`
2017-08-11 19:11:12 +02:00
- `scale` Set gradient change amplitude.
- `cycleNum` Set how many LEDC tick each time the gradient lasts.
- `stepNum` Set the number of the gradient.
- `wait` Whether to block until fading done.
- `ledc.FADE_NO_WAIT` (default)
- `ledc.FADE_WAIT_DONE`
#### Returns
Fix ledc, otaupgrade, pulsecnt, sdmmc, sjson, touch docs (#3436)
ledc.md - formatting, add object name
otaupgrade.md - formatting, add 'Syntax' section
pulsecnt.md - formatting, fix syntax pulsecnt.create, add object name
sdmmc.md - fix typos
sjson.md - formatting, add `Parameters` section
touch.md - formatting, add object name, fix Returns in tp:read()
2021-05-23 16:29:01 +02:00
`nil`
2017-08-11 19:11:12 +02:00
#### Example
```lua
channel:fade(0, ledc.FADE_INCREASE, 100, 100, 1000);
```