mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Busy-Flag wird nicht richtig ausgewertet


Autor: Florian Drews (floriand)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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&p...)
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.p...

****************************************************************
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

Autor: Hartmut Gröger (hardygroeger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Vergleiche mal die Einstellungen der LPT im BIOS. Es gibt für LPT
verschiedene Modi.

MfG HG

Autor: Florian Drews (floriand)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dietmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.