Ich hab ein Problem beim abarbeiten meiner ISR (Timer Compare Match).
Jedesmal wenn der Interrupt ausgelöst werden würde, wird sofort resetet.
Ich hab das mit einem Debugger (dem AVR Dragon) getestet. Beim
Breakpoint der am Anfang der ISR steht, wird nie angehalten. Dafür wird
immer wieder vor die Endlosschleife gesprungen (Reset)
Ich verwende einen AT90PWM316. Fuses sind alle gelöscht. (Bis auf DW
natürlich, damit wird getestet.)
Hat jemand eine Ahnung woran das liegen könnte.
Hier die Initialisierung des Timers:
1
OCR1A=incr;
2
TCCR1A|=(1<<COM1A0);//OC Pin toggelt
3
TCCR1B|=((1<<WGM12)|(1<<CS10));//prescaler = 1 & CTC Modus
Ja, interrupt ist global freigegeben.
Wenn ich sei() deaktiviere (oder bei der Initialisierung des Timers das
Interrupt Enable Bit nicht setze) wird auch kein Reset durchgeführt.
btw du hast recht, der code ist umständlich geschrieben. bin heute recht
müde, hab ihn aber schon umgeschrieben. danke
>Jedesmal wenn der Interrupt ausgelöst werden würde, wird sofort resetet.
So etwas deutet fast immer auf einen Interrupt ohne ISR hin. Vektorname
richtig? Im .lss-File überprüft, ob da etwas in der Sprungtabelle
eingetragen ist? Richtigen Interrupt freigegeben?
Oliver
>Und hier ist der ganze Code:
Ohne main() ist das niemals der ganze Code. Die Frage ist nicht, wo du
den Fehler vermutest, sondern, wo er wirklich ist.
Oliver
>main.c:1:17: error: i2c.h: No such file or directory
und noch ca. 30 folgende Fehler.
Also nochmal:
>Immer das Gleiche... wo ist der ganze Code?
Zip das kompilierbare vollständige Programm zusammen, und häng es hier
an. Quellcode-Einzelstücke aus verschiedenen Testversionen bringen
nichts.
Und:
>In der main() ist der Fehler nicht,
Wenn du wüsstest, wo der Fehler ist, müsstest du hier nicht fragen :-)
1
ISR(TIMER1_COMPB_vect)
Eine ISR, die nicht freigegeben ist. Warum?
Oliver
Das ist wohl ziemlich witzlos, eine Variable zu definieren und zu
inkrementieren, die sofort danach schon nicht mehr existiert. Die ISR
kannste auch komplett leer lassen, hat den selben Effekt, da mit x
nichts gemacht wird und es beim nächsten Aufruf der ISR sowieso wieder
auf 0 gesetzt wird...
Übrigens:
.rar ist ein ganz schlechtes Format für ein Hilfeersuchen...
Hab das Problem gelöst.
Das Interrupt File war falsch. In der Define war der vector 13
angegeben. Jetzt hab ich alles neu installiert, als define ist vector 12
angegeben und es funktioniert.
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.