www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ext. Interrupt auf fallende Flanke löst auch auf steigende Flanke aus!


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: dost0011 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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:
----------------------
#define PIN_v_ist PB2


/* local prototypes */
int main(void);
void init_all(void);
void init_Port(void);
void init_PWM(void);


#include <avr/io.h>
#include <avr/interrupt.h>

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


/* -------------------------------------------------- */
int main(void)
{
  init_all();

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

  /* Schaltet den Interrupt frei */
  sei();
  while(1)
  {    
    _NOP();
  }
}

void init_all(void)
{
  init_Port();
  /* The falling edge of INT0 generates an interrupt request */
  sbi(MCUCR,ISC01);
  /* Interrupt Freischaltung INT0 -> Speed */
  sbi(GIMSK,INT0);
}


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


ISR(INT0_vect)
{
  _NOP();
}

----------------------------------
Stimulidatei:
#1
PINB = 0
#2000
PINB = 4

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

Hab das gerade mal getestet. Ist ein Fehler im Simulator2. Mit dem 
anderen Simulator werden die Interrpts korrekt ausgelöst.

MfG Spess

Autor: dost0011 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Vielen vielen Dank.
Welchen Simulator hast Du denn verwendet?
Den könnte ich ja dann auch nehmen, wenn der besser ist...

Autor: spess53 (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hi

>Welchen Simulator hast Du denn verwendet?

Einfach unter Debug->Select Platfom and Device den AVR Simulator 
auswählen.

MfG Spess

Autor: Hannes Lux (hannes)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
dost0011 schrieb:
> wenn der besser ist...

Der ist nicht "besser", der hat nur andere Fehler...

...

Autor: Karl Heinz Buchegger (kbuchegg) (Moderator)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net