hallo zusammen hab mal ne frage zur neuen winavr (21.04.2006) software. mit der alten software hat mein programm funktioniert bin dann auf die neue software ungestiegen und jetzt funktionieren alle interrupts nicht mehr. hab die codezeilen mal unten angehängt.kann mir jemand sagen was daran falsch ist? gruß michael //*** NEU MCUCR = (1<<ISC01) | (0<<ISC00); GIFR = ((1<<INT0)|(0<<INT1)); TCCR1A = (0<<COM1A1) | (0<<COM1A0) | (0<<PWM10) | (0<<PWM11); TCCR1B = (0<<CTC1) | (0<<CS12) | (1<<CS11) | (0<<CS10); TIMSK = ((1<<OCIE1A)|(1<<TOIE1)); ISR (INT0_vect) ISR (TIMER1_OVF1_vect) //*** ALT MCUCR = (1<<ISC01) | (0<<ISC00); enable_external_int (1<<INT0); TCCR1A = (0<<COM1A1) | (0<<COM1A0) | (0<<PWM10) | (0<<PWM11); TCCR1B = (0<<CTC1) | (0<<CS12) | (1<<CS11) | (0<<CS10); timer_enable_int ((1<<OCIE1A)|(1<<TOIE1)); SIGNAL (SIG_INTERRUPT0) SIGNAL (SIG_OVERFLOW1)
An dem was Du gepostet hast, kann man nichts sehen. Warum schickst Du nicht den kompletten Code?
meine frage richtet sich ja nur nach den geänderten interrupt aufrufen ob die stimmen.kann jedoch später den code nachreichen.
> ISR (TIMER1_OVF1_vect)
Da ist ne '1' zu viel hinter dem OVF (also 'TIMER1_OVF_vect').
-> avr-gcc Tutorial dieser Seite lesen! -> Doku zum Compiler lesen Stichworte: INTERRUPT SIGNAL
@Alex: Nee, eben nicht. INTERRUPT und SIGNAL sind, wie Michael schon ganz richtig erkannt hat, veraltet!
@alex: das habe ich bereits gemacht, aber ich bekomme es alleine mit diesen informationen nicht zum laufen. @johnny: hab bei mir in der io2313.h nachgesehen und da steht der vector so "TIMER1_OVF1_vect", sollte also auch stimmen. ich schalte das globele interrupt flag mit "sei" ein, das gibt es doch noch in dieser version, oder?
OK, da Du oben nicht gesagt hattest, welchen Controller Du verwendest, hatte ich bei einem ATMega nachgesehen, und da heißt der Vektor TIMER1_OVF_vect, was auch Sinn macht, da ein Timer nun mal nur einen Overflow hat... Wenn Du die Interrupts mit 'sei();' einschaltest, sollte das funktionieren. BTW: Wie äußert sich das Problem eigentlich genau? DU schreibst lediglich, dass 'alle Interrupts nicht mehr funktionieren'...
ich habe an meinem externen interrupt einen zero cross detektor, dieser sollte also alle 20ms einen interrupt bringen und meinen code aufrufen, doch da passiert nichts, die codezeilen für den interrupt bleiben unausgeführt.
Schau dir doch mal den disassemblierten Code an, insbesondere ob alle Interruptvektoren ordentlich ausgefüllt sind. Errm, ich hab's: nicht GIFR willst du setzen, sondern GIMSK. Das mit dem TIMER1_OVF1 ist ärgerlich, aber das steht wirklich so in Atmel's XML files drin. :-(
Autsch, das hab ich doch glatt übersehen... Naja, ist ja noch früh am Morgen...
@jörg: du hast natürlich recht, ich hab´s zig mal kontrolliert und nicht gesehen. super! dankeschön! ich hätte bestimmt noch ewig gesucht. gruss michael
@Johnny Diese Neuerung war mit glatt entgangen, schade das der Compiler bei meinen aktuellen Programmen dann nicht automatisch einen Hinweis ala "deprecated Makro" gibt. So merkt man die Änderung unter Umständen erst, wenn beim nächsten Release garnichts mehr geht.
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.