mikrocontroller.net

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


Autor: Michael Dierken (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Fred (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Philipp (Gast)
Datum:

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

Autor: Michael Dierken (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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 ;)
lcd_enable:
  cpse DISPLAY, DISPLAY_1
  sbi LCD_PORT, PIN_E          ; Enable high
  cpse DISPLAY, DISPLAY_2
  sbi LCD_PORT, PIN_E1          ; Enable high
  nop                          ; 3 Taktzyklen warten
  nop
  cpse DISPLAY, DISPLAY_1
  cbi LCD_PORT, PIN_E          ; Enable wieder low
  cpse DISPLAY, DISPLAY_2
  cbi LCD_PORT, PIN_E          ; Enable wieder low
  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

Autor: Tom M. (tomm) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.
sprungpowerup:
      rjmp powerupwait

Das wird nix, jetzt springst du in den Code für Controller 1...
lcd_flash_string2:
           push  temp1

lcd_flash_string_12:
           lpm   temp1, Z+
           cpi   temp1, 0
           breq  sprungflash2
           rcall  lcd_data2
           rjmp  lcd_flash_string_12

sprungflash2:
           rjmp lcd_flash_string_2

Wundert mich, dass das überhaupt irgendwie funktioniert... Da explodiert 
dir doch der Stack?

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.