mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BF- check bei LCD


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nixweiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nixweiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke genau das wollt ich wissen!!!

@Nixweiss

Sorry hab mich nicht ausdrücken können!

mfg Flo

Autor: Nixweiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups der war schneller
wie was soll das@ Meister Eder

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nixweiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while = portbit 7 = 1

loop

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so etwa (SDCC):
  // Testen ob LCD-Modul noch im internen Zyklus ist
  bit lcd_busy = 1;
  LCD_RW = 1;
  LCD_RS = 0;
  LCD_DATA = 0xFF;  // Datenportlatch für Rücklesen vorbereiten (8051-Spezifik)
  while(lcd_busy) {
    LCD_E1 = 1;
    _asm nop; nop; nop; _endasm;     // ggf. Impulsverzögerung  
    if (!(LCD_DATA & 0x80)) lcd_busy = 0; // BUSY-Flag abfragen
    LCD_E1 = 0;
    _asm nop; nop; nop; _endasm;     // ggf. Impulsverzögerung      
  }
  // LCD-Anzeige ist zum Empfang neuer Zeichen bereit



Gruß
Matthias

Autor: Nixweiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Nixweiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Otto (tarzanwiejane)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.