BF- check bei LCD

Gast #612526
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
Gast #612620
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
#612630
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.
#612638
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...
Gast #612640
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
#612647
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!
#612693
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.