Kan inte få LCD display att fungera

Lysdioder, Optiska sensorer, Fiberoptik, Displayer, Lasrar, Optiska kopplare
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 »

> 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.
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 »

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.
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: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);
		}
}		

jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg 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.
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 »

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.
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 »

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?
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: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.
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 »

> 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 ?
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 »

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?
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg 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();
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 »

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');
ToPNoTCH
Inlägg: 5151
Blev medlem: 21 december 2009, 17:59:48

Re: Kan inte få LCD display att fungera

Inlägg 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.
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg 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.
ToPNoTCH
Inlägg: 5151
Blev medlem: 21 december 2009, 17:59:48

Re: Kan inte få LCD display att fungera

Inlägg 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 ?
jfri
Inlägg: 180
Blev medlem: 1 februari 2010, 21:41:20

Re: Kan inte få LCD display att fungera

Inlägg 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.
Skriv svar