Ext Interrupt ATmega644 wird nicht erreicht

OP (Firma: MAMIMO STudios) #2669783
Lesenswert?

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 #2669810
Lesenswert?

> 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) #2669825
Lesenswert?

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 #2669850
Lesenswert?

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) #2669893
Lesenswert?

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) #2669928
Lesenswert?

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!
#2669945
Lesenswert?

Ä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
#2669986
Lesenswert?

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) #2670089
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren