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

Gast #2660572
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.