Let's Make Robots!

Serial LCD Controller

Displays stuff sent through a serial connection from a PC or Microcontroller

10 October 2009

I discovered a flaw in the current design that will only allow the controller to work with a connection to the computer and not to a microcontroller.  I've updated the schematic below and will fix the controller design.  I've added a project file below that also includes the fixed schematic. 

If you look at the schematic you will notice that when you set the jumper to non-inverted so you can connect to a microcontroller for serial control it will not work.  The reason is in the way I designed the circuit for both inverted/non-inverted RS232 control.  Looking at the transistor in the circuit, the collector is held high through a 10K resistor.  The collector feeds to the Rx pin on the PIC.  When you set the jumper to non-inverted and attempt to send data to the PIC it won't work because the line is always tied high through R8 to 5V.

There is a fix and I have included it in the archive file below.  There are two ways to do this:

1.  If your board is already built and your intentions are to only use this LCD in a finished design and not attached to the   computer then, snip the connection from R8 to 5V and the controller will only work in the non-inverted configuration.

2. Look at the included schematic in the archive and add the shown J2 jumper to your design which will allow you to select between the two types of communication.

04 October 2009

I have redesigned the LCD Controller and updated the code.  The new schematics and code can be found below.  I ported the code from MBasic to PicBasic Pro.  I'll leave the old code up for those who still want it. 

The files below are from a project that I have been working on for a serial LCD controller for a 4x20 line parallel display with the Hitachi chipset.  I am also working on a USB design.  In the picture of the demo board there is a wire jumper installed.  This is because I screwed the pooch and somehow missed a crossed trace.  I had to repair the board.  In the download files the PCB files have been fixed.  I'll upload some video of functionality when I get a chance.

The code and project files have been posted in the download links.

Project file downloads

Old code:

Power regulation board schematic

LCD and power board PCB

LCD schematic

LCD code

Demo application with sourcecode

05 October 2009 Project Files

PicBasic Pro PIC16F628A code for 16x2 character LCD

PicBasic Pro PIC16F628 code for 16x2 character LCD

PicBasic Pro PIC16F628A code for 20x4 character LCD

Archive containing test application, schematic, and PCB (ExpressPCB)

PicBasic Pro LCD Controller interface to Parallax GPS receiver

Ensure all the files are unzipped to the same folder.  The include file that is referenced contains the fuse settings for the selected PIC chip.

I will be uploading a version soon that allows the type of LCD to be set.  This will allow the same controller to be used for a variety of LCDs.  I can't squeeze that functionality into a PIC16F628 chip without removing some of the current functionality.  So, I am porting that over to a PIC16F88.

More to come...

Breadboard testing of the LCD controller


Software application for testing functionality


LCD controller schematic

A better view of the controller schematic can be downloaded from the link below:

USB version of the LCD controller

seriallcd05.jpgA better view of the controller schematic can be downloaded from the link below:

Optional power supply schematic

power01.jpgA better view of the controller schematic can be downloaded from the link below:


Component layout

PCB with two controllers and the optional power supply


PCB bottom side



PCB top side


LCD prototype board component view


Prototype board attached to the back of a LCD



Serial LCD Controller v1.4


C1    0.1uf   
D1    1N4148   
J1    16-pin Header   
J2    4-pin Header, Right Angle   
J3    3-pin Header   
J4    6-pin Header. Right Angle   
JP1    Shorting Jumper   
Q1    2N2222   
Q2    2N2222   
R1    1M   
R2    10k   
R3    1k   
R4    22k   
R5    15   
R6    10k Potentiometer   
R7    1k   
R8    10k   
U1    PIC16F628   
X1    20Mhz   
HD44780 20x4 LCD Module Display


USB BUS Powered LCD Controller

