ArduinoCore-samd
ArduinoCore-samd copied to clipboard
TCx PWM not working correctly
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?
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)