Forum: Mikrocontroller und Digitale Elektronik "Empfindlichkeit" ext. Interrupts bei µCs


von John (Gast)


Lesenswert?

Hallo!

Ich habe eine generelle Frage zur Verwendung von externen 
Interrupt-Eingängen an Mikrocontrollern. Diese sind typischerweise recht
empfindlich, d.h. relativ kurze Pulse (5 ns?), die eigentlich einfach 
nur Störungen (Einkopplungen) in der Signalleitung sind oder durch 
Anfassen des Gerätes entstehen, können schon triggern. Ich wollte mal 
nach einem generellen "Kochrezept" gegen das Problem fragen. Würde man 
einfach ein passives RC Glied in den Signalweg legen, das nur die 
relevanten Frequenzen noch durchlässt oder gibt es andere Möglichkeiten?

Danke für alle Tipps!
John

von Kühne (Gast)


Lesenswert?

John schrieb:
> Interrupt-Eingängen an Mikrocontrollern. Diese sind typischerweise recht
> empfindlich, d.h. relativ kurze Pulse (5 ns?), die eigentlich einfach
> nur Störungen (Einkopplungen) in der Signalleitung sind oder durch
> Anfassen des Gerätes entstehen, können schon triggern. Ich wollte mal
> nach einem generellen "Kochrezept" gegen das Problem fragen. Würde man

Immer für niederohmige Pegel an den Eingängen sorgen.

von Marian (phiarc) Benutzerseite


Lesenswert?

Die Eingangsbeschaltung hängt von deiner Signalquelle ab. Wenn du da 
aber normale CMOS-Logik hast und ein Berühren des Gerätes führt zum 
Triggern des IRQ, dann ist dein Aufbau fehlerhaft.

von Axel H. (axelh)


Lesenswert?

Möglichkeiten gibt es viele, kommt halt auch ein bisschen drauf an, was 
deine Interrupts denn genau machen. Neben den Lösungen in der 
Hardware-Ebene bleibt auch noch:

- Glitch-Erkennung nutzen (falls vorhanden)
- "entprellen" per Software
- auf höheren Protokollschichten handhaben

von Peter D. (peda)


Lesenswert?

John schrieb:
> Diese sind typischerweise recht
> empfindlich, d.h. relativ kurze Pulse (5 ns?)

Genau dazu sind sie gedacht, ohne Verzögerung zu reagieren.

Will man schnarchlangsame Signale auswerten, z.B. mechanische Kontakte, 
macht man das am besten mit einem Timerinterrupt. Damit kann man sehr 
schön festlegen, was ist Nutzsignaldauer und was nur ne Störung.
Der Timerinterrupt hat auch den Vorteil, daß man beliebig viele Eingänge 
parallel abtasten kann.

von W.S. (Gast)


Lesenswert?

John schrieb:
> Interrupt-Eingängen an Mikrocontrollern. Diese sind typischerweise recht
> empfindlich, d.h. relativ kurze Pulse (5 ns?),

Das ist ne Halbwahrheit. Interrupts sind wie alles andere in jedem µC 
synchron zum Systemtakt. Störungen erzeugen daher nur Interrupts, wenn 
sie direkt zum jeweiligen Abtastzeitpunkt auftreten.

Manche Systeme (z.B. die Cortexe von Nuvoton) haben deshalb zum 
Entstören einstellbare Glitchfilter in der Port-Logik. Wo sowas nicht 
vorhanden ist, muß man sich im Systemaufbau eben selber drum kümmern.

W.S.

von Marian (phiarc) Benutzerseite


Lesenswert?

W.S. schrieb:
> John schrieb:
>> Interrupt-Eingängen an Mikrocontrollern. Diese sind typischerweise recht
>> empfindlich, d.h. relativ kurze Pulse (5 ns?),
>
> Das ist ne Halbwahrheit. Interrupts sind wie alles andere in jedem µC
> synchron zum Systemtakt. Störungen erzeugen daher nur Interrupts, wenn
> sie direkt zum jeweiligen Abtastzeitpunkt auftreten.

Zeitlich betrachtet sind sie damit empfindlicher als etwa Ports zu 
pollen, was man je nach Architektur vielleicht mit maximal 1/4 vom 
Systemtakt oder so schafft.

von Wilhelm F. (Gast)


Lesenswert?

John schrieb:

