LCD Busyflag abfrage programmieren?

Gast #351314
Lesenswert?

Hallo,

aus der Busyflag abfrage werde ich nicht ganz schau, da wenn ich das
Datenblatt eines LCDs verstanden habe, setzte ich die RW und EN PINs
auf logisch 1 und der PIN an welchem die Datenleitung DB7 angeschlossen
wird, wird als Eingang deklariert und abgefragt, ob dieser logisch 1
ist. Solange dieser auf logisch 1 ist, ist das LCD beschäftigt???

Nabe ich folgendes Problem, ich benutzte die 4-Bit LCD Ansteuerung,
d.h. ich schicke zuerst das lower nibble anschließend das upper nibble.
Ich mache eine Busyflag abfrage vor dem senden des lower nibbles ->
keine Probleme. Mach ich eine Busyflagabfrage vor dem senden des upper
nibbles, geht's nicht weiter, bzw. er kommt nicht aus der schleife
raus!

Kann mir vielleicht jemand helfen und sagen, ob die Routine korrekt
geschrieben wurde?

void check_busyflag(void)        //Check if the LCD is still busy
{
  DDRT &= ~(1<<DB7);     // PIN DB7 as input
  PTT|=(1<<RW)|(1<<EN);          //Set the RW Pin to high

  while(PTIT & (1<<DB7))     //Read the Input Pin, as long as this pin
is set to high
  {
  }
  PTT &= ~(1<<RW);         //LCD is no longer busy, reset the RW Pin
  PTT &= ~(1<<EN);
  DDRT |= (1<<DB7);
};
Gast #351315
Lesenswert?

Schau Dir mal das Datenblatt vom LCD genauer an. Ich vermute mal (auch
wenn Du nix davon schreibst), dass Du ein LCD mit HD44780-kompatiblem
Controller verwendest. Dann musst Du vor jeder Auswertung des Busy
Flag, also in Deiner Schleife, das Address-Byte komplett einlesen. Das
MSB des Address-Bytes ist das Busy-Flag. Wenn Du es nur einmal
einliest, ändert es sich natürlich nicht mehr und Du bleibst in der
Schleife hängen.
Gast #351317
Lesenswert?

Schau Dir doch bitte das Datenblatt an! Da steht in der Befehlstabelle

ein Befehl 'Busy Flag / Address Read'. Dieser wird ausgeführt, wenn
RS 0 und RW 1 ist. Das MSB des eingelesenen Bytes (das in den anderen
Bits die Adresse des zuletzt geschriebenen Zeichens enthält) ist das
Busy Flag. Du musst diesen Befehl ausführen (und das bedeutet im
4-Bit-Modus zwei Schritte) und das komplette Address-Byte einlesen.
Anschließend kannst Du den aktuellen Stand des BF auswerten. Eine
Änderung des Zustandes des BF kriegst Du nur mit, wenn Du den Befehl
'Busy Flag / Address Read' erneut ausführst!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren