Forum: Compiler & IDEs Neue Winarv software


von Michael (Gast)


Lesenswert?

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)

von johnny.m (Gast)


Lesenswert?

An dem was Du gepostet hast, kann man nichts sehen. Warum schickst Du
nicht den kompletten Code?

von Michael (Gast)


Lesenswert?

meine frage richtet sich ja nur nach den geänderten interrupt aufrufen
ob die stimmen.kann jedoch später den code nachreichen.

von johnny.m (Gast)


Lesenswert?

> ISR (TIMER1_OVF1_vect)

Da ist ne '1' zu viel hinter dem OVF (also 'TIMER1_OVF_vect').

von Alex (Gast)


Lesenswert?

-> avr-gcc Tutorial dieser Seite lesen!
-> Doku zum Compiler lesen

Stichworte:

INTERRUPT
SIGNAL

von johnny.m (Gast)


Lesenswert?

@Alex:
Nee, eben nicht. INTERRUPT und SIGNAL sind, wie Michael schon ganz
richtig erkannt hat, veraltet!

von Michael (Gast)


Lesenswert?

@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?

von johnny.m (Gast)


Lesenswert?

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'...

von Michael (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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. :-(

von johnny.m (Gast)


Lesenswert?

Autsch, das hab ich doch glatt übersehen... Naja, ist ja noch früh am
Morgen...

von Michael (Gast)


Lesenswert?

@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

von Alex (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.