analog in to 4 bit LCD driver

neillzero,
Thanks so much for the trouble shooting help! I've been sitting here looking over the wiring over and over and over, wondering what could be wrong.
Turns out, once I delete LCD4bit.o and recompiled the code, it worked perfectly! I'm glad I found your post, maybe this should be in the wiki? Maybe it is and I missed it!
Thanks again!

My 2 playing with 4 bits LCD...

I always use LCD4Bits library...but i build it with a new LCD WH1602, and do not work...
in the Lib note this:

// ########## pin assignment ##########
int RS = 12; // Register Select
int RW = 11; // Read/Write
int En = 2; // Enable

//DB should be an unseparated group of pins - because of lazy coding in push_nibble()
int DB[] = {7, 8, 9, 10}; // DB4 .. DB7

That on the default lib, my Lib:
// ########## pin assignment ##########
int RS = 3; // Register Select
int RW = 11; // Read/Write
int En = 2; // Enable

//DB should be an unseparated group of pins - because of lazy coding in push_nibble()
int DB[] = {8, 5, 7, 6}; // DB4 .. DB7 :o

So this is not working... could be the pin assignment?

Best Regards!
Frank

Hey Neilzero..

Ive adapted your code into my little program, but can't find out how to make it show the temperature as 26,1 as oposed to the 261 format it is in now ?!?! Im sure you have a solution, I just can't see it since i've only been into arduino programming for about 4 days now :-/

Solow, read the attached post and you will get it.

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1218132924/8#8

Hey,
im using this lcd http://www.sparkfun.com/commerce/product_info.php?products_id=709
and i cant get it to work, i followed your post Arduino Playground - LCD4BitLibrary
is it my lcd isnt compatible or am i doing something wrong?
Thanks

I've got a question, I haven't seen anyone else getting these strange results.

I have a HD44780 LCD and finally got it to display characters with the example. Only problem is, I don't see fruits I see characters like ->, 0, etc. It's like the character map used isn't correct for my LCD. Can these vary by LCD or isn't the ascii universal?

Any ideas? I've been playing with pins and am going to start probing to make sure all my connections are being made. Anything else I should look for?

EDIT
Nevermind my dumb question. I was feeding corrupt data (data pins were backwards)

This is a great thread. Thanks for contributing. Just thought I'd capture the landmark I stumbled upon

Hi, i came across these lines in your great library:

void LCD4Bit::printIn(char msg[]) {
  uint8_t i;  //fancy int.  avoids compiler warning when comparing i with strlen()'s uint8_t
  for (i=0;i < strlen(msg);i++){
    print(msg[i]);
  }
}

In my opinion you don't need to include <string.h> and you don't need that fancy int8_t. Take a look:

void LCD4Bit::printIn(char msg[])
{
      int i = 0;
      while(msg[i])
      {
            print(msg[i]);
            i++;
      }
}

greetings sunny

That is an improvement. But why not use the LCD code provided in release 0012. It has much richer print functionality with the added benefit that it uses the same syntax as the Serial print routines.

That's a good question. I haven't looked at that one yet. But i will do. Thx mem!

Hello,

I think I have an improvment to this great library.

I did some writing to the second line of my display and that will take 117msec to position and write the line content.

After looking around, i found this site: Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos and there is the command 0x080 to position the cursor directly, with going to home position and move left the cusor position.

I now wrote a simple method to test this (no error handling, just a proof of concept :slight_smile: ):

void myCursorTo(int aLine, int aCol)
{
    int CmdToWrite = 128; //0x80
    switch(aLine)
    {
        case 1:
            CmdToWrite = CmdToWrite + aCol;
            break;
        case 2:
            // this line is buggy, jumps only to first column of line 2
            CmdToWrite = CmdToWrite + 40 + aCol;
            break;
    }
    lcd.commandWrite(CmdToWrite);
}

By using this to position the cursor, moving to second line and writing the content now just needs 35msec. A really great speed improvement.

Cheers
KiWiX

I've been looking at the LCD library, and connecting up a genuine Hitachi HD44780 LCD in 4-bit mode. With that chip, extra delays are required after certain operations/commands. But the code in "LiquidCrystal" uses explicit delays in microseconds, and does not use the "ready" bit output from the chip. Would a version of the library that did use the "Ready" bit be a useful thing to have? It would have the advantage of working faster with clone HD44780 chips (which need less delay), but would most likely make the code size bigger.

