Sida 1 av 1

LCD - Initieringstider och DB3-DB0 vid 4bit ?

Postat: 29 oktober 2005, 21:22:55
av JimmyAndersson
LCD: Sharp model LM16A211 (16*2) -Inkopplad för "4bit-gränssnitt".
PIC: 18LF2320, 40MHz

När jag kopplade in min LCD så fick jag svarta rutor på rad 1 (som gick att justera bort med kontrast-poten.) Rad 2 var tom hela tiden. Av vad jag läst här på forumet så tyder det på att displayen är rätt kopplad och att det är problem med initieringen. Jag har kopplat en flatkabel med kontakter i båda ändarna och kollat lödningar och jämfört andra scheman, så allt stämmer så långt. Mitt problem är att displayen ständigt är tom. Nu till frågorna:

Fråga 1: När man läser diverse instruktioner och tips vid initiering av displayen, så står det ofta att tiden mellan varje instruktion ska vara minst t.ex 40µs. Men vad är max-tid? Jag testade med 100ms mellan varje instruktion. Är det för lång tid? (Har även testat 40ms, men displayen har varit lika tom ändå.)


Fråga 2: När man läser vissa instruktioner för inkoppling av 4bit-interface så står det att D3, D2, D1 och D0 inte ska kopplas in alls. Men på andra ställen står det att de ska kopplas till jord. Vilket är det som stämmer?

Här står det "kopplas till jord":
http://www.altronix.se/elwiki/pmwiki.ph ... in.HD44780

I bl.a strombom's word-dokument står det att de "inte kopplas in över huvud taget":
http://www.elektronikforumet.com/forum/ ... c.php?t=28

Kan passa på att meddela en liten "bugg" i word-dokumentet ovan: På sid2 står det "D4, D5, D6 och D8". Det ska väl vara D7 istället för D8 ?


Jag har testat båda varianterna, men inte fått ut några tecken. När jag inte kopplar in dem (D3-D0) så får jag iallfall en markör som blinkar, så jag anar att jag är på rätt spår. Men jag vill ändå veta för säkerhetskull.

Postat: 29 oktober 2005, 21:58:26
av sodjan
Tycker att jag känner igen typbeteckningen... :-)

Först, jag har inte haft några problem, varken med egen kod, eller standardkod för HD44780 från "nätet".

Det finns inte någon maxtid mellan olika "instruktioner".
Du kan köra hur långsamt du vill för att debugga det hela.
Du kan faktiskt köra dom "manuellt" med DIP switchar eller liknande.

När det gäller D0-D3 i 4-bits mode, så är det min personliga uppfattning att man kan lämna dom "öppna". Linjerna har pullups internt i HD44780 controllern. Dessutom, om man *läser* från modulen, så kan den lägga ut något på D0-D3, vilket kan komma i konflikt med t.ex en jordning av linjerna.

Eftersom du inte talar om vad du faktiskt gör, så kommer vi nog inte mycket längre just nu... :-)

Postat: 30 oktober 2005, 18:50:30
av JimmyAndersson
Jo, jag gissar att du har sett den displayen förr... :)

Den här uppkopplingen jag gjort är inte till något specifikt projekt. Det är snarare för att lära mig. (När jag bygger eller kodar så brukar jag göra småtester för att tydligare se hur del olika delarna fungerar och om jag behöver ändra något. -Då blir det mycket lättare att göra eventuella felsökningar när projektet kommit längre. Dessutom tycker jag att man ser eventuella bergränsningar då.)

Men jag kan berätta lite mer om vad jag faktiskt gjort. Det finns ju inte så många tankeläsare här direkt... :)

Vi börjar från början:
På displayens anslutningar har jag satt en ISA-kontakt som är nedkapad till 14 poler. Därifrån en flatkabel som går till en kontakt med stift som sitter över RB7-RB0 på PIC18LF2320. Själva kopplingen är lite konstig, men jag tog den från ett exempel i MikroBasic... Ska löda om den till en rakare variant senare i kväll. Men så här är det nu:

PIC DISPLAY
RB7 -
RB6 D4
RB5 D6
RB4 D5
RB3 D7
RB2 E
RB1 RS
RB0 -

Som sagt, inte så logiskt. :shock: Ångrar att jag gjorde så, för det blev svårare att koda. Ska göra en bättre variant och då lär det bli lättare att både programmera och tyda. Förresten: Finns det någon "standard" för hur man brukar koppla displayen till PIC-kretsar (när man kör med 4bitars interface på displayen och använder en port i PIC-kretsen) ?


Idén med DIP-switchar var bra. Ska nog prova den. (Hittade nyss ett simuleringsprogram gjort i javascript som använder den principen, så då kan jag jämföra det med vad som händer på displayen.)


edit: Skriver inget om hur jag kodat. Min knas-koppling skulle ändå göra det onödigt svårt att tyda koden. Ska göra ett nytt program senare i kväll när jag gjort en ny koppling. Men innan dess vore som sagt bra att veta om det finns någon "standard" för hur man brukar koppla från displayen till PIC-kretsen, så min initieringskod blir lättare att förstå för alla andra.

Postat: 30 oktober 2005, 21:35:45
av sodjan
Hej !
Först för lite allmän LCD info.
På sidan nedan finns två dokument (lcd1.pdf och lcd2.pdf) De utgör en bra intro till HD44780 LCD'er i allmänhet. Kanske en av de bästa beskrivningar som har publicerats. Beskriver både 8 och 4 bits hanteringen.

http://www.epemag.wimborne.co.uk/resources.htm

Sen så är din koppling ganska "speciell". De 4 datalinjerna (D4-D7) borde sitta på en hel "halv-port", så att man kan använda swap-instruktionen för att effektivt skriva ut de två halvorna av en byte. (Alltsp swap i assembler, hur man gör det i Basic har jag inte en aning om...)

Det finns knappast någon standard för vilken port eller vilka pinnar man använder till LCD'en. Det kan nog variera från fall till fall.

Postat: 31 oktober 2005, 08:17:32
av JimmyAndersson
Jo det finns swap i MikroBasic också. Men jag gjorde det lite enklare och kopplade in hela porten. Initieringen lyckades och kontrast-potentiometern påverkade nu båda raderna. Men än så länge såg jag ingen text på displayen.

Knappade in min initiering i ett lysande simuleringsprogram ("djlcdsim1", gjort av Dincer Aydin.) Där upptäckte jag att min initieringskod (hämtad från stromboms worddokument) inte skickade någon "display on". När jag lade till den raden i min kod så fungerade allt!

Det var nog frånvaron av "display on" som ställde till det när jag körde 4bit-varianten också. Ska prova det igen, men såhär långt så är jag fullständigt nöjd. 8)