Description
Hi, running the ESP8266 to control an RGB LED set via PWM on pins 12, 13, 15 using analogWrite().
When setting very low PWM values (<5), there is occasional flickering of the LEDs (the light turns to full brightness for a noticeable moment). Sometimes this is reinforced by network traffic, sometimes it happens without any apparent activity. The flickering is unrelated to the time when analogWrite() is called.
It helps a little to reduce the PWM frequency from 1KHz to 200Hz, but the flickering still happens from time to time.
I am aware that the PWM is based on a timer IRQ, not a hardware implementation, and I presume this issue is triggered by some other part of the code (wifi? tcp?) disabling interrupts for a short moment, leading to the timer interrupt being missed.
Unfortunately, the code in core_esp8266_wiring_pwm.c is not well documented and it's hard to understand for an outsider what exactly is happening there.
Would it be possible to mitigate the issue in the timer code? Maybe change it from edge- to level triggered or have the ISR called more often?
There is a $15 open bounty on this issue. Add to the bounty at Bountysource.