Ext Interrupt ATmega644 wird nicht erreicht

OP (Firma: MAMIMO STudios) #2669783
Hallo,

gibt es jemanden, der die AVR Studio version 6.0.1843 installiert hat? 
Ich versuche schon seit geraumer Zeit den folgenden Code zum Laufen zu 
bringen.
Der Timer von meinem ATmega644 soll einfach nur bei einer steigenden 
Flanke in eine Interruptroutine springen, was er aber nicht will!
Wenn ich in der Simulation den ICP Pin auf high setze, wird zwar das 
ICF1 Capture Flag gesetzt aber er springt nicht in die ISR Routine. Was 
ist da los?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
volatile int b;
5

6
int main (void)
7
{
8
  
9
  TCCR1A = 0;                      // normal mode, keine PWM Ausgänge
10
  TCCR1B =  (1<<CS10)    // start Timer mit Systemtakt
11
          + (1 << ICES1);            // steigende Flanke auswählen
12
  TIMSK1 = (1<<TOIE1) + (1<<ICIE1);   // overflow und Input-capture 
13
  sei();
14
  while(1)
15
  { }  //nichts tun auf Interrupt warten
16
}
17

18
ISR(TIMER1_CAPT_vect){
19
b=ICR1; //mache irgendwas 
20
}
Gast
> TIMSK1 = (1<<TOIE1) + (1<<ICIE1);
Sollte der Syntax nicht wie folgt aussehen:
TIMSK1 = (1<<TOIE1)|(1<<ICIE1);

Überschreibt die Einstellung des Timers das DDR Register, eventuell 
musst du dich darum kümmern?
OP (Firma: MAMIMO STudios)
Habs grade nochmal gecheckt. Das DDR Register ist nach der 
Initialisierung des Timers unverändert. Alles Pins sind als Eingänge 
festgelegt. Und das entspr. Flag wird ja auch gesetzt! Das ist ja das 
komische. Es wird das ICF1 Flag gesetzt aber nicht die Interrputroutine 
angesprungen.
Gast
Thomas Eckmann schrieb:
> Wenigstens. Besser noch:
> TIMSK1 |= (1<<TOIE1)|(1<<ICIE1);

Hmm, eher nicht. Wenn man initialisiert und Register in einem 
definierten Zustand haben möchte, wird man nicht verodern, eine 
Zuweisung per = ist da schon richtig.

Denn wenn z.B. Bootlader Register vorgelegt hat, sucht man sich mit 'ner 
Veroderung 'nen Wolf.
OP (Firma: MAMIMO STudios)
Ich schmeiß gleich meinen Laptop aus dem Fenster. Das kann doch nicht 
sein! Ich will doch einfach nur auf einen blöden externen pin triggern! 
Der Code ist doch nicht groß. Könnte das mal jemand exemplarisch selbst 
schreiben?
Ich weis nicht, was ich noch machen soll.
OP (Firma: MAMIMO STudios)
Naja...der ganze code steht schon oben. Der 2. Interrupt ist der 
Overflow vom Timer, aber ich gehe von dem Zustand aus, der der Timer 
erst garnicht zum Overflowen kommt.

Was passiert denn, wenn jemand den Code bei sich rein kopiert und PIND6 
auf high setzt. Vlt liegt es an meine PC.

Ich geb mir schon große Mühe, das Fenster zu zu lassen!
Ähm, kannst nicht testen, hab kein AVR-Studio.

Weiß nicht, was passiert, wenn der Simulator keine ISR findet.
Keine Ahnung, ob der Simulator "richtig" funktioniert. Ich hab schon von 
Fehlern gehört.

ICF1 Capture Flag gesetzt aber er springt nicht in die ISR Routine.

Wenn das Flag gesetzt wird, sollte der Interrupt normalerweise ja auf 
dem MC dann auslösen. Funktioniert dein sei();, wird damit das I-Bit im 
SREG gesetzt?? Sonst lads mal auf nen MC und schau, obs dort läuft.

Am PC wirds wohl nicht legen, höchstens am Simulator
Viel Erfolg
Hallo

Hab es gerade mit der alten AVRStudio4 (4.17) ausprobiert. Da 
funktioniert es mit dem Simulator wenn ich PIND6 setze oder das ICF1 
Flag im TIFR1 Register setze. Allerdings musste ich das TOIE1 Flag raus 
nehmen, da ja kein Einsprungvector da ist und das kurze Programm dadurch 
ständig einen Reset gemacht hat.

Gruß Steffen
OP (Firma: MAMIMO STudios)
Mein Leben ist wieder lebenswert! Ich werde umgehend eine mail an Atmel 
verfassen. Vlt. ändern die nochmal was in ihrer Version.

Dann muss ich nun wohl oder übel mit der 4.17ner Version hantieren!


Nochmal vielen Dank. Ihr wollt nicht wissen, wie lange mich dieser Mist 
schon aufhält.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.