View previous topic :: View next topic |
Author |
Message |
monsterz
Joined: 21 Jun 2010 Posts: 10
|
PROBLEM with PIC18f4550 and LCD4x20 |
Posted: Mon Jun 21, 2010 4:22 am |
|
|
Hi, im facing the problem of pic18f4550 and LCD 4x20, i get the ccs LCD420.C file from the ccs library, and it cant work, the LCD show up with black bar code... can any1 help me. thank alot. Here my example of my code. By the way i connect the pin
// B0 enable
// B1 rs
// B2 rw
// B4 D4
// B5 D5
// B6 D6
// B7 D7
#include "main.h"
#include <LCD420.c>
lcd_gotoxy ( 1, 1 );
printf ( lcd_putc, "KWH:" );
displayInt ( ikWattHrs );
lcd_putc ( '.' );
lcd_putc ( fkWattHrs + '0' ); |
|
|
monsterz
Joined: 21 Jun 2010 Posts: 10
|
|
Posted: Mon Jun 21, 2010 4:29 am |
|
|
HERE my LCD code get from ccs library
Code: |
////////////////////////////////////////////////////////////////////////////
//// LCD420.C ////
//// Driver for common 4x20 LCD modules ////
// As defined in the following structure the pin connection is as follows:
// B0 enable
// B1 rs
// B2 rw
// B4 D4
// B5 D5
// B6 D6
// B7 D7
//
#byte lcd = 6 // This puts the entire structure
// on to port B (at address 6)
|
+++++++++++++++++++++++++++
Most driver code removed.
Reason: Forum Rule #10
10. Don't post the CCS example code or drivers
-- Forum Moderator
+++++++++++++++++++++++++++ |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Jun 21, 2010 2:53 pm |
|
|
I don't see in your code where you call lcd_init(). One reason for getting
black boxes is if the LCD is not initialized. You need to call lcd_init()
at the beginning of main(). |
|
|
monsterz
Joined: 21 Jun 2010 Posts: 10
|
|
Posted: Tue Jun 22, 2010 1:37 am |
|
|
i have called the lcd_init() but still getting the same error, i try to use the LCD.c library file and it works but just for lcd 16x2 . And now i am trying to use lcd 20 x 4 by using the library LCD420.c and it doesnt work..
Anyone face this problem before? |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Jun 22, 2010 11:38 am |
|
|
I just noticed the problem. PortB is set to 6 with a #byte statement.
That's correct for a 16F877, but PortB is at a different address for the
18F4550. Edit the #byte statement and change the address to 0xF81.
Then it should work. |
|
|
monsterz
Joined: 21 Jun 2010 Posts: 10
|
|
Posted: Sun Jun 27, 2010 7:58 am |
|
|
it is fine now... but now the problem is my 5v regulator is hot.. is it the software cause my regulator hot? because i hvae double cheaked my LCD and PIC, and they are fine.. and i suspect is the lcd.h problem.. by the way i have changed my PIC to 16f877a |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19504
|
|
Posted: Sun Jun 27, 2010 10:09 am |
|
|
What is your incoming supply voltage (feeding the regulator)?.
What is running off the regulator (PIC, plus LCD, +?)?.
Does the LCD have backlighting?. What type?.
What heatsinking is on the regulator?.
What capacitors have you got on the regulator, and where are they placed relative to the regulator?.
The 'odds' are that it is just the amount of current that the regulator is having to deliver, at the voltage it is dropping...
However one common problem, that can make this much worse, is the regulator oscillating (hence the last question).
Best Wishes |
|
|
monsterz
Joined: 21 Jun 2010 Posts: 10
|
|
Posted: Mon Jun 28, 2010 2:22 am |
|
|
incoming voltage is 9Vdc
the regulator just supply for PIC + LCD only
The LCD have backlight, 4x20 brand JHD204A
there are not heatsinking on the regulator
the regulator is 7805 output 5Vdc and 1A
there are not capacitor on my regulator
When im using Hightech C compiler LCD.H , my regulator are not problem, but when im using CCS C compliler LCD.H, my regulator is hot.. is it something problem with the LCD.H driver file |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19504
|
|
Posted: Mon Jun 28, 2010 2:59 am |
|
|
Around your regulator, you _must_ have a small capacitor right close to the output, between the output pin and ground. Something like 0.1uF. You should also have a capacitor close to the input of similar size. These should be as close to the regulator as possible, and are _essential_.
Now, there is nothing in the LCD driver that should affect the power being drawn, provided:
You have the LCD pin selection setup right. Something that would cause problems would be (for example), to have the driver told to use LCD chip select, then have the pin connected to a supply rail... So, look carefully at the LCD setups.
Remember also that everything else in the code also changes (I/O configuration, how pins are initialised etc. etc...).
You should wire the regulator properly 'anyway', but solve the code setup as well.
Have a look at <why_is_my_regulator_getting_hot.htm>
Best Wishes |
|
|
monsterz
Joined: 21 Jun 2010 Posts: 10
|
|
Posted: Mon Jun 28, 2010 4:13 am |
|
|
ya, im connecting 0.33uF and 0.1uF connected at the input and output, but i still get the same problem.
In hightech C, the LCD.h library, the R/W is connected to ground.
But in CCS compiler the LCD.h driver, the R/W is connected to PIC pin
That i suspect the r/w will be floating and cause the regulator hot.. is it possible??
I have asked my lecturers, and my lecturers also dunno wat is going wrong... Do any 1 using LCD.H driver provided by ccs compiler and facing this problem b4? thankyou |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19504
|
|
Posted: Mon Jun 28, 2010 4:34 am |
|
|
A floating pin, should only draw a few mA. It should be avoided, and is 'bad' all round, but is unlikely to be the whole problem.
However, why are you changing the hardware?. Just setup the CCS driver to use the same layout as the HiTech one. I really would say that you almost certainly have the hardware wrong somewhere relative to the software configuration.
You setup the 'enable' pin, using the line:
#define LCD_ENABLE_PIN PIN_XX
where 'XX' is the pin name you want to use. If you don't want to use hardware enable (you don't have to, but it is slower), then just leave this pin undefined.
Also, look at every other pin. Are all the unused PIC pins driven high or low (either in software or hardware). They should be.
Best Wishes |
|
|
monsterz
Joined: 21 Jun 2010 Posts: 10
|
|
Posted: Mon Jun 28, 2010 4:48 am |
|
|
The hardware part is ok... because if im using battery my regulator is fine..
Last edited by monsterz on Mon Jun 28, 2010 5:03 am; edited 1 time in total |
|
|
monsterz
Joined: 21 Jun 2010 Posts: 10
|
|
Posted: Mon Jun 28, 2010 4:52 am |
|
|
is that ok with my program?? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19504
|
|
Posted: Mon Jun 28, 2010 5:00 am |
|
|
First, remove the code. Read the header of the file, and the terms of this group. Don't post CCS code here.
_All_ you need post, is the defines you are using, which are not in what you have posted. You also need to post the physical connections you are using to the LCD. |
|
|
monsterz
Joined: 21 Jun 2010 Posts: 10
|
|
Posted: Mon Jun 28, 2010 5:11 am |
|
|
From LCD.h driver I have connected
Code: |
// D0 enable
// D1 rs
// D2 rw
// D4 D4
// D5 D5
// D6 D6
// D7 D7
//
// LCD pins D0-D3 are not used and PIC D3 is not used.
void main()
{
lcd_init();
lcd_gotoxy ( 1, 1 );
printf ( lcd_putc, "V:%.1fV ", VrmsUpdated );
lcd_gotoxy ( 10,1);
printf ( lcd_putc, "I:%.1fA ", VrmsUpdated );
}
|
The hardware part is contruct with perfect...With battery it work but if
with adapter or DC power supply it can't work. My lcd screen show
2 black lines:
==========
========== |
|
|
|