Kan inte få LCD display att fungera

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Kan inte få LCD display att fungera

Inlägg av jfri »

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?

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);
}
Användarvisningsbild
Klas-Kenny
Inlägg: 11841
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Kan inte få LCD display att fungera

Inlägg av Klas-Kenny »

Nu kan jag inte språket din kod är skriven i och orkar inte fördjupa mig i koden, men har du initierat displayen?
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg av jfri »

Språket är C och jag använder HiTech C lite. Mina båda funktioner LCDfunction och LCDonoff initierar data längd antal rader fonttyp och cursor och sätter på displayen.
Användarvisningsbild
Klas-Kenny
Inlägg: 11841
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Kan inte få LCD display att fungera

Inlägg av Klas-Kenny »

Testat skriva ut något tecken? Kanske bara cursorn som spökar och inte syns?
Jordat (Har jag för mig det är man gör..) kontrast-pinnen?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte få LCD display att fungera

Inlägg av sodjan »

> Endast genom att vrida upp backlightning kan jag se en rad fyrkanter mycket svagt.

Låter som standardläget efter POST men innan man har gjort något mot den.
Det är väl den ena raden som har mörka fyrkanter ?

> Först har jag en fördröjning på 15 mS...

Låter lite kort.

> ...sedan anropar jag först LCDfunction()


> Vad missar jag?

Antagligen att du har för korta delayer innan du försöker initiera displayen.
Sannolikt hinner inte LCD igenom POST innan din kod försöker köra.

En annan sak...

> RW=0;

Varför ? Behöver du även kunna läsa från LCD'n ?
I 9 fall av 10 struntar man i det och lägger bara RW till GND.

Vart skriver den printf() som ligger i koden ?
ToPNoTCH
Inlägg: 5151
Blev medlem: 21 december 2009, 17:59:48

Re: Kan inte få LCD display att fungera

Inlägg av ToPNoTCH »

Nu begriper jag inte C, men det där ser inte ut som en initiering av en HD44780

Har du kollat http://www.elektronikforumet.com/wiki/i ... le=HD44780
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte få LCD display att fungera

Inlägg av sodjan »

> men det där ser inte ut som en initiering av en HD44780

Nej, det gör det ju inte. Antingen är det inte all kod, eller så
vet jfri riktigt vad han håller på med. Jag kollade inte så noga,
men antog att det helt enkelt inte var all kod...
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg av jfri »

15 mS för kort? Nåväl jag tiodubblade det till 150 mS och problemet kvarstår.
printf skriver till datorns serieport och det fungerar.
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg av jfri »

sodjan skrev:> men det där ser inte ut som en initiering av en HD44780

Nej, det gör det ju inte. Antingen är det inte all kod, eller så
vet jfri riktigt vad han håller på med. Jag kollade inte så noga,
men antog att det helt enkelt inte var all kod...
Nej det är inte all kod. Postade bara LCD funktionerna och den funktion som anropas inifrån dessa.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte få LCD display att fungera

Inlägg av sodjan »

OK, så var är din init av LCD'n ?

> printf skriver till datorns serieport och det fungerar.

Det är oklart vad det är du kallar "datorn".
sugarman64
Inlägg: 349
Blev medlem: 24 oktober 2008, 19:40:50
Ort: Lomma

Re: Kan inte få LCD display att fungera

Inlägg av sugarman64 »

Eftersom jag inte är en dängare på C så undrar jag hur denna rad fungerar

Kod: Markera allt

do {} while (TRUE);
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Kan inte få LCD display att fungera

Inlägg av snigelen »

Det betyder: "Gör ingenting så länge TRUE != 0". Dvs programmet stannar där om TRUE är definierat till att vara icke noll. Så det är nog inte så bra att ha i det här fallet...
sugarman64
Inlägg: 349
Blev medlem: 24 oktober 2008, 19:40:50
Ort: Lomma

Re: Kan inte få LCD display att fungera

Inlägg av sugarman64 »

OK. Var väl det svar jag väntat mig. Nu är ju visserligen inte all kod bifogad men jag undrade lite hur man tar sig ifrån den där loopen. Eftersom det inte finns några statements mellan klammrarna.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Kan inte få LCD display att fungera

Inlägg av sodjan »

> Så det är nog inte så bra att ha i det här fallet...

Tja, vi vet ju inte syftet med den där koden. Eftersom det hela är
ihophafsat utan vettiga kommenterar så blir det bara gissningar.
Dock så ser det ju lite underligt ut med en delay *efter* loopen...

> men jag undrade lite hur man tar sig ifrån den där loopen.

Det finns flera sätt. Interrupt, brownout och/eller watchdog-timeout t.ex.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Kan inte få LCD display att fungera

Inlägg av jesse »

Det var ju inte den bäst kommenterade koden direkt. Vad är det meningen att funktionen LCDonoff() ska göra egentligen? Namnet på funktionen är lite dubbeltydigt? Sätt på och stäng sedan av? Hur som hest så är det ju klart att när man väl kommit dit så kommer du inte längre - du fastnar i do-while-satsen... Men ditt största problem är nog det som redan påpekats: Du måste initiera displayen först. Kolla TOpnOtch's länk ovan!
Skriv svar