> d.h. relativ kurze Pulse (5 ns?),

5ns für einen Zyklus sind schon sehr schnell, bestimmt ein µC mit Takt 
200MHz. Genau muß man das dem User Manual entnehmen, wie der 
Interruptcontroller arbeitet.

Beim 8051 wird das Interruptsignal schon grob gefiltert, Spikes machen 
da nichts. Dazu wird der Pegel des Interruptpins in einem 
Maschinenzyklus an zwei Stellen abgetastet, egal ob Pegel- oder 
Flankentriggerung. Beide Pegel müssen gleich sein, um einen Interrupt zu 
erkennen oder nicht. Das ist schon eine Grobmaßnahme der Maschine 
selbst.

Mit 5ns macht man am 8051 nicht viel, der Maschinenzyklus liegt da eher 
bei 1µs, bei modernen Derivaten immer noch im Bereich 100ns.

von Falk B. (falk)


Lesenswert?

@ Wilhelm F. (ferkes-willem)

>> d.h. relativ kurze Pulse (5 ns?),

Ja.

>5ns für einen Zyklus sind schon sehr schnell, bestimmt ein µC mit Takt
>200MHz. Genau muß man das dem User Manual entnehmen, wie der
>Interruptcontroller arbeitet.

Eben. Und da wird man feststellen, dass ASYNCHRONE Interrupts auch 
asynchron erkannt werden, d.h. unabhängig vom Systemtakt. Sprich, dort 
ist ein D oder RS-FlipFlop dahinter, das auf SEHR kurze Pulse reagiert.

Anders sieht es bei synchron abgetasteten Interrupts aus, z.B. Input 
Capture, dort wird maximal mit Systemtakt abgetastet, zusätzlich kann 
man noch einen Glitcvhfilter zu schalten, der nur Pulse breiter als eine 
bestimmte Anzahl Takte erkennt.

von Rudolph (Gast)


Lesenswert?

Falk Brunner schrieb:
> ASYNCHRONE Interrupts auch
> asynchron erkannt werden, d.h. unabhängig vom Systemtakt.

Bei AVR steht sinngemäss im Datenblatt das Ereignisse die kürzer sind 
als ein Takt-Zyklus nicht sicher zur Auslösung führen.

von John (Gast)


Lesenswert?

Vielen Dank für die Antworten! Mir ging's tatsächlich um die allgemeine 
Seite des Problems, trotzdem war der Anlass ein konkreter: ich lese 
gerade so eine digitale Schiebelehre mit einem AVR aus. Es kommt hin und 
wieder zu Einlesefehlern die ich mir nach eingehender Analyse des Codes 
nicht anders als durch Störungen auf der Daten-/Clockleitung von der 
Schieblehre erklären kann. Niederohmiger kann ich das System ja ohne 
weiteres nicht machen, insofern dachte ich ein ein RC-Glied.

von c-hater (Gast)


Lesenswert?

W.S. schrieb:

> Das ist ne Halbwahrheit. Interrupts sind wie alles andere in jedem µC
> synchron zum Systemtakt.

Tsss... Viele µC bieten (gerade für externe Interrupts) auch oder sogar 
ausschließlich asynchrone Auslösungsmechanismen.

Allein die bloße Existenz von Quellen zum Aufwachen aus Schlafzuständen, 
bei denen der Systemtakt angehalten ist, macht das jedem klar, der auch 
nur minimal logisch denken kann...

Die Auslösung der Interrupt_behandlung_ erfolgt natürlich immer synchron 
zum Systemtakt. Die Auslösung des Interrupts selber aber nicht 
notwendigerweise...

von Falk B. (falk)


Lesenswert?

@ Rudolph (Gast)

>> ASYNCHRONE Interrupts auch
>> asynchron erkannt werden, d.h. unabhängig vom Systemtakt.

>Bei AVR steht sinngemäss im Datenblatt das Ereignisse die kürzer sind
>als ein Takt-Zyklus nicht sicher zur Auslösung führen.

Nö, das gilt nur für SYNCHRONE Interrupts, also Input Capture etc. 
Schrieb ich bereits. Das THema hatten wir vor Jahren schon mal.

von John (Gast)


Lesenswert?

Wie könnte ich denn eine mir im Detail unbekannte Quelle (hier: Ausgang 
einer digitalen Schiebelehre) niederohmiger machen um die 
Störanfälligkeit zu verringern? Belastet man die Quelle einfach stärker 
durch einen Widerstand nach Masse?

