www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVRStudio 4.10.356 Tiny15 SIM Problem


Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
bin Newbie und
habe ein kleines Assembler Programm fuer einen Tiny15 geschrieben,
(ext. Int, timer1) das wollte ich jetzt mit AVRStudio 4.10.356 im
Simulator testen.
Da geht aber so einiges schief, timer1 overflow endlos interrupts, TIFR
flags loeschen geht nicht, BREQ werden nicht ausgefuehrt trotz equal.
Sind die Probleme bekannt, was waere eine stabile Version, die fuer
Tiny15 geht. Die vorherige Version hatte auch schon Probleme mit
Tiny15.

mfg Volker

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

Bewertung
0 lesenswert
nicht lesenswert
Hier ist der Source code dazu.
Die Zeitkonstanten sind noch nicht entgueltig, habe ich fuer Testzwecke
heruntergedreht, will ja keine 50 Min. Realtime am Simulator abwarten.
Bedanke mich schon mal.

mfg Volker

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst auch nach dem unused Interrupt ein reti einfügen, sonst wird
das nichts...

Werner

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Werner,
ich dachte, dann laeuft er in die reset routine und alles faengt von
vorne an. Ist das nicht zu empfehlen.
mfg Volker

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier es doch aus. Was genau passiert kann ich Dir auch nicht sagen.
Es ist generell empfehlenswert Interruptroutinen mit Reti zu verlassen,
da sonst das Interruptflag nicht gelöscht wird. Vielleicht ist das ja
dein Problem

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Werner, jetzt muss ich aber mal dumm fragen.
Mein RESET ist doch auch eine Interrupt Routine muss ich die auch mit
RETI abschliessen und wie komme ich dann in mein Hauptprogramm ?
mfg Volker

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Volker...

Reset ist keine Interrupt-Routine. Der Reset-Vektor steht an Adresse 0
und wird nur beim Power-On-Reset, beim Reset per Reset-Pin, bei
Watchdog-Reset aufgerufen.

Nach der Reset-Routine "fällt" die Abarbeitung ins Hauptprogramm, das
ja als Endlos-Schleife aufgebaut ist (zwischen Main: und tjmp Main).

Deine ISR (Interrupt-Service-Routinen) werden von den stattfindenden
Hardware-Ereignissen (Timer-Überlauf, Pegelwechsel am Input) ausgelöst
und müssen durch 'reti' abgeschlossen werden (so wie du es in deinem
Programm gemacht hast).

Trotzdem haben deine ISR einen gravierenden Fehler: Du sicherst das
Statusregister (SREG) nicht! Daher kann der Programmablauf total
durcheinander kommen. Falls du noch ein unteres Register übrig hast,
dann deklariere es exclusiv als SREG-Kopie (heißt bei mir immer
'srsk') und füge zu Beginn jeder ISR den Befehl 'in srsk,sreg' ein
und vor jedem 'reti' 'out sreg,srsk'. Damit sicherst du das SREG
für dein Hauptprogramm, deine ISR kann also deinem Hauptprogramm nicht
mehr die Flags 'verbiegen'.

Bei größeren AVRs mit SRAM und wenn Registermangel herrscht, ist es
üblich, das SREG auf dem Stack zu sichern.

Dein ganzes Programm habe ich nicht analysiert, die Kommentare sind zu
verwirrend, sieht aus, wie wild zusammenkopiert... - Sorry...

Bit- & Bytebruch...
...HanneS...

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, Tippfehler, 'tjmp main' soll natürlich 'rjmp main' heißen,
die Tasten 't' und 'r' sind aber auch verdammt dicht zusammen...

...HanneS...

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, war natuerlich der Anfaengerfehler mit SREG retten.
Mein Prgr laeuft jetzt sogar auf dem Tiny15.
mfg Volker

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Volker...

Nix draus machen, da bist du nicht der erste (ist bei mir noch garnicht
lange her), aber noch lange nicht der letzte, dem das passiert...

...HanneS...

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.