Guten Tag. Ich habe das Problem das ich über einen ATtiny2313 ein Textdisply angeschlossen habe mit 4 Zeilen weswegen es E1 und E2 hat. Ich habe die lcd-routines aus dem Tutorial ein wenig angepasst um E2 an zu sprechen, aber irgendwie wird das nicht so ganz was wie ich es gerne hätte ^^. Die ersten beiden Zeilen werden immer richtig Angezeigt (E1). Wenn ich in der lcd-routines die Pins von E1 und E2 tausche so steht es richtig in den Unteren beiden Zeilen. Das was ich allerdings in die Unteren beiden Zeilen (E2) schreiben will ist mal richtig da, mal aber auch nicht. Wenn ich das IC resette und er alles neu schreibt, so sind die Oberen zwei Zeilen (E1) eig. immer richtig geschrieben, aber die unteren (E2) sind nahezu immer falsch. Mal ist es nur Müll, mal ein Teil der richtigen Schrift mit Müll drin (meist am Anfang), mal ist es nur ein Buchstabe der falsch ist. Ich habe schon versucht die Wartezeiten zu vverlänger, was aber nichts gebracht hat, hat jemand noch eine Idee?
Da du für die untere LCD Zeilen alle Routinen nochmal geschrieben hast, gehe ich mal stark davon aus, das da der Wurm drin ist. Wozu ist der Aufwand überhaupt gut? Fred
muss vll. beim initialisieren der untere bereich auch noch initialsiert werden? geht das, indem beim initialisieren bedei E aktiviert werden?
Fred: Der Aufwand ist dazu das ich die unteren beiden Zeilen auch nutzen kann. War soweit das einzige was mir auf die schnelle eingefallen war. Wenn du es anders (einfacher) machen würdest kannst du es gerne hier posten. (kann leider keine neue Zeile machen) Zum anderen Antworter: Die zweite Zeile initialiesiere ich doch, oder irre ich mich?
Philipp schrieb: > muss vll. beim initialisieren der untere bereich auch noch initialsiert Das sind beides völlig unabhängige LCD Controller, die einfach nur alle Leitungen parallel haben (vereinfacht gesagt). > werden? geht das, indem beim initialisieren bedei E aktiviert werden? Das geht schon, solange du nur schreibend auf das LCD zugreifst. Michael Dierken schrieb: > War soweit das einzige was mir auf die schnelle eingefallen war Der einzige unterschied ist der enable Pin. Ein Flag ob E1 oder E2 getoggelt werden soll hätte es also auch getan ;)
1 | lcd_enable: |
2 | cpse DISPLAY, DISPLAY_1 |
3 | sbi LCD_PORT, PIN_E ; Enable high |
4 | cpse DISPLAY, DISPLAY_2 |
5 | sbi LCD_PORT, PIN_E1 ; Enable high |
6 | nop ; 3 Taktzyklen warten |
7 | nop |
8 | cpse DISPLAY, DISPLAY_1 |
9 | cbi LCD_PORT, PIN_E ; Enable wieder low |
10 | cpse DISPLAY, DISPLAY_2 |
11 | cbi LCD_PORT, PIN_E ; Enable wieder low |
12 | ret |
Hierbei ist DISPLAY das Register welches das Flag hält, und DISPLAY_1 z.B. 1 und DISPLAY_2 z.B. zu 2 definiert dann kannst du machen: ldi DISPLAY, DISPLAY_1 do some LCD stuff here for display 1 ldi DISPLAY, DISPLAY_2 do some LCD stuff here for display 2
> Wenn du es anders (einfacher) machen würdest kannst du es gerne hier > posten. Bei der Initialisierung kannste einfach beide Controller gleichzeitig mit Kommandos füttern, die sollen ruhig parallel arbeiten. :D Ansonsten würd' ich den bestehenden Code so verallgemeinern, dass du den Enable-pin nicht hardcodierst, sondern entweder übergibst oder in einem Register oder einer Variablen setzt. Dazu nen Wrapper (ev. Makro?) verwenden.
1 | sprungpowerup: |
2 | rjmp powerupwait |
Das wird nix, jetzt springst du in den Code für Controller 1...
1 | lcd_flash_string2: |
2 | push temp1 |
3 | |
4 | lcd_flash_string_12: |
5 | lpm temp1, Z+ |
6 | cpi temp1, 0 |
7 | breq sprungflash2 |
8 | rcall lcd_data2 |
9 | rjmp lcd_flash_string_12 |
10 | |
11 | sprungflash2: |
12 | rjmp lcd_flash_string_2 |
Wundert mich, dass das überhaupt irgendwie funktioniert... Da explodiert dir doch der Stack?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.