www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wann ist ein Befehl bei einem HD44870 ausgeführt?


Autor: bruegae (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe ein HD44780 LCD gekauft und kann diesen auch wunderbar steuern. 
Mein Problem ist nur, dass ich immer sinnlos viele Takte verbrate weil 
ich nicht genau weiß wann der LCD den Befehl ausgeführt hat. Im 
Datenblatt steht, dass man RS auf 0, R/W auf 1 setzen muss und dann kann 
man an der Datenleitung D7 erkennen das der LCD fertig ist, wenn 0 
anliegt 
(http://www.reichelt.de/?;ACTION=7;LA=6;OPEN=1;INDE... 
Seite 3, obere Tabelle, Zeile "Busy Flag"). Allerdings klappt das bei 
mir nicht. Ich habe hier mal den Code Teil reinkopiert der nur so lange 
Takte verbrät bis der LCD bereit ist:

checkready:
cbi PORTD,5 ;RS auf 0
sbi PORTD,6 ;R/W auf 1
ldi r16,0
out DDRD,r16 ;Port D auf Eingang schalten
rauf:
sbis PIND,7
jmp rauf
ldi r16,255
out DDRD,r16 ;Port D auf Ausgan schalten
ret

Ich bitte um Hilfe! Vielen Dank schonmal.
bruegae

PS:

Autor: Jean Player (fubu1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann würde ich auch auf NULL abfragen.
statt --->sbis PIND, 7  eher---->sbic PORTD, 7

Gruß

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das wird so nicht klappen. Das Display hat gültige Daten maximal 160ns 
nach der steigenden Flanke von E (Datenblatt, Read-Timing).

checkready:
cbi PORTD,5 ;RS auf 0
ldi r16,0
out DDRD,r16 ;Port D auf Eingang schalten
sbi PORTD,6 ;R/W auf 1

rauf:
sbi PORTD, ??? Pin, wo E dranhängt
nop        Dem Display die 160ns lassen, hängt hier bom AVR-Takt ab...
in r16,PORTD
cbi PORTD, ??? Pin, wo E dranhängt
sbrc r16,7      Fertig, wenn Busy = 0 !!!!
jmp rauf

E muß jedesmal getaktet werden, das Display ändert während E = 1 den 
Zustand der Datenleitungen NICHT.

cbi PORTD,6 ;R/W auf 0
ldi r16,255
out DDRD,r16 ;Port D auf Ausgan schalten
ret

PS: ich habe mal die Folge R/W-Umschalten und Port-Richtung umschalten 
etwas umsortiert.
Hintergrund: die Display-Leitungen sind Eingang, der Port ist Ausgang.
Wenn jetzt zuerst das Display auf Schreiben, also Ausgang, gesetzt wird, 
könnten theoretisch 2 Ausgänge gegeneinander arneiten, bis der Port 2 
Takte später auf Eingang gesetzt wird.
Das kann nette Spikes erzeugen und damit Fehler, die man ewig sucht...
Umgekehrt sind in dieser Zeit 2 Eingänge zusammengeschaltet, das stört 
nicht.
Praktisch stört es hier konkret nicht, weil das Display mit E = 0 im 
TriState ist.
Es ist aber besser, sich anzugewöhnen auf solche Kleinigkeiten zu 
achten, spart bei anderen ICs evtl. mühsame Fehlersuche.

Gruß aus Berlin
Michael

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anmerkung:

Es ist besser (schneller) nicht nach dem Zeichen/Befehlsenden auf das
Ende zu warten sondern vor dem Senden abzufragen ob/bis nicht mehr
Busy.
nach z.B. einem Clear-Befehl kann man dann die frischen Daten hohlen
oder was anderes abarbeiten während das Display noch arbeitet.

Kann viel Zeit sparen!

Beachten, daß Busy erst während der Initialisierung aktiviert wird 
(abfragen erst nach einigen Befehlen möglich!)

gruß hans

Autor: Sascha Brügmann (bruegae)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Code von Michael probiert, aber das funktiniert nicht. Ich 
habe zusätzlich beide Taktflanken von E und das Busy Flag auf 0 und 1 
gecheckt, nie hat es funktioniert.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael hat einen Fehler eingebaut, den du richtig hattest: PinD 
anstelle von PortD abfragen.

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.