External Interrupt bei ATmega8

Gast #2152172
Lesenswert?

Guten Abend allerseits,

Ich versuche schon den ganzen Tag die externen Interrupts des Atmega8 zu 
benutzen. Ich habe dazu ein kleines Testprogramm geschrieben bei dem 
nach dem Starten des Controllers LED 1 und 2, also PORTC0 und PORTC1 aus 
sind. Sobald zum ersten Mal ein Int request kommt soll die entsprechende 
LED bis zum Reset des Controllers angehen. Leider funktioniert das Ganze 
aus irgendeinem Grund nicht.

Kann mir eventuell irgendjemand helfen?

Vielen Dank im Vorraus
Marco B

Hier mein Testprogramm:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4

5

6
void portinit (void);
7
void ext_int (void);
8

9

10

11
ISR( INT0_vect  )
12
{
13
  PORTC &= ~(_BV(PC0)); //LED on -> Bit löschen (invertiert[STK500])
14
}
15

16

17

18
ISR( INT1_vect  )
19
{
20
  PORTC &= ~(_BV(PC1)); //LED on -> Bit löschen (invertiert[STK500])
21
}
22

23

24
void main(void)
25
{
26

27
  portinit();
28
  ext_int();
29

30
  PORTC |= _BV(PC0);  //LED off -> Bit setzen (invertiert[STK500])
31
  PORTC |= _BV(PC1);  //LED off -> Bit setzen (invertiert[STK500])
32

33
  sei();        // interrups global aktiviert
34

35
  while (1);
36

37
}
38

39

40
void portinit ()    
41
{
42

43
  DDRD  |= _BV(DDD2)|_BV(DDD3);  //PD2 & PD3 als input 
44
  PORTD |= _BV(PD2)|_BV(PD3);     //PUllupwiderstände aktivieren
45

46
}
47

48

49
void ext_int ()
50
{
51
  
52
  MCUCR |= _BV(ISC11)|_BV(ISC01); //INT0 & INT1 interrupt request bei falling edge
53
  GICR  |= _BV(INT1)|_BV(INT0);   //INT0 & INT1 interrupt enable
54

55
}
Gast #2152282
Lesenswert?

Einfache Grundregel: Nach Reset muß alles ungefährlich sein.

Stell dir vor, du hast einen Spannung von einem niederohmigen Sensor 
direkt an einem Pin liegen. Wenn der uC beim Reset die Pins 
standardmäßig als Ausgang schalten würde, könnte das den uC schnell den 
Ausgangs-FET kosten.

MfG

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