So, lange hats nicht gedauert bis etwas wieder nicht so funktioniert wie
ich es will.
Ich habe vor ein paar Stunden das Forum um Hilfe bei einem LCD (44780,
Atmega16, 16MHz) gebeten. Das hat nach einer Weile auch geklappt.
Allerdings habe ich dort noch mit Timern gearbeitet. Ich jetzt aber das
Busyflag benutzen, nur das geht nicht wie ich es will. Der Code ist im
Anhang
Kann mir jemand meinen Fehler zeigen?
mfg
1) Kann es sein, dass du die Eingänge über PINB abfragen musst?
2) Wenn du den gesamten PORT auf Input setzt, hat das LCD dann keine
definierten Pegel an den Eingängen
> ldi R16, 0x00> out LCD_DDR, R16
Samuel J. schrieb:> Das sollte eigentlich egal sein
Beim R/W, RS und vor allem Enable wird es dem LCD nicht egal sein.
>sbic LCD_PORT, DB7 ;Wenn Busyflag gesetzt, nicht mehr> ;zu check_busyflag >springen
Das müsste vllt. so ausschauen:
sbic PINB, DB7
Kann auch sein, dass ich falsch liege. Ich programmiere eigentlich nur
PIC
Bastler schrieb:> Du springst ja wieder hoch und lässt die Bits erneut zappeln.
Wenn die bits gesetzt/gelöscht sind sollte es doch egal sein, wenn sie
nochmal gesetzt/gelöscht werden. Die Ausgänge verden ja gesetzt/gelöscht
und nicht getoggelt.
@Max:
Das Problem ist, dass am LCD nur in der ersten Zeile schwarze Kästchen
angezeigt werden, die Initialisierung also noch nicht richtig
abgeschlossen ist.
Nein leider nicht, ich habe zu Hause kein Oszi. Ich kann fühestens am
Freitag in der Schule messen.
Du schaltest hiermit ...
ldi R16, 0b11110000 ;Port, an dem das LCD hängt, auf Eingang
schalten
out LCD_DDR, R16
... dein Pin an dem das Busyflag hängt auf Ausgang.
Bastler schrieb:> ldi R16, 0b11110000 ;Port, an dem das LCD hängt, auf Eingang>... dein Pin an dem das Busyflag hängt auf AusgangSamuel J. schrieb:> RS auf PB4> RW auf PB5> E auf PB6> DB7-DB4 auf PB3-0