Sida 2 av 3

Re: Kan inte få LCD display att fungera

Postat: 23 augusti 2010, 13:28:21
av snigelen
> Tja, vi vet ju inte syftet med den där koden. Eftersom det hela är
> ihophafsat utan vettiga kommenterar så blir det bara gissningar.

Ja, det var därför jag avstod från vidare spekulation.

> Dock så ser det ju lite underligt ut med en delay *efter* loopen...

Jo, onekligen.

Re: Kan inte få LCD display att fungera

Postat: 23 augusti 2010, 14:44:34
av sugarman64
sodjan skrev: > 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.
Jo, det förstås. De två sista känns ganska osannolika (fast definitivt möjliga). Tror jag ska sluta spekulera i detta ärende tills trådskaparen kommit med lite mera fakta.

Re: Kan inte få LCD display att fungera

Postat: 23 augusti 2010, 16:20:59
av jfri
sodjan skrev: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".
Jag trodde tillräcklig initiering fanns i mina båda funktioner. Här har jag dock förstått att så inte är fallet. Efter att ha tittat på wiki länken som gavs ovan har jag nu gjort en init funktion som anropas efter fördröjningen på 190 mS. Efter det försöker jag sätta på displayen och cursorn och skriva ett tecken. Men det fungerar fortfarande inte.
(med datorn avses min PC där ett terminalprogram visar vad som skickas ut på serieporten)

Kod: Markera allt

void	LCDinit()
{
	char c[7] = {0x30, 0x30, 0x30, 0x38, 0x08, 0x01, 0x06};
	int	i;

	E = 0;
	RS=0;
	RW=0;
	__delay_ms(15);
	for (i=0;i<7;i++)
		{
		Load_shiftreg(c[i]);
		__delay_ms(15);
		E=1;
		__delay_us(2);
		E=0;
		__delay_ms(5);
		}
}		


Re: Kan inte få LCD display att fungera

Postat: 23 augusti 2010, 16:28:28
av jfri
snigelen skrev:> Tja, vi vet ju inte syftet med den där koden. Eftersom det hela är
> ihophafsat utan vettiga kommenterar så blir det bara gissningar.

Ja, det var därför jag avstod från vidare spekulation.

> Dock så ser det ju lite underligt ut med en delay *efter* loopen...

Jo, onekligen.
Syftet med den där loopen är att tillfälligt stanna programmet i en punkt där jag försökt göra något med LCD displayen. De delar av programmet som kommer efter den läser ADC och behövs inte när jag testar LCD displayen. Vill just nu pausa programmet när jag är klar med LCDn.

Re: Kan inte få LCD display att fungera

Postat: 23 augusti 2010, 16:37:00
av sodjan
Du behöver backa tillbaka lite och undersöka närmare vad som händer.
Gör ett litet brute-force program som kör mer "direkt" mot LCD'n för att verifiera.
*Vet* du att din Load_shiftreg() fungerar som den ska ?
Har du tidigare använt en LCD mer normalt, utan shiftregister ?
Låter du allt stabilisera i någon sekund eller så efter power-on ?

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

Det ska inte vara "mycket svagt". Låter som att du har fel kontrastspänning.
Å andra sidan så ligger den tydligen kvar i POST mode i alla fall...

> Syftet med den där loopen...

*SKA* framgå av kommentarerna i koden !
Är det av någon speciell anledning som det hela är helt okommenterat ?
Förrutom den naturliga/vanliga orsaken alltså (lathet).

> ...och behövs inte när jag testar LCD displayen.

Och då ska de inte heller vara med i en testprogram för LCD'n.
Du måste skala ner till du bara har den mest fundamentala som ska behövas
för att köra just LCD'n. När *det* fungerar kan du gå tillbaka till din "applikation"
och göra de justeringar som behövs. Alltså vanlig felsökning enligt kurs 1A.

Re: Kan inte få LCD display att fungera

Postat: 23 augusti 2010, 17:21:30
av jesse
RS ska vara etta när du skickar en instruktion.
I LCDinit() har du satt RS = 0;
då händer inget.

Sen om du ska skriva ett tecken till displayen så ska RS vara nolla.
Hur anropar du funktionerna?
Försöker du skriva ut något tecken?

