A simple thing to try that has helped me in the past. Before you do a block of updates to the LCD, use lcd.noDisplay() and then turn it on again at the end with lcd.display(). Thgis stops the display updating immediately but changes the memory buffer of the display. It makes no difference to the perception of updates on the display but fixed my (occasional) odd character apprearing on the screen.
Thanks, I'll throw that in JIC. Just to be clear, you turn off the LCD, write to it, then turn it back on?
When you get some caps, get a bunch of the .1uF caps, they make good bypass caps. You're right, filtering is a good thing. You aren't switching any brushed DC motors are you? Depending upon your wiring and the stuff around it, any of the wires running to the LCD could be carrying noise in. Are you using any of the pins for other purposes, or anything where you might be accidentally leaving on in the wrong state (input vs. output). I don't know if you have any ISRs, but it could be that one is running and expecting some pin to bin in a specific state, but main level code occasionally changes it right before the interrupt fires. Just food for thought.
Thanks, I will. The 0.01uF that I'm using will work though, right?
I'm not using any motors; random emi from the wires is quite possible, I need to borrow my buddy's picoScope and check them. All of my pins are single purpose, and to my knowledge, no ISRs are running.