CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Interfacing LCD 2X16 JHD162A with PIC18F46K22
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
senur



Joined: 11 Dec 2013
Posts: 13

View user's profile Send private message

Interfacing LCD 2X16 JHD162A with PIC18F46K22
PostPosted: Sun Dec 29, 2013 1:31 am     Reply with quote

I'm really new to these stuff PIC and LCD. I'm trying to print "Hello" on the LCD but it doesn't work. I've been trying all day yesterday but still won't show the output nor the back-light. What I get in the LCD is full squares about 9 of them.


Here's my code:
Code:
#include <18F46K22.h>

#device adc = 8

#FUSES NOWDT   //No Watch Dog Timer
#FUSES HSH  // High Speed oscillator
#FUSES NOPROTECT  //Code not protected from reading
#FUSES NOLVP   //Low Voltage Programming on B5 (PIC18)
#FUSES NOWRT   //Program memory not write protected

#byte PORTA = 5
#byte PORTB = 6
#byte PORTC = 7
#byte PORTD = 8
#byte PORTE = 9
////I think my problem is the connection pins here. /////////
#define LCD_ENABLE_PIN     PIN_B5
#define LCD_RS_PIN         PIN_B4
#define LCD_RW_PIN         PIN_E0
#define LCD_DATA4          PIN_D0
#define LCD_DATA5          PIN_D1
#define LCD_DATA6          PIN_D3
#define LCD_DATA7          PIN_D4


#use delay (clock = 20M )
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,bits=8, stream = COM_B) //baud=9600
#include <lcd.c>


void main()
{   
   delay_ms(100);
   lcd_init();
   delay_ms(100);
   
   printf(lcd_putc, "\f Hello");
   while(true);
}






Please help me with this problem. I've checked the soldering already it's fine and I've changed the LCD I bought two of them. Thank you
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Dec 29, 2013 2:02 am     Reply with quote

That board has the lcd's R/W pin connected to ground. The CCS lcd.c
driver (which you are using) doesn't support that method of using the lcd.

You can use the Flex lcd driver with that board. It has support for that mode:
http://www.ccsinfo.com/forum/viewtopic.php?t=24661

In the flex lcd driver, setup the #define statements as shown below.
Also, make sure you comment out the two lines shown in bold below:
Quote:


#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7

#define LCD_E PIN_B5
#define LCD_RS PIN_B4
// #define LCD_RW

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

// #define USE_LCD_RW 1


To make the lcd backlight work, you need to add a jumper on JP8 on
your board.


Also this stuff is completely wrong for the 18F46K22. You're using
register addresses for a 16F PIC:
Quote:
#byte PORTA = 5
#byte PORTB = 6
#byte PORTC = 7
#byte PORTD = 8
#byte PORTE = 9

If you need direct register access, use the getenv() function to get the
correct register addresses for those registers.
senur



Joined: 11 Dec 2013
Posts: 13

View user's profile Send private message

Thank you now the backlight is working
PostPosted: Sun Dec 29, 2013 8:27 am     Reply with quote

Thank you, the back-light is working now. But I still can't get the output on the LCD. Here's my code, am I missing something? I already #define the connection in flex_lcd.c
Code:
#include <18F46K22.h>
#device adc = 8

#FUSES NOWDT   //No Watch Dog Timer
#FUSES HSH  // High Speed oscillator
#FUSES NOPROTECT  //Code not protected from reading
#FUSES NOLVP   //Low Voltage Programming on B5 (PIC18)
#FUSES NOWRT   //Program memory not write protected
#FUSES XT, BROWNOUT, PUT


#use delay (clock = 4000000)
#include <flex_lcd.c>

void main()
{
   lcd_init();
   
   lcd_putc("\fHello World\n");
   lcd_putc("Line Number 2");
   while(1);
}
Ttelmah



Joined: 11 Mar 2010
Posts: 19559

View user's profile Send private message

PostPosted: Sun Dec 29, 2013 8:36 am     Reply with quote

1) What have you got feeding Vee on the LCD?.
This depends on the LCD. Some types will accept 0v, but some high contrast, and older displays require a -ve voltage here. Data sheet for LCD.
2) Add a short delay (250mSec) before calling LCD_init.
Many LCD's don't start to wake, till quite a few moments after the PIC wakes up. Some also require more delay than the standard Hitachi controller after this point.
3) You have both 'XT', and 'HSH' oscillators selected. Should be only one....
senur