C1    0.1uF   
C2    10nF   
C3    10uF   
C4    0.1uF   
C5    0.1uf   
D1    1N4148   
F1    500mA, Ferrite Bead   
J1    USB Type B, Digikey 787780-1-ND
J2    ICSP, 6-Pin, Right Angle Header   
J3    LCD Connector, 16-Pin Header   
J5    2-Pin Header   
J6    2-Pin Header   
JP2    Shorting Jumper   
JP3    Shorting Jumper   
LED1    RED   
LED2    GREEN   
Q1    2N2222   
R1    330   
R2    330   
R3    1M   
R4    10k   
R5    15   
R6    1k   
R7    10k   
SW1    Power, SPDT   
U1    FT232RL   
U2    PIC16F628   
X1    20Mhz   

*NOTE* All resistors on the controller board are 1/8 watt


5V Power Regulation v1.0

C1    10uf   
C2    0.1uf   
C3    10uf   
D1    1N4004   
D3    1N4004   
J1    Power Jack       
J2    3-pin header       
LED1    Light Emitting Diode       
R1    220   
SW1    SPDT Slide Switch   
VR1    LM7805

*NOTE* All resistors on the power board are 1/4 watt

You can do a search on eBay for the LCDs and you will find them listed for as cheap as $5.00 minus shipping.

 04 October 2009 - Redesigned Controller

I have redesigned the controller to use some surface mount components.  This is still a prototype and the final version will have all surface mount components and be a bit smaller.  I also ported the code from MBasic to PicBasic Pro.  MBasic is a great program but the makers have not updated it to include newer PICs.  As such, I've been using PicBasic Pro which is a really nice basic compiler.  The code size and speed rivals that of some PIC-C compilers.


Newest Schematic with fix for connection to PC or microcontroller


Better view of the schematic can be downloaded at the following link: http://picasaweb.google.com/lh/photo/0gbrdTCrjH6KJyib-i33EQ?feat=directlink

Old schematic with flaw.  Recommend not to build from this schematic


Better view of the schematic can be downloaded at the following link: http://picasaweb.google.com/lh/photo/Yi30Oi9tf_1AIOc2Z4cDGw?feat=directlink


Better view of the schematic can be downloaded at the following link: http://picasaweb.google.com/lh/photo/ySbtGz3Fb4xDZ26780GD8w?feat=directlinkHobbybotics%20LCD%20Backpack%20v2.4_PCB.jpgHobbybotics%20LCD%20Backpack%20v2.4_PCB.jpg















Hobbybotics LCD Controller V2.3
ComponentDescriptionPart NumberVendorCost
C10.1uf, SMT 080580-C0805C104M5RMouser$0.05
D11N4148, D0-35512-1N4148T26AMouser$0.03
J18-Pin Straight Header, Male855-M20-9730846Mouser$0.20
J26-Pin Receptacle, Female649-68685-306LFMouser$1.75
J36-Pin Receptacle, Female649-68685-306LFMouser$1.75
J46-Pin Polarized Header571-6404546Mouser$0.27
JP12-Pin Jumper855-M22-1920005Mouser$0.25
Q12N2222, SOT-23512-MMBT2222AD87ZMouser$0.06
Q22N2222, SOT-23512-MMBT2222AD87ZMouser$0.06
R11M, 0805, 1/8W71-CRCW0805J-1M-E3Mouser$0.07
R210k, 0805, 1/8W71-CRCW0805-10K-E3Mouser$0.05
R31k, 0805, 1/8W660-RK73B2ATTDD102JMouser$0.06
R422k, 0805, 1/8W71-CRCW0805-22K-E3Mouser$0.05
R515, 0805, 1/8W71-CRCW0805-15-E3Mouser$0.05
R610k, Potentiometer72-T70YE-10KMouser$0.74
R71k, 0805, 1/8W660-RK73B2ATTDD102JMouser$0.06
R810k, 0805, 1/8W71-CRCW0805-10K-E3Mouser$0.05
SW1DIP-2 Switch611-SDA02H1BDMouser$0.56
U1PIC16F628A, SOIC-18579-PIC16F628A-I/SOMouser$2.14
X120Mhz Resonator815-AWCR-20.00MDMouser$0.32
 HD44780 20X4 LCDRT204-1Ebay$10.80
PCBPrinted Circuit BoardHBLCD-V2.2ExpressPCB$14.14



Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Great project!

Very professional and useful! 

