Forum: Mikrocontroller und Digitale Elektronik Interrupt "unempfindlicher" machen


von Jörg W. (yorgi)


Lesenswert?

Guten Abend zusammen.

Ich arbeite im Moment an einem Projekt, bei dem ich Interrupt-gesteuert 
ein kabelgebundenes/kabelloses Signal mit den INT Eingängen eines 
ATmega16 abtaste. Das ganze läuft auf TTL Basis, was die Auslösung eines 
Interrupts aber sehr empfindlich macht. Schon beim bloßen berühren der 
Pins, wird der Interrupt ausgelöst.
Ich suche eine Möglichkeit, das ganze ein wenig unempfindlicher zu 
machen. Ich hatte an einen Schmitt-Trigger gedacht oder die Nutzung des 
A/D-Wandlers. Die Eingangssignale haben eine Frequenz von 2kHz, welche 
ich berücksichtigen muss.

Hättet ihr Tipps oder andere Vorschläge, wie ich das Problem lösen 
könnte??

Danke schonmal.

mfG

Yorgi

von Peter (Gast)


Lesenswert?

warum nicht einfach ein Pull-Down Widerstand verwenden?

von YS-500 (Gast)


Lesenswert?

Einen niederohmigen ziehrunter oder ziehrauf Widerstand benutzen.

von Sven P. (Gast)


Lesenswert?

TTL macht die Auflösung gerade unempfindlich, dazu isses ja da. du 
hast doch da schon eine Hysterese eingebaut -- oder ists doch kein 
echtes TTL...?

Ein echter TTL-Totempol sorgt für stabile Verhältnisse, da wackelt nix.

von Helmut L. (helmi1)


Lesenswert?

>Schon beim bloßen berühren der Pins, wird der Interrupt ausgelöst.

Hast du eventuell Eingänge offen gelassen ?
Bei einer richtig dimensionierten Schaltung sollte das eigentlich nicht 
passieren. Wie meine Vorredner schon gesagt haben mach mal niederohimge 
Pullup/Pulldownwiderstände an deinen Eingängen. Wenn nötig noch ein 
kleines C nach GND.

Es wäre auch hilfreich wenn du mal deinen Schaltplan posten würdest.

Gruss Helmi

von Jörg W. (yorgi)


Lesenswert?

Hallo zusammen,

danke erstmal für die Antworten.
Das mit den Pullsups werde ich testen.
Einen wirklichen Schaltplan gibt es nicht, da ich im Moment nur mit zwei 
STK500 Boards und den ATmegas arbeite.
Der grobe Aufbau sieht wie folgt aus:

Messgerät -> µC1 ----------> µC2 -> Anzeige

Die Verbindung von µC1 und µC2 ist zu Testzwecken mit Kabeln aufgebaut, 
soll aber durch Funkmodule ersetzt werden.
Die Verarbeitung der Eingangssignale ist an beiden Controllern mit 
Interrupts realisiert. Die Ausgänge des ersten Controllers sind einfach 
mit den INT-Eingängen des zweiten verbunden. Leider reagiert der 
INT-Eingang des zweiten Controllers schon beim Einschalten des ersten 
STK Boards, was natürlich so nicht gedacht ist. Das gleiche passiert 
beim Einschalten des Messgerätes. Die Spannungsspitzen beim Einschalten 
reichen also schon für das Auslösen der Interrupts aus. Daher meine 
Bezeichnung der "empfindlichen" Eingänge. Bei den Funkmodulen ergibt 
sich auch später das Problem, dass ich ein starkes Rauschen am Empfänger 
habe, falls der Sender nicht sendet.
Diese Probleme muss ich lösen, damit meine Interrupt-Routinen korrekt 
arbeiten.

Werde mal posten, ob die Pullups was gebracht haben.


mfG Jörg

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Was spuckt denn das Meßgerät für ein Übertragungsprotokoll aus? 
Vielleicht kann man ja ein Hardware-Interface des Controllers nutzen 
oder gar keinen externen Interrupt, sondern timerbasiertes Polling.

von Jörg W. (yorgi)


Lesenswert?

Das "Protokoll", wenn du es so nennen willst, habe ich selber 
geschrieben.
Ist ein Manchester-Code mit einer Frequenz von 2kHz und ner Baud von 
1000.
Für die Abtastung nutze ich Timer und Interrupts, ob an den passenden 
Stellen abzutasten.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Dafür brauchst Du aber keinen externen Interrupt, das kannst Du per 
Polling machen. Du läßt einen Timer beipielsweise alle 200µs auslösen, 
in dessen ISR kontrollierst Du den Signalpin und notierst Dir, wie weit 
der Timer gezählt hat, um auf Deine Bits zu kommen. Eventuell 
synchronisierst Du dann noch den Timer zum eintreffenden Signal und gut 
ist. Auf diese Weise kannst Du Signalstörungen, die kürzer als ein Bit 
sind, ganz gut filtern. Zusätzlich machst Du noch einen externen PullUp 
oder PullDown von 10k dran und in Serie zum AVR-Pin noch einen 
10kOhm-Widerstand. Dieser schützt den Portpin vor statischen Entladungen 
und anders gearteten Fehlspannungen.

von Jörg W. (yorgi)


Lesenswert?

Ich muss aber irgendwie an den "Beginn" meiner Übertragung kommen
und dazu nutze ich den Interrupt, da ich ja sonst nicht sagen kann, ob 
und an welcher Stelle ich bei meinen gesendeten Informationen bin.
Das mit den Widerständen werde ich testen, danke.

mfG Jörg

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Den Beginn einer Übertragung kannst Du zum Beispiel mit einer überlangen 
"1" deklarieren, die länger ist, als ein langer Bitphasenwechsel. Da Du 
das Protokoll selbst schreibst, kannst Du doch mit allen Tricks arbeiten 
und trotzdem eine zuverlässige Übertragung erreichen.

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.