Hallo. Ich habe gestern 3 Stunden vergeblich Probiert in das Programm aus dem Tutorial (LCD) das Busy-Flag mit einzufügen. Ich wäre sehr dankbar wenn mir jemand erklären könnte wie man ein LCD im 4bit-Modus mit Abfrage des Busy-Flag betreibt. Heli
Hallo, bei meinen Display wird wenn man RW auf Lesen und RS auf Befehl stellt der komplette Datenbus auf High bzw. auf Low gesetzt. Das heißt das du theoretisch auch im 4-Bitmodus das Busy-Flag ganz einfach dadurch ausliest indem du Prüfst ob etwas am Datenbus (DB0 - DB7) anliegt. SaM
Moinmoin BF Flag lesen om 4 bit mode ist ein bischen "tricky" Da der AVR Port im Input mode auch 2 Zustände annehmen kann ja nach dem welche Daten am Post anliegen Wenn PORTx,D7 im Output & modus DDRx,D7 1 Versucht der Eingang einen pull up dh er zieht in richtung 1 Sollte Ist der Ausgang des LCD chips nicht dafür ausgelegt kann das Probleme machen -> dafür sorgen das PRTx,BF (D7) vor der abfrage auf 0 liegt HI_Z -> dann erst DDRx,BF auf Input -> dann RW 1 RS 0 Jetzt noch BF einlesen ( PINx ) Nicht vom PORTx !! noch was !! Das BF flag kann erst nach der 2. 4bit operation gelesen werden ! und das auch nur EN log 1 Man ist schnell versucht die BF Abfrage in die normale LCD Routine reinzuflicken ( in den EN operations teil ) der wird aber 2 mal pro Schreibvorgang benutzt und so klappt das dann nicht poste doch mal den code den du probierst vieleicht kann man da ja was sehen Mfg Phagsae
Hallo, ich habe auch lange vergeblich versucht, bei einem LCD16X1 das Busyflag abzufragen, so daß es auch funktioniert. Nach Internet-Recherche habe ich es jetzt geschafft. Das Assemblerprogramm ist zwar für einen PIC geschrieben, aber es ist kein Problem, es in den MCS51-Code umzuschreiben. Ich war nun interessiert daran, wie oft das Busyflag abgefragt wird, bis der letzte Befehl abgearbeitet ist. Dafür habe ich ein Programm für einen 80C32X2 Standardcontroller (Atmel) geschrieben, das genau das macht und die Anzahl auf einem 16X1-Display ausgibt. Bei 1,8432Mhz-Taktfrequenz sind es 18 Abfragen, bei 24Mhz schon 230. Thomas
Ernst Bachmann wrote: > Wow. Ein .DOC File für Quelltext? > > Welcher C-Compiler frisst denn sowas? Und zusätzlich noch nen fünfeinhalb (!) Jahre alten Fred wieder rausgekramt. Das ist rekordverdächtig!
Meister der Insel wrote:
> Tja so sind die Leut.
In der Tat. Und es gibt dann auch noch tatsächlich (derzeit 10) Leute,
die sich das .doc auch noch runterladen...
Johannes M. wrote: > In der Tat. Und es gibt dann auch noch tatsächlich (derzeit 10) Leute, > die sich das .doc auch noch runterladen... Muss gestehen, zwei der Downloads stammen von mir. Wollte checken, obs wirklich ein DOC-File ist (GET-Request an der Kommandozeile) und ob Koffice/KWord das öffnen kann. (Ja, es kann, und es ist auch wirklich Quelltext enthalten)
Gegen Neugier gibt es halt auch kein Kraut. So jetzt ist Feierabend. Schönes Wochenende und Gruß.
Ich hab grad kein DSL, kann mir also das DOC-Monster nicht ansehen. Selbst mein größtes Projekt (50 Files, 10.000 Codezeilen in C) schaffts nicht auf 503kB. Peter
Also so habe ich das mal implementiert für einen Mega16 und ein 4x20 DIP (EA DIP 204-4) in 8-Bit: --- #define LCD_E (1<<PORTB0); #define LCD_RW (1<<PORTB1); #define LCD_RS (1<<PORTB2); uint8_t display_busy(void) { uint8_t x; DDRC = 0x00; // set all Pins from PORTC to input PORTB |= LCD_RW; // switch display to read-mode PORTB &= ~LCD_RS; // clear RS, this is always a command PORTB |= LCD_E; // set E x = PINC & 0x80; // we only need the busy-flag PORTB &= ~LCD_E; // clear E return(x); } --- Und dann habe ich das mal auf 4-Bit umgestellt: --- // display functions #define LCD_E (1<<PORTB1); #define LCD_RW (1<<PORTB2); #define LCD_RS (1<<PORTB3); uint8_t display_busy(void) { uint8_t x; DDRA = 0x00; // set all Pins from PORTA to input PORTB |= LCD_RW; // switch display to read-mode PORTB &= ~LCD_RS; // clear RS, this is always a command PORTB |= LCD_E; // set E x = PINA & 0x08; // we only need the busy-flag PORTB &= ~LCD_E; // clear E // read second nibble to complete access PORTB |= LCD_E; // set E PORTB &= ~LCD_E; // clear E return(x); } --- Hmm, okay, ist 'ne Weile her das ich das gebraucht habe und ist vielleicht ein wenig nachlässig implementiert... ;-) Aber mit dem 2x16 DIP habe ich das auch schon erfolgreich benutzt.
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.