I can see the concept just ahead of me - I'm still working out how to grasp it though!
If the fading process is set to run over say - 200mS , the fade completes after 200mS and would therefore leave the static displayed digit (for the 'seconds') displayed for 800mS before the fade to the next digit - this is a random guess - it may be a shorter period.
Then, I can see that during that 200mS, a digit that stays the same has to be on all of the time, A digit that is fading out has to have a 'duty cycle' that is going from full on to full off over that period and a digit that is fading in will have a 'duty cycle' that is going from full off to full on.
Then lets say that the actual fade process will occur over a number of steps - say 20 for example.
The logic that you describe in your first reply would be used to determine the duty cycles for each fade step
An outer loop would determine the duty cycles for each fade step
An inner loop would then perform the 'PWM' for the current step
Assuming a digit that was changing from '0' to '1' and that there will be 20 fade steps, duty cycle for the fading out digit will go from 100% to 0% in steps of 5% (assuming a linear fade). Similarly the duty cycle for the fading in digit would go from 0% to 100% in steps of 5%(assuming a linear fade).
In the first iteration of the 'PWM' loop - let's say that the '0' is on 100%, the '1' is on for 0%
The iteration has to last for total fade duration (200mS) divided by the number of iterations (20) - so 10mS.
For 10mS a PWM kind of signal at a given frequency (490Hz Arduino default so I chose 500Hz) has to be generated with the given duty cycles for the digits.
The '0' has 100%, the '1' has 0%
For the inner loop - which has to last 10mS and based on an assumed 'PWM' frequency of 500Hz.
The inner loop would have only 500 x 0.01 = 5 steps
For each of these steps, the '0' would be on and the '1' would be off
During each step - send the required digits to the shift register depending on their on/off state from the required duty cycle then wait the required number of mS - in this case 10ms / 5 = 2mS.
25% of the way through the outer loop - the '0' would be on for 75% and the '1' would be on for 25% (assuming linear fade)
75% of the way through the outer loop - the '0' would be on for 25% and the '1' would be on for 75% (assuming linear fade)
Am I still on the right track?
These numbers all seem very small - should I be working in uS with more steps?
Is the 500Hz 'PWM' frequency appropriate?
Thank you