www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Textausgabe


Autor: Krümmel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

habe volgendes Problem:

Hab ein LCD 2x 16 Zeichen
Programmiere in AVR-Studio den ATmega 8

Die Textausgabe in 2 Zeilen ist kein Problem bei mir. Jedoch kann ich 
den Text nur ausgeben wenn ich jedes Zeichen einzeln eingebe im 
Quellcode
Doch wenn ich den assembler code vom tutorial nehme um den text als 
ganzes eingebe zeigt er mir beim erstellen des HEX-files einen kleinen 
fehler:

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


Aber da der Fehler nur gelb gekenzeichnet war hab ich mir nix bei 
gedacht. Aber LCD zeigt nur noch schwarzen Balken an.
Hier mein Quellcode:

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 "lcd-routines.asm"            ; LCD Funktionen




was muss geändert werden oder kann es sein das meine lcd-routines 
geändert werden müssen???

Wäre dankbar für jeden Lösungsvorschlag

Autor: Kachel - Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> (25): warning: .cseg .db misalignment - padding zero byte

Der Assembler will Dir damit sagen, dass Du eine ungeradzahlige Anzahl 
Bytes in einer .db-Direktive angegeben hast. Da die Adressen 
wortorientiert sind (2 Bytes je Adresse), braucht er immer eine gerade 
Anzahl, also hat der Assembler da eigenmächtig ein Byte mit dem Inhalt 
$00 angehängt.

Dass Dein LCD nur Balken zeigt, ist ein Zeichen dafür, dass es nicht 
erfolgreich initialisiert wurde. Vermutlich wird das Timing nicht 
stimmen.

KH

Autor: Krümmel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
denke nicht das mit dem Timing was net stimmt habe meine LCD-Routines 
etwas geändert. Und zwar habe ich die Routines aus dem tutorial 
verwendet und dann am schluss noch die befehle für den flash string 
eingefügt. Kann es sein das ich etwas im tutorail falsch interpretiert 
habe?

Hab die datei in den anhang gepack.

danke

Autor: Kachel - Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst also, Dein Timing stimmt. Nungut, ich halte 5 ms bei der 
Initialisierung für sehr knapp. Das kann funktionieren, muss aber nicht. 
Wenn dann noch der Controllertakt erhöht wird, geht gar nichts mehr. Und 
nicht vergessen, es gibt auch LCDs, deren Controller recht langsam 
getaktet werden. Ich nutze statt Deiner 5 ms inzwischen meist 50 ms, 
damit hatte ich noch keinerlei Probleme.

Falls Dich ein Kommentar betreffs Flash-String interessiert, dann kannst 
Du gerne hier weiterlesen:
Beitrag "Re: Das LCD-Problem / Lösungsansatz"

KH

Autor: Kachel - Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In einem fachlichen Thread sollte keine
> Rechtschreibung diskutiert werden.

Falsch...

Sind es zu viele Rechtschreibfehler, dann bleibt die Information auf der 
Strecke, dann gibt es Missverständnisse. Die "Schmerzgrenze" war hier 
aber noch nicht erreicht. Da habe ich schon Schlimmeres gesehen.

KH

Autor: Kachel - Heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte meinen letzten Beitrag (und diesen hier) auch noch löschen, da der 
Bezug verloren gegangen ist.

KH

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
>Jedoch kann ich den Text nur ausgeben wenn ich jedes Zeichen einzeln
>eingebe im Quellcode
Du kannst also beide Zeilen lesbar beschreiben?
>Aber LCD zeigt nur noch schwarzen Balken an.
Wenn dem so ist, lasse doch bitte mal "rcall lcd_flash_string" weg und 
prüfe ob das Displ. wirklich "clear" ist. Mit eingeschaltetem Cursor 
solltest du auch diesen unter Zeichen 1 sehen.
Dein "lcd_flash_string" sieht jedenfalls nicht unbedingt falsch aus, es 
sei denn du hast irgendwo 0(Zahl) und O(Buchstabe) verwechselt.
Übrigens, ein komplettes Programm ist immer besser zu lesen als 
irgendwas zusammengestückeltes.

Viel Erfolg, Uwe

Autor: final communication (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

bin Neuling in der Programmierung des Microcontroller und hier über 
diesen Eintag gestolpert, da ich mein LCD nicht direkt ansteuen konnte. 
In dem Code aus dem Turtorial fehlt es noch, die Ausgänge zu 
deklarieren, dann klappt auch das Beispiel.



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

           ldi temp1, 0xFF    ; Port D = Ausgang
           out DDRD, temp1


Die Weiteren Restriktionen bezüglich der Taktfrequenzen müssen natürlich 
auch stimmen.
Ich hoffe ich konnte denjenigen weiterhelfen, welche nach Problemen mit 
dem LCD hier landen.

viele Grüße

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.