I started using a Sparkfun display recently as well, and am noticing the same thing. I had been using the Adafruit RGB displays with serial backpack, and I stopped because the backpack was really big, but I might figure out how to go back. The RGB backlit displays seem to be much more easy to read.
I’m not getting data corruption, I’m getting an extra “character” at the end of a string.
Remember that some of the Sparkfun displays are actually 3.3V, even if they say 5V on the display. I’m not sure about the 20x4’s but some of the 16x2’s are like that.
The power from your laptop might be cleaner, but you are probably limited to 100mA from a USB port. The Imp can occasionally draw up to 400mA, so that probably isn’t something you want to do a lot.
What is the available current from your USB power supplies? There are good ones, and not so good ones.
My thought is that it’s a 5v display and you’re giving it 3.3v signals from the imp. 3.3v is really not high enough to be totally compatible with 5v logic (really, you need 0.7x VDD for that, which is 3.5v).
This means that the higher the voltage the display is powered with, the more the imp’s signalling is in a grey area, binary-wise, and hence the corruption.
The real solution is to buffer the imp’s transmit to 5v levels…
If so, it does require 5V TTL serial, and Hugo’s assumption is correct, that you are in a “gray” signal area. I haven’t done this, but I believe there are a number of logic level convertors around…I’m sure someone else can chime in here with an answer.
@philspitler yes, the voltage of the supply vs the imp voltage.
The imp has a regulated supply, so the imp’s TX line will always be very close to 3.3v.
If the display is powered by 4.92v, then the logic 1 threshold is 0.74.92=3.444v.
If the display is powered by 5.2v, then the logic 1 threshold is 0.75.2=3.64v
With a lower voltage running the display, the imp high output is closer to, but still not quite at, the required level to be unequivocally recognized as a 1.