ESP32 Confusing behaviour of PWM after soft reset
Consider:
from machine import Pin, PWM
pin = Pin(23, Pin.OUT)
pwm = PWM(pin, freq=38000, duty=338)
This works as expected. If you issue ctrl-d the waveform on the pin continues unchanged. If you paste the above code again, you cause a low output with
pwm.duty(0)
Subsequently changing the duty value to a value > 0 has no effect. This is surprising.
There is a simple workround of issuing pwm.deinit() at the start. The current state could be confusing to newcomers. It should either be documented or changed so that a soft reset de-initialises any PWM instance.
esp32: PWM duty will be changed when changing the frequency if more than one channel is used.
After upgrading mpy from 1.17 to 1.18, my buzzer can't play low frequency sounds any more.
With further test, it shows that the pwm has no output when frequencies < 611Hz.
from machine import PWM, Pin
pwm = PWM(Pin(5)) # also tested with Pin(2)
pwm.duty(512)
pwm.freq(611) # it works, digital multimeters shows freq 1222Hz
pwm.freq(610) # no pwm output, digital multimeters says freq is 0
And after switching back to mpy 1.17, pwm.freq(610) works fine. I'v tested with another board and I still got the same result. I'm sure this is an issue introduced by v1.18.