Hallo Forum,
ich beschäftige mich seit kurzer Zeit mit dem Thema uC und habe nun mein
erstes "großes" Projekt angefangen.
Soweit funktioniert auch alles einigermaßen, bis auf ein Problem, was
ich weiter unten beschreiben werde.
Zunächst einmal eine kurze Erklärung meines Vorhabens.
Für eine RGB Leiste im Wohnzimmer, welche zur Zeit über den
mitgelieferten Controller betrieben wird, möchte ich mir eine eigene
Steuerung bauen.
Dazu habe habe ich das angehänge Programm geschrieben, mit dem ich
bisher die drei Farben auswählen kann und anschließend die Werte für die
OCR eingeben kann, die Werte zu den jeweiligen Farben werden auf einem
LC Display angezeigt.
Nach einem Reset, wird auf dem Display "Farbe waehlen" angezeigt, dieser
Text verschwindet, nach der ersten Auswahl einer Farbe.
Das Problem besteht jetzt darin, dass wenn ich jetzt nicht nach dem
Reset die Taste zur Farbauswahl, sondern zur Erhöhung des Wertes
betätige, dann scheint es, als ob alle Strings, welche ich am Ende des
Quellcodes angefügt habe nacheinander angezeigt werden.
Das Programm läuft auf einem Mega16 am STK500. Ich habe die lcd-routines
etwas verändert, daher habe ich sie auch angehängt, falls jemand das
Programm mal testen möchte.
Meine Vermutung, ist, dass durch die Taste der Z-Pointer irgenwie erhöht
wird, aber WIE ist mir ein Rätsel.
Vielleicht gibt es ja jemanden, der mir helfen kann und möchte.
Viele Grüße
Stefan
Da sich so lange Zeit keiner gemeldet hat, wage ich mal einen Vorstoß:
Nichts gegen Assembler. Aber in meinen Augen hast du die Grenze schon
überschritten, wo ich das in C schreiben würde. Mich da lange mit einem
Z-Pointer rumzuschlagen und auf welchen Wegen der einen falschen Wert
bekommt, dazu wär mir die Zeit zu schade.
Ich weiß, das hilft dir jetzt nicht viel und es ist nicht das was du
hören wolltest. Aber so ist die Situation: Das sind Probleme um die soll
sich der Compiler kümmern.
Nichts für ungut.
@Stefan
zieh mal dein include von "lcd-routines.asm" vor die Texte, oder ergänze
die Textzeilen die eine ungerade Länge ergeben (für die gibt's ja immer
eine Warnung) mit einem weiteren Nullbyte. Das macht zwar der Assembler
eigenlich von selbst, hab da aber auch schon die merkwürdigsten Dinge
erlebt, wenn danach noch Code kommt.
@Karl heinz
>Nichts gegen Assembler. Aber in meinen Augen hast du die Grenze schon
überschritten, wo ich das in C schreiben würde.
das ist wohl Ansichtssache - hab auch schon einen Webserver mit ASM
hinbekommen.
Sascha
Hey Sascha,
wenn ich die lcd-routine vor das Programm einfüge, funktioniert der Spaß
nicht, weil der dann einfach in der lcd-routine anfängt zu arbeiten und
sich darin logischerweise aufhängt.
Werde mal die Nullbytes anfügen.
Grüße
Stefan
Stefan schrieb:> Hey Sascha,>> wenn ich die lcd-routine vor das Programm einfüge, funktioniert der Spaß> nicht, weil der dann einfach in der lcd-routine anfängt zu arbeiten und> sich darin logischerweise aufhängt.
??
hinter den Programmcode aber vor den Texten!
An sonsten natürlich hinter den Sprung auf Start am Begin des Programms.
Wobei ich nach .CSEG ein .ORG 0 und anschließend die komplette Tabelle
mit INT-Vektoren (mit RETI auffüllen) empfehlen würde.
Sascha
Sascha,
ist es vielleicht einfach nur das Tastenprellen, das es dem Kontroller
so vorkommen lässt, als hättest Du die Taste gleich mehrfach
hintereinander gedrückt? Gegen das Tastenprellen hast Du, soweit ich
sehe, gar keine Vorkehrungen getroffen.
Mach ruhig weiter in Assembler - ich habe damit auch schon sehr grosse
Projekte erfolgreich ans Laufen gekriegt ;- )
mare_crisium
Wie Sascha auch sagt:
Füge die komplette Sprungtabelle der IRQs ein, auch wenn diese nur aus
RETI und NOP besteht.
Schreibe hinter das include der Routinen ein NOP. Hat bei mir schon mal
geholfen, weiß aber nicht warum.
Ansonsten, lass dich von ASM nicht entmutigen. Mein aktuelles Projekt
hat jetzt 1500 Zeilen ASM und ist noch lange nicht fertig.
Danke für die vielen Antworten.
Die Tasten, habe ich noch nicht entprellt, dass kommt später mit der
Autorepeatfunktion. Will mich erstmal auf den PWM Kram konzentrieren.
Meine Taster prellen nur sehr wenig, von daher ist es zu Testzwecken
vertretbar.
Okay, werde das mit den Interrupteinsprüngen machen!
Ebenso mit der include file.
Melde mich, wenn ich was neues hab.
Vielen Dank schonmal!!!