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
Das Busy Flag ist nur gültig, während E aktiv ist. Danach ist der Bus wieder hochohmig. Du fragst zum falschen Zeitpunkt ab.
Ok, ich habs jetzt nochmal geändert, allerdings funktioniert es immer noch nicht :(
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
zu 1.) Also so wie ich es im Tutorial (hier auf dieser Seite) gelesen habe, sollte es mit
1 | |
funktionieren. zu 2.) Das sollte eigentlich egal sein, da der Modus auf "lesen" gesetzt ist. Da muss man eigentlich keine Pegel definieren.
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
@Max: stimmt auch wieder. Ich habs geändert, allerdings löst das immer noch nicht das Problem :/
Ja natürlich, das muss PINB heißen facepalm Allerdings geht es immernoch nicht :D
Gast
#3577247
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Du springst ja wieder hoch und lässt die Bits erneut zappeln.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Probier mal das.
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.
@Bastler ich habs geändert, leider bringt auch das keine Veränderung :/
Samuel J. schrieb: > nur das geht nicht wie ich es will Was genau geht nicht? Kannst du messen, ob das Busy-Flag gesetzt wird?
@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.
Ein Blick ins Datenblatt, kann oft weiterhelfen...
Gast
#3577284
ungefähr so :
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
ouhhhh..... Vielen Danke! Dann hat sich das wohl erledigt :D
Gast
#3577291
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 Ausgang Samuel J. schrieb: > RS auf PB4 > RW auf PB5 > E auf PB6 > DB7-DB4 auf PB3-0
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
