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); };
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.
Hallo, ja ich verwende einen HD44780 kompatiblen Controller, aber was meinst du mit Address-Byte komplett einlesen???
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!
Ach ja, sorry für die exzessive Anwendung von Fettdruck, aber manche Leute kapieren es sonst nie, dass man ein Datenblatt auch lesen muss...
Alternative: Espar dir den Zirkus mit dem Busy-Flag und halte einfach die beschriebenen Wartezeiten ein. Als Nebeneffekt wird ein Pin frei.
Nein, es wird kein Pin frei! Für die Zeichen-Ausgabe werden alle 8 Pins des Datenbus gebraucht!
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.
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.