Archiv verlassen und diese Seite im Standarddesign anzeigen : Display ansteuern
Import-Script
06.03.2004, 20:24
hi wer kann mir helfen ?? will einfach nur ein display ansteuern, <BR>( Genaue Bezeichnung : LC - Display: L404200J00A ) hab ich mal bei pollin erstanden...) <BR> <BR>2 Zeilen x 40 Zeichen <BR>industriestandart-kompatibel <BR> <BR>....also zu meinem problem ......es geht eigentlich nix :-( <BR>hab die Kontrasteinstellung aufgebaut ...und wenn ich den rechner <BR>starte dann sehe ich schon was auf dem display ...in der ersten zeile sind alle <BR>zeichen schwarz .....( also ich seh schon falls sich da was tun würde ) <BR>ok jetzt zum programmieren .......bei dem display ist ein datenblatt dabeigelegen : <BR>*ansteuerung von industriestandart - Text - LC - Displays <BR> <BR>fall's sich's jemand anschaun will, ich schick's gern : <BR> <a href="mailto:chris.home@web.de">chris.home@web.de</a> <BR> <BR>....da steht eben so ne standartvorgehensweise drauf ........ich hab das mal veruscht <BR>in ein Programm zu packen...aber bitte zerreist mich net gleich in der luft ....... <BR>weis selber dass es nicht gut is aber will nur mal grundsätzlich versteh wie das funktioniert ...... <BR> <BR>__________________________________________________ ___________________________________ <BR> <BR>program display; <BR>uses crt; <BR> <BR>Const LPT=888; <BR> <BR>Begin <BR>clrscr; <BR> delay (100); <BR> Port[LPT+2]:= $30; <BR> delay(50); <BR> Port[LPT+2]:=$30 ; <BR> delay(50); <BR> Port[LPT+2]:=$30; <BR> <BR> Port[LPT+2] := $38; {system set } <BR> Port [LPT+2]:=1; { enable = 1 } <BR> delay(100); <BR>{Z15}Port[LPT]:= 13; {display ein } <BR> Port[LPT+2]:=0; { enable = 0 da daten bei fallender flanke von E übernommen werden } <BR> delay(100); <BR> Port[LPT+2]:=1; { enable = 1 } <BR> delay(100); <BR>{Z20}Port [LPT] := 1; { anzeige löschen } <BR> Port[LPT+2]:=0; { enable = 0 da daten bei fallender flanke von E übernommen werden } <BR> delay(100); <BR> Port[LPT+2]:=1; <BR> Port [LPT]:=2; <BR> delay(100); <BR> port[LPt+2]:=0; <BR> delay(100); <BR> Port[LPT]:= 10; <BR> Port[LPT+2]:=1; <BR> repeat until keypressed; <BR>end. <BR> <BR>__________________________________________________ __________________________________________- <BR> <BR>......also wenn ich das Programm so aufrufe passiert nix , keine reaktion auf dem display .... <BR>.( eigentlich müsst dass schon gelöscht sein Zeile 20 [LPT]:= 1, und davor hab ich versuchsweise Zeile 15 : [LPT] :=8 getestet ( {display aus } <BR>...kann mir da jemand weiterhelfen ?? ....danke chris <BR> <BR> <BR> <BR>
Import-Script
06.03.2004, 23:04
also wenn Du schon so viele Delays einbaust, dann bitte definierte, also "Delay1ms" z.B. <BR>Sonst läuft es auf dem einen Rechner, auf dem anderen nicht (weil Hyperthreading oder sonstwas Dein Timing in den Harz kicken). <BR>Tipp: Einen Dummy Zugriff auf bekannten ISA-Port, z.B. Statusregister von COM1 lesen. Die gibt es überall und da kommt eine "South-Nordwestbridge" auf dem gierigsten Gamer-PC nicht vorbei, das mit 8 MHz abzuwickeln. <BR>Also wenn "dirty" dann: 8 MHz: for i:= 1 to 1000 do dummy:= port[$3f8]; oder sowas... <BR>Auf jeden Fall nicht wie in den vorletzten Zeilen: <BR>"mal das Delay weglassen". Wenn Das Teil timingmässig überfordert ist, dann damit auf jeden Fall. <BR>Ansonsten "Kabelage" beachten, vgl. Prommer-Probs: <BR>"Huch, mit 40cm geht´s???" mit 2m nicht!!! <BR> <BR>Du hast ein Timing-Prob in erster Linie <img src="http://progshop.com/elektronik/diskussion/clipart/smile.gif" border=0>
Import-Script
07.03.2004, 20:57
wie definier ich denn die delays ...sorry hab keine ahnung ...?? ... <BR>chris
Import-Script
08.03.2004, 11:22
Mit den Delays geht das schon. <BR>Habe mal auf nem 1.2GHz Athlon ein HDxxxx Display am Parport angesteuert und das waren Delays von 5-20ms.. <BR> <BR>Sicherheitshalber kannst du auch die Delays mal hochsetzen, so auf 500ms oder ähnlich, damit kannst du erstmal timingprobleme ausschliessen. <BR> <BR>aber ich befürchte da was anderes: <BR>was für ein betriebssystem fährst du? <BR>das port array funktioniert unter Win2k/NT/XP nämlich nicht!!! <BR>da musst du mit ner Systemschnittstelle ran (auf <a href="http://www.torry.net" target=_top>www.torry.net</a> gibts da units für). <BR> <BR>oder mal ganz einfach: <BR>spricht der logiktester an deinem parport was, wenn du das programm startest? beispiel: pegelwechsel von E1 oder so...
Import-Script
09.03.2004, 00:13
also ....dann werd ich das mal mit 500ms versuchen ..... <BR>hab nen 486 mit DOS 6,22 ....also da kanns auch net drann liegen .... <BR>und die schnittstelle hab ich auch schon getestet , is die richtige und led 's blinken .... <BR>.... <BR> was gibts denn sonst noch warum 's net gehn könnt ?? <BR> danke <BR> chris
Import-Script
11.03.2004, 14:04
486er? lass die delays wie sie sind, sonst wartest du dich zu tode... <BR>delayprobleme bei deinen 100ms bekommst da nicht. <BR>du kannst sogar für die initialisation auf 25ms runtergehen. <BR>wenn du später mal text ins display schreibst dann kannst du die pause zwischen den bytes auf 1ms setzen, das langt allemal... <BR> <BR>achja... nochwas: das mit der fallenden flanke stimmt oft nicht, habe schon zwei verschiedene displays hier gehabt und eines hat bei fallender und das andere bei steigender flanke von E1 die Daten übernommen! <BR> <BR>andernfalls kann es sein, dass du RS und RW vertauscht hast oder die Datenleitungen verkehrtrum angeschlossen hast. <BR>etwas anderes kann ich mir nicht vorstellen. <BR> <BR>Wenn das Display korrekt initialisiert wurde, dann verschwindet übrigens auch der schwarze Balken!
Import-Script
13.03.2004, 23:14
....also hab grad nochmal alles vorgeschlagene durchprobiert und durchgeschaut ob was falsch angeschlossen ist ...immer mit der selben reaktion ..esa tut sich nix ....die Leitung is grad mal 20 cm lang zu dem display ..... <BR>..weis net was ich noch so ausprobieren soll ...hab schon sogar ne 2te schnittstellenkarte eingebaut ...da tut sich aber auch nix :-( ...... <BR>chris
Unregistriert
08.10.2004, 02:48
Wenn ich das hier so lese fallen mir meine Probleme mit LCD ein.
Was hab ich nich alles versucht, an den Timing gedreht 4-wire, 8-wire - alles nix geholfen, bis ich dann bemerkt habe das der Kontrast soweit aufgedreht war, das nur noch schwarze Balken zu sehen waren...
oo
!
( )
Steffen
DataMouse
02.01.2005, 19:21
Hi Chris,
hatte vor kurzem das selbe Problem:
Ein LCD aus dem Betriebs-Müll gefischt und es rührte sich nicht - in der ersten Zeile nur Balken.
An deinem Code fallen mir mal die folgenden 'Fehler' auf:
- LPT:=888?!? Also bei allen meinen PCs hat der LPT-Port die Adresse 378.
- Die Steuer-Eingänge sind (zumindest bei meinem LPT) negiert. Das heisst, alle Bits stehen auf '1', wenn du z.B. das Bitmuster '00000000' (also '0') ausgibst!
(Ich hab das alles in deinem Programm - siehe unten - nochmal dazugeschrieben! Da stehen auch noch weitere Dinge dabei...)
Noch ein paar weitere Infos:
Ich nutze ebenfalls einen 486er (40MHz und Windows95) für meine Versuche. Das Windows stört mein Programm am LPT nicht, da ich keinen Drucker an LPT1 installiert habe. Das LCD hat 2x16 Zeichen (kann aber 2x40 Zeichen speichern) und stammt wie schon erwähnt aus dem Müll... :o)
Das Datenblatt für mein LCD fand ich im Internet nach wenigen Minuten suchen (Google.de) - hatte einfach nach dem Typ gesucht.
Nach weiterem Suchen fand ich die 'Instructions'-Liste mit den Befehlen, die spezielle Funktionen steuern (Cursor-Position, Display ON/OFF, Speicheradresse wählen, ...) - das ist wohl bei vielen Displays gleich.
Hier dein Code mit meinem Korrektur-Infos - ich hoffe, man kann es einigermassen lesen... ;)
-------------------------
program display;
uses crt;
Const LPT=888; {LPT hat die Adresse 378}
Begin
clrscr;
{Das folgende habe ich in meinem Code gar nicht drin - was soll das denn sein?}
delay (100);
Port[LPT+2]:= $30;
delay(50);
Port[LPT+2]:=$30 ;
delay(50);
Port[LPT+2]:=$30;
Port[LPT+2] := $38; {system set }
{Ab hier ist der Code wieder meinem ähnlich nur sind deine Steuerbits nicht negiert!
Ich weiss nicht, wie du deine Steuerbits angeschlossen hast. Also ich habe enable das niederwertigste Bit gegeben, für R/W das nächst höhere und für RS wieder eins höher. Darauf beziehe ich mich auch in den 'Korrekturen'!}
Port [LPT+2]:=1; { enable = 1 } {Da negiert: enable=6}
delay(100); {Bei mir würde das sehr lange dauern, da er ja nach jedem Zeichen 100ms warten würde. Ich schätze du verwendest einen 486er mit 66MHz, daher würde ich mal so 2 bis 3 ms empfehlen}
{Z15}Port[LPT]:= 13; {display ein } {Ich hab 12 (ohne Blinkenden Cursor), aber funktioniert so auch}
{Hier endet die Initialisierung und es geht an die Text-Ausgabe}
Port[LPT+2]:=0; { enable = 0 da daten bei fallender flanke von E übernommen werden } {Ja, bei fallender Flanke, daher hier eine 7 (negiert)}
delay(100);
Port[LPT+2]:=1; { enable = 1 }
delay(100);
{Z20}Port [LPT] := 1; { anzeige löschen } {Darauf habe ich selbst verzichtet, da ich eine Uhr anzeige und das gäbe ein geflacker - stattdessen habe ich hier 2 verwendet, um nur an den Anfang zurückzuspringen. Wenn du dann wieder was schreibst, werden die zeichen einfach überschrieben.}
Port[LPT+2]:=0; { enable = 0 da daten bei fallender flanke von E übernommen werden } {siehe oben - negiert!}
delay(100);
Port[LPT+2]:=1; {auch hier wieder 6}
Port [LPT]:=2;
delay(100);
port[LPt+2]:=0; {setzt alle Bits auf '1' - für negative Flange von enable daher 7}
delay(100);
Port[LPT]:= 10; {Ich habe mit einem 'A' getestet: Code 65.}
Port[LPT+2]:=1;
repeat until keypressed;
end.
---------------------------------
Ich hoffe das hilft dir mal weiter - sonst einfach nochmal posten!
Oder meld dich per Mail (Eindeutiger Betreff, da sonst die Gefahr besteht, dass die Mail vom SPAM-Filter aussortiert wird!): mausi20*uni*de
(Sternchen durch ein @ und . ersetzen - hab ich so geschrieben, um es vor SPAM-Bots zu verstecken. Sorry, aber bin etwas genervt von den Mails und versuche, die zu begrenzen... *g*)
Ach ja:
Ich habe ganz am Anfang ein 'A' ausgegeben (Code 65).
Ausserdem habe ich immer vor einer Initialisierung (Inscruction Set) eine 2 ausgegeben, dann eine 3 und nach einer Pause wieder eine 2. So lief das Display am sichersten.
Meine Pausen sind bei der Initialisierungs-befehlen 5ms und sonst 1ms - kannst du aber verdoppeln, da dein 486er vielleicht mehr als 40MHz hat.
Ausserdem habe ich noch ein paar andere Befehle vor der text-Ausgabe verwendet (zusätzlich), könnte auch noch was sein.
Gruß Thomas
Powered by vBulletin® Version 4.1.7 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.