ATtiny2313 - INT0 und INT1 gleichzeitig

Gast #1728926
Lesenswert?

Hi,

ich bin ziemlich unerfahren was die Programmierung von µC betrifft, da 
ich mir erst vor ein paar Tagen das Atmel Evaluationboard (von Pollin) 
bestellt habe, dazu einen ATtiny2313.

Nun versuche ich die LED die auf diesem Board ist zum Blinken zu 
bringen.
Das Blinken selbst ist nicht das Problem - mein Problem liegt darin:

Entferne ich all den Code, der zu INT1_vect "gehört", dann funktioniert 
das Schalten der LED per INT0_vect wunderbar (beim Drücken auf Taster1 
fängt die LED das blinken an).

Füge ich nun den Code für INT1_vect ein, compile und flashe, dann ist 
Taster1 nicht mehr funktionstüchtig, Taster2 dahingegen funktioniert.

Kann der ATtiny2313 nur einen Interrupt "verwalten" oder liegt mein 
Fehler wo anders ?

Ich nutze avr-gcc 4.3.2 unter Debian Lenny.
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include <avr/interrupt.h>
4

5
volatile uint8_t led = 0;
6

7
ISR(INT0_vect)
8
{
9
  led = ~led; // Toggle "led"
10
}
11

12
ISR(INT1_vect)
13
{
14
  led = ~led;
15
}
16

17
int main(void)
18
{
19
  DDRD |= _BV(PD5); // PD5 -> Output
20
  DDRD &=~ _BV(PD2); // PD2 -> Input
21
  DDRD &=~ _BV(PD3); // PD3 -> Input
22

23
  GIMSK = _BV(INT0); // Enable INT0 at PD2
24
  MCUCR = _BV(ISC01); // INT0 at release of button
25

26
  GIMSK = _BV(INT1); // Enable INT1 at PD3
27
  MCUCR = _BV(ISC11); // INT1 at release of button
28

29
  sei(); // Enable INTs
30

31
  while(1)
32
  {
33
    if(led)
34
    {
35
      PORTD ^= _BV(PD5);
36
      _delay_ms(500);
37
    }
38
  }
39
  return 0;
40
}

Grüße Chris
Gast #1728942
Lesenswert?

Chris schrieb:
> GIMSK = _BV(INT0); // Enable INT0 at PD2
>   MCUCR = _BV(ISC01); // INT0 at release of button
>
>   GIMSK = _BV(INT1); // Enable INT1 at PD3
>   MCUCR = _BV(ISC11); // INT1 at release of button

Du überschreibst die Einstellungen vom INT0 bei der Initialisierung von 
INT1.
Mach es so wie bei den Ports mit "|=".

???

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