LEDC PWM Driver on esp32
-
- Posts: 73
- http://meble-kuchenne.info.pl
- Joined: Fri Dec 18, 2020 1:15 pm
- Has thanked: 32 times
- Been thanked: 1 time
Re: LEDC PWM Driver on esp32
Yeah, I get that. I am just confused why the SetDutyCycle doesn't work outside a loop and the set fade does. In theory, they should be both set and forget? Any way. I am looking forward to this being a component. Thanks for working on this. I have not seen the guts of an almost macro before. I am learning a lot.
Re: LEDC PWM Driver on esp32
Yeah, I get that. I am just confused why the SetDutyCycle doesn't work outside a loop and the set fade does. In theory, they should be both set and forget? Any way. I am looking forward to this being a component. Thanks for working on this. I have not seen the guts of an almost macro before. I am learning a lot.
The 1hz makes a nice simple heartbeat.
chad
*edit just saw your last post
The 1hz makes a nice simple heartbeat.
chad
*edit just saw your last post
-
- Valued Contributor
- Posts: 1280
- Joined: Wed Dec 09, 2020 9:37 pm
- Has thanked: 124 times
- Been thanked: 645 times
Re: LEDC PWM Driver on esp32
A second attempt. A less Flowcodian approach - but as you can have up to 16 channels - I gave it a go. It isn't easy to 'step' through multiple components - whereas this way it's possible to change multiple channels in a loop.
Here I set up 4 timers (all HS) with different frequencies and then open 8 channels on the pin assignments given in 'pins' in main's variables. The 8 HS and 8 low speed channels each have four timers (and there are some limits on clock / rate /combinations) Here - I set 5000, 2500, 1250, and 625 Hz and channels are assigned two to each timer.
Initially the pins are set to 100% duty for 5s and then a simple fade with each step 80% of previous duty. Then back to 100--0-100% fades Results on the scope look good - I'll perhaps wire an LED to a PIN or two and see how they look,
The docs imply it should be possible to have a 40Mhz PWM (0, 50 or 100% only?) but the esp32 throws errors at 10kHz and above for me?
Oddly it seems to work well for HS mode - SetDuty doesn't seem to work for LS mode (LEDC not intialised) - but fade does..
Almost tempted to change channel to [0..15] and select speed_mode automatically - anyone any thoughts?
Martin
Here I set up 4 timers (all HS) with different frequencies and then open 8 channels on the pin assignments given in 'pins' in main's variables. The 8 HS and 8 low speed channels each have four timers (and there are some limits on clock / rate /combinations) Here - I set 5000, 2500, 1250, and 625 Hz and channels are assigned two to each timer.
Initially the pins are set to 100% duty for 5s and then a simple fade with each step 80% of previous duty. Then back to 100--0-100% fades Results on the scope look good - I'll perhaps wire an LED to a PIN or two and see how they look,
The docs imply it should be possible to have a 40Mhz PWM (0, 50 or 100% only?) but the esp32 throws errors at 10kHz and above for me?
Oddly it seems to work well for HS mode - SetDuty doesn't seem to work for LS mode (LEDC not intialised) - but fade does..
Almost tempted to change channel to [0..15] and select speed_mode automatically - anyone any thoughts?
Martin
Re: LEDC PWM Driver on esp32
Hi, I got my flow code programming again, and it was surprisingly easy. I just had to re-run the installation . bat file in the espidf.
It is running and programming in python 10.6 with the latest git FYI.
I played with your test, and it is running here. I agree with the speed mode, Just use the high speed and call it a day. I assume that if someone is using lots of led's they aren't going to care as much about power saving by using a slower timer? I also assume this will make the pwm freq easier to predict. I.E. 0 to 5k based on the resolution. If someone need to do something different with the slower timers they can do it in c.
here is some more info I found. This is how Arduino handles it. Also, esp's have different PWM channel amount numbers. Not sure how to handle this.
https://espressif-docs.readthedocs-host ... /ledc.html
Chad
It is running and programming in python 10.6 with the latest git FYI.
I played with your test, and it is running here. I agree with the speed mode, Just use the high speed and call it a day. I assume that if someone is using lots of led's they aren't going to care as much about power saving by using a slower timer? I also assume this will make the pwm freq easier to predict. I.E. 0 to 5k based on the resolution. If someone need to do something different with the slower timers they can do it in c.
here is some more info I found. This is how Arduino handles it. Also, esp's have different PWM channel amount numbers. Not sure how to handle this.
https://espressif-docs.readthedocs-host ... /ledc.html
Chad
-
- Valued Contributor
- Posts: 1280
- Joined: Wed Dec 09, 2020 9:37 pm
- Has thanked: 124 times
- Been thanked: 645 times
Re: LEDC PWM Driver on esp32
Hi Chad,
Thanks for the link and the feedback - I haven't had a play using tthe Arduino code - but many useful ideas in the link.
The number of channels etc could be found programmatically - for example GetMaxChannels() - there aee constants defined in the header files (eg LEDC_MAX_CHANNEL)
I was going to have a play with getting the interrupt to work too - as I see that being useful - I often use callbacks etc in my Flowcode - using cb = &FCM_Name; in C to get the address of the function. Storing pointers is easy too (just use a 16 or 32 bit unsigned integer as appropriate) The esp32 is 'hot' on type checking - so casts are essential too.
MArtin
Thanks for the link and the feedback - I haven't had a play using tthe Arduino code - but many useful ideas in the link.
The number of channels etc could be found programmatically - for example GetMaxChannels() - there aee constants defined in the header files (eg LEDC_MAX_CHANNEL)
I was going to have a play with getting the interrupt to work too - as I see that being useful - I often use callbacks etc in my Flowcode - using cb = &FCM_Name; in C to get the address of the function. Storing pointers is easy too (just use a 16 or 32 bit unsigned integer as appropriate) The esp32 is 'hot' on type checking - so casts are essential too.
MArtin
Re: LEDC PWM Driver on esp32
Noob question. What does the .variable do? I am assuming that is a local undeclared variable type?
Also have you noticed when picking pins for a component there is a portB? There is no portb. Or is there?
Chad
Also have you noticed when picking pins for a component there is a portB? There is no portb. Or is there?
Chad
-
- Valued Contributor
- Posts: 1280
- Joined: Wed Dec 09, 2020 9:37 pm
- Has thanked: 124 times
- Been thanked: 645 times
Re: LEDC PWM Driver on esp32
Yes - the. '.' signifies a local variable - either a parameter passed to a macro or a locally defined variable - (or constant). It's scope is limited - it can't be accessed from outside of the macro - and they are only allocated (on the stack) when in the macro - so only use memory then too (unlike a global)
They help make code more readable and easier to follow - I'd strongly advocate their use...
There is a port b - however the pins are more limited in use - and they can't be allocated for most functions...
Martin
They help make code more readable and easier to follow - I'd strongly advocate their use...
There is a port b - however the pins are more limited in use - and they can't be allocated for most functions...
Martin
Re: LEDC PWM Driver on esp32
Hey, Could you please finish turning one of these into a usable component? Even the first simple one would be fine. The only other thing that would be handy in it is the fade complete interrupt so you could make a fading heartbeat.
thanks,
Chad
thanks,
Chad