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 14:13)
Als Antwort auf Re: Externe Interrupts von jo - 22.11.2010 13:42

> > 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

sorry im vorrigen Anhang war eine falsche Datei angezogen, hier ist die korrekte Excel Datei
LCD Zeichen definieren.zip




    Antwort schreiben


Antworten: