Guten Abend Irgendwie funktioneirt bei mir der Aufruf der ISR nicht. Ich verwende einen 90s8535 mit dem STK200. Was habe ich vergessen einzustellen, bzw. muss man auf dem Board noch etwas beachten. Die Quelle ist ein Temperaturfühler (SMT 160-30), jedoch habe ich uach mit den Tastern eine positive Flanke auf PD6 gegeben. Der Quellcode ist im Anhang beigelegt. Gruss E.H.
Fehlt der Befehl "sei();" um die Interrups zu aktivieren? Schau mal in der avr/interrupt.h nach.
das mache ich ja mit dieser Zeile: SREG |= 0x80; //General interrupt enable Ich setzte eifnach direkt das I-Bit, oder macht sei() noch etwas anderes?
Ich hab für deinen MC kein Datenblatt da, aber schau mal ob der Input-Capture Interrupt Enable passt, beim Mega32 wäre das nämlich 0x20.
TCCR1A muss auch noch initialisiert werden. z.Bsp. TCCR1A = (1 << PWM11) | (1 << PWM10) | (1 << COM1A1); // nicht inv. 10Bit PWM Gruss Hilel
@Fritz Ganter Ja, stimmt das war falsch, es funktioniert jedoch auch nach dieser Änderung nicht. Ich habe den neuen Code angehängt. @Hilel: Ich verstehe nicht ganz warum TCCR1A initialisiert werden muss. Dort stelle ich ja nur Dinge für Output Compare ein und ich möchte ja ein Input Capture machen. Datenblatt von 90S8535: http://www.nikhef.nl/pub/departments/et/misc/at8535/at8535_dat.pdf
Ich dachte PWM. Sorry. Woher soll das Programm wissen, dass es bei Interrupt in die Interrupt-Routine springen soll? Fehlt da nicht der Interrupt-Vektor? #pragma interrupt_handler DeineInterruptRoutine:6
Beim IAR-Compiler sieht es etwa so aus: interrupt [SIG_INPUT_CAPTURE1] void meineRoutine(void); interrupt [SIG_INPUT_CAPTURE1] void meineRoutine(void) { PORTB = 0xAA; //zu testzwecken bitmuster an LEDs }
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#INTERRUPT Ich habe das von hier übernommen, allerdings bringt der Compiler ein paar warnungen, wie z.B. die ich jedoch ignoriert habe: warning: return type defaults to `int' warning: function declaration isn't a prototype In function `INTERRUPT': warning: type of "__vector_5" defaults to "int" In function `INTERRUPT': warning: control reaches end of non-void function Gruss
Ich glaub das bekommst du wenn der Signalname nicht passt.
ja, ich bin mir in der Zwischenzeit ziehmlich sicher, dass irgendetwas mit diesen Interrupt vektoren nicht stimmt. Ich entwickle mit WinAVR, muss ich da noch irgendetwas einstellen, oder muss noch etwas mit #include eingebunden werden? Als Starthilfe habe ich das tutorial http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#INTERRUPT gemacht. Gibt es evtl. noch andere solche tutorials, möglicherweise eines, das etwas mehr auf die Interrupts eingeht? Gruss
Es funktioniert jetzt. Ich konnte zwar das Problem nicht lösen, sondern nur umgehen. ich habe aus dem Interrupt ein Signal gemacht und dann noch avr/signal.h importiert. Jedoch wüsste ich trotzdem gerne, warum es mit Interrupt nciht funktioniert hat.
Erst mit Einbinden von avr/signal.h hast Du Deine Interrupt-Vektoren eingebunden (siehe die Warnungen vorher). Das Tauschen von Interrupt gegen Signal war sicher nicht die Problemlösung. Trotzdem sollte immer Signal verwendet werden, solange man nicht genau weiss, was man tut. Gruß, Stefan
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.