mikrocontroller.net

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


Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner eine Idee?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha Weber (sascha_w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha Weber (sascha_w)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Harald M. (mare_crisium)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich vermisse jegliche Tastenentprellung

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

Nö. Damit wird color $FF.

MfG Spess

Autor: Thomas Forster (igel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!!

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.