ext. Interrupt auf fallende Flanke löst auch auf steigende Flanke aus!

Gast #2660572
Lesenswert?

Hallo,

ich glaube es nicht. Jetzt habe ich meinen Code soweit 
zusammengestrickt, dass er nur noch aus wenigen Zeilen besteht.
Das Problem: Wenn ich den ext. Interrupt INT0 mit ISC1=1, ISC0=0 auf 
eine fallende Flanke konfiguriere, dann löst der Interrupt trotzdem auf 
eine steigende Flanke aus? Was mache ich falsch?
Wenn man einen Breakpoint an die ISR setzt, dann springt er in Zyklus 
2007 hinein, obwohl PINB von 0 auf 4 springt (steigende Flanke).
Ich weiss mir nicht mehr zu helfen...

Code:
----------------------
1
#define PIN_v_ist PB2
2

3

4
/* local prototypes */
5
int main(void);
6
void init_all(void);
7
void init_Port(void);
8
void init_PWM(void);
9

10

11
#include <avr/io.h>
12
#include <avr/interrupt.h>
13

14
#define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
15
#define _NOP() do { __asm__ __volatile__ ("nop"); } while (0)
16

17

18
/* -------------------------------------------------- */
19
int main(void)
20
{
21
  init_all();
22

23
  /* Lösche den erzeugten Interrupt */
24
  sbi(GIFR,PCIF);
25
  sbi(GIFR,INTF0);
26

27
  /* Schaltet den Interrupt frei */
28
  sei();
29
  while(1)
30
  {    
31
    _NOP();
32
  }
33
}
34

35
void init_all(void)
36
{
37
  init_Port();
38
  /* The falling edge of INT0 generates an interrupt request */
39
  sbi(MCUCR,ISC01);
40
  /* Interrupt Freischaltung INT0 -> Speed */
41
  sbi(GIMSK,INT0);
42
}
43

44

45
void init_Port(void)
46
{
47
  /* Eingänge und nicht benutzte PINs mit Pullup abschliessen */
48
  PORTB = (1<<PIN_v_ist);
49
}
50

51

52
ISR(INT0_vect)
53
{
54
  _NOP();
55
}

----------------------------------
Stimulidatei:
1
#1
2
PINB = 0
3
#2000
4
PINB = 4
Gast #2660629
Lesenswert?

Hi

>Ich weiss mir nicht mehr zu helfen...

Dann mach es wie alle anderen auch und nimm einen realen Controller, ein 
paar Leds, Taster ... . Den Simulator benutze ich eigentlich nur um 
hardware unabhängige Routinen zu testen.

MfG Spess
#2661158
Lesenswert?

Und irgendwann ist mit dem Simulator, jedem Simulator, sowieso Schluss 
und es führt kein Weg mehr an realer Hardware vorbei.

Denn reale Hardware hat nun mal ein paar Eigenheiten, die man nur mit 
sehr sehr viel Aufwand simuliert bekommt. Zb Kontaktprellen, zb 
Spannungspegel die eben nicht genau 5V sind, zb Beeinflussung der 
Versorgungsspannung, zb minmale Schaltzeiten (Relais), zb ....

Den Simulator kannst du benutzen um die grundsätzlichen Programmlogiken 
zu testen, ob Berechnungen stimmen, ob du dich wo mit den Datentypen 
verhaupt hast, .... Aber alles was in die Rubrik 'sitzt mehr oder 
weniger direkt an den I/O Pins' fällt, da ist dir der Simulator nicht 
sehr hilfreich.

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