ArduinoCore-samd icon indicating copy to clipboard operation
ArduinoCore-samd copied to clipboard

TCx PWM not working correctly

Open josephduchesne opened this issue 3 years ago • 1 comments

I'm trying to use pwm() on TC4 (D6 on the Seeduino Xiao), but the duty cycle is being calculated incorrectly in wiring_pwm.cpp line 271:

duty = mapResolution(duty, 10, 16);

For samd51 TCx and TCCx, as well as SAMD21 TCCx, it's using:

duty = map(duty, 0, (1<<PWM_API_RESOLUTION), 0, period);

The result is that the counter (in my case duty period = 2000) is being incorrectly.

I've changed the line to match the others and it works fine for my single use case.

@deanm1278 since this was in your original PR, any idea why TCx is treated differently?

josephduchesne avatar Jul 29 '21 23:07 josephduchesne

I was looking at this https://github.com/Seeed-Studio/ArduinoCore-samd/pull/23, then saw this issue as well. I was intending to use the PWM to control motor but I noticed that on oscilloscope that duty cycles are inaccurate. Same device, Xiao (SAMD21)

sdkks avatar Nov 20 '21 15:11 sdkks