Grüße
John

von MCUA (Gast)


Lesenswert?

>Wie könnte ich denn eine mir im Detail unbekannte Quelle (hier: Ausgang
>einer digitalen Schiebelehre) niederohmiger machen um die
>Störanfälligkeit zu verringern? Belastet man die Quelle einfach stärker
>durch einen Widerstand nach Masse?
Man sorgt normalerweise dafür (mit Filter), dass das Signal nicht 
schneller als nötig in die Schaltung reinkommt.

von Peter D. (peda)


Lesenswert?

John schrieb:
> Wie könnte ich denn eine mir im Detail unbekannte Quelle (hier: Ausgang
> einer digitalen Schiebelehre) niederohmiger machen um die
> Störanfälligkeit zu verringern?

Warum niederohmiger?

Du mußt ermitteln, welches die kürzeste Pulsdauer auf dem Eingang ist. 
Und dann kann man alle kürzeren Pulse als Störung ansehen.

Allgemein:
Man muß ermitteln, worin sich Nutzsignal und Störsignal unterscheiden.

von John (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Warum niederohmiger?

Das war ein Hinweis vom User "Kühne" weiter oben, der mir soweit 
durchaus einleuchtete. Wenn der Signalweg relativ hochohmig ist, können 
Störungen leichter einkoppeln (sehe ich doch richtig, oder?). Mein 
erster Gedanke war in der Tat auch einen passiven Filter in den 
Signalweg zu legen (s.o.). Die (bedeutungstragenden) Pulslängen sind mir 
bekannt. Mich interessierte nur was es evnt. für Varianten abgesehen vom 
Filter gibt. Vielen Dank nochmal für das Bisherige und ggf. Weitere!

Gruß
John

von Karl H. (kbuchegg)


Lesenswert?

John schrieb:
> Peter Dannegger schrieb:
>> Warum niederohmiger?
>
> Das war ein Hinweis vom User "Kühne" weiter oben,

Da war aber auch noch nicht von einer Schiebelehre die Rede, sondern 
davon, dass du den (angenommenerweise offenen) Pin einfach anfasst.

Merke: WEnn man immer nur die Hälfte seines Problems präsentiert, kriegt 
man keine gescheiten Antworten, die zum konkreten Problem passen.

Wenn deine Schiebelehre auf dem Pin für stabile Verhältnisse sorgt und 
das bischen Strom aufbringen kann, welches der Eingang benötigt, dann 
kannst du mit dem Patschehändchen draufschlagen soviel du willst, da 
rührt sich nichts (es sei denn du hast einen Wackelkontakt). Was anderes 
sind beispielsweise hingegen schon wieder stärkere ELektromotoren in der 
Nähe.

>  Ich wollte mal nach einem generellen "Kochrezept" gegen
> das Problem fragen.

generelle Kochrezepte, die in allen Lebenslagen funktionieren, gibt es 
eher selten.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Niederohmiger geht nur bei open-drain Ausgängen.

Ein push-pull ist schon maximal niederohmig. Ein Serienwiderstand (50 
Ohm) könnte noch die Reflexionen dämpfen.

von Amateur (Gast)


Lesenswert?

Vielleicht solltest Du dem Aspekt: Zwischen zwei Werten etwas mehr 
Aufmerksamkeit schenken. Oft "flattern" da die Zustände.

Was die Unterbrechungen betrifft, ich weis noch nicht mal ob alle Atmels 
gleich sind, ansonsten kocht jeder Herstellen hier sein eigenes 
Süppchen. Ob ansteigende Flanke oder die abfallende, ob ein Wechsel 
reicht. Ob Smitt-Trigger oder 08/15 Logik-Pegel. Ob null, ein, zwei oder 
50 Takte steht im zugehörigen Handbuch.

Mit offenen oder hochohmigen Eingängen lässt sich mittelprächtig 
Rundfunk empfangen, aber sonst kein Staat machen.

Vielleicht solltest Du eine weitere, serielle Schnittstelle 
implementieren, welche den angeblichen Input direkt zum PC sendet. Ist 
Hardwaremäßig nichts mehr frei, so kannst Du diese auch Emulieren. So 
schnell braucht’s ja sowieso nicht sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.