Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Externe Interrupts Kategorie: Verschiedenes (von jo - 22.11.2010 13:42)
Als Antwort auf Externe Interrupts von Joerg - 22.11.2010 13:33

> Hallo,
>
> ich habe auf meine MEGA128 Projectboard das unten aufgeführte Programm gestartet,
> um den externen Interrupt 7 zu testen.
> PE7 habe ich über eine 20cm lange Leitung mit einem 4,7KOhm  an +VCC angeschlossen.
>
> Wenn ich nun meinen Lötkolben oder eine Halogenlampe mit Trafo ein und ausschalte,  
> erhalte ich ständig Interrupts. Selbst das Reduzieren des Widerstands auf 1KOhm bracht keine �nderung.
> Mit der Leitung  ohne Widerstand an VCC gab es keine Interrupts.
>
> Ich habe dann die Spannungsversorgung von einem Schaltnetzteil auf ein Labornetzteil gewechselt.
> Aber selbst mit dem Labornetzteil habe ich 2,7KOhm benötigt, damit keine Interrupts mehr kommen.
>
> Ist diese Verhalten normal?
> Gibt es geeignete SchaltungsmaÃ?nahme um die Interrupts zu verhindern?
>
> Für Hilfe währe ich sehr dankbar.
>
> Hier noch ein Frage an André Helbig:
>
> Wenn man bei Deiner PCF-Ports-HS I²C-Porterweiterung die Interruptleitung mit dem Projektboard
> verbinden würde, hätte man dann den gleichen Effekt?
>
>
> Grü�e Joerg
>
>
>
> #define LF        0x0A
> #define CR        0x0D
> // ExtInt Quelle definieren
> #define EXTINT INT_7
>
> // 0: ein low Pegel löst einen Interrupt aus
> // 1: jeder Flankenwechsel löst einen Interrupt aus
> // 2: eine fallende Flanke löst einen Interrupt aus
> // 3: eine steigende Flanke löst einen Interrupt aus
>
> #define INTMODE 2
>
> unsigned int count;
>
> void Ext_ISR(void)
> {
>     byte i;
>     int irqcnt;
>
>     Msg_WriteText("Ext IRQ  ");
>     Msg_WriteInt(count);
>     Msg_WriteChar(CR);
>
>     count++;
>
>     irqcnt=Irq_GetCount(EXTINT);         // Interrupt Request Counter
>  }
> //------------------------------------------------------------------------------
> // Hauptprogramm
> //
> void main(void)
> {
>     Msg_WriteText("Ext IRQ Test ");
>     Msg_WriteInt(EXTINT);
>     Msg_WriteChar(CR);
>
>     count=0;
>
>     Irq_SetVect(EXTINT,Ext_ISR);         // Interrupt Service Routine definieren
>     Ext_IntEnable(7,INTMODE);           // Interrupt aktivieren
>
>
>
>     while (1)
>     {
>     }
>
> }

Hallo Jörg,
das Verhalten ist völlig normal, Eingänge sollten immer über einen Tiefpass geschalten werden
siehe http://de.wikipedia.org/wiki/Tiefpass
z.B. R=10K, c = 100nF. Bei längeren Leitungen (z.B. < 10 m) verwende ich zum Schutz noch
Transildioden (http://de.wikipedia.org/wiki/Transildiode)

Viele Grü�e
Jo


    Antwort schreiben


Antworten:

Re: Externe Interrupts (von Joerg - 23.11.2010 7:32)
    Re: Externe Interrupts (von jo - 23.11.2010 12:57)
        Re: Externe Interrupts (von Joerg - 23.11.2010 15:02)
            Re: Externe Interrupts (von jo - 23.11.2010 15:45)
Re: Externe Interrupts (von jo - 22.11.2010 14:13)