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
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.
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.
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
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.
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.
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.
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.
@ 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.
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.
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.
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...
@ 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.
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
>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.
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.
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.