sku: LCD-00258
Description: The serial enabled LCD backpack allows you to control a parallel based LCD over a single-wire serial interface. The SerLCD backpack takes care of all the HD44780 commands allowing seamless integration with any micro that can communicate over a wide range of TTL serial baud rates. The SerLCD currently supports 16 and 20 character wide screens with 2 or 4 lines of display.
Communication with SerLCD requires 5V TTL serial at a default baud rate of 9600bps (8-N-1). You can adjust the baud to any standard rate between 2400 and 38400bps. The power, ground and RX pins are all broken out to a 3.5mm pitch screw terminal.
SerLCD has the ability to dim the backlight to conserve power if needed. There is also a potentiometer on the backpack to adjust the contrast.
Note: The datasheet incorrectly identifies the PIC as a 16F688, when it's actually a 16LF88. Sorry for blowing your mind.
Features:
Documents:
Dimensions: 0.56" x 1.75"
LCD-10097
Serial Enabled LCD KitLCD-11000
ezLCD 301 - 2.6" Color LCD
Comments 62 comments
I’m new to this and found the datasheet unclear and inconsistent about how to clear screen etc.
Serial.print(0x7C, BYTE);
Serial.print(0x01, BYTE);
Just wasn’t doing it!
Several hours of searching finally answered the question! to clear the screen you use this;
Serial.print(0xFE, BYTE);
Serial.print(0x01, BYTE);
A really useful explanation and more info is to be found here;
http://www.arduino.cc/playground/Learning/SparkFunSerLCD
No author mentioned, but thanks whoever you are! :–)
Got this to work great!
Thanks for the link HP22UK, it was a great help.
I will be getting a few more of these soon for the rest of the LCD’s that I have.
I am using a PICAXE 20m chip and I don’t know what the serout command should be can someone please help me here.
Will this work with the 16x2 3.3V LCD? I am afraid that it will only work on 5V ones
I believe it will handle 3.3V operation, but you have to power it with 3.3V and use 3.3V serial levels.
In theory you should be able to use any voltage that the PIC can handle, I assume 2V – 5.5V should be a safe window.
Just as long as the power and serial level matches.
The source files provided do not match the current hardware. You can easily see this from the hardware port definitions.
For example, the source says:
define BL_Control PORTA.4
But backlight is clearly controlled by pin#1 (PORTA.2).
Can you provide the updated source code? I bought a couple and wish to change their operation.
Hello!
My Serial Backpack arrived when the firm more or less insisted it would.
I have just completed a trial using it with the LCD display program for Linux LCDd and lcdproc, and after configuring the program to think it was talking to a certain vendor it just worked perfectly.
Additional details, the display is one that was a “pull” I believe it was recovered from the display for an older laser printer. And the programs were retrieved from www.linuxpackages.net and the serial device talking to both is a USB breakout board for the FT232R device.
In a word, “Finestkind!”.
Just a suggestion for the next revision of this excellent product. How about adding in a keypad encoder function? The encoder would scan up to a 4x4 keypad and output the key press information on the TX line of the serial port. (Similar to this, http://www.robot-electronics.co.uk/htm/Lcd03tech.htm)
In the data sheet the “CHAR” labels could be more clearly explained. I eventually figure out that they are a type of ASCII command and found a table that list the hex equivalents for each “CHAR” command you have listed. A suggestion for future revision of this document would be to include the hex version of each command statement instead of only listing the keyboard command, since they are not always available when controlling the lcd from a microcontroller
When i recived this i had some problems making it work.
Text sent to display showed up as garbage.
Startup message displayed nicely.
After issuing a 0x12 (ctrl-R) while startup message showed, resetting the chip to 9600 baud it worked perfect.
Very nice product.
When looking at the backpack with the pins facing away from you, which is pin number 1? there are no markings on my backpack?
Also, How can i get it to communicate with a BS2?
I agree with the need for a little clarification in the docs… my (also recycled) Sharp LCD has a 2x7 (data) + 1x3 (backlight LED) header for the interface, so does not plug straight in… where is pin 1 on the backpack? There is a suspicious dot at the far end away from the serial/power screw terminals, but it IS NOT PIN 1!!!! There is a cryptic reference in the datasheet to pin 15/16 as being near the sparkfun URL, [which is not on the current board…] (but is in the image in the datasheet). Once I got that sorted, it works great! I would suggest a diagram included with the pinout doc that shows the pin orientations.
Also on commands, it is still not clear to me what to send to program the LCD size, after the command byte (0x7C) do you send “3” [0x33] or 0x03? And how do you use the cursor (blink/underline) on/off? [which should also include the 0x09 command for blinking text?] I have the positioning commands working.
Backlight off doesn’t seem to work (at least with the source code zip provided).
backlight_counter is being incremented and then checked if its equal to brightness_setting, which will never occur if brightness is 0. So off is the same as 100%.
Although I suspect the intention was to disable the timer interrupt if brightness_setting = 0?
Anyone got advice on controlling multiple HD44780 LCDs with a single backpack? New to micros, can I just independently wire up the enable and add all the LCDS to a single “bus”?
Long story short… this is not (feasibly) possible. You would need a complicated (okay probably not impossible) way to “bank” the data from the backpack to the multiple lcds, which may even require more logic intervention. There is no way to address the hd4470 chip individually in a parallel connection, each controller needs it’s own bus. And each backpack needs it own bus (1 wire (+gnd @ Vcc), if it were i2c you could control multiple backpacks from one bus. I would only do it to prove a point (which is sometimes all the reason you need!!!) SO, you need one backpack AND one pin on your uC for each LCD. Hope this was of help!
EDIT
Just re-read your post. You might be onto something! The enable pin might work as a “banker” just as long as the display retains the display, and ignores incoming data while the enable pin is low (or “not enabled”) . This of course would require an extra pin per-display, coordinated with the data going to each display. Just try it, and let everyone know how it goes! If I had a project using multiple displays, the insight in your question would be invaluable. I would have just used a separate controller and bus for each display, or I would have found an i2c solution. A little tweak here and there can save a lot in production!!!
It wouldn’t necessarily need an extra pin per-display. You could use a decoder to drive the enable lines.
Could somebody please clarify the waveform needed to communicate with this device?
1 Start Bit, 8 Data Bits and 1 Stop Bit. Doesn’t tell me enough.
Is this active-high or active low? What should be the polarity of the Start and Stop bit, and what should the RX pin be forced to in the idle state, or when we are not transmitting data??
I’m trying to get this to work via an FPGA and I’m having weird results.
Thanks!
I dug into the Atmega datasheet and found the details of the USART. Looks like idle is always logic high. Data is active-high. Start is always low. Stop is always high. Data is sent LSB to MSB
Using this I got it working for the FPGA, so I assume it is correct.
Great product. Saved me lots of headaches with a 20x4 LCD, HD44780-compatible.
I tested it on my PC using the 5V FTDI serial breakout “DEV-09115” also bought here.
The command for enabling/disabling splash screen (0x7c-0x09) is not yet documented in the PDF datasheet. The setting is saved in the EEPROM for next reboots.
I had to reboot (power cycle) the LCD display after every command changing the LCD setup (0x7c-0x03 to 0x7c-0x06); anyway, these are stored in the backpack EEPROM as well, thus once set I don’t need to use them anymore.
My software just issues a 0xfe-0x01 sequence (clear display) and 80 characters (blank-filled). The 9600 default speed is more than enough for that (less than 0.09 seconds for sending a full screen update).
I was also able to define graphical characters sending the command 0xfe-0x40 and then from 1 to 8 sequences of 8 bytes containing the bitmaps (for example 0x15-0x0a-0x15-0x0a-0x15-0x0a-0x15-0x0a will define a 5x8 checkered pattern) and finally a 0xfe-0x01 (clear screen ending bitmap definition mode). The defined characters are 0x00 up to 0x07. Characters are stored in CG-RAM of the display; this means that they will have to be redefined on every reboot.
Hi,
I am trying to connect a 20x 4 LCD to the pic but can’t understand how to connect the pins. Can you please give me a link to the sheet you were following to connect the pins of the pic to those of the LCD please?
Thanks.
Nice gadget!
Just got 15 pieces to Finland, and made them to work with a PICAXE processor. If someone is interested what settings should be used, it is here: http://www.picaxeforum.co.uk/showthread.php?p=134442#post134442
As I said ,a very nice product, but the manual really needs a little shaping…
Most things are already discussed here, and could be “transferred” to the manual.
AND a little warning! I noticed that in many lcd’s ,pins 15 and 16 can be next to pin1 !
So, check carefully Your lcd’s datasheet, else You could stick the backpack to all wrong holes…
I’ve bought one of these.
I don’t seem to be able to make it work!
no matter what I do I can’t print anything on the LCD! And I keep getting the splash screen!
The specifications says the splash screen comes on after 500ms, it doesn’t! It comes after probably 10 seconds! Then when it’s on the backlight keeps flashing on and off!
Any help?
Please contact techsupport@sparkfun.com. Thanks!
“SFE, could you please post the schematic and source code for v2.5? The versions you have now appear to be the v2 (with the 16f688). Thanks!"
Also,
Picture of backpack shows a 20 pin device and crystal.
The 16f688 is a 14 pin and should not have a crystal according to the manual.
Manual picture appears to be right.
Thanks
I found this on your forum back in March.
I am hoping to roll my own.
Any help would be appreciated.
Thank you
“Bonz099
Post subject: SerLCD 2.5 Hex?
Posted: Sun Mar 07, 2010 3:33 pm
Replies: 0
Views: 54
Im having trouble locating the hex file for the v2.5 serial backpack all I see on the site is the 2.0 version. When I write it to my backpack via the ICSP header it just gives me 2 black lines (row 0 and 3). Also if someone had the source+updated schematic for it as well, that would be VERY helpful,…”
Yep. I’m working on revising this whole page with new and updated information. In the meantime, you can email techsupport@sparkfun.com and get what you need.
Circuit showing 16F88, but manual showing 16F688. Not sure what the Eagle files showing.
Any chance of updating this?
Thanks
Schematic and eagle files are correct. I’m also getting a new picture shot now. I’ll make a note about the manual.
Thank you, Robert.
“ by RobertC. is a SparkFun employee
RobertC.
| Sep 28, 2010 at 1:02pm
Yep. I’m working on revising this whole page with new and updated information. In the meantime, you can email techsupport@sparkfun.com and get what you need.”
Hello,
What is the part number of transistor on this board?
Thank you.
Ok i’m having trouble changing the baud rate and saving the splashscreen.
The manual says “j” to save the splash screen, however theres no way i can get that to work.
What is “j”?
i tried sending J i tried sending j tried even sending “controlj” and “j” and another half dozen variations.
How the heck do i perform a “j”
is there a way to hook this directly up to a usb cable to program it?
If so how does one do so?
Thanks
You would use an FTDI basic. For actual firmware programming, you would need a PIC programmer.
Could someone please explain where pin 1 is? I’m asuming it is the pin above the dot & “spark” logo that are both on the side with the PIC…
—Thanks—
That is actually pin 16. Pin 1 is on the opposite side.
I am trying to change the baud rate on my SERLCD_v2 but am getting no joy. The datasheet says to send (124, control m) but I have tried all possible combinations and it keeps receiving at 19200. Could anyone please tell me what the code should exactly look like.
I am using a picaxe 20X2.
Thanks
…
On a black on green 20x4 lcd, the backlight flickers quite a bit. Any suggestions on how to eliminate it? It’s being powered from an Arduino UNO’s 5V line via a breadboard.
That could be a bad connection if it flickers if nothing is going on or when you wiggle wires. If it flickers when changing text it’s probably your arduino not supplying enough current.
Before applying power, I was studying the backpack to make sure I understood which pin was which and ended up having to unsolder the screw terminal connector block to repair an open trace under the connector. There was no continuity from the 5V screw to the nearby 5V header pin, JP1 pin 5.
As a matter of fact, initially there was no continuity from the 5V screw to anywhere at all.
So, there were two problems, an open trace, for sure, to the header pin, and a bad solder connection from the screw terminal pin to its hole, so that the 5V trace that leads to the components was also not connected to the 5V screw. After fixing the open trace and resoldering the connector, the board powered up OK and works fine.
I use HyperTerminal to send the commands and control characters. Use the ALT key and numeric keypad or equivalent keyboard numeric keys.
I’m trying to get the serial LCD backpack to work with an MSP430 launchpad and Powertip pc2004m 4x20 lcd.
My first problem is no splash screen on power up. LCD is lit but blank. Any suggestions are appreciated.
Is the trimpot properly adjusted? Send us an email to techsupport@sparkfun.com if it is and this is still an issue.
I’m trying to set the Splash Screen on this version 2.5 LCD Back Pack with LCD.
The Back Pack docs says to setup the LCD message and then send 124 and J. What is the decimal or hex representation of Control J?? Here is my code, control J ?????
main: hserout 0,(0xfe,0x01) ;clear lcd
??? thanks ,,,, Bill
Tip #1: Want faster refreshing when using the LCD-0255? Use cursor addressing as described in the SerLCD V2.5 Datasheet.
Tip #2: To prevent loss of serial comm between the MPU & SerLCD, include in the INIT portion of your program to set the speed (9600) and clear the LCD display else at times the SerLCD and LCD display will fail to display past the power on ‘Splash Screen’.
Tip #3: program the splash screen with the program name and version being run or tested. Update when the program version changes. These steps help as a reminder as to what your were last working on .
Bought this to go on my 16x2 LCD. The LCD backlight turns on, but I get no splash screen, and it is unresponsive to all commands. Occasionaly the backlight will shut off or blink on and off slowly. I took it and hooked my LCD up parallel again, and it works perfect. Any ideas? Maybe I’m just not grasping the concept of TTL, but any and all code examples I could find produced the same result.
To create and use custom characters go here.
Mine displays garbage characters when the input is floating. I am using it with an Arduino (using softserial so it doesn’t conflict with the USB->serial) that configures all pins as high impedance inputs on reset, which immediately overwrites whatever is on the display. Perhaps the next rev could include a pull-up resistor on board?
I ordered LCD-09067 which is white on black serial LCD. It worked with orignal package.
using MPLAB with PICKit 3, I could load the modified version which was from serLCD-v2.7, however, it did not work for some reasons. After that, I reloaded the orginal firmware from SerLCD-v2.zip or SerLCD-v2.7xx.zip. Neither did it work. I doubt the firmware and source code are not the working version.
Any ideas?
Put this on a 20x4 parallel LCD. The included firmware seems to be for a 16x2 cause I cant access the bottom 2 lines of the 4 line display.
I assume I need to load the 20x4 firmware. Can this be done with an arduino or netduino?
I haven’t been able to successfully change the baud rate and I haven’t been able to find anyone on the internet that have either. Can someone from Sparkfun please respond to this message telling us how to change the baud rate? Thanks
Tip: ensure that you are not sending any data to the backpack for the first second after powerup. If this happens, the backpack will revert to 9600 baud as a safety measure in case you don’t know what baud rate you set it to. Note that connecting this to an Arduino’s serial port WILL send data to it when the system is powered on, as the bootloader will try to connect to a host computer if present. If you connect the backpack to another set of pins using NewSoftSerial, this won’t be an issue.
Thanks for the tip about reverting back to 9600. I’ll try it again, but I am pretty that’s not the issue because I’m already using the NewSoftSerial library.
From experience, it does work. Ensure you’re sending the correct binary bytes listed in the datasheet, not ASCII characters. I’ve done it by hand using the terminal program realterm, which lets you send individual binary characters. You’ll also need to power-cycle the backpack/display to get the new baud rate to take effect.
I’m on a mac, is this right? 0x7C and 0x10
That looks right for 38400. If you’re using an Arduino, the statement is Serial.print(0x7C,BYTE); If you’re in straight C, putch(0x7C); or printf(“c”,0x7C); should work. Wait at least 1 second before sending the sequence. You might put in a short pause (10ms) between the characters and after to give it a chance to store the value in EEPROM. Then power cycle the display, wait 1 second, and see if it works at 38400. One last thing to try is to put a 1K resistor to 5V on the serial line; the backpack may be receiving noise while the newsoftserial line is in a high-impedance state; this will ensure the line stays idle before newsoftserial starts up.
Everything you suggested I either already knew or had tried before with the exception of the 1k resistor, which also didn’t work/help. I am really starting to think it’s not possible, I’ve seen tons of post where people weren’t able to change the baud rate and no one ever posted a solution or that they were able to it.
I have ported LiquidCrystal library for use with the serial LCD you can look at my code here. Still working on finishing all the documentation. But putting up for now hopefully someone will find it usefull.
http://arduino.cc/playground/Code/SerLCD
-Thanks
Has anyone been able to control the back light brightness? I have communication with the LCD, but none of the commands seem to adjust the back light brightness. Other than that, this product works well with my 20x4 LCD
Have anyone tried to make this backpack from scratch with these files (PCB and Firmware)
Im trying but im failing again and again. I have PIC16F88(PDIP not SMD) and 10MHZ crystal. But i cant get it working.
Can anyone help ?
Hmm, seems the manual and the circuit doesn’t match. SF tell me the circuit is correct and that they are going to look into sorting the manual, so go with the circuit I guess! :)
Watch out! As shown in the schematic, this board has no current limiting resistor in the backlight drive circuit! Some LCD displays have built-in resistors permitting direct connection to a 5V supply, and their datasheets will say something like “Backlight 5V @ xx mA”. But many (including some sold by SparkFun) do not. In that case, the datasheets may show backlight connections named LED A (anode) and LED K (cathode) and list a maximum forward current and a corresponding LED voltage drop. If you have the second type of LCD and you hook up this board, it will attempt to drive the full supply voltage across the backlight LED. SparkFun needs to add a resistor to the design and a jumper to bypass it when safe to do so.
While you’re at it, you also need to add a pull-up resistor on pin 4 (Vpp). This pin is an input (not input/output) and should not be left floating. Another pull-up on the RX pin would also be advisable. Your custom-built serial-enabled LCDs are also in need of these.