| Author |
Message |
bjerkely
Joined: 26 May 2004 Posts: 92 Helped: 1 Location: Turkiye
|
17 Dec 2005 19:52 hd44780 pic |
|
|
|
|
I'm using Hi-tech PicC-lite compiler,it comes with some sample C codes.The routines in LCD.c work quite fine for 16F84 but when I change to 16F877 with the same pin connections nothing promts on LCD. The code is below....
Thanx in advance...
/*
* LCD interface header file
* See lcd.c for more info
*/
/* write a byte to the LCD in 4 bit mode */
extern void lcd_write(unsigned char);
/* Clear and home the LCD */
extern void lcd_clear(void);
/* write a string of characters to the LCD */
extern void lcd_puts(const char * s);
/* Go to the specified position */
extern void lcd_goto(unsigned char pos);
/* intialize the LCD - call before anything else */
extern void lcd_init(void);
extern void lcd_putch(char);
/* Set the cursor position */
#define lcd_cursor(x) lcd_write(((x)&0x7F)|0x80)
LCD.C
/*
* LCD interface example
* Uses routines from delay.c
* This code will interface to a standard LCD controller
* like the Hitachi HD44780. It uses it in 4 bit mode, with
* the hardware connected as follows (the standard 14 pin
* LCD connector is used):
*
* PORTB bits 0-3 are connected to the LCD data bits 4-7 (high nibble)
* PORTA bit 2 is connected to the LCD RS input (register select)
* PORTA bit 3 is connected to the LCD EN bit (enable)
*
* To use these routines, set up the port I/O (TRISA, TRISB) then
* call lcd_init(), then other routines as required.
*
*/
#include <pic.h>
#include "lcd.h"
#include "delay.h"
static bit LCD_RS @ ((unsigned)&PORTA*8+2); // Register select
static bit LCD_EN @ ((unsigned)&PORTA*8+3); // Enable
#define LCD_STROBE ((LCD_EN = 1),(LCD_EN=0))
/* write a byte to the LCD in 4 bit mode */
void
lcd_write(unsigned char c)
{
PORTB = (PORTB & 0xF0) | (c >> 4);
LCD_STROBE;
PORTB = (PORTB & 0xF0) | (c & 0x0F);
LCD_STROBE;
DelayUs(40);
}
/*
* Clear and home the LCD
*/
void
lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
DelayMs(2);
}
/* write a string of chars to the LCD */
void
lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s)
lcd_write(*s++);
}
/* write one character to the LCD */
void
lcd_putch(char c)
{
LCD_RS = 1; // write characters
PORTB = (PORTB & 0xF0) | (c >> 4);
LCD_STROBE;
PORTB = (PORTB & 0xF0) | (c & 0x0F);
LCD_STROBE;
DelayUs(40);
}
/*
* Go to the specified position
*/
void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(0x80+pos);
}
/* initialise the LCD - put into 4 bit mode */
void
lcd_init(void)
{
LCD_RS = 0; // write control bytes
DelayMs(15); // power on delay
PORTB = 0x3; // attention!
LCD_STROBE;
DelayMs(5);
LCD_STROBE;
DelayUs(100);
LCD_STROBE;
DelayMs(5);
PORTB = 0x2; // set 4 bit mode
LCD_STROBE;
DelayUs(40);
lcd_write(0x28); // 4 bit mode, 1/16 duty, 5x8 font
lcd_write(0x08); // display off
lcd_write(0x0F); // display on, blink curson on
lcd_write(0x06); // entry mode
}
|
|
| Back to top |
|
 |
C-Man
Joined: 19 Jul 2001 Posts: 1235 Helped: 73
|
18 Dec 2005 9:58 hitachi hd44780 |
|
|
|
|
On the 16F877 PORTA is switched to analog input on reset.
If you want to use it as digital I/O you must put this into your init routine:
ADCON1=6;
Check the datasheet ...
hope this helps and best regards
|
|
| Back to top |
|
 |
Google AdSense

|
18 Dec 2005 9:58 Ads |
|
|
|
|
|
|
| Back to top |
|
 |
Jack// ani
Joined: 02 Dec 2004 Posts: 488 Helped: 25
|
18 Dec 2005 17:59 hd44780 2x16 |
|
|
|
|
Hi,
I need C routine in 8bit mode....for 16f84!! Any help...
Thanks
|
|
| Back to top |
|
 |
arash_micro
Joined: 25 Jan 2005 Posts: 92
|
18 Dec 2005 20:33 16f877 lcd |
|
|
|
|
Hi all.
I try to make volt meter with ht-picc on lcd.I solve my problem with lcd but i cant use adc in 10 bit. can you help me.
Here is my project with some change.
|
|
| Back to top |
|
 |
bjerkely
Joined: 26 May 2004 Posts: 92 Helped: 1 Location: Turkiye
|
19 Dec 2005 9:59 pic hd44780 |
|
|
|
|
C-Man wrote:
| Quote: |
If you want to use it as digital I/O you must put this into your init routine:
ADCON1=6;
|
I set the ADCON1 register to 6 but it's no good,nothing promts again...
May anyone give me a link to assembly LCD routines...
Regards
|
|
| Back to top |
|
 |
C-Man
Joined: 19 Jul 2001 Posts: 1235 Helped: 73
|
19 Dec 2005 10:51 lcd 2x16 hitachi |
|
|
|
|
Are you sure the mico is working correctly?
What are your fuse settings?
Which type of oscillator are you using?
Have you tried to get a simle flashing led programm going?
best regards
|
|
| Back to top |
|
 |
arash_micro
Joined: 25 Jan 2005 Posts: 92
|
19 Dec 2005 21:23 hitachi hd44780 lcd |
|
|
|
|
Hi all.
I make 8-ch voltmeter with ht-picc.it works good in proteuse But have some error in real.it works with 4meg xtal and when i change it to 24 meg even lcd doesn't work.
can you help me to change the xtal.
Thanks
|
|
| Back to top |
|
 |
bjerkely
Joined: 26 May 2004 Posts: 92 Helped: 1 Location: Turkiye
|
20 Dec 2005 0:54 hitachi hd44780 lcd controller |
|
|
|
|
I had the same problem,try to change the crystal type in your configuration register
like that __config _HS_OSC & _WDT_OFF & _PWRTE_ON
This helped me...
|
|
| Back to top |
|
 |
arash_micro
Joined: 25 Jan 2005 Posts: 92
|
20 Dec 2005 9:00 16f877 lcd interface |
|
|
|
|
| I have another problem now.when i turn my pic on, the lcd doesn't turn on (in 90% of times),is there another setting t oset this.
|
|
| Back to top |
|
 |
gidimiz
Joined: 03 Feb 2005 Posts: 428 Helped: 77
|
|
| Back to top |
|
 |