Joined: 11 Dec 2013
Posts: 13

View user's profile Send private message

PostPosted: Sun Dec 29, 2013 8:49 am     Reply with quote

Quote:
1) What have you got feeding Vee on the LCD?.


It's just connected to the board as in the picture. Sorry but I'm really new to these stuff.

Quote:
2) Add a short delay (250mSec) before calling LCD_init.
3) You have both 'XT', and 'HSH' oscillators selected. Should be only one....


I've tested XT and HSH individually just now but still I'm not getting the output. And also I've added delay.
gpsmikey



Joined: 16 Nov 2010
Posts: 588
Location: Kirkland, WA

View user's profile Send private message

PostPosted: Sun Dec 29, 2013 10:11 am     Reply with quote

The solder connections I see in the image are suspicious - the solder should flow on the connection when you solder it (like you put a drop of paint on the connection). Those connections *may* be ok, but if they were on a board I was working with, I would re-solder them.

mikey
_________________
mikey
-- you can't have too many gadgets or too much disk space !
old engineering saying: 1+1 = 3 for sufficiently large values of 1 or small values of 3
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Dec 29, 2013 2:57 pm     Reply with quote

Quote:

1) What have you got feeding Vee on the LCD?.

It's just connected to the board as in the picture. Sorry but I'm really new to these stuff.

There is an LCD contrast trimpot on the right side of the board.
You can see it in your photo. It's called R7. Put a voltmeter or an
oscilloscope on the Vee pin of the LCD and adjust R7 so that you
have 0.4 volt on the Vee pin. If your LCD and program are working,
you should probably be able to see text on your LCD with that Vee voltage.

gpsmikey wrote:
The solder connections I see in the image are
suspicious - the solder should flow on the connection when you solder it
(like you put a drop of paint on the connection). Those connections
*may* be ok, but if they were on a board I was working with, I would re-
solder them.

You're right. He needs to re-do all the joints on the LCD with a hot
soldering iron (750 to 800 degrees F) and use solder with a flux core.
This photo on the Cytron website shows mostly better solder joints on the LCD:
http://tutorial.cytron.com.my/2011/01/05/new-starter-kit/
This solder is the flux core type:
http://cytron.com.my/viewProduct.php?pcode=SS-F12X-10H&name=Finex%20Solder%20Lead

Note: The cytron.com.my site is often down, or very slow to load.
senur



Joined: 11 Dec 2013
Posts: 13

View user's profile Send private message

PostPosted: Mon Dec 30, 2013 6:53 am     Reply with quote

I tried to check if there's a 0.4 volt on the VEE. So I placed the red wire of the voltmeter on the VEE pin and the black wire on the R7 itself. I didn't get any reading. Am I doing right or my way is wrong?
stinky



Joined: 05 Mar 2012
Posts: 99
Location: Central Illinois

View user's profile Send private message

PostPosted: Mon Dec 30, 2013 7:01 am     Reply with quote

Probably wrong.
Positive/Red lead from the meter to vee.
Negative/Black lead to ground.
senur



Joined: 11 Dec 2013
Posts: 13

View user's profile Send private message

PostPosted: Mon Dec 30, 2013 7:22 am     Reply with quote

Thank you, Now I've set the VEE with 0.4 volt. But this is the output I get:



http://i.imgur.com/ezhhvBb.jpg
temtronic



Joined: 01 Jul 2010
Posts: 9250
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Dec 30, 2013 8:48 am     Reply with quote

comment: I still don't like the pin soldering.
I suggest you totally remove all connections to the LCD module, clean up with solderwick and install new 'posts'. You need a very fine tipped iron and good eye-hand corodination. I put the posts into the breadboard, position the LCD module ontop of the posts, then solder every other pin, then the ones in between. You need solid support before you solder.Use books, erasers, whatever to make the LCD module firm to the pins BEFORE you solder.You can spend 15 minutes 'setting it up' and 15 seconds to solder.
I've got a few LCD modules that are 10 years old, been in and out of countless breadboards, and still work today.

The picture shows you probably have a few bad connections but the module is 'alive'!

hth
jay
ezflyr



Joined: 25 Oct 2010
Posts: 1019
Location: Tewksbury, MA

View user's profile Send private message

PostPosted: Mon Dec 30, 2013 9:08 am     Reply with quote

Hi,

