mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD gibt keine String aus


Autor: Alexander E. (foley)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Hab seit 2 Tagen ein myavr board 2 usb mit lcd add on zugelegt.

Folgendes Problem hab ich jetzt.
Das LCD hab ich dank eures Tutorial zum laufen bekommen, aber bei dem 
Punkt wo das LCD einen konstanten Text ausgeben soll scheitert es.
Macht einfach garnichts.

Vielleicht sieht jemand was ich da falsch mache.

Vielen Dank im Vorraus.

Gruss Alex

Autor: Der Schelm (derschelm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, meine Glaskugel ist gerade im Wochenende, da muss ich wohl ein 
wenig raten:

Spannung eingeschaltet?

Programm geladen?

LCD mit Schraubenzieher gepeinigt?

Wenn die Antworten ja ja nein lauten, dann hilft uns nur noch ein 
bisschen Code oder bis Montag warten weil dann meine Glaskugel wieder 
zurück aus Wochenende.

Autor: Der Schelm (derschelm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mist das wichtigste vor lauter Lästern vergessen schäm
Bei mir zeigt die RAR einen Fehler und ich sehe nichts.

Autor: Alexander E. (foley)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
sry, ich versuchs ma so :)

Autor: Alexander E. (foley)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hoffe jetzt klappts

Autor: Raoul D. (raoul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das .rar archiv ist total in Ordnung gewesen...Der Schelm hatte wohl nur 
ein Problem damit

Autor: Alexander E. (foley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ausserdem bring mir das avr studio immer diese warnung:

LCD_Alex.asm(25): warning: .cseg .db misalignment - padding zero byte

Weiss zufällig jemand was die bedeutet?

Gruss Alex

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Alexander E. (foley)

>LCD_Alex.asm(25): warning: .cseg .db misalignment - padding zero byte

>Weiss zufällig jemand was die bedeutet?

Unkritisch. In einer Datendefinition im Flash mit .db ist eine ungerade 
Anzahl Bytes gespeichert. Das mag der Assembler nicht und fügt ein 
Füllbytes (padding byte) an.

MFG
Falk

Autor: Alexander E. (foley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok. danke.

aber leider kann ich immer noch nicht richtig erkennen warum der Text 
nicht ausgegeben wird.

War schon froh das ich mithilfe dieverser Codesammlungen, das gerät 
schonmal zum laufen bekommen habe, aber hier hackt es dann aus.

gruss alex

Autor: Markus B. (wolframator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du es mal mit einem anderen Quellcode der in C geschrieben ist 
versucht? Gibt hier im Forum ja Beispiele :) Hab leider keines für 
Textdisplays, sonst würde ich es Dir anhängen...

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Habe ich etwas übersehen, oder wo wird dein Port initialisiert?

MfG Spess

Autor: Alexander E. (foley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in der selflcdroutines.asm.

zuerst das lcd dann der port deklariert.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich meinte die Stelle wo der Port auf Ausgang gesetzt wird.
Also

  ldi tempx,xy
  out DDRD,tempx

MfG Spess

Autor: Alexander E. (foley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, jetzt wo es erwähnt wird.  ?

keine ahnung, hab das ganze mit der Ausgabe von einzelnen zeichen 
probiert, und da hats funktioniert. bin davon ausgegangen das ich das in 
dem fall nicht brauche.


Habs gerade mal eingefügt in die lcd-ini aber hat leider keine 
auswirkungen.

gruss alex

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>keine ahnung, hab das ganze mit der Ausgabe von einzelnen zeichen
>probiert, und da hats funktioniert. bin davon ausgegangen das ich das in
>dem fall nicht brauche.

Dann bist du der erste, der ein LCD mit Eingängen angesteuert hat.
Was hast du denn jetzt in deine LCD-Ini geschrieben?
An deiner Stelle wurde ich erst mal wieder testen, ob die Ausgabe 
einzelner Zeichen mit deinen Routinen funktioniert. Dann müsste auch die 
Stringausgabe funktionieren.

MfG Spess

Autor: Alexander E. (foley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die einzelausgabe funktioniert.

.include "m8def.inc"



; als zweites Stack initaliesieren
       ldi r16, LOW(RAMEND)
           out SPL, r16
       ldi r16, HIGH(RAMEND)
           out SPH, r16

; dann portD als Ausgang setzen
       ldi r16, 0xFF
           out DDRD, r16

; dann display initalisieren via lcd_init
           rcall lcd_init

; dann Display löschen via lcd_clear

           rcall lcd_clear

; danach Zeichen ausgeben, erst in r16 laden und dann mit lcd_data 
ausgeben


           ldi r16, 'H'
           rcall lcd_data

           ldi r16, 'I'
           rcall lcd_data

           ldi r16, ' '
           rcall lcd_data

           ldi r16, 'A'
           rcall lcd_data

     ldi r16, 'L'
           rcall lcd_data

           ldi r16, 'E'
           rcall lcd_data

           ldi r16, 'X'
           rcall lcd_data
loop:
           rjmp loop

       .include "selflcdroutines.asm"

jetzt hab ich folgendes:
.include "m8def.inc"

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18


           ldi temp1, LOW(RAMEND)      ; LOW-Byte der obersten 
RAM-Adresse
           out SPL, temp1
           ldi temp1, HIGH(RAMEND)     ; HIGH-Byte der obersten 
RAM-Adresse
           out SPH, temp1

           rcall lcd_init              ; Display initialisieren
           rcall lcd_clear             ; Display löschen

           ldi ZL, LOW(text*2)         ; Adresse des Strings in den
           ldi ZH, HIGH(text*2)        ; Z-Pointer laden

           rcall lcd_flash_string      ; Unterprogramm gibt String aus 
der
                                       ; durch den Z-Pointer adressiert 
wird
loop:
           rjmp loop

text:
           .db "Test", 0                ; Stringkonstante, durch eine 0
                                       ; abgeschlossen


       .include "selflcdroutines.asm"

und das in die routinen eingefügt:
 ; Einen konstanten Text aus dem Flash Speicher
 ; ausgeben. Der Text wird mit einer 0 beendet
lcd_flash_string:
           push  temp1

lcd_flash_string_1:
           lpm   temp1, Z+
           cpi   temp1, 0
           breq  lcd_flash_string_2
           rcall  lcd_data
           rjmp  lcd_flash_string_1

lcd_flash_string_2:
           pop   temp1
           ret

und das funktioniert nicht.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Bitte entscheide dich für die Benutzung von Registerbezeichnungen (rxy) 
oder für dieses tempX. Das Vermischen ist tödlich.

MfG Spess

Autor: Fred S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Alex,

formell ist das Lesen mit "lpm" in Deinem Programm in Ordnung und müsste 
mit "lcd_data" funktionieren, vorausgestzt, dieses verwendet nicht Z. 
Das würde ich zunächst überprüfen. Die Lockbits (LB) und Bootlockbits 
(BLB)sind alle unprogrammiert?

Gruß

Fred

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn er die Routinen aus der obigen selflcdroutines.asm benutzt, wird Z 
nicht anderweitig genutzt, sollte also gehen.

Ansonsten schließe ich mich Spess53 an, saubere Definitionen der 
Register, es ist sonst eine Strafe, Fehler zu suchen und andere brauchen 
viel Zeit, daß auseinander zu sortieren...

Gruß aus Berlin
Michael

Autor: Alexander E. (foley)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok. ich werde es mal sauber schreiben.

vielleicht ergibt sich daraus ja schon der Fehler.

Danke erstmal.

Gruss Alex

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.