Har du veriferat att shiftregistret får in databitarna i rätt ordning och att datan når displayens pinnar?

Re: Kan inte få LCD display att fungera

Postat: 24 augusti 2010, 01:15:11
av jfri
sodjan skrev:Du behöver backa tillbaka lite och undersöka närmare vad som händer.
Gör ett litet brute-force program som kör mer "direkt" mot LCD'n för att verifiera.
*Vet* du att din Load_shiftreg() fungerar som den ska ?
Har du tidigare använt en LCD mer normalt, utan shiftregister ?
Låter du allt stabilisera i någon sekund eller så efter power-on ?

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

Det ska inte vara "mycket svagt". Låter som att du har fel kontrastspänning.
Å andra sidan så ligger den tydligen kvar i POST mode i alla fall...

> Syftet med den där loopen...

*SKA* framgå av kommentarerna i koden !
Är det av någon speciell anledning som det hela är helt okommenterat ?
Förrutom den naturliga/vanliga orsaken alltså (lathet).

> ...och behövs inte när jag testar LCD displayen.

Och då ska de inte heller vara med i en testprogram för LCD'n.
Du måste skala ner till du bara har den mest fundamentala som ska behövas
för att köra just LCD'n. När *det* fungerar kan du gå tillbaka till din "applikation"
och göra de justeringar som behövs. Alltså vanlig felsökning enligt kurs 1A.
Hittade ett fel i shiftreg() och korrigerade det. Och det är kontrast inte backlightning som jag vred upp. En sak har nu kunnat ändras. Genom att skicka ett kommando för att använda två rader så har nu båda rader fyrkanter. Så det verkar som om intioering skett och ett kommando kunnat skickas. Men cursor eller utskrivet tecken lyser med sin frånvaro.

Re: Kan inte få LCD display att fungera

Postat: 24 augusti 2010, 10:29:22
av sodjan
> Och det är kontrast inte backlightning som jag vred upp.

Det ska fortfarande inte vara "mycket svagt".
Och kontrasten är normalt inget man "vrider upp", man ställer
den för bästa synlighet (d.v.s "kontrast") helt enkelt.

Sen så är ju hela detta ganska meningslöst när du inte heller
kommenterar jesses synpunkt på hanteringen av RS.
Varför ska vi/någon skriva förslag/synpunkter om de inte läses ?

Re: Kan inte få LCD display att fungera

Postat: 24 augusti 2010, 16:53:55
av Klas-Kenny
De där med två rader fulla med fyrkanter har jag haft problem med, felet vart för korta väntetider någonstans i initieringen.

Sodjan: När man vrider upp kontrasten kan ju de "Avstängda" pixlarna synas svagt, kan vara det han menar?

Re: Kan inte få LCD display att fungera

Postat: 24 augusti 2010, 19:27:53
av jfri
jesse skrev:RS ska vara etta när du skickar en instruktion.
I LCDinit() har du satt RS = 0;
då händer inget.

Sen om du ska skriva ett tecken till displayen så ska RS vara nolla.
Hur anropar du funktionerna?
Försöker du skriva ut något tecken?

Har du veriferat att shiftregistret får in databitarna i rätt ordning och att datan når displayens pinnar?
Inte enligt databladet till LCD displayen. Under instruction table listas RS som 0 för de olika instruktionerna samt 1 för Write/(Read) data to address/from RAM. Likaså
i wiki länken given tidigare står det
'4 RS 0 = instruktion, 1 = data'
'Nu är vi redo att skiva text på displayen! När man skriver text ska RS vara 1.'
Ja har verifierat att shiftregistret matar ut rätt data genom att mäta med multimeter direkt på LCD displayens kontakter.
Jag anropar funktionerna genom att sätta RS och RW till 0. Och sedan anropa Load_shiftreg med den byte som behövs enligt databladet. Sedan skapa en E puls.
Ja försöker skriva ut 'U' genom

Kod: Markera allt

	char	c=0b01010101;				//'U'

	Load_shiftreg(c);					//Print 'U'
	LCD_print();

Re: Kan inte få LCD display att fungera

