Re: Externe Interrupts Kategorie: Verschiedenes (von Joerg - 23.11.2010 7:32) | ||
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 Hallo Jo, vielen Dank für die Info. Der Tiefpass funktioniert aber leider nur direkt am Pfostenstecker auf dem Projektboard. Verbinde ich den Pfostenstecker mit einer 10cm Langen Leitung zum Lochrasterfeld, dann verbessert sich der Effekt, ist aber trotzdem noch vorhanden. Das RC Glied am Pfostenstecker ist doch schon eine ganz schön wilde Verdrahtung� Grü�e Joerg | ||
Antwort schreiben Antworten: 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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum