Hallo! Ich weiß es nervt schon das ewige thema LCD! trotzdem eine ganz kurze Frage: über das überprüfen von dem im Datenblatt verwendeten BF check kann ich feststellen ob das Display fertig ist od.? Wie kann ich den BF check jetzt durchführen? ich will nicht einfach länger warten. Danke im Voraus mfg Flo
Florian wrote:
> Wie kann ich den BF check jetzt durchführen?
So wie im Datenblatt angegeben.
Auf eine allgemeine Frage kann man auch nur allgemein antworten.
Peter
Sorry das ich mich so unklar beschrieben habe. ich meinte ein wald und wiesen ding (HD44870 kompatiebel) wäre super wenn mir das jemand sagen kann mfg Florian
Ich habe grundsätzlich kein problem das ding zu progen, aber ich hab jetzt schon so oft dieses BF gelesen und würd das gern verwenden. Falls jemand ein Beispiel in C hat wo das mit dem BF gemacht wird, wäre ich voll zufrieden. wäre super mfg Florian
@nixweiss Was soll denn das schon wieder? @flo Einfaches Rezept (für 8bit-Mode): 1. RS=0 RW=1 (Kommando: Status/Daten lesen) 2. uC-Port auf Eingänge umschalten 3. Enable 4. Port lesen (BF ist bit7) 5. uC-Port wieder als Ausgänge schalten Gruss, Edson
ist doch ganz einfach den avr port als eingang schalten ddr =00 R/W= 1 setzen und dann bit 7 auf 1 abfragen. if portbit 7 = 1 das wars
Danke genau das wollt ich wissen!!! @Nixweiss Sorry hab mich nicht ausdrücken können! mfg Flo
Nixweiss wrote: > ist doch ganz einfach > den avr port als eingang schalten > ddr =00 > R/W= 1 setzen und dann bit 7 auf 1 abfragen. > if portbit 7 = 1 > das wars So weit so gut, aber das ganze muss noch in eine Schleife gepackt werden. Sonst funktioniert es nicht. Sprich: Der Lesevorgang muss so lange wiederholt werden, bis für das Busy Flag ne Null zurückkommt.
Nixweiss wrote: > while = portbit 7 = 1 > > loop Nö. Genau das wird nicht funktionieren, es sei denn, Du meinst damit etwas anderes oder man kann das in BASCOM so machen... Einfach nur den Port in einer Schleife abfragen geht nicht. Der Lesevorgang muss jedes Mal mit einem Enable-Impuls für das Display eingeleitet werden (also Enable innerhalb der Schleife). Sonst liest man das BF nur einmal (wobei es meist 1 sein dürfte) und dann hängt sich das ganze auf, weil das BF anscheinend nie 0 wird...
so etwa (SDCC):
1 | // Testen ob LCD-Modul noch im internen Zyklus ist
|
2 | bit lcd_busy = 1; |
3 | LCD_RW = 1; |
4 | LCD_RS = 0; |
5 | LCD_DATA = 0xFF; // Datenportlatch für Rücklesen vorbereiten (8051-Spezifik) |
6 | while(lcd_busy) { |
7 | LCD_E1 = 1; |
8 | _asm nop; nop; nop; _endasm; // ggf. Impulsverzögerung |
9 | if (!(LCD_DATA & 0x80)) lcd_busy = 0; // BUSY-Flag abfragen |
10 | LCD_E1 = 0; |
11 | _asm nop; nop; nop; _endasm; // ggf. Impulsverzögerung |
12 | }
|
13 | // LCD-Anzeige ist zum Empfang neuer Zeichen bereit
|
Gruß Matthias
naja C ist nicht so mein ding . aber eigentlich müsten If abfragen umd while bedingungen in allen sprachen ungefähr gleich sein. [traummodus]schlaf[/taummodus]
@nixweiss ok, ich nehms zurück. Du hattest ja dann doch noch was zu sagen. Einen unkommentierten Link in ein anderes Forum setzen ist halt manchmal grenzwertig, deshalb die Frage. (LCD kann man ja auch hier nachschlagen) Gruss, Edson
Nixweiss wrote: > aber eigentlich müsten If abfragen umd while bedingungen in allen > sprachen ungefähr gleich sein. Das bestreitet ja auch keiner. Aber es hat hier schon eine ganze Reihe Newbies gegeben, die das Adresswort und Busy Flag einmal ausgelesen und danach immer wieder den selben Wert in einer Schleife eingelesen haben und sich wunderten, warum gar nichts mehr ging. Es ging mir nicht um das while an sich, sondern darum, dass in die Schleife hinein der eigentliche Lesevorgang gehört, und damit die Ausgabe eines Enable-Impulses. Und das ist in Deiner Schleife nicht ersichtlich!
das stimmt ist für mich ebent ein alter hut(habes es schon in asm gemacht) und deshalb vergist man einfach das andere leute das backround wissen nicht haben.
fuer alle die wissen wollen wie es in Assembler aussieht... (allerdings fuer ein samsung 8x24 display mit M50530 Controller im 4bit Mode) lcd_wait_for_bf: push temp3 push temp1 ;zustand vom LCD_PORT sichern in temp1, LCD_PORT push temp1 ;Datenbits auf Input cbi LCD_DDR, LCD_D4 cbi LCD_DDR, LCD_D5 cbi LCD_DDR, LCD_D6 cbi LCD_DDR, LCD_D7 ;Pullups aus. Mag das scheiss display nicht. cbi LCD_PORT, LCD_D4 cbi LCD_PORT, LCD_D5 cbi LCD_PORT, LCD_D6 cbi LCD_PORT, LCD_D7 lcd_wait_for_bf_: sbi LCD_PORT, LCD_RW cbi LCD_PORT, LCD_IOC1 cbi LCD_PORT, LCD_IOC2 rcall lcd_enable ; get MSB in temp3, LCD_PIN rcall lcd_enable ; get LSB sbrc temp3, LCD_D7 rjmp lcd_wait_for_bf_ ;klare verhaeltnise wiederherstellen cbi LCD_PORT, LCD_RW cbi LCD_PORT, LCD_IOC1 cbi LCD_PORT, LCD_IOC2 sbi LCD_DDR, LCD_D4 sbi LCD_DDR, LCD_D5 sbi LCD_DDR, LCD_D6 sbi LCD_DDR, LCD_D7 ;Zustand von LCD_PORT wiederherstellen aka alle bits wie vorher setzen pop temp1 out LCD_PORT, temp1 pop temp1 pop temp3 ret cu Tarzanwiejane
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.