Hi Curtis Brooks!!

    Thank you very much for this!!

     I'll test them out with my hardware and let you know the results shortly!!

     Certainly!! I'll post if I've done any changes!!

Thanks and Regards,


Hi Curtis Brooks!!

     Can you please let me know if you can modify the code for me to support a 2X16 LCD!! Please advice!!

     I'm using a 2X16 in one of my current home projects!!

Thanks and Regards,


Rev21 will support a 2x20 LCD.  I'll add the ability to select what type of LCD you are using so it can be used with 2x16, 4x20, 2x20 and 4x40 LCDs.  This way you'll  be able to select the type you are using without compiling code for different backpacks.

Hi Curtis Brooks!!

     I guess that the current code revision is Rev21 (SerialLCD_REV21.bas)!! Isn't it for the 4X20 LCD!! I see the description in the code saying "4X20"!! Please advice!!

     Thanks for helping me!! Will there be any change in hardware (like power-on straps)!! to select the LCD type!! Please advice!!

     Can you please let me know when I can have the code!!

 Thanks and Regards,


I've uploaded the project files as promised.  Currently, I had to create separate files for 4x20 and 16x2.  I could not squeeze options in the current files to make the LCD type selectable.  I can do that but, I'd have to remove some functionality.  So, I will be swapping the code over to a 16F88 which has more code space.  That way the LCD type can be changed and stored in EEPROM. I will also redesign the PCB to accept single pin and dual row LCDs.  Do let me know how this works out for you and if you have any questions.  All I ask is if you change something please post it for others to use/learn.

I just wanted to say, daaaaaamn!

Those are some sexy looking PCB's! I'm just curious, has anyone done this with Atmega chips? I've got like, 3 extra 168's laying around.. would be awesome to make a serial backpack for it myself!


You've got some damn good walkthroughs, hopefully you'll post more in the near future! :)

Thanks for the kind words. I've never worked with any of the newer Atmega chips although I have been getting the itch lately as I really like the free C compiler options.  I'll have to look into that.

Hi Curtis Brooks!!


    First of all!! This is a brilliant design!! 

    I've made the hardware for this!! But!! I've got problems compiling the "SerialLCD_REV21.bas" source for the PIC16F628!!

    I'm using the Micro Code Studio!! Compiler Version - "PICBASIC PRO2.47"!! When I compile the source!! I get the following errors!!

FATAL ERROR: Too many errors. (21)
ERROR Line 141: Redefiniton of LABEL LCDWRITE. (SerialLCD_REV21.bas)
ERROR Line 176: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 193: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 260: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 282: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 323: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 332: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 356: Redefiniton of LABEL ElseIf. (SerialLCD_REV21.bas)
ERROR Line 384: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 387: Redefiniton of LABEL ElseIf. (SerialLCD_REV21.bas)
ERROR Line 388: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 391: Redefiniton of LABEL ElseIf. (SerialLCD_REV21.bas)
ERROR Line 392: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 395: Redefiniton of LABEL ElseIf. (SerialLCD_REV21.bas)
ERROR Line 396: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 399: Redefiniton of LABEL ElseIf. (SerialLCD_REV21.bas)
ERROR Line 400: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 404: Bad expression. (SerialLCD_REV21.bas)
ERROR Line 427: Redefiniton of LABEL LCDWRITE. (SerialLCD_REV21.bas)
ERROR Line 441: Redefiniton of LABEL LCDWRITE. (SerialLCD_REV21.bas)
ERROR Line 479: Redefiniton of LABEL LCDWRITE. (SerialLCD_REV21.bas)

     I'm not sure!! why these errors occur!! Am I using the right compiler? (I guess it must be MBasic?? Is it free? there is no link to download!!) Please advice!!

      Can you please provide a download link for the MBasic Compiler!! Or Can you please send me the .hex!! so that I can program the microcontroller directly!!

Thanks and Regards,


Here is the download link to the Hex file for REV21: http://www.box.net/shared/gk56np1oc5.  I'll be posting the updated PicBasic Pro code soon.  Now, the PicBasic Pro code was written in version 2.60 so, I'm not sure if you will have any issues with the 2.47 version.  I'll update the links above as soon as I package it all together.