View previous topic :: View next topic |
Author |
Message |
Tom1234
Joined: 06 Jan 2013 Posts: 39
|
Lcd driver |
Posted: Sun Jan 06, 2013 3:52 pm |
|
|
Is anyone who have an lcd driver which is working??
This is the first time which i try to program a pic microcntroller that's why i need help in this |
|
![](templates/subSilver/images/spacer.gif) |
temtronic
Joined: 01 Jul 2010 Posts: 9180 Location: Greensville,Ontario
|
|
Posted: Sun Jan 06, 2013 4:21 pm |
|
|
The LCD driver(LCD.C) that CCS supplies works fine and the 'flex_lcd.c' driver posted on this forum is 'better' in that it is flexible with resepect to pin usage.
Those are both '4bit' LCD drivers which save 4 I/O pins but if you have extra pins, the default '8 bit' mode of most common LCD modules doesn't need a complicated 'driver'.
Please take the time to learn the 'search' feature of this forum and visit the 'code library' as there is a LOT of 'LCD' information here. What is applicable to your project, only you know, as you haven't said which PIC or LCD module you're using.
hth
jay |
|
![](templates/subSilver/images/spacer.gif) |
Tom1234
Joined: 06 Jan 2013 Posts: 39
|
Lcd driver |
Posted: Sun Jan 06, 2013 4:37 pm |
|
|
I used PC1602ARU-HWB-G-Q lcd and dspic33fj128gp202.
I have already used flex_lcd.c without success.
The lcd is connected to different power supply - 5v, from the microcontroller power supply which is 3.3V. Is this possible to create the problem ?? |
|
![](templates/subSilver/images/spacer.gif) |
temtronic
Joined: 01 Jul 2010 Posts: 9180 Location: Greensville,Ontario
|
|
Posted: Sun Jan 06, 2013 8:03 pm |
|
|
'Classic' problem.
You cannot run a 5 volt LCD and a 3 volt PIC without proper interface 'voltage translator' chips.
3 usual choices..
1) use 5 volt PIC and 5 volt LCD. My usual choice.
2) use 3 volt PIC and 3 volt LCD. Hard to find LCD!
3) use 3 volt PIC, 5volt LCD AND 'level translator' interface chip. The 'standard nowadays.
There are very, very few 3 volt LCD modules for sale (at least here in Canada). Seems to me to be a HUGE market though considering the vast number of 3 volt microcomputers available.
hth
jay |
|
![](templates/subSilver/images/spacer.gif) |
Tom1234
Joined: 06 Jan 2013 Posts: 39
|
Lcd driver |
Posted: Sun Jan 06, 2013 8:22 pm |
|
|
Do you know any level translator from farnell,RS ??
I can't find anything ! |
|
![](templates/subSilver/images/spacer.gif) |
Ttelmah
Joined: 11 Mar 2010 Posts: 19386
|
|
Posted: Mon Jan 07, 2013 2:06 am |
|
|
Start with the simple comment - get another LCD!.....
This is a standard Powertip device, and has inputs that require 3.7v as a 'high' level, hence can't directly be driven from a processor running at 3.3v. It is one of the relatively small number of displays where this is the case. There are plenty of similar devices that will accept lower voltages as a 'high', and these can be directly driven from a 3.3v PIC. For example, from the same manufacturer, the PC1602ARS-H, accepts 2.2v as a 'high'. There are also fully 3.3v versions of these displays (look at the EA DOG series).
However if you can't change the display, then the following comments apply:
The easiest way to buffer the signals is just to use 74HCT logic gates. These are CMOS gates which will run off 5v (and hence can drive the 5v display), with inputs that accept 2.4v as a logic high (and hence can be driven from the 3.3v device). A non inverting buffer like the 74HCT241, does the interfacing easily. Since this handles 8 lines, you can just connect the 4 data lines needed, the RS line and the EN line through this. Pull 2OE high and 1OE low to enable all the buffers.
With a 5v display, it is very much safer/easier to just connect the 'output' lines, and run with the driver setup to _not_ use the R/W line. To implement reading the status 'back', gets much more complex (requiring bi-directional buffers). So, use the flex LCD driver, comment out the line '#define USE_LCD_RW 1', and connect the R/W pin to ground.
This combination 'works'. Have done it when I needed to change a processor board only, on a 'already in use' system, going from a 18F2550 to a 18F26J50, and having to interface to an existing display. The version built a few months later as the full upgrade, changed to a 3.3v display.
Best Wishes |
|
![](templates/subSilver/images/spacer.gif) |
Tom1234
Joined: 06 Jan 2013 Posts: 39
|
|
![](templates/subSilver/images/spacer.gif) |
Tom1234
Joined: 06 Jan 2013 Posts: 39
|
Lcd driver |
Posted: Wed Jan 09, 2013 5:29 pm |
|
|
To make more clear my last post instead to see to lcd the "Hello" i see stranger characters |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Jan 09, 2013 6:38 pm |
|
|
1. Post a complete list of connections between the PIC and the LCD. Post
a list of all other connections to the LCD (power, ground, contrast).
Give a detailed explanation that tells the voltages used, as well as
component values.
Or, post a schematic on a free image hosting website, and then post a
link to the schematic here in this thread.
2. Post a small test program that shows how you are testing the LCD.
Make sure you post the #include line for the PIC, #fuses, #use delay,
and the #include line for the lcd driver file. Post all #define statements
that are required. Post a main() with a "Hello World" lcd test.
Tell us what LCD driver you are using (CCS, flex, or other ?).
3. Post your CCS compiler version. |
|
![](templates/subSilver/images/spacer.gif) |
Tom1234
Joined: 06 Jan 2013 Posts: 39
|
Lcd driver |
Posted: Wed Jan 09, 2013 7:38 pm |
|
|
Sorry guys, i had a connection problem between pic and lcd now everything is ok. Thanks.
Now if i need to present to the lcd the results of a sensor, is needed to change anything to the current driver? (i used flex driver) |
|
![](templates/subSilver/images/spacer.gif) |
temtronic
Joined: 01 Jul 2010 Posts: 9180 Location: Greensville,Ontario
|
|
Posted: Wed Jan 09, 2013 9:10 pm |
|
|
No changes to the driver are necessary.
this line..
printf(lcd_putc,"level %4x",ledlvl);
allows the LCD module to display a 16 bit variable 'ledlvl' as 4 hex characters preceeded by the phrase 'level'.
This is acomplished by the printf(....) function sending the data to the lcd_putc function that is in the flex driver.
If you press F11 while your project is open, you can quickly search the CCS Help screens and readup on the 'printf(...)' function.As well there is an FAQ section and of course LOTS of examples of all sorts of code in the 'examples' folder.
Also...If you do wnat to add a function to the driver, be sure to copy the original 'flex.c' to say 'myflex.c' and modify 'myflex.c',that way you will always have the original 'flex.c' available.
hth
jay |
|
![](templates/subSilver/images/spacer.gif) |
|