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
> (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
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
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
> 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
Bitte meinen letzten Beitrag (und diesen hier) auch noch löschen, da der Bezug verloren gegangen ist. KH
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
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
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.