Do you know for sure that your PIC is actually running, and at the proper speed?? Every single PIC project I undertake includes a PWR LED
driven off an I/O pin of the PIC. I flash this LED at power-up to let me know that my PIC has actually started up, and is running! This technique has
saved me much aggravation in the past!!

I would connect an LED to an unused I/O pin on your PIC. Connect the anode (+) terminal of the LED directly to the PIC I/O pin. Connect the
cathode (-) terminal of the LED to GND through a series connected current limiting resistor of about 500 ohms value.

In your code, add the following:

Code:

#define PWR_LED Pin_XX   <--- change to match your hardware


Then add the following at the top of your Main():

Code:


int8 iIndex = 0;

   // Here we blip the Power LED at power-up to show that the hardware is working
   for ( iIndex = 0 ; iIndex < 3 ; iIndex++ )
   {
      output_high(PWR_LED);
      delay_ms(250);
      output_low(PWR_LED);
      delay_ms(250);
   }
      
   // Here we leave the Power LED ON
   output_high(PWR_LED);


When you apply power to your board, the PWR LED should blink four times, and then stay on. Also, note the 'rate' of the flashing. The entire
sequence should take about 1 second. Adjust the delay times as needed if you aren't sure of the correct timing!!! You should do this in every
one
of your PIC projects!!

Good Luck and Happy New Year!!

John
senur



Joined: 11 Dec 2013
Posts: 13

View user's profile Send private message

PostPosted: Mon Dec 30, 2013 9:47 am     Reply with quote

temtronic wrote:
comment: I still don't like the pin soldering.

hth
jay


I went to the store today to buy the flux core but they were out. So, I'll check other stores tomorrow. and I'll redo all of them. thank you

Quote:
You should do this in every
one of your PIC projects!!
Good Luck and Happy New Year!!

John


Actually, I did that at the very beginning to check everything. And I just did it again to double check. It is working fine. My problem is with the LCD.

This is my second LCD I damaged the first one and I think I damaged this too Crying or Very sad

Thank you and Happy New Year!!!
gpsmikey



Joined: 16 Nov 2010
Posts: 588
Location: Kirkland, WA

View user's profile Send private message

PostPosted: Mon Dec 30, 2013 10:11 am     Reply with quote

senur wrote:


I went to the store today to buy the flux core but they were out. So, I'll check other stores tomorrow. and I'll redo all of them. thank you

This is my second LCD I damaged the first one and I think I damaged this too Crying or Very sad

Thank you and Happy New Year!!!


You don't say just what store you went to - any decent electronics store should have Rosin core solder.
Your "home improvement" stores typically will not have rosin core solder, but will have either solid core or acid core - never
use either of those with electronics projects - acid core will eat the wiring in a while and solid solder will not "flow"
unless you use a liquid flux (you can get rosin flux in a small bottle with a brush, but that is not the easiest).
Use rosin core solder and a small tipped iron. If you are not sure about soldering, look on Youtube - there are some
good demos there. Good solder joints look good - bad solder joints will drive you nuts trying to find why something
works sometimes and not others (or not at all and you just "know" it is connected).

mikey
_________________
mikey
-- you can't have too many gadgets or too much disk space !
old engineering saying: 1+1 = 3 for sufficiently large values of 1 or small values of 3


Last edited by gpsmikey on Mon Dec 30, 2013 10:12 am; edited 1 time in total
temtronic



Joined: 01 Jul 2010
Posts: 9250
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Dec 30, 2013 10:11 am     Reply with quote

hint: Before you damage another LCD module ,get some 'dead' PCBs( maybe old computers) or a copper clad perfboard with a zillion pads on it. Practice soldering by adding just enough solder to a pad to make a nice 'bump'.Repeat, do it again, another one, another one...do the entire board if necessary to better your skill at soldering.It is something you have to learn by doing a 'zillion' times. It takes time to figure out how much time to hold the tip to the PCB, how much solder, how long to hold,etc. Also get thin solder, a bit bigger than a wire wrap pin,smaller than a test lead probe.I've got 50+ years of doing it but can NOT do SMT work. Silly things are way too small for my bad eyes to see, let alone solder! DIPS are getting hard to do now too...sigh...getting old sucks !
Also be sure to have a damp real sponge to clean the tip every few solderings! A clean tip will make the job a LOT easier!!


hth
jay
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2, 3  Next
Page 1 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group