BF- check bei LCD

Gast #612526
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
Gast #612613
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
Gast #612620
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
#612625
@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
#612630
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.
#612638
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...
Gast #612640
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
Gast #612642
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]
#612643
@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
#612647
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!
Gast #612651
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.
#612693
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.