Page 1 of 1

LEDC with OUTPUT_OPEN_DRAIN

Posted: Fri May 22, 2020 8:03 am
by iamflimflam1
I'm using the LEDC functions to control a 3W LED so need to switch the LED using a MOSFET.

I can't seem to use the output pin in open drain mode when using PWM - not sure if I'm doing something wrong or if this is not possible. If I can set it to open drain then I can remove some components from my design.

Code: Select all

const int redPin = 17;
const int freq = 1000;
const int redChannel = 0;
const int resolution = 8;

pinMode(redPin, OUTPUT_OPEN_DRAIN); // doesn't seem to have any effect
ledcSetup(redChannel, freq, resolution);
ledcAttachPin(redPin, redChannel);

Re: LEDC with OUTPUT_OPEN_DRAIN

Posted: Fri May 22, 2020 8:30 am
by iamflimflam1
To partly answer my own question - just found the code in the esp32-hal-ledc.c file for ledAttachPin:

Code: Select all

void ledcAttachPin(uint8_t pin, uint8_t chan)
{
    if(chan > 15) {
        return;
    }
    pinMode(pin, OUTPUT);
    pinMatrixOutAttach(pin, ((chan/8)?LEDC_LS_SIG_OUT0_IDX:LEDC_HS_SIG_OUT0_IDX) + (chan%8), false, false);
}
So I'm wondering if I move my pinMode to after I call this I will be able to switch into open drain mode...

Re: LEDC with OUTPUT_OPEN_DRAIN

Posted: Fri May 22, 2020 5:29 pm
by iamflimflam1
Can confirm that this works. Moving the pinMode call to after the set up allows for open drain PWM.

Re: LEDC with OUTPUT_OPEN_DRAIN

Posted: Wed Jan 03, 2024 4:38 am
by ProtoTing
Your trick did work so far for me too, moving the pinMode call to after the setup allowed for open drain PWM until now.
Now some Librairie changed or something else happened but using the same hardware as before and compiled the same firmware as before (with new librairies unfortunately) and nothing output from the GPIO while it should output PWM it is now continuously pulled low.
I tried putting pinMode call before the setup and it behaved as a regular push-pull output.
If anyone faces the same problem and succeeds in finding the workaround, please help.
How is it possible to output open_drain PWM? how to setup the GPIO?

Re: LEDC with OUTPUT_OPEN_DRAIN

Posted: Thu Jan 04, 2024 1:31 am
by ProtoTing
I finally gave up and went back to the last working version 1.0.6 for the esp32 board manager in arduino IDE found here: https://dl.espressif.com/dl/package_esp32_index.json
2.0.10 and 2.0.11 can't output open drain pwm from everything I tried.