Kan inte få LCD display att fungera
Postat: 22 augusti 2010, 22:38:28
Jag har köpt denna LCD drive
http://www.electrokit.se/opto-display-l ... v_41003720
Försöker nu använda den med en PIC16F690 som är kopplad direkt till de tre kontrollsignalerna E RW RS. Databyten matas via en 74HC595. Genom att mäte direkt på LCD displayens kontakter så ser jag att där finns de spänningar jag förväntar mig. I LCD displayens datablad finns listat ett antal instruktioner som jag försöker använda. Mitt problem är att jag kan inte få någonting att visas på displayen. Den är och förblir helt mörk. Endast genom att vrida upp backlightning kan jag se en rad fyrkanter mycket svagt. Använder Pickit 2 på ett eget kretskort. Jag söker någon form av enkel exempelkod som kan visa något på displayen. Nedan lite exempelkod jag försökt. Först har jag en fördröjning på 15 mS sedan anropar jag först LCDfunction() och sedan LCDonoff() vilken jag förväntar mig skulle visa en blinkande cursor. Vad missar jag?
http://www.electrokit.se/opto-display-l ... v_41003720
Försöker nu använda den med en PIC16F690 som är kopplad direkt till de tre kontrollsignalerna E RW RS. Databyten matas via en 74HC595. Genom att mäte direkt på LCD displayens kontakter så ser jag att där finns de spänningar jag förväntar mig. I LCD displayens datablad finns listat ett antal instruktioner som jag försöker använda. Mitt problem är att jag kan inte få någonting att visas på displayen. Den är och förblir helt mörk. Endast genom att vrida upp backlightning kan jag se en rad fyrkanter mycket svagt. Använder Pickit 2 på ett eget kretskort. Jag söker någon form av enkel exempelkod som kan visa något på displayen. Nedan lite exempelkod jag försökt. Först har jag en fördröjning på 15 mS sedan anropar jag först LCDfunction() och sedan LCDonoff() vilken jag förväntar mig skulle visa en blinkande cursor. Vad missar jag?
Kod: Markera allt
void Load_shiftreg(char data)
{
int i;
printf("char data=%c data=0b",data);
for (i=0;i<8;i++)
{
if (data & 0b00000001)
DS = 1;
else
DS = 0;
data>>=1;
if (DS)
printf("1");
else
printf("0");
SH_CP = 0;
__delay_us(10);
SH_CP = 1;
ST_CP = 0;
__delay_us(10);
ST_CP = 1;
}
ST_CP = 0;
__delay_us(10);
ST_CP = 1;
printf("\n\r");
}
void LCDonoff()
{
char c=0b00001111;
Load_shiftreg(c);
E = 0;
RS=0;
RW=0;
__delay_ms(15);
E=1;
__delay_us(2);
E=0;
do {} while (TRUE);
__delay_us(10);
}
void LCDfunction()
{
char c=0b00111000;
Load_shiftreg(c);
E = 0;
RS=0;
RW=0;
__delay_ms(15);
E=1;
__delay_us(2);
E=0;
__delay_us(60);
}