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
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
Du musst auch nach dem unused Interrupt ein reti einfügen, sonst wird das nichts... Werner
Hallo Werner, ich dachte, dann laeuft er in die reset routine und alles faengt von vorne an. Ist das nicht zu empfehlen. mfg Volker
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
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
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...
Sorry, Tippfehler, 'tjmp main' soll natürlich 'rjmp main' heißen, die Tasten 't' und 'r' sind aber auch verdammt dicht zusammen... ...HanneS...
Danke, war natuerlich der Anfaengerfehler mit SREG retten. Mein Prgr laeuft jetzt sogar auf dem Tiny15. mfg Volker
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...
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.