View previous topic :: View next topic |
Author |
Message |
spanska Guest
|
Problem with LCD with PICDEM 2 PLUS demo board |
Posted: Mon Mar 06, 2006 9:12 am |
|
|
Hi!
I'm trying to write something on the LCD of that demo board but I have a strange bug. After I plug the power, I just see very light squares on the first line of the LCD. I have to push the reset button to see the "Heelllo!" message on it. Why is it acting that way? SOMETIMES it does show the message just after I put the power but it's quite rare.
Thank you!
Code: |
#include <18f452.h>
#fuses XT,NOWDT,PUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,NOWRT
#use delay (clock = 4000000)
#define LCD_EN PIN_A1
#define LCD_RS PIN_A3
#define LCD_D4 PIN_D0
#define LCD_D5 PIN_D1
#define LCD_D6 PIN_D2
#define LCD_D7 PIN_D3
#define CLEAR_LCD 0x01
#define LINE_1 0x00
#define LINE_2 0x40
void toggle_E()
{
output_high(LCD_EN);
delay_ms(5);
output_low(LCD_EN);
delay_ms(5);
}
void lcd_setdata4bit(unsigned int DX)
{
output_bit(LCD_D4, DX & 0x01);
output_bit(LCD_D5, DX & 0x02);
output_bit(LCD_D6, DX & 0x04);
output_bit(LCD_D7, DX & 0x08);
}
void lcd_init(void)
{
lcd_setdata4bit(0x00);
output_low(LCD_RS);
output_low(LCD_EN);
delay_ms(200); // wait enough time after Vdd rise
lcd_setdata4bit(0x02); toggle_E();
lcd_setdata4bit(0x02); toggle_E(); // function set
lcd_setdata4bit(0x08); toggle_E();
lcd_setdata4bit(0x00); toggle_E(); // cursor settings
lcd_setdata4bit(0x0F); toggle_E();
lcd_setdata4bit(0x00); toggle_E(); // entry mode set
lcd_setdata4bit(0x06); toggle_E();
delay_ms(10);
lcd_setdata4bit(0x00); toggle_E(); // clear display
lcd_setdata4bit(0x01); toggle_E();
delay_ms(10);
}
void lcd_putchar(unsigned int DX)
{
output_high(LCD_RS);
lcd_setdata4bit(swap(DX)); // send high nibble
toggle_E();
lcd_setdata4bit(swap(DX)); // send low nibble
toggle_E();
output_low(LCD_RS);
}
void main(void)
{
delay_ms(1000);
set_tris_a(0b00000000);
set_tris_b(0b00000000);
set_tris_d(0b00000000);
setup_adc(ADC_OFF);
setup_adc_ports(NO_ANALOGS);
lcd_init();
printf(lcd_putchar, "Heelllo!"); // display message
while (1)
{
output_high(PIN_B0);
delay_ms(1000);
output_low(PIN_B0);
delay_ms(1000);
}
}
|
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
|
spanska
Joined: 06 Mar 2006 Posts: 2
|
|
Posted: Mon Mar 06, 2006 1:49 pm |
|
|
Thank you for your reply!
I was actually wondering why mine wasn't working 100% of the time. I worked on it several hours to fix other problems but I still cannot understand why it's acting like that. It's working but why is it doing that right after I put the power and why do I have to use the reset button are questions that'll stay unless I find the problem with it. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Mar 06, 2006 1:52 pm |
|
|
Quote: | why do I have to use the reset button |
Do you still have that problem if you use one of the drivers that I
recommended ? |
|
|
spanska
Joined: 06 Mar 2006 Posts: 2
|
|
Posted: Mon Mar 06, 2006 4:51 pm |
|
|
It works fine with your code. Seems like I made a mistake somewhere in mine!
Thank you for your help |
|
|
|