www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Busyflag abfrage programmieren?


Autor: Chris Lambert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
};

Autor: johnny.m (Gast)
Datum:

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

Autor: Chris Lambert (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja ich verwende einen HD44780 kompatiblen Controller, aber was meinst
du mit Address-Byte komplett einlesen???

Autor: johnny.m (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, sorry für die exzessive Anwendung von Fettdruck, aber manche
Leute kapieren es sonst nie, dass man ein Datenblatt auch lesen
muss...

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternative: Espar dir den Zirkus mit dem Busy-Flag und halte einfach
die beschriebenen Wartezeiten ein. Als Nebeneffekt wird ein Pin frei.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, es wird kein Pin frei! Für die Zeichen-Ausgabe werden alle 8
Pins des Datenbus gebraucht!

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der R/W-Pin wird frei.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man keine Display-Daten lesen will, dann ja...

Autor: Marko B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das Display hat ja nicht so viel mitzuteilen. Ich schalte den
R/W-Pin auch immer auf GND. Das Busy-Flag bei Textdisplays auszulesen
ist ziemlich nutzlos.

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.