Forum: Mikrocontroller und Digitale Elektronik [ASM] Mega16 - Programm spinnt


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

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

von Stefan (Gast)


Lesenswert?

Keiner eine Idee?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

Ich möchte das Projekt noch mit Assembler zuende führen und dann mit der 
C Programmierung anfangen.

Trotzdem danke für den Tipp

von Sascha W. (sascha_w)


Lesenswert?

@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

von Stefan (Gast)


Lesenswert?

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

von Sascha W. (sascha_w)


Lesenswert?

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

von Harald M. (mare_crisium)


Lesenswert?

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

von Spess53 (Gast)


Lesenswert?

Hi

Ich vermisse jegliche Tastenentprellung

>ldi color,(0-1)                   ; Auswahlregister auf "1"(Rot)

Nö. Damit wird color $FF.

MfG Spess

von Thomas F. (igel)


Lesenswert?

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.

von Stefan (Gast)


Lesenswert?

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!!!

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
Noch kein Account? Hier anmelden.