Forum: Mikrocontroller und Digitale Elektronik INT0 - Interrupt


von Blinky B. (Gast)


Lesenswert?

Hallo,

ich hoffe ihr könnt mir helfen. Es geht um das Interrupt INT0. Ich habe 
die Einstellung "Any logic change on INT0 generates an interrupt 
request" gewählt. Das  heißt doch, dass wenn ich den Taster drücke ein 
Interrupt ausgelöst wird und genauso wenn ich ihn wieder loslasse, 
oder??


Mit freundlichen Grüßen

Alex

von dunno.. (Gast)


Lesenswert?

wenn du nen taster hast wirst du wahrscheinlich durch das prellen so 
einige interrupts erzeugen..

aber prinzipiell hast du recht

mfg

von Blinky B. (Gast)


Lesenswert?

auch wenn ich in der routine für den jeweiligen taster das interrupt 
disable?

von dunno.. (Gast)


Lesenswert?

nö, wenn du interrupts abschaltest, kann in dem pin passieren was will.
je nach architektur solltes du dann aber noch evtl aktive pending-flags 
löschen..

von Blinky B. (Gast)


Lesenswert?

mh dann verstehe ich das verhalten nicht. Also weshalb ich frage...ich 
habe INT0 aktiviert und "any logic...." eingestellt. Jedoch wird das 
interrupt nur ausgeführt, wenn ich die Taste loslasse....Außerdem wird 
das Interrupt auch ausgeführt, wenn ich Taster2(INT1) sowie 
Taster3(INT2) drücke(diesmal in umgekehrter logik), obwohl diese 
überhaupt nicht als Interrupt enabled sind.

von Carsten G. (carry)


Lesenswert?

Sicher das der Controller die Interruptroutine ausführt und nicht doch 
einen Reset?
Zeig doch mal Code und einen Schaltplan. Sonst wird hier nur weiter 
geraten.


Carsten

von spess53 (Gast)


Lesenswert?

Hi

>Also weshalb ich frage...ich habe INT0 aktiviert und "any logic...."
>eingestellt.

Sicher? Deine Aussagen kann niemand überprüfen.

MfG Spess

von Blinky B. (Gast)


Lesenswert?

Also es handelt sich um das Pollin-board.

Obwohl ich die jumper für die 3 taster herausgenommen habe, reagiert der 
controller troztdem auf die taster...deswegen gehe ich jetzt von einem 
lötfehler aus....also suche ich erstmal nach dem hardware-fehler.

von Blinky B. (Gast)


Lesenswert?

hier trotzdem der code
1
/*LEDS****************************************/
2
#define led1_init() portd_pin6_output()
3
#define led2_init()  portd_pin7_output()
4
5
#define led1_on()  PORTD |= 0x20
6
#define led2_on()  PORTD |= 0x40
7
8
#define led1_off()  PORTD &= ~0x20
9
#define led2_off()  PORTD &= ~0x40
10
11
12
/*BUTTONS*************************************/
13
#define BUTTON1 PIND & (1 << PIND2)
14
#define BUTTON2 PIND & (1 << PIND3)
15
16
#define button1_enable()   DDRD &= ~(0x04); 
17
#define button2_enable()  DDRD &= ~(0x08)
18
19
20
#define button1_int_enable()   MCUCR |= ((1<<ISC00)); GICR |= (1<<INT0) //Taster 1
21
#define button2_int_enable()   MCUCR |= (1<<ISC10); GICR |= (1<<INT1) //Taster 2
22
#define button1_int_disable()   GICR &= ~(1<< INT0)
23
#define button2_int_disable()   GICR &= ~(1<< INT1)
24
25
26
27
28
void hw_init()
29
{
30
button1_enable();
31
button2_enable();
32
button1_int_enable();
33
//button2_int_enable();
34
35
pwm_init();
36
37
timer1_init();
38
timer1_int_enable();
39
40
led1_init();
41
led2_init();
42
43
44
global_int_enable();
45
46
}
47
48
/*Tür auf/Auto aufgeschlossen*******************************************************/
49
ISR(INT0_vect) //Taste1
50
{  
51
  //button1_int_disable(); //entprellen
52
  /*
53
  if(frb_status==INACTIVE)
54
  {
55
    pwm_start();
56
    timer1_start();    
57
    frb_status= ACTIVE;
58
  }
59
  
60
  if(BUTTON1 && (frb_status ==ACTIVE))
61
  {
62
    frb_cmd = UP;
63
  }
64
  else if(!BUTTON1 && (frb_status == ACTIVE))
65
   {
66
    frb_cmd = DOWN;
67
    }
68
  */
69
  
70
  if((PORTD & 0x20) == 0x20)
71
  {
72
  led1_off();
73
  }
74
  else
75
  {
76
  led1_on();
77
  }
78
  pwm_start();
79
  timer1_start();
80
81
82
  //button1_int_enable();
83
}

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.