Forum: Mikrocontroller und Digitale Elektronik Display geht zu 75% woran liegt das? (siehe Fehlerbeschreibung)


von Michael Dierken (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Fred (Gast)


Lesenswert?

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

von Philipp (Gast)


Lesenswert?

muss vll. beim initialisieren der untere bereich auch noch initialsiert 
werden? geht das, indem beim initialisieren bedei E aktiviert werden?

von Michael Dierken (Gast)


Lesenswert?

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?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von Tom M. (tomm) Benutzerseite


Lesenswert?

> 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
Noch kein Account? Hier anmelden.