Forum: Mikrocontroller und Digitale Elektronik problem mit interrupt


von martin (Gast)


Lesenswert?

ich benutze einen attiny13A und möchte damit per taster einen Interrupt 
auslösen. Taster hängt an Pin4 aktiv low mit pullup.

Die Register sind so initialisiert

GIMSK |= (1<<PCIE);     // Pin Change Interrupt Enable
PCMSK |= (1<<PCINT4);   // PCINT4 Interrupt Enable
MCUCR |= (1<<ISC00);    // Any logical change on INT0 generates an 
interrupt

Und das ist die ISR:

ISR (INT0_vect)
          {
              Taster_state ^= (1<<0);     // toggle Taster_state
              if(Taster_state==0)         // Taster losgelassen
              {
                  TCCR0B &= ~((1<<CS00)|(1<<CS01)|(1<<CS02)); // Stop 
Timer
              }
              _delay_ms(50);                          // 50ms warten

              if(Taster_state==1)                     // Taster gedrückt
              {
                  TCCR0B |= ((1<<CS00)|(1<<CS01)|(1<<CS02));// Start 
Timer
              }
          }

Das zeigt AVR Studio immer an:
../main.c:75: error: static declaration of '__vector_1' follows 
non-static declaration

Kann mir bitte jemand helfen ich weiß echt nicht mehr weiter

von martin (Gast)


Lesenswert?

Hat jemand eine Idee warum er nicht in die ISR springt?
Ist das mit ISR (INT0_vect) schon richtig so

von Jörg G. (joergderxte)


Lesenswert?

Die ISR gehört nicht IN die main()-Funktion (gilt für alle Funktionen).

von Grübler (Gast)


Lesenswert?

So habe ich keine Störmeldungen
bekommen.
1
#include <avr/interrupt.h>
2
#define F_CPU 600000UL 
3
#include <util/delay.h>
4
5
char Taster_state = 0;
6
int main(void)
7
{
8
9
GIMSK |= (1<<PCIE);     // Pin Change Interrupt Enable
10
PCMSK |= (1<<PCINT4);   // PCINT4 Interrupt Enable
11
MCUCR |= (1<<ISC00);    // Any logical change on INT0 generates an interrupt
12
13
for(;;);
14
15
return(0);
16
}
17
18
//Und das ist die ISR:
19
20
ISR (INT0_vect)
21
 {
22
     Taster_state ^= (1<<0);     // toggle Taster_state
23
     if(Taster_state==0)         // Taster losgelassen
24
     {
25
         TCCR0B &= ~((1<<CS00)|(1<<CS01)|(1<<CS02)); // Stop Timer
26
     }
27
     _delay_ms(50);                          // 50ms warten
28
29
     if(Taster_state==1)                     // Taster gedrückt
30
     {
31
         TCCR0B |= ((1<<CS00)|(1<<CS01)|(1<<CS02));// Start Timer
32
     }
33
 }

von martin (Gast)


Lesenswert?

Die IST ist außerhalb von main und der endlosschleife
ich werd noch verrückt hier

von g457 (Gast)


Lesenswert?

sei(); Ansonsten zeig mal den ∗Original∗code.

von g457 (Gast)


Lesenswert?

..da fehlt noch ein ∗vollständigen∗ vor dem ∗Original∗</Ingrid>

von martin (Gast)


Angehängte Dateien:

Lesenswert?

hier die original files

von Maxx (Gast)


Lesenswert?

martin schrieb:
> Die IST ist außerhalb von main und der endlosschleife

Die main.c sagt da was anderes

von g457 (Gast)


Lesenswert?

1
int main (void)
2
{
3
[..]
4
ISR (INT0_vect)
5
[..]
6
}
Klammer vorrücken und gut iss.

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.