More about different LCD backpacks
February 15, 2012 Leave a comment
Last time I discussed what serial LCD to buy. This time, as a response to some Arduino forum questions regarding I2C LCDs, I’ve written the following short comparison to prove that serial LCDs are better choice than I2C LCDs in most projects.
First, there is no official I2C liquid crystal library. Anything not included in arduino IDE 1.0 is contributed by one person or another and some get active support but the rest don’t so they are dead. Most ebay sellers are just selling I2C LCDs because they think they make money selling but not able to do any support and that’s why I put support at top priority. Just read comments on my blog you will see. Unfortunately mine is not I2C (IE cheapest, for good reasons). Just to clarify, although you can get a lib for an I2C LCD, the library goes with the particular I2C LCD and is not useful if you switch to another I2C LCD. Also arduino still does the heavy lifting to communicate with the LCD so your code will be long with the included lib and arduino spends processing time to do the LCD control. On the other hand, serial LCDs (on TTL serial) require no library so there won’t be a time when you want lib and the lib is not up to date and won’t compile. Also the serial LCD controller does all the heavy lifting for arduino. Your code is small since there’s no lib to include. Those are some of the reasons I make and sell serial LCDs and not I2C IO extender LCDs.
Two different I2C LCDs and why one is so much cheaper than the other/serial LCD:
1) LCD with I2C IO port extender (cheap). The port extender is a buck each. There is no “brain” on this type of I2C LCDs. The extender simply adds more IO ports to arduino. Arduino still does all heavy lifting and is prone to long compiled sketch and broken library problems.
2) LCD with controller that talks I2C with arduino (expensive). The controller is a few bucks and needs support such as crystal caps etc. There is a “brain” on this type of I2L LCDs. The controller does all heavy lifting so arduino has short sketch but there is still potential for broken library problems since most of these come with libraries to tell the controller what to do.
3) Then the serial LCD. It’s around the same price and complexity as 2) in terms of price and sometimes a serial LCD offers I2C connectivity as well. It’s not prone to broken library since everything is sent in serial text streams and arduino also has short sketch. You can also connect this type of LCD directly to a PC with a USB TTL adapter! The input and output are both asynchronous and buffered against overflow on arduino and serial LCD. — I’d go with this one, especially the best ones, designed by Liudr. 😉
Reply from brunialti at Arduino forum (agreed to be reposted here):
That is a really good introduction on choosing an lcd!
I like your approach, and I saw your serial LCD. There is a lot of “brain” inside. I think that it could be the appropriate choice for many projects and you tempted me to buy it (damn!).
On my side, as I’m going to integrate as many I2c device as possible, I would prefer not to manage two interfaces at the same time. The I2c has a strong point on its bus. You can buy a passive, small and cheap backplane and connect all the i2c devices you like, using 4 mu pins at all!
There is also a drawback in putting too much “brain” into devices: with the “brain” you put also logics, syntax and structure. That make impossible a drop-in substitution of a smart LCD with an other one.
That is similar to the broken library problem: you have to change the app code instead of the library code.
My reply to brunialti:
Very good points! Indeed I worried about that (different serial LCDs speak different commands), so, I have used all ANSI escape codes as much as I can so all functions are ANSI escape code driven or ASCII control code driven. So if you want to clear screen, that is \f (old speak for printer to spit out the entire sheet and ready a new sheet, feed). If you want to change LCD coordinates, you do the ANSI escape sequence “CSI n ; m H”, which is say “\e[2,4H” for 2 row and 4 column with 1-based numbers. I wish every serial LCD speaks ANSI, which is by far the most appropriate standard for a character display, but only few do and mine speaks the most ANSI words. All specific functions such as menus and scrolling texts are also implemented as custom ANSI escape sequence for maximal standardization. I’m pretty sure Sparkfun serial LCD won’t speak ANSI since it has a big brain but little intelligence inside.