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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.