Exempelkod i asm för 4x16 lcd/HD44780 efterlyses [Löst]
Exempelkod i asm för 4x16 lcd/HD44780 efterlyses [Löst]
Sitter här och försöker få liv i en HD44780-kompatibel 16x4 lcd, Powertip 1604X, med 4 bit interface, direkt kopplad till en PIC16F886. Datablad
Detta är första gången jag försöker mig på att labba med en lcd. Jag har provat Sodjans kod, men den är för en 16x2 lcd. Vid strömpåslag är varannan rad svart, och sedan rensas skärmen, så vad jag förstår passeras åtminstone initialiseringen. Jag greppar inte riktigt vad jag ska ändra för att få den att fungera med min 4-radare. Känns som det har med adresseringen av rad 3 och 4 att göra, men borde inte något visa sig på rad 1 och 2 ändå?
Finns det någon vänlig själ som har lust att kolla på Sodjans exempel och säga vad som behöver ändras för att exemplet ska funka rakt av med 16x4?
Detta är första gången jag försöker mig på att labba med en lcd. Jag har provat Sodjans kod, men den är för en 16x2 lcd. Vid strömpåslag är varannan rad svart, och sedan rensas skärmen, så vad jag förstår passeras åtminstone initialiseringen. Jag greppar inte riktigt vad jag ska ändra för att få den att fungera med min 4-radare. Känns som det har med adresseringen av rad 3 och 4 att göra, men borde inte något visa sig på rad 1 och 2 ändå?
Finns det någon vänlig själ som har lust att kolla på Sodjans exempel och säga vad som behöver ändras för att exemplet ska funka rakt av med 16x4?
Senast redigerad av korp 22 januari 2008, 15:49:02, redigerad totalt 1 gång.
Utan att ha kollat med sodjans kod kan jag svara: När teckenbakgrunden blir "jämt grå" är det initierat rätt, sedan är det bara att skicka tecken.
Vad som kanske inte framgår är att den räknar/kan räkna liiiiite konstigt i raderna:
Rad1 pos 1 är "adress" 001
Rad2 pos 1 är "adress" 041
Rad3 pos 1 är "adress" 021
Rad4 pos 1 är "adress" 061
(adresserna: se sid 40 i databladet, "Set DDRAM address")
Detta betyder att man får "fibbla lite" för att få allting till att falla på plats.
Ovanstående adresser är inte nödvändigtvis korrekta men representerar en idé om hur det KAN se ut, du får helt enkelt testa dig fram.
Vad som kanske inte framgår är att den räknar/kan räkna liiiiite konstigt i raderna:
Rad1 pos 1 är "adress" 001
Rad2 pos 1 är "adress" 041
Rad3 pos 1 är "adress" 021
Rad4 pos 1 är "adress" 061
(adresserna: se sid 40 i databladet, "Set DDRAM address")
Detta betyder att man får "fibbla lite" för att få allting till att falla på plats.
Ovanstående adresser är inte nödvändigtvis korrekta men representerar en idé om hur det KAN se ut, du får helt enkelt testa dig fram.
Jag har kollat och dubbelkollat 4-bit interfacet och det ser okay ut. Drar jag ur någon av kablarna i interfacet så passeras heller inte initialiseringen, utan lcd:n stannar med varannan rad svart. Detta borde tyda på att åtminstone den biten är rätt inkopplad.
Jag kan posta mitt kopplingschema när jag kommer hem ikväll. Verkligen tacksam för hjälpen.
Jag kan posta mitt kopplingschema när jag kommer hem ikväll. Verkligen tacksam för hjälpen.
Jag har kopplat enligt kommentarerna i exempelkoden, dvs;
Enable till RA0, RS till RA1, D4 till RA4, D5 till RA5, D6 till RA6, D7 till RA7, R/W till GND. Sedan har jag en 50 Kohm pot ansluten till VCC, VO och GND. LCD och PIC16F886 matas av gemensam 5V från labbaggregat.
Icecap: Japp, jag skrev att skärmen rensas, men det stämmer bättre att den blir jämngrå när jag skruvar upp kontrasten lite. Samtliga teckenpositioner är "fyllda". Inte svarta som varannan rad före initialisering, men fyllda med ca 50% intensitet.
Enable till RA0, RS till RA1, D4 till RA4, D5 till RA5, D6 till RA6, D7 till RA7, R/W till GND. Sedan har jag en 50 Kohm pot ansluten till VCC, VO och GND. LCD och PIC16F886 matas av gemensam 5V från labbaggregat.
Icecap: Japp, jag skrev att skärmen rensas, men det stämmer bättre att den blir jämngrå när jag skruvar upp kontrasten lite. Samtliga teckenpositioner är "fyllda". Inte svarta som varannan rad före initialisering, men fyllda med ca 50% intensitet.
Exakt modell är PC1604LRU-XWA-B-P1
P=Powertip products
C=Teckenmodul
16=Tecken per rad
04=Rader
L=LED bakgrundsbelysning, gul-grön
R=Standardkontakt
U=(LCD typ+färg) STN positiv, gul-grön
X=Modellnamn
WA=Engelska/japanska tecken
B=("Polariseringstyp"/LCD temperaturområde/betraktningsvinkel) Transflektiv, Normal temp, 6:00 riktning
P1=Specialkod (=Osynliga tecken?
)
P=Powertip products
C=Teckenmodul
16=Tecken per rad
04=Rader
L=LED bakgrundsbelysning, gul-grön
R=Standardkontakt
U=(LCD typ+färg) STN positiv, gul-grön
X=Modellnamn
WA=Engelska/japanska tecken
B=("Polariseringstyp"/LCD temperaturområde/betraktningsvinkel) Transflektiv, Normal temp, 6:00 riktning
P1=Specialkod (=Osynliga tecken?

Beställde en vanligare 2-radig LCD idag, så jag lättare kan få bekräftat att min inkoppling fungerar/inte fungerar. Till de finns ju iaf ordentligt med exempel att testa. Värdelöst att sitta här och slita sitt hår när LCD:n kan vara kaputt.
Troligen svårt att få byta 4-radaren om det är fel på den. Jag köper ofta på mig grejer "som kan vara bra att ha", och efter ett år är det surt om grejorna är "dead on arrival"
Troligen svårt att få byta 4-radaren om det är fel på den. Jag köper ofta på mig grejer "som kan vara bra att ha", och efter ett år är det surt om grejorna är "dead on arrival"

Kolla att du fått timingen rätt (altså pausen/delayen mellan kommandona). Jag skrev min LCD-rutin själv(för en gammal LCD display, inte samma som du har) och hade ett helskotta innan jag hittade att delayen var fel på ett par ställen. Nu borde väl iofs Sodjans kod funka rakt av, men jag vet inte om du fipplat i koden själv också. 
Dessutom beroende på om man väljer 1 eller 2-raders mode (Function set) så skiljer det mycket i kontrast. Trodde ett tag 2-raders mode inte funkade på min för att jag inte såg någon text, tills jag fipplade med kontrasten.

Dessutom beroende på om man väljer 1 eller 2-raders mode (Function set) så skiljer det mycket i kontrast. Trodde ett tag 2-raders mode inte funkade på min för att jag inte såg någon text, tills jag fipplade med kontrasten.
Mail en adress så postar jag en enkel 16x2 LCD i morgon.
Det är en Sharp med original Hitachi 44780 controller.
Jag har aldrig haft några problem med den med olika
testkoder (egna eller från nätet). Jag har t.ex kört en färdig
HEX fil från Wouter van Ooijen på många olika LCD'er.
Kolla på : http://www.voti.nl/dwarf/index.html
En bit ner, leta efter DN008.hex. Inkopplingen finns i DB017.pdf.
Bara om du vill ha ett testprogram till...
Som sagt mail bara en adress så kommer det en till helgen.
Jag skickar den, jag vill inte ha något för den och du
kan behålla den...
Det är en Sharp med original Hitachi 44780 controller.
Jag har aldrig haft några problem med den med olika
testkoder (egna eller från nätet). Jag har t.ex kört en färdig
HEX fil från Wouter van Ooijen på många olika LCD'er.
Kolla på : http://www.voti.nl/dwarf/index.html
En bit ner, leta efter DN008.hex. Inkopplingen finns i DB017.pdf.
Bara om du vill ha ett testprogram till...
Som sagt mail bara en adress så kommer det en till helgen.
Jag skickar den, jag vill inte ha något för den och du
kan behålla den...
Sodjan, jag fick grejorna idag och lödde på en pinheader direkt under lunchen. Dock uppvisade den nya LCD:n samma problem, så jag kunde iaf halvt konstatera att det är något vajs med min koppling, vilket i själva verket var uppmuntrande.
Rev precis kopplingen och satte upp det hela igen och då såg jag vad jag hade gjort för fel. RA0-RA5 på PIC16F886 är ju i ordning, motsvarande samma stigning på PIC:ens pin-numrering, men jag hade missat att RA7 och RA6 har omvänd ordning. Jag hade alltså kopplat RA6 till D7 och RA7 till D6. Jag har ju för tusan kollat flera gånger utan att upptäcka det
Ställer mig i skamvrån...
Därmed passerades LCD:ns initialisering, även om bitarna var omkastade på de positioner som motsvarar D6 och D7.
Nu fungerar det med både den LCD jag fick från dig, och min ursprungliga 4-radare (har inte testat alla rader än men det syns iaf text).
Ett stort tack för hjälpen, och tiden du la ner på mitt slarv!
Notering till mig själv: Fungerar det inte? Riv skiten. Läs databladet. Gör om. Gör rätt.
Rev precis kopplingen och satte upp det hela igen och då såg jag vad jag hade gjort för fel. RA0-RA5 på PIC16F886 är ju i ordning, motsvarande samma stigning på PIC:ens pin-numrering, men jag hade missat att RA7 och RA6 har omvänd ordning. Jag hade alltså kopplat RA6 till D7 och RA7 till D6. Jag har ju för tusan kollat flera gånger utan att upptäcka det

Därmed passerades LCD:ns initialisering, även om bitarna var omkastade på de positioner som motsvarar D6 och D7.

Ett stort tack för hjälpen, och tiden du la ner på mitt slarv!
Notering till mig själv: Fungerar det inte? Riv skiten. Läs databladet. Gör om. Gör rätt.