Can i connect two 16x4 lcd displays to arduino meg

Someone once mentioned that you could share all the data lines and have separate enable pins so that you could technically use two with only 16 pins, but I have no idea how well / if that even works.

There's no reason for it not to work - this is precisely how the 40x4 displays are configured except that both of its 20x4 displays are in the same glass enclosure. You share the RS line (and the R/W if used) in addition to the data lines. Only the E lines are separate.

Don

Don, How do you enable the E lines for the separate displays? Do you use the standard LiquidCyrstal library now used?

Perhaps a snippet of sample code to display "hello World" and "Hey World" on each display?

Thanks,
Ken H>

Ken:
I'm afraid I can't give you any ironclad answer to this because I tinker mostly with assembly language (on arduino clone hardware).

As TchnclFl mentioned, you have to start two instances of the LCD library which I think you would do somewhat like this:

LiquidCrystal lcd1(12, 11, 5, 4, 3, 2);
LiquidCrystal lcd2(12, 10, 5, 4, 3, 2);

(note that the Enable lines are assigned to different pins)

I have been wanting to try this for a while - I'll try to do something this afternoon and get back to you. It will give me an opportunity to use the real Arduino that I got in the Sparkfun free day.

Don

Ken:

It works as advertised - film at 11.

Don

OH Boy!!!! Don - I'm getting my popcorn ready :slight_smile: :sunglasses: ::slight_smile:

That seems like a useful bit of info to learn.

Ken H>

Here's the code I used . All I did was add a few lines to the 'hello, world!' example code.

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
LiquidCrystal lcd2(12, 10, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
  
  lcd2.begin(16, 2);
  // Print a message to the LCD.
  lcd2.print("hey, world!");
  
    lcd2.setCursor(0, 1);
    lcd2.print("it works!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

I have a nice picture, but the ftp access to my web space is not working at the moment. I'll add it when I can.

It's fixed - Here's the photo:

Don

So this can be done using just 1 extra pin? Will extra LCDs drastically effect the performance of the 'duino?

thegeekway:

Will extra LCDs drastically effect(sic) the performance of the 'duino?

Probably not, within reason.

Don

That is just too slick!!! It looks like the LiquidCrystal knows which LCD to print to by the LCD.print vs lcd2.print just by the defining the LiquidCrystal lcd2 wiring? Then for #3 and 4 LCD you used lcd3.print and lcd4.print?

That is just too slick! I'll have to try that over the weekend - THANK YOU!!!

Ken H>

Ken:

Then for #3 and 4 LCD you used lcd3.print and lcd4.print?

You got it ...

  lcd3.begin(16, 2);
  lcd3.print("LCD #3");
  
  lcd3.setCursor(0, 1);
  lcd3.print("it still works!");

  lcd4.begin(16, 2);
  lcd4.print("LCD #4");
  
  lcd4.setCursor(0, 1);
  lcd4.print("Send more LCDs");

Don

thx for the info.

great community.

i'm actually completely new to arduino and C, but im learning quick

i though of using Photoshop to overwhelm you....
:wink:

Dumb question but just want to be sure. I'm thinking of getting a 20x4 LCD to go along with the 16x2 i already have. So am i safe to assume that i can hook like the above examples?

I figure all i'd have to do is declare the 2 screen in setup correctly. For example:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
LiquidCrystal lcd2(12, 10, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of rows and columns:
 [glow] lcd.begin(20, 4);[/glow]
  // Print a message to the LCD.
  lcd.print("hello, world!");
  
  [glow]lcd2.begin(16, 2);[/glow]
  // Print a message to the LCD.
  lcd2.print("hey, world!");
  
    lcd2.setCursor(0, 1);
    lcd2.print("it works!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

Like i said stupid question but just want to be sure.

Awesome pic on that quad display, floresta - I love it!

;D ;D ;D

digimike:

Your sketch looks OK to me. It looks pretty familiar as well - but that's how I learned all of my programming.

Like i said stupid question but just want to be sure.

Haven't you heard that there are no stupid questions?

Don

Thanks. Yes that was the sketch you posted but with the highlighted lines changed. Just as an example to make sure i understood it right.

Don,

I think I almost follow your wiring and code.

What's the little square thing on the breadboard to the left of each display, though? Seems like it's tweaking the power for the LCD?

-Bill.

It's the potentiometer that is used to adjust the contrast voltage (pin 3).

It's the the kind of potentiometer that is designed to be soldered onto a PC board.

Don

Awesome. Thanks! Pieces are coming together. I may just be able to build that new derby track for the scouts after all.