I stumbled across this topic here, but wanted to 'tweak' the look of some of the letters. The original code was really hard to edit, so I started from scratch and wrote up this little sketch+library.
The down-side appears to be with these HD44780 Blue/White displays refresh rate. Any scroll rate faster than about 500ms (per screenfull) leaves traces/shadows like crazy. However, I'm fairly inexperienced with Arduino's and LCDs, so maybe my code isn't as efficient as it could be.
Any tips for making my code faster or otherwise limiting the appearance of traces/shadows?
r4z0r7o3:
The down-side appears to be with these HD44780 Blue/White displays refresh rate. Any scroll rate faster than about 500ms (per screenfull) leaves traces/shadows like crazy.
These are passive matrix displays, you don't get fast switching without active matrix (a.k.a. TFT)
As Mark says the problem is with the display technology not the code. If your code were able to make it scroll faster then the display problem would be worse.
Yeah, I couldn't access any code either. I also wanted sub-character scrolling, not just one at a time, but one column at a time. Besides, I needed the programming practice anyway and am comfortable with github.
I took a quick video of what this looks like @ 500ms update (per screenful):
Though I noticed something interesting, if I set it less than 500ms, it looks the same! So there's certainly some gross inefficiencies here. I suspect it has to do with rendering directly onto the screen one character at a time
Grumpy_Mike:
As Mark says the problem is with the display technology not the code. If your code were able to make it scroll faster then the display problem would be worse.
Out of curiosity, would a VFD or OLED display not show this artefact so much?
Thinking about it, yeah, I agree. If I make the code faster, it'll probably just look worse. Though for my own edification, what would be the best optimization strategy here?
The only other strategy I know of is "the long way", instrument each function to track and print an average execution speed. Then rework each function starting with the slowest one. I'm a Linux guy, where strace and ltrace will do function-timing for you.
Are there any handy debugging libraries or similar tools for Arduino which can do this?