Hi, ich habe ein Problem mit der Software, die bei meinem Display (HD44780), das vom Pollin (http://www.pollin.de/shop/shop.php?cf=detail.php&pg=NQ==&a=NzY3OTc4OTk=) stammt dabei war. Das Programm ist in Delphi beschrieben. Das Programm funktioniert auf meinem neuen PC ausgezeichnet doch auf meinen beiden älteren PCs (jeder etwa 6 Jahre alt) fuktioniert (hängt sich auf; 100% Prozessorauslastung) es nur, wenn ich in den Programmeinstellungen als Modus NICHT bidirektional auswähle. Dieser Modus ist aber indiskutabel, weil man viel zu lange warten muss, bis die Daten auf dem Display erscheinen (ich muss schnell Daten auf das Display übertragen). Ich habe allerdings in BIOS ECP ausgewählt.Dieser Modus ist doch bidirektional oder? Weiter habe ich herausgefunden als ich mir den Programmcode dieses Delphi-Programms anschaute, dass das Programm den beiden älteren PCs am abfragen des Busy-Flags scheitert/hängt. Außerdem habe ich herausgefunden, dass in der tmp-Variablen nach dem lesen nicht die RAM-Adresse zurückgegeben wird sondern das zulezt geschriebene Zeichen. Hier ist der "kritische" Programmteil (das komplette Programm um das es sich handelt git es unter http://www.pollin.de/shop/downloads_suchergebnis.php?fp=OA==&pg=NQ==&a=NzY3OTc4OTk=): **************************************************************** procedure TForm1.WaitDispRdy; // Warten, bis das Display bereit ist var tmp: byte; t: TDateTime; begin if BiDirLPT THEN begin // LPT im ECP-Control-Register auf PS/2-Mode setzen // nötig, falls es ein ECP-Port ist tmp:=PortReadB(printerport+$402); tmp:=tmp AND $1F; tmp:=tmp OR $20; // Bidirektionaler Modus = PS/2 PortWriteB(printerport+$402,tmp); t:=now+(5/86400); // Begrenzt auf 5 Sekunden repeat // Auf Eingang schalten und abfragen PortWriteB(printerport+2,$20+8+4+2+1); //In, E2=0 R/W=1 RS=0 E1=0 case ctrl of 0: PortWriteB(printerport+2,$20+8+4+2+0); //In, E2=0 R/W=1 RS=0 E1=1 1: PortWriteB(printerport+2,$20+0+4+2+1); //In, E2=1 R/W=1 RS=0 E1=0 end; tmp:=PortReadB(printerport); PortWriteB(printerport+2,$20+8+4+2+1); //In, E2=0 R/W=1 RS=0 E1=0 until ((tmp AND 128)=0) OR (now>t); // Maximal 5 Sekunden warten PortWriteB(printerport+2,8+0+2+1);//Out, E2=0 R/W=0 RS=0 E1=0 end else Delay(3); // Ohne bidirektionalen Parallelport ist Handshaking nicht möglich end; ************************************************************ 1. Kann mir jemand sagen wieso das Abfragen des Busy-Flags nicht auf meinen älteren PCs funktioniert? 2. Ist in dieser Source etwas nicht beauchtet worden, so dass das "Handshaking" nicht möglich ist. 3. Wieso enthält die tmp-Variable auf meinen älteren PCs nicht die Ram-Adressse sondern das zulezt geschriebene Zeichen? Würde mich sehr über Hilfe freuen. Gruß FlorianD
Hi Vergleiche mal die Einstellungen der LPT im BIOS. Es gibt für LPT verschiedene Modi. MfG HG
Hab an beiden PCs ECP 3 in BIOS aktiviert. Beim einen ists jetzt EPP weil es mir ECP nicht funktioniert hatte. Mit EPP jetzt allerdings auch nicht. BIOS-Einstellungen bezüglich dem LPT sind (waren) identisch.
@Florian: Displays mit HD44780 verwende ich seit Jahren, aber direkt an einem µC-Port. Die sind in Literatur und Source Code Beispielen auch bis zum Erbrechen beschrieben. In meiner Anwendung wird ebenfalls das Busy-Flag abgefragt, und es gab nie Probleme. Am Display selbst muß es nicht liegen, wenn man es nach Anleitung aus dem Datenblatt richtig initialisiert hat. Gruß Dietmar
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.