Just one question: why? You must be using a microcontroller, so skip the 555 and just generate the PWM directly, from that.
3.3V is too low for a 555.
"Operation is specified for supplies of 5 V to 15 V."
7555 might be better. In any case that's an awfully complex design for these days, if you already have I2C... use a microcontroller.
Note the actual definitions of "potentiometer" and "rheostat".
A potentiometer is defined in terms of a (three-terminal) voltage divider, while a rheostat is defined in terms of a variable (two-terminal) resistance.
Also, the datasheet https://www.analog.com/media/en/technical-documentation/data-sheets/DS3502.pdf says wiper resistance can be up to 5k, from which I understand some resistance (up to 5k, considerably big) will appear in series with the wiper. By comparison, the series resistance for the wiper of a mechanical potentiometer is close to zero ohms.
To check if this is the cause, disconnect the digital potentiometer from the circuit (pins RL, RW, RH) and use a fixed 10k resistor and a short circuit, then swap the places between the 10k and the short, to check the PWM range for the other extreme (as if the wiper will be first at its minimum value, then at its maximum).
Are you talking about driving the backlight? One pin and a single logic mosfet can do that.
Just one question: why? You must be using a microcontroller, so skip the 555 and just generate the PWM directly, from that.
I was previously working around an issue where I needed I2S audio from a Raspberry Pi and this was interfering with my ability to have it generate a hardware PWM signal. (I solved that by configuring pigpio, a python library, to not use the PCM clock when generating the wave).
Still, I am designing an LCD screen driver, so all the electronics will be behind a single DSI cable, so having a smaller piece of dedicated hardware to generate the PWM signal makes sense to me. I'm considering using a dedicated PWM driver, like the PCA9632, since the designers most likely know way more about designing a proper circuit than me, but I am asking for info in this thread so I can at least know why my own attempt doesn't work...
You could do something like this with a dual Op-Amp which would give you 0-100% range:
Still, I am designing an LCD screen driver, so all the electronics will be behind a single DSI cable, so having a smaller piece of dedicated hardware to generate the PWM signal makes sense to me. I'm considering using a dedicated PWM driver, like the PCA9632, since the designers most likely know way more about designing a proper circuit than me, but I am asking for info in this thread so I can at least know why my own attempt doesn't work...Digi-pots are quite costly solutions in 2023.
If you can find/fit a LED i2c controller with PWM, that will likely be the least-engineering solution. Limmisil/ISSI have a few i2c to LED parts too.
If you cannot find one that fits what you need, then a small MCU could do the task.
What OP is designing is available in a small single SOT23 like form factor - i2C in, LED current out. Just a parametric search away on your fav distributor site - should it be DigiKey or 😱LCSC
ATTiny might be the most practical solution at this point. I think I'm gonna look up some more op amp designs and then read the ATTiny25 manual and see which one is simpler.
Ditch the 555 and take another look at your AP5726 datasheet: Figure 3. Dimming Control Using a DC Voltage. The dimming control voltage input goes to a 100K resistor, so the wiper resistance of your digipot would be small compared to the input resistance so could probably be connected direct. The fig. 3 circuit is designed for 0 to 20mA dimming range for a 2V to 0V control voltage. Increase the 100K to 160K and it would accept a 3.2V to 0V control voltage range, though you might want to increase it a bit more so the digipot can never turn the backlight completely off.
It should work as a summing amplifier.
I don't think that particular circuit values are correct however. I think they're just copying AP5724 circuit (which is correct within reason), correctly scaling the sense resistor for 20mA full scale load current, but forgot to scale control voltage injection resistor (R3, and/or R2) to 0-2V control voltage.
The feedback (FB) pin internal difference amplifier's reference voltage is 0.31V (nom.). That means the current regulation loop acts to keep FB close to that voltage swinging above and below it slightly with every cycle of the internal switch. The datasheet tells up the formula for the average LED current (no dimming) is If=0.31V/Rset.
By injecting current at the FB pin, you can fool the control loop that the LED current is higher than it actually is, thus reducing the LED current. However its at an inconveniently low impedance, requiring a control current equal to the max. LED current, so R2 is added so the control current is reduced by a factor of 1+ R2/Rset. Thus to fully extinguish the LEDs, Ictl_max=0.31V/(R2+Rset), and R3 scales that to the desired upper limit of the control voltage input range.
However I think there may be an error in the datasheet's maths (and thus the R3 resistor value I proposed earlier, which I scaled from theirs)! It states that "For VDC range from 0V to 2V, the selection of resistors in Figure 3 gives dimming control of LED current from 0mA to 20mA." which is patently absurd as Max. VDC gives min. If and visa versa. Also the potential divider R3:(R2+Rset) is wrong - we know it must develop 0.31V at FB when If=0. Neglecting Rset as its three orders of magnitude smaller than the potential divider resistance, the fig 3 resistors give VFB=VDC/21 which is a max. control voltage of ~6.1V.
No, the control current is not the LED current. Its the current through R2 and R3 (neglecting the tiny FB input current), and thus R3 scales it into a voltage, as the control loop acts to keep FB at the reference voltage as long as the LED current is greater than zero.
However its at an inconveniently low impedance, requiring a control current equal to the max. LED current, so R2 is added so the control current is reduced by a factor of 1+ R2/Rset. Thus to fully extinguish the LEDs, Ictl_max=0.31V/(R2+Rset), and R3 scales that to the desired upper limit of the control voltage input range.
Just one question: why? You must be using a microcontroller, so skip the 555 and just generate the PWM directly, from that.