PDA

View Full Version : Two LCDs on one PIC



NavMicroSystems
- 4th August 2004, 22:55
As this has been asked several times:
Here is an example how to connect two LCDs (or one LCD with two controllers) to the PIC.

You need just one additional Port Bit to toggle between the two controllers.

As only one Controller is enabled at a time
and the LCD is initialized when the first LCDout command is issued
you will need to reset the "INIT Flag" after the first LCD has been initialized.
Then select the second LCD and send a "CLEAR" to initialize the second LCD.

See PBP Manual Section 5.37

Example:
(assuming LCD-Select is connected to PortB.1)

Add to the beginning of your code:

------------------------------
LOW PortB.1 ' Select LCD 1
LCDout $Fe,1 ' initialize and Clear LCD 1
Flags=0 ' Reset "INIT-Flag"
HIGH PortB.1 ' Select LCD 2
LCDout $Fe,1 ' initialize and Clear LCD 2
------------------------------

See the schematic:

Darrel Taylor
- 10th August 2004, 13:09
Here's another example of 2 LCD's on 1 PIC
http://pbpgroup.ehost.com/files/2_LCDs.gif
With this method, you can send to either LCD independantly, or to both LCD's at the same time. The only additional parts required are 2 resistors.

By taking the LCD?_Disable pins LOW, it prevents the Enable signal from getting to that particular display. So, just disable the one you don't want to send to, and it sends the data to the one you want.

This method can have more than 2 displays attached to the same pic. The only limitation is the number of pins that are available.

DO NOT attempt to use the R/W pin on the LCD's! The displays will be damaged when more than 1 display is enabled at the same time.

Here's a simple program:
DEFINE LCD_DREG PORTB ' LCD Data port
DEFINE LCD_DBIT 0 ' starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_RSREG PORTB ' LCD Register Select port
DEFINE LCD_RSBIT 4 ' LCD Register Select bit
DEFINE LCD_EREG PORTB ' LCD Enable port
DEFINE LCD_EBIT 7 ' LCD Enable bit
DEFINE LCD_BITS 4 ' LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 4 ' Number of lines on LCD

LCD1_Disable VAR PORTB.5
LCD2_Disable VAR PORTB.6

LCDOUT $FE,1 ' Initialize both LCD's
PAUSE 200

GOSUB USE_LCD1
LCDOUT "This is LCD 1"

GOSUB USE_LCD2
LCDOUT "This is LCD 2"

GOSUB USE_BothLCD
LCDOUT $FE,$C0,"Both LCD's"

END

USE_LCD1:
INPUT LCD1_Disable
LOW LDC2_Disable
RETURN

USE_LCD2:
LOW LCD1_Disable
INPUT LDC2_Disable
RETURN

USE_BothLCD:
INPUT LCD1_Disable
INPUT LDC2_Disable
RETURNBest regards,
   Darrel

NavMicroSystems
- 10th August 2004, 16:40
Darryl,

have you really tried this setup?

I think the LCD1_Disable and LCD2_Disable Pins on the PIC would have to OpenDrain to allow this to work properly.

Setting LCDx_Disable High will set the E Input of tha attached LCD High and it will stay High, regardless of the state of the E Output of the PIC.
So the LCD will never "see" a falling edge on E.

regards

Darrel Taylor
- 10th August 2004, 21:07
You are correct. If the Disables are set HIGH it won't work.

That's why it only gets set either LOW or INPUT (Tri-State, open-drain, etc.).

You can see in the USE_LCD?: subroutines how they are switched.

Regards,
   Darrel

NavMicroSystems
- 10th August 2004, 21:40
Sorry Darrel,

I should have had a look at your code example before posting.

regards

iw2fvo
- 29th January 2013, 07:53
Thanks for the assistance on the matter.
Regards,
Ambrogio
i2w2fvo

iw2fvo
- 29th January 2013, 07:56
Thanks a lot Darrel for the very simple solution to my problem: that is great !
I have also seen that the INPUT command puts the pin to a three state condition: it is very good.
Regards,
Ambrogio
IW2FVO
North Italy