Tach :) Ich sitze nun seit etwa zwei Stunden an meinem Interrupt Problem... Auf Suche hab ich mich auch schon begeben, hier im Forum, google und altavista. Rausgekommen ist nur, das in gcctest2.c anscheinend eine led mithilfe des timerinterupts zum blinken gebracht wird. Nun wäre diese Datei warscheinlich eine riesige Hilfe, da mein Programm ziemlich ähnlich funktionieren soll. Ich hab mir mittlereweilen schon zwei alte WinAvr installationen gesaugt und nirgends ist die Datei enthalten-hat die vielleicht noch jemand? Falls das nicht der Fall ist, hier mal ein ausschnitt aus meinem Programm.. #include <sig-avr.h> SIGNAL(SIG_OVERFLOW1) { PRINT("N"); outp(0, TCNT1H);// Reset Timer outp(0, TCNT1L); } //.. main() { //------------------------ // Timer 1 init //----------------------- outp(0, TCCR1A); outp(4, TCCR1B);// Prescaler /256 outp(0, TCNT1H); outp(0, TCNT1L); sbi(TIMSK, TOIE1);//enable timer //....... } Das ist eigentlich alles, was mit dem Timer zu tun hat, und ich sollte doch eigentlich immer mal wieder ein N über den uart bekommen-es tut sich aber rein gar nichts. An der Funktion PRINT liegts nicht, die läuft einwandfrei...Im Moment ist mir auch noch egal wieviele Male ich den Interrupt bekomme, es soll sich einfach mal etwas tun...
das gibts in meiner alten gcc version leider noch nicht, darum aktiviere ich den interrupt mit sbi(TIMSK, T0IE1);
> das gibts in meiner alten gcc version leider noch nicht
Wirklich?!
Dann informier dich mal was sei() macht! Es gibt nämlich noch sowas wie
ein "Global Interrupt Enable" Flag.
ja ich weiss, das würde alle interupts einschalten, aber sollte doch auch so funktionieren wie ichs gemacht habe...weil sei(); gibt mir nen fehler beim gcc ;)
Hallo, schreib statt #include <sig-avr.h> erst mal #include <avr/signal.h> #include <avr/interrupt.h> und probiers noch mal. Bei sei() gibts deshalb eine Fehlermeldung weil sei() in interrupt.h definiert ist. Und: Um mit Interrupts arbeiten zu können muss immer das Globale Interrupt Flag gesetzt sein. Gruß Christian
Viele Fragen würden sich nach Lesen des Tutorials erledigen ... http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmieren_mit_Interrupts
ok, hab nun die interrupt.h auch noch eingebunden, hab die wohl
übersehen :S
Mein gcc ist aber wirklich ein antikes Stück, avr/interrupt.h
gibts noch gar nicht. Welche Version es ist kann ich nicht wirklich
sagen, ich hab den sicher vor nem Jahr gedownloaded, dann ein Programm
angefangen und nun fertig geschrieben, desshalb verwende ich auch
keine
neuere Version. Nicht mal beim compilieren gibt der gcc seine version
bekannt :(
Wie auch immer das Problem mit dem Interrupt besteht immer noch,
obwohl
ich nun auch sei(); verwende...
>Viele Fragen würden sich nach Lesen des Tutorials erledigen ...
Kenne ich sehr wohl nur habe ich da anscheinend nicht alles gelesen,
sondern nur ab den verschiedenen Registern, um die Timer zu setzen,
dass da oben noch #include <avr/interrupt.h> stand sah ich leider nicht
...
>Nicht mal beim compilieren gibt der gcc seine version >bekannt :( $ avr-gcc --version
ahaaa ;-) danke :P 3.0.2 hab ich...also ziemlich alt, ich würde sogar sagen das war noch nicht als package mit pn2 und so damals, also noch nicht als "winavr"...
AAAAAARRGG ich vollidiot lol :D Ich hab sei(); erst nach meinem üblichen ata init eingefügt. Naja und zu meinen Tests hab ich die hdd eben nicht immer angeschlossen, folglich auch kein erfolgreicher init damit auch kein sei(); Naja jedefall gehts jetzt suppi, muchas gracias ;)
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.