This is the latest evolution of our serial LCD. Included on a single board is a 16x2 LCD and an embedded circuit based around a PIC 16F88. The on-board PIC takes a TTL serial input and prints the characters it receives onto the LCD. The installed firmware also allows for a number of special commands so you can clear the screen, adjust the backlight brightness, turn the display on/off, and more.
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 (VDD), ground (GND) and RX pins are all broken out to both a 0.1" pitch header as well as a 3-pin JST connector.
SerLCD has the ability to dim the backlight to conserve power if needed. There is also a potentiometer on the back of the display to adjust the contrast.
There was a case where the serial enabled LCD was functioning initially but eventually would only display the first ten characters on each line. Most likely a certain sequence of characters was sent that modified the character width and lines. The user was able to remedy the issue by sending a command character and the associated command as listed in the datasheet:
------------------------------------------------------------
I got the new LCD and it worked great for a day but then had the same issue, except it was cut off even more than the first. I had already installed it in my project that I am presenting on Monday so I just had to figure it out. The evidence pointed to the firmware on the PIC 16F88 so I did some digging (good thing it's open source!) and finally found a special command for changing the LCD width:
else if(letter == 4){
LCD_Width = 16;
onboard_eewrite(LCD_Width, 1);
}
so I was able to fix it with this Arduino code:
LCD.write(0x7C); // special command byte => 0d124 or 0x7C
LCD.write(0x04); //command to set LCD width to 16 incase it gets messed up
delay(50); //don't send another command right after or it will freeze the PIC
------------------------------------------------------------
There is also a link in the Quickstart Guide with Arduino example code written by a tech support representative here => [ https://github.com/bboyho/SerLCD/blob/master/Arduino/SerLCD_Arduino_Example_v3/SerLCD_Arduino_Example_v3.ino#L113 ].
Whether it's for assembling a kit, hacking an enclosure, or creating your own parts; the DIY skill is all about knowing how to use tools and the techniques associated with them.
Skill Level: Noob - Basic assembly is required. You may need to provide your own basic tools like a screwdriver, hammer or scissors. Power tools or custom parts are not required. Instructions will be included and easy to follow. Sewing may be required, but only with included patterns.
See all skill levels
If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.
Skill Level: Rookie - You will need a better fundamental understand of what code is, and how it works. You will be using beginner-level software and development tools like Arduino. You will be dealing directly with code, but numerous examples and libraries are available. Sensors or shields will communicate with serial or TTL.
See all skill levels
If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.
Skill Level: Competent - You will be required to reference a datasheet or schematic to know how to use a component. Your knowledge of a datasheet will only require basic features like power requirements, pinouts, or communications type. Also, you may need a power supply that?s greater than 12V or more than 1A worth of current.
See all skill levels
We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.
Based on 12 ratings:
1 of 1 found this helpful:
The display worked after I was able to overcome the documentation errors.
Overall I was pleased with this device, although ultimately it did not work for my application.
My application involves continuous operation at 60 degrees Celsius. At this temperature, the display liquid crystals do not become fully black, thus making the display unreadable. It would be useful for Sparkfun to post the datasheet for the LCD panel.
-Dan
0 of 1 found this helpful:
But I had some trouble getting the backlight to dim down. That was the first place in my code I sent anything to the display. After that it worked OK. Tried online tech chat. After a few questions he asked if I was sure I was sending the right commands. I said "I think so." Then I checked. I didn't turn on UART TX interrupts soon enough. Very embarrasing. BTW some of the docs are for the Serial backpack, but here that is built-in, not a separate board.
I used the SoftwareSerial.h library with my ProMicro circuitry, and was great to see what was going on in the program! Easy to use and get to working, and uses up only a few I/O pins, leaving the others for my experimental instrument's uses.
However, one of my types of projects needs to have a faster ADC for audio involvement - if possible - and now wondering how to get SoftwareSerial to work on the TeensyLC.
This LCD worked great for about 2 months of continuous operation. The lcd was used for a machine I designed to operate in a humid climate. I had placed it in a water tight box with an arduino (red board). It died completely after 2 months. The red board still works great.
Greetings,
I purchased this to run directly from a Raspberry Pi via USB as the IO is being used by another device. So far it works as advertised, but there are a few caveats:
It is nearly impossible to get the backlight down to a level that you cannot see it but still read the text. I would call it "bluish-white on on dark blue" rather than "white on black".
The web site info is very clear about not connecting the serial line directly to an RS-232 port due to voltage variances, but it would have been nice to state that this works fine with 5v TTL serial to USB adapters. For the record, they work fine, but this caused me considerable consternation.
I wanted to use the connector on the board, but didn't have the plug and wanted to use jumper wires on the plug's pins. Unfortunately, 3 jumper wires don't fit into the connector. I would say do away with the connector, give us an extra set of pins, or better yet charge us an extra buck and include a plug! I was able to solder wires directly in the end, so I got it to work.
Thank you for the opportunity to comment. All in all this is a good product that I would purchase again when needed.
0 of 1 found this helpful:
I was assisting my daughter with her science fair project and was planning on using this screen. I added it so I could get the "free shipping" offer and didn't pay attention when I checked out. When I checked later I was surprised to see the free shipping for spending over 75 bucks would take 9 days to get to me in WI from CO. Oh well, I've learned my lesson and won't make that mistake again. I lived in Boulder and once drove back home to Milwaukee and back to CO (Loveland) in a weekend so I guess I expected faster shipping.
I'll find another project to use it on some day.
This thing worked fine for a couple of weeks. Then it bricked. Nothing I tried would get it to work again. I should have read the reviews on the similar 4 line unit. A few email exchanges with Tech Support went nowhere. The tech finally suggested that it would probably work if I used 5V TX logic instead of the 3.3 on the Teensy. That didn't work when I set it up on a Uno. The unit was always powered with 5V but the splash screen got bricked first. That should have been a clue that 3.3V logic wasn't the problem. Tech support issued a credit anyway. I don't think they're real proud of this thing.
Easy to connect and use, but I had to increase the baud rate. I have it on a Parallax Arduino uno with servo motors, updating the LCD every second. Problem is, at every update, the motors hiccupped. Then I increased the baud from default 9600 to 38400 and created a String to pre-build each entire display line before uploading to the LCD. Now it works with no noticeable hiccup.
A great little two line LCD screen. Works perfect for what I need and super easy to hook up. Soldering to the board is easy if you don't have the right JST connector.
I've been doing a lot of tweaking with my Ardo project by using the serial output when I'm away from a computer. I was using the 7 segment display but eventually the info I got too complex to display in just digits and this device works really well to show alphanumeric info. Highly recommend.
simple and stable. Just what I needed for those Arduino projects with with variables that you always wondered if the Arduino was seeing internally what those analog inputs were really receiving. Hardest part was figuring out how to send the control codes. Finally realized that using serial write instead of serial print was required to do that. Then everything worked great. Instructions could have been a little clearer on that point.
Bought this from Robotshop retailer. Worked right away like a charm. I even changed splash screen to display my software version. However at some point it stopped displaying text, then backlight started spontaneously switching off several seconds after powering on. I connected LCD to different device and started experimenting just sending one command at a time. ALL 0xFE commands work just fine. I am able to switch display on/off, change between underline and blinking cursor, directly position cursor on screen and scroll screen around. 0x7C commands work too, I can control backlight and turn splash screen on/off. Reset 0x12 also works. The only thing that does not work is actual text display. I tried all acsii characters at different cursor locations. It seems that something is going on, at least cursor jumps to 2nd line after printing 16 characters (does not move otherwise), except characters are invisible. Note that splash screen still works, with exact text I put there!
We designed a case to fit this LCD screen perfectly, and you can download it from thingiverse and use it for free :)
My only complaint with this product is the difficulty in mounting. Finally had to drill out the holes to accept 4-40 standoffs. The Eagle files don't include the complete board so making a screw hole template from the PCB is impossible. Otherwise works fine with my stand alone Atmega 328P using the SerLCD.h and SoftwareSerial.h libraries.
does anyone know if reversed polarity will kill this? That's the only reason I can think of as to why mine will not work! I've tried everything!
What doesn't work on it? Have you contact tech support yet? They should be able to help you out.
Not sure of your situation, but i've connected my lcd backwards to my arduino twice and its still good. Robust, just the way I like it.
Does anybody know how to do a hard reset on this LCD? While I was uploading my code, I left it plugged into TX, and it doesn't work anymore. I'm realizing that it probably got spammed with commands and the configuration got messed up. Does anybody know how to reset to factory defaults?
Anyone know if this will work at 3.3V TTL, or will work while being powered below 4V?
I have the same question. I now have the 3.3v serial enabled LCD (with backpack) and want to use this one for future usage. VDD of 5V can be supplied, but will the TTL work when its getting 3.3V signals from the TX from Netduino?
Is it just me, or are the solder holes for VDD, GND, and TX near the JST connector too small to accept standard pin headers? Perhaps I just need to use a little more force? I see that one of the pictures of this module shows what appear to be standard headers installed in that location, so I am confused..
Does anybody know if the Infrared Sensor Jumper Wire (http://www.sparkfun.com/commerce/product_info.php?products_id=8733) works with this board? Barring that, anybody know where to find a 3-pin JST connector?
Just tried it and it does!
I've put together some python code for sending serial data to these LCD screens. In particular, the code pulls my twitter status and writes it to the LCD. To work with the extra characters, I wrote functions to page the text (vertical scroll) or scroll the text (horizontal scroll). Details are available here: http://dawes.wordpress.com/2009/12/23/twitter-to-lcd/
Thanks for this great module, I've really enjoyed tinkering and actually had the first version working in under an hour!
I'd have to say, as a 35+ year experienced programmer and spending over 4 hours trying to make this thing work any way logically, it needs a lot of work. It is very difficult to reset which is required if it gets into some weird baud mode. It is even more difficult to get it into the baud rate you want it, so leave it at 9600 if you ever get it working at that. It assumes you have some ftdi cable and are talking to putty or some other terminal. Not very practical in the real world. I spent more time today trying to use this to help in debugging an Arduino, than if I would have just soldered on a JTAG connector, installed linux, and used that.
could you tell me what the code was compiled in?
I trying to compile the C code in Mplab X and getting a serious amount of errors. I dont know enough yet about the PIC's/environment to fix them. Thanks in advance
Edit: Its compiled with cc5x and compiles with the cc5xfree, i had to comment out the include 16f88.h for my particular setup.
Is it possible to wire this up in parrellel rather than use the serial function? I ran into a snag and am unable to use the serial function of this lcd? I see the pinouts on the schematic but when wired it doesn't seem to work.
I've created a new splash screen for the Serial LCD, now I want to save it to the Serial LCD memory. So, exactly how do I write a "control-j" to the Serial LCD. I've put in the required line to transmit special character 124, but I can figure out how to format the "control-j" line of code. I've Googled this for about an hour and can't find an explanation or sample code anywhere. Here's my code...
Instead of getting "NEW" on the first line and "SPLASH_SCREEN" on the second line, I get "ntrol>NEW" on the first line and "SPLASH_SCREENco" on the second line. Naturally you might leave off the quotation marks from around "< control > j", but that just generates multiple errors. Any suggestions?
my comments don't work
I'm not sure if you're referring to comments on the website, or on your LCD screen. You can contact techsupport@ and they'll be able to assist you further.
is this I2C compatible
No, this is TTL serial. You would need an I2C to UART converter.
I think I ruined this trying to solder to the connect points, would like easier way to hook up.
where can i get a 3-pin connector to breakout the RX, gnd, 5v for easier access maybe to a screw terminal or female connection
We recommend using this JST Interface cable.
Did a Solid Works drawing here for those designing enclosures may come in handy:
http://grabcad.com/library/sparkfun-serial-enabled-16x2-lcd-1
Was this same PCB green at one point, or was that an older rev with different features?
It was an older rev, but the features haven't changed.
I have used a Labview program for this LCD. When i send character 'a', the display is '0'. Does anyone having a same problem. How should I troubleshoot this problem.Tq
Has anyone managed to get the PWM backlighting working with an Arduino? I'm trying variations of this and nothing works except the standard On/Off commands using 0xFE as the escape. All my attempts turn the display off but the backlight LED is on full.
The splash screen on mine says SerLCD 2.5 so I believe my firmware is current. My board's about 8 months old.
void backlightLow() { //serCommand(); Serial.write(0x7C); Serial.write(140); }
void backlightSet(int level) { Serial.write(0x7C); Serial.write(byte(level + 128)); }
Why do I get power out of the VDD port with only RX and GND hooked up? I have a 5V rail that I use to power everything on my board - and when I added this SerLCD I now have a bridge between the arduino power and my 5v line ... which I dont want. Can I add a diode to the VDD to stop reverse voltage from powering my board?
I'm having trouble setting the cursor position on the second line, can anyone help? This line of code (PICAXE) works fine:
and puts two pluses at the very end of the first line. However, this code doesn't put anything on the screen, where it should put two plusses at the start of the second line, correct?
any ideas, anyone? Thanks!
*** Edit - never mind, got it! Apparently the position numbers aren't contiguous, so it has to be location 192. Way to read the datasheet, Chris!
Being new, I am trying to mount this in a project box. Does anyone know where I can find a bezel for this or can someone offer some advice on how best to mount this into the cover of a project box so that it looks professional?
scroll way down and see how I did it:
http://www.sparkfun.com/tutorials/204
I think SparkFun needs 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.
It seems like the MCLR function has been disabled through the config bits. No pullup to Vdd is installed. This makes it really irritating to work with this display. Programming an arduino with this hooked the HW serial port will screw up the display, and without the reset line you have to pull power. A simple solution would just be to wire the PICs MCLR pin to the Arduinos reset line, but this isn't possible without the MCLR function obviously.
I'm using usb->rs232 adapter for data and an open wire usb cable for power and am getting garbage on all baud rates using code and putty. Am I doing something wrong?
Lcd: http://www.sparkfun.com/products/9395 Setup: http://imgur.com/g9GKB Code: http://pastebin.com/3DsWZFQH
Edit: begining to think I need to ensure my data is switched between 0-5v using a TTL adapter like this: http://www.acroname.com/robotics/parts/ ... ERIAL.html
Quick suggestion... It'd be very helpful for some people if you guys added a note in the description pointing people to the correct 3-pin JST jumper wire to be used with these serial LCDs. Two reasons... it's not clear that the jumper is not included, and you have 3-pin jumpers in your catalog which don't work with this serial LCD.
And I realize it shows up in the 'related products' list, as do many things I don't need.
Thanks.
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
Are there any updated drawings of this? I'm trying to design a board and would like to know the positions of the stand-off holes. All of your drawings are only for the "backpack". Thanks!
Has anyone driven the data line at 3.3V? I wouldn't think it should be a problem...
Schematic is no longer up to date it appears, for example JP2 only has 6 pins in the schematic, where it has 10 pins on the board in the pictures.
I bought this about a year ago and am finally playing with it now, but I see that the V2 schematic doesn't match my board's jumpers. Mine has JP1 a 6-pin and JP2 10-pin, JP3 is 3-pin, just like in the picture above.
my board is: 2010-4-25
adm1602U-NSW-FSB/Z
5.0V
can you power these right off an arduino's 5v rail?
Shouldn't be a problem.
I'm confused by the data sheet. It says JP2 numbered from 1 through 6.
However, on the LCD JP2 is numbered through 10. What are the remaining 4 pins for? (and where can I find the documentation for them?)
Hi, guys!
Is there any estimation when these LCDs will be back in stock again?
Same question. I have an order being held up by this.
Does anyone know how to disable text wrap? It is annoying me that I can't find a command to disable it.
Hmm. I just scanned through the code. It appears that the code was written without a command to shut off text wrapping. That is just bad practice. I already wrote my system to avoid the text wrapping, but just so I know, is there a way to update the PIC on this?
hi,
now my lcd will show only 7 char on left side on two lines. Before the lcd works good and views 16 chars on two lines.
I don't know what happens to do this.
Anywhere to help me?
taler
pichenettes: ...
A problem that appeared recently is the display losing its "line width" setting, and resulting in text strangely wrapped.
I'm also having the same problem after accidentally sending the control character '|' followed by '\', '-', '/' to the LCD as I was trying to animate a rotating bar to indicate a busy status.
As it is right now, text is wrapping at the 12th character but I can still draw in all the viewable area if I specify cursor location.
Does anyone know how to set the text wrapping?
Somehow it returned to normal with no additional work on my part...
I echo Doogie's report. It happens that some of the settings supposed to be written to eeprom (baud rate, splash screen) are lost after several power cycles.
The baud rate problem can be solved by writing at 9600, at startup, a "change baud rate" command to the target rate. At worst, the display is already at the target rate and will misinterpret the command and display garbage, at best, it will be set to the right baud rate.
Splash screen is more problematic, since there's no command to systematically enable/disable it - there's only a "toggle" command, and no way of knowing if it is in the desired state or if it reset itself.
A problem that appeared recently is the display losing its "line width" setting, and resulting in text strangely wrapped.
Does the serial version of the display still have the parallel pins available on it? I would like to use the serial access for the most part, but I might need regular old parallel for one project.
Is there anyway to display custom characters on this display through serial or am I missing something in the datasheet?
Define 'custom characters'. ASCII characters, or like the batman symbol.
I mean custom character as in if I wanted a pac-man character to go across the screen and eat the text.
Yes you can, but you are limited to only 8 custom characters. First define 8 bytes that will hold your custom character, one byte per line (obviously only the lower 5 bits can be used since this is a 5x8 display). Then decide which character (from 0-7) you want to set. Call this "x". Then do this pseudocode:
for(i = 0; i < 8; i++)
lcd.print(0xFE, BYTE); // Send command
lcd.print(0x40 | (x << 3) | i, BYTE); // Set the CGRAM address
lcd.print(character_data[i], BYTE); // Set the character
}
lcd.print(0x80, BYTE); // Set the cursor back to DDRAM
To use your custom character, use:
lcd.print(x, BYTE);
Greetings,
Can someone point me to a mechanical drawing of this? I am working on a case for a project and need the XY coordinates of the holes, viewable area etc..
I'm surprised that a mechanical drawing is not included in the data sheet. It's not too hard to measure but seems like a documentation oversight for anyone who wants to integrate the display into a case.
wrong place
Why does the datasheet on this page say "V2.5" but the schematic say "V2"? If I order the item on this page, am I buying v2 or v2.5?
I'm asking b/c I'm in a space constrained situation where the serial backpack just isn't going to fit. The datasheet (2.5) shows a picture with a backpack (soldered on?), but nothing else on this page suggests that any backpack is required to talk with this device thru 3-wire serial.
Basically, if I can't accommodate the backpack's size, is it a mistake to buy this?
mikegoelzer: Why does the datasheet on this page say "V2.5" but the schematic say "V2"? If I order the item on this page, am I buying v2 or v2.5?
I'm asking b/c I'm in a space constrained situation where the serial backpack just isn't going to fit. The datasheet (2.5) shows a picture with a backpack (soldered on?), but nothing else on this page suggests that any backpack is required to talk with this device thru 3-wire serial.
Basically, if I can't accommodate the backpack's size, is it a mistake to buy this?
Having ordered this exact LCD myself, I can say that aside from the issue mentioned in my other comment, it looks exactly like the picture. No bulky backpack module, everything is on a single board. Pretty sleek, really.
Also, the mounting holes are too small for the #4-40 screws that most Sparkfun boards will handle. Just FYI, I found this out about 45 seconds ago...
I used a few of these in my IRcombat laser tag game with my arduino duemiloves and love them. I also used the Red and Black. I like the white and black better outdoors and the red/black indoors. I just wish I could figure out how to send the reset code to them. I know how to clear and change brightness in code, but the ctrl+ command boggles my mind. A few of them have to be unplugged and plugged back in to work after power on because of this issue. Not worth replacing them yet.
Hi...noob question. how do i send data on the fly via arduino? it only has 1 connection to tx. i tried using the serial monitor to send something, but it doesnt work...im looking for something which i guess is similar to liquidCrystal->SerialDisplay example.
Thanks for the help.
I'm having trouble setting the second line of the splash screen. I can set the first line to whatever I'd like. But no matter what I put on the second line, it isn't saved when I send in the 0x7C, 0x0A sequence. Just to be clear, I do set both lines before sending the sequence.
Nevermind, my own fault. I calculated the wrong offset to the start of the second line when I repositioned the cursor. Although the second line was displayed correctly, the offset was wrong by -32.
Hi,
I notice that the datasheet is lacking environmental specifications for this device. It would nice to have that information. Temperature limits especially.
Just got this guy and it's working great! I put together a sketch for using this with an Arduino: http://github.com/cannikin/arduino_serial_lcd
Very nice lib. Thanks.
The data stream I tapped into once inadvertently changed the backlight level to something less than 100%, and I noticed that the dimmed display had a noticeable flicker.
I have a couple of suggestions for a future version: On the PCB layout, please add a thermal to the ground pin for the user connectors to make it easier to hand solder. Please change the firmware to make it more difficult for a random serial stream to stumble upon a configuration sequence. Maybe pick a non-printable prefix character like ESC instead of the vertical bar. Please make the brightness values more user friendly, like 1, 2, 3, etc. Maybe have an option to make the display scroll when it gets full, instead of resetting the cursor to home and overwriting. All-in-all, a fun little platform. Thanks for using a PIC on this one! I think I may try my hand at writing some new firmware for it. Cheers!
I received mine just yesterday and hooked it up. It definitely works, but it occasionally "wigs out" in various ways. I set my own splash screen, which worked fine the first couple of times. The third time I powered it on I got a screen with one line of white blocks and one blank line. It has lost the baud rate setting on me several times. Sometimes I get reverse video garbage characters for some reason.
Have you figured out how to get it to work properly when it shows blocks all along the top line? Mine has done this since the day I received this.
Edit: Got mine fixed. If you checked the soldering on all the terminals, check them again. I also sometimes was getting strings of garbage if I wriggled the terminals on the LCD (I suspect because I was getting a partial connection on the bad terminal). Resoldered and it is working fine now.
Wait, so I get the 3 pins for power and control, but whats with all the other pins on the sides? Can it be used to control another LCD besides the one built in?
The other pins are used if you want to control the LCD without using the serial standard. There's some tutorials on how to do that with the arduino below. You have more control over what you can do with it, but it takes up more pins on the arduino. If you want to wire it up this way, don't spend the money on the serial interface, they have cheaper LCD's that allow you to do it this way, without the serial.
http://www.hacktronics.com/Tutorials/arduino-character-lcd-tutorial.html
I'm using this with an ioBridge. All the commands I send end up looking like |||SO="whatever". It happens with everything I write, including the clear screen commands and such. Any tips?
Hi there,
Hmm, we'd be happy to help. Can you send us an email detailing your setup? If characters aren't being received/printed correctly, my first suggestion is usually to try other 'standard' (2400, 4800, 9600, etc.) baud rates.
-techsupport at sparkfun dot com
It turned out to be the ioBridge that was formatting the serial outputs weird. The Arduino works fine with it.
The IO-204 has two ways to output serial - one directly out of a channel and the other is thru a serial smart board. If you see "SO=" then the widget was using the smart board protocol. Using a Serial Out widget under "I/O Channel Widgets". I hope that helps out.