Forum: Mikrocontroller und Digitale Elektronik BF- check bei LCD


von Florian (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Florian (Gast)


Lesenswert?

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

von Nixweiss (Gast)


Lesenswert?


von Florian (Gast)


Lesenswert?

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

von Meister E. (edson)


Lesenswert?

@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

von Nixweiss (Gast)


Lesenswert?

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

von Florian (Gast)


Lesenswert?

Danke genau das wollt ich wissen!!!

@Nixweiss

Sorry hab mich nicht ausdrücken können!

mfg Flo

von Nixweiss (Gast)


Lesenswert?

ups der war schneller
wie was soll das@ Meister Eder

von Johannes M. (johnny-m)


Lesenswert?

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.

von Nixweiss (Gast)


Lesenswert?

while = portbit 7 = 1

loop

von Johannes M. (johnny-m)


Lesenswert?

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...

von Matthias (Gast)


Lesenswert?

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

von Nixweiss (Gast)


Lesenswert?

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]

von Meister E. (edson)


Lesenswert?

@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

von Johannes M. (johnny-m)


Lesenswert?

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!

von Nixweiss (Gast)


Lesenswert?

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.

von Thomas O. (tarzanwiejane)


Lesenswert?

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
Noch kein Account? Hier anmelden.