Postat: 24 augusti 2010, 21:51:41
av jesse
Måste ha läst fel :oops: Men nu har du i alla fall dubbelkollat den saken! :)

Men det är ju helt omöjligt att veta vad du gör för fel när du inte skriver ut hela koden. Du har ju inte ens med när/hur du anropar de olika funktionerna.

Och kommentarer! Kommentarerna är lika viktiga som koden - utan den kan du inte få nån bra hjälp, och dessutom kan det till och med vara så att du själv upptäcker vad du gör för fel om du sätter dig och skriver kommentarer.

Sen borde det väl vara lämpligt att ha en funktion för att skicka en instruktion till LCD-n. Nu snickrar du ihop det i initieringsloopen. Och sen gör du en motsvarande funktion där du skickar data till LCD:n. Så att du sedan kan skriva:

LCD_send_instruction(CURSOR_ON);
LCD_send_character('A');

Re: Kan inte få LCD display att fungera

Postat: 24 augusti 2010, 22:12:24
av ToPNoTCH
jfri skrev:Men det fungerar fortfarande inte.
(med datorn avses min PC där ett terminalprogram visar vad som skickas ut på serieporten)
Jag måste säga att jag är lite osäker på vad du egentligen gör.

LCD'n vill ha data parallellt och, du talar om PC'n en seriport där du verifierar informationen.

Vad är det som skickar data till din LCD och när blir denna data parallell ?

Jag såg att du mätt på lödningarna till LCD'n och verifierat, men det känns som du bara beskriver en väldigt liten del av det du håller på med.

Om du lade in hela koden samt hur du kopplat ihop saker och ting fysiskt så är det mycket större sannolikhet att någon kan hjälpa dig.

Re: Kan inte få LCD display att fungera

Postat: 24 augusti 2010, 23:46:42
av jfri
jesse skrev:Måste ha läst fel :oops: Men nu har du i alla fall dubbelkollat den saken! :)

Men det är ju helt omöjligt att veta vad du gör för fel när du inte skriver ut hela koden. Du har ju inte ens med när/hur du anropar de olika funktionerna.

Och kommentarer! Kommentarerna är lika viktiga som koden - utan den kan du inte få nån bra hjälp, och dessutom kan det till och med vara så att du själv upptäcker vad du gör för fel om du sätter dig och skriver kommentarer.

Sen borde det väl vara lämpligt att ha en funktion för att skicka en instruktion till LCD-n. Nu snickrar du ihop det i initieringsloopen. Och sen gör du en motsvarande funktion där du skickar data till LCD:n. Så att du sedan kan skriva:

LCD_send_instruction(CURSOR_ON);
LCD_send_character('A');
Inte för att jag förstår hur men nu ser jag faktiskt att ett U skrives ut och att cursorn blinkar. Dock en sak er fel och det verkar vara hårdvaruinriktat. Texten är alldeles för svag. Den är svagt mörkgrön liksom de förut beskrivna fyrkanterna. Det ska ju vara starka tydliga vita tecken enligt produkt bilden.

Re: Kan inte få LCD display att fungera

Postat: 25 augusti 2010, 00:27:37
av ToPNoTCH
Du har helt klart problem med kontrasten.

En del displayer förutsätter negativ spänning för kontrastreglering.

Kontrollera exakt hur det hanteras på din display.

EDIT: Jag kollade själv och din display skall ha positiv kontrast. Vad har du kopplat på V0 ?

Re: Kan inte få LCD display att fungera

Postat: 25 augusti 2010, 18:52:21
av jfri
Ja kontrasten har definitivt med saken att göra. Jag har kopplat en trimpot på 20k till VDD VO VSS precis enligt contrast adjust figuren sid 2/9 i extended datasheet. När jag vrider denna trimpot till ena ändläget så syns de svaga fyrkanterna men inte tecknet (därför har jag missat det tidigare). Måste vrida ner poten något för att tecken ska synas vilket det då gör mycket svagt. Vrider jag ner trim poten ännu mer försvinner tecknet. När jag ser det som tydligast har jag cirka 0.5 V på VO. Då har jag strömförsörjning från PICkit 2. Om jag spännings matar externt kan jag få tecknet något tydligare med 1.3 V på VO.