for some speedfreaks:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1239682675/4#4

this boosts the speed a little :wink:

Hello I downloaded the LCD4Bit library,
I am using a 16x2 LCD (Amber on Black) from Sparkfun (GDM1602K)

The Pins and connections as fallows:

LCD -> Arduino

4 (RS) to Arduino Pin 12
5 (RW) to Arduino Pin GND
6 (E) to Arduino Pin 2

DB4 to Arduino Pin7
DB5 to Arduino Pin8
DB6 to Arduino Pin9
DB7 to Arduino Pin10

VSS GND to Arduino GND
VDD +5V to Arduino Pin 5V

I also connect the Pins on LCD 15(4.2V Led) and 16 (Power Supply for BKL 0v) to Arduino 5V and GND pins.

And I load up the example sketch from the library, upload it to Arduino and run it, the Test Led on 13 keeps blinking means data is going but there is no sign of any light/character on my LCD.

Any suggestions ?
Thanks

Have you wired up a contrast pot? Or does the Spark Fun board provide that already?

I just re checked the connections and the Backlight works fine now but now I have an another problem.

When I disconnect the Power lines for the lcd Display (not the ones for the Backlight) I see a pulse on the screen but nothings shows up,
it is like if I am going to write "Apple" on the screen, the boxes corresponding to those 5 letters light up for a very shortly like the letters going to appear but then nothing happens.

When I connect the power lines from Arduino to LCD that effect disappears and I just see the backlight.

I tried both 5V and 3V3 pins on arduino. But no luck.
Any ideas ?

Try using an external 3.3 volt source for the display and keep all grounds tied together. Depending on the LCD, it may be drawing too much for the 3.3v from the Arduino directly, giving you unstable readings. Although this display is specified to operate at 3.3V, you should still be able to use it with 5VDC if you don't have any other option. And also, you never want to apply/disconnect power to the LCD with data being sent to it over the data lines....could ruin it :wink:

Also, like Anachrocomputer mentioned, (and I would try this first before the other power supply option) you need a contrast pot on pin 3. Hook up around a 10K pot with the outer legs between Pin1 (ground) and Pin2 (VDD) and the center pin of the pot tied to Pin3 (VO). Refer to page 6 of the manual and it shows the connections for the contrast: http://www.sparkfun.com/datasheets/LCD/ADM1602K-NSA-FBS-3.3v.pdf

Okay I got a 10K resistor today, connected it and after I adjusted I can see some stuff, not the actual text that is supposed to be there but I can see all the lower and upper 16 boxes light up. So the contrast is fine at the moment but both the LCD4Bit library or the one came with arduino IDE does not work, I double checked the connections and also tried with a new LCD but still the same.

Any ideas ? I will go insane soon.

If you are seeing all the boxes lit up, then you have the contrast too high. Can you provide a circuit or your code? I can try it on my end and see if I get similar results.
Also, when I first used the LCD4bit library, I couldn't get anything on mine either. I had to make some modifications to the LiquidCrystal library, and then everything worked great. I'll see if I can find what I did to get mine to work, but would be great if you could post your code.

Try looking at this if you haven't already:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235319100/0

This is the very basic Arduino code that I use with Liquid Crystal, Liquid Crystal seems less complex then lcd4bit and simple so I am just trying with it now:

#include <LiquidCrystal.h>

// LiquidCrystal display with:
// rs on pin 12
// rw on pin 11
// enable on pin 10
// d4, d5, d6, d7 on pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

void setup()
{
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop()
{
}

And the pin confugration is just same as there as fallows.
I am using it with a XIAMEN 1602K LCD (Amber-Black)

Unfortunately it is 03:42 here now and I am really sleepy, but tomorrow I will take a clear photo of the setup I have so you may have an idea about the general look. And also that will give me an another chance to re-check the cable stuff again.
thanks

tikifare

There seem to be many people having trouble with the LiquidCrystal library, especially in 4-bit mode. I have written a replacement for LiquidCrystal.cpp, the main part of the library. You can find the file and some of my thoughts on why LiquidCrystal doesn't work all the time at http://web.alfredstate.edu/weimandn.

floresta