Forum: Mikrocontroller und Digitale Elektronik Arduino Interrupt überempfindlich


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von rollmops (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem mit meinem Arduiono und den Interrupts.

Ich habe ein Signal, das 2,5 Volt hat. In das Signal sind negative Peaks 
auf ca. 0,5 bis 1 V geprägt.
Also so:

-----   ------- 2,5V
     | |
     | |
     |_|     0,5V
_____________0V (Gnd)

Mit dem Arduino möchte ich nun die positiven und negativen Flanken 
detektieren um eine LED ein, bzw. auszuschalten. Außerdem sollen die 
negativen Flanken gezählt werden.

Zum Testen habe ich das Signal mit einem Taster näherungsweise 
dargestellt. Alles hat funktioniert.

Wenn ich aber mein reales Signal, dass ich habe an den Pin anlege 
funktioniert es nicht mehr, da das Signal anscheinend zu stark rauscht. 
Es gibt kleinere Peaks, die ich nicht haben will, die von 2,5V aus ca. 
200mW nach oben und untern reichen. Also insgesamt rauscht das Signal 
ungefähr 400mW breit.
Die LED flackert nur noch uns es werden viel zu viele negative Flanken 
gezählt.

Werden diese Peaks auch schon als Flanken detektiert?
Was kann ich dagegen tun?

von rollmops (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Meine natürlich dass es um 200mV rauscht.

von Horst (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Wo hast Du das Signal angeschlossen? An den Komparator, einen analogen 
Eingang oder einen digitalen?

von Arduinoquäler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
rollmops schrieb:
> ich habe ein Problem mit meinem Arduiono und den Interrupts.

Wenn es ein 5V-Arduino ist dann hast du schon deswegen
Probleme weil dein Signal sich in einem undefinierten
Bereich bewegt.

Um dein Signal sauber zu detektieren brauchst du einen
Komparator dazwischengeschaltet.

von MaWin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
rollmops schrieb:
> Was kann ich dagegen tun?

Eine ordentliche Schaltung aufbauen ?

Ein Eingang ist doch nicht per Definition für jedes noch so krude Signal 
geeignet was du da reinstopfst.

Sondern man muss sich schon an die Datenblattvorschläge was als high und 
was als low erkannt wird halten.

Also brauchst du bei deinem schlechten Signal eine 
Signalpräkonditionierung, die Rauschen entfernt und die Signalpegel auf 
high und low verstärkt.

Vielleicht ein externer Komparator.

Vielleicht ist dein Signal auch ok, und man kann elektronisch entstören, 
so wie man Taster entprellt, weil man weiss, was ein zulässiges Signal 
wäre und was Störungen sein müssen.

Übrigens liefern Taster auch kein saoberes Signal bei dem man Flanken 
zählen kann. Wenn es damals also funktionierte, hast du die Fehlfunktion 
bloss nicht gesehen....

von rollmops (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Beim testen hat mein Programm natürlich die Flanken mitgezählt, als der 
Taster geprellt ist. Aber ich wusste ja, dass das passiert und habe es 
toleriert. Ich wollte ja nur sehen on mein Programm so funktioniert.

Ich habe schon eine kleine Schaltung gebaut. Die ist aber noch falsch. 
Ich weiß leider nicht wie ich die Zeitkonstante ausrechne. Ich habe nur 
einen Kondensator mit 1µF, Widerstände habe ich aber alles bis 1 Mega 
Ohm. Würde es mit einem Spannungsteiler machen ( vllt. 1:10).
Kann es sein, dass man bei meiner Schaltung fie Zeitkonstante so 
ausrechnet: ((R1*R2)/(R1+R2))/C = tau ???

Kann mir bitte jemand die richtige Gleichung sagen?

Ein weiteres Problem, das ich habe, ist dass die Peaks beim 
Ausgangssignal (roh) von 0 bis auf -5 Volt fallen. An meinem Arduino 
Anschluss geht das Signal aber nur von 2,5 V los. Liegt aber am 
Spannungsteiler.

Ich bin mir nicht sicher was mit meinem Kondensator nicht stimmt (bzw. 
Schaltung), wenn ich den Aufbau eine Weile laufen lasse, dann 
verschwinden die negativen Peaks auf dem Oszi. Der Kondensator lässt sie 
nicht mehr durch. Wenn ich dann die Masse von meinem Eingangssignal kurz 
von der Masse des Arduinos trenne und dann wieder anschließe, passt 
wieder alles. Aber man kann zuschauen wie in einer bis zwei Minuten die 
Peaks immer näher an 2,5 V rangehen, bis sie im rauschen untergehen.

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
Wenn Dein Signal -5V ist, dann nimm eine Z-Diode (5,1V) und nen Pullup 
(10k) zur Pegelverschiebung.

von rollmops (Gast)


Bewertung
0 lesenswert
nicht lesenswert
kannst du mir bitte die schaltung sagen?

von Nuntius (Gast)


Bewertung
0 lesenswert
nicht lesenswert
rollmops schrieb:

> kannst du mir bitte die schaltung sagen?

https://translate.google.de/#de/en/Schaltung

Unten links auf das Lautsprechersymbol klicken.

von Michal P. (michal)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

schöne Idee um Informationen zwischen verschiedenen Potenzialen zu 
übertragen. Ich habe so etwas schon mal im LTSpice simuliert und hat gut 
funktioniert.

Entferne einfach den unteren 1 MOhm. Die Pulse hinter dem Kondensator 
müssen ja von 5 V nach 0 V gezogen werden, nicht von 2,5 V.

Schöne Grüße

Michal

von Arduinoquäler (Gast)


Bewertung
0 lesenswert
nicht lesenswert
rollmops schrieb:
> Ich habe schon eine kleine Schaltung gebaut.

Du willst es nicht kapieren? Dein 5V Arduino weiss
nicht was er mit einem Pegel von 2.5V anfangen soll.

von rollmops (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Arduinoquäler schrieb:
> Du willst es nicht kapieren? Dein 5V Arduino weiss
> nicht was er mit einem Pegel von 2.5V anfangen soll.

Ich sag doch, dass ich weiß, dass der Spannungsteiler falsch ist. Bei 
1:1 werden die 5V auf 2,5V geteilt.

Ich will aber noch nichts neues bauen, weil ich nicht weiß wie ich die 
Zeitkonstante ausrechne.

von Michal P. (michal)


Bewertung
0 lesenswert
nicht lesenswert
Du brauchst nich viel rechnen. In meinen Simulationen hat es mit breitem 
Spektrum von R und C sehr gut funktioniert, auch runter in nF und kOhm 
Bereich.

Das Konzept ist gut.

Das einzige was wichtig ist, die High Zeiten müssen wesentlich länger 
als die Low Pulse dazwischen sein, damit sich das High Level über den 
oberen pull up Widerstand wieder aufladen kann. Sonst wandert das Low 
Pegel langram hoch.

Gräße

Michal

von m.n. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
rollmops schrieb:
> Ich will aber noch nichts neues bauen,

Dann mache es so:

Michal P. schrieb:
> Entferne einfach den unteren 1 MOhm.

von m.n. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michal P. schrieb:
> Das einzige was wichtig ist, die High Zeiten müssen wesentlich länger
> als die Low Pulse dazwischen sein, damit sich das High Level über den
> oberen pull up Widerstand wieder aufladen kann.

Das muß garnicht sein. Die Eingangsdioden beim AVR 'klemmen' das Signal 
auf den richtigen Pegel.

von Michal P. (michal)


Bewertung
0 lesenswert
nicht lesenswert
m.n. schrieb:
> Die Eingangsdioden beim AVR 'klemmen' das Signal
> auf den richtigen Pegel.

??? Nö. Was das Signal am Arduino-Eingang wieder hochzieht ist einzig 
und alleine der pull up Widerstand. Es würde sogar der µC interne 40 
kOhm funktionieren. Sonst ist der Eingang alleine ja hochimpedant 
passiv.

: Bearbeitet durch User
von rollmops (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Habe es jetzt hinbekommen.

Habe einen Optokoppler von meinem Kollegen vorgeschlagen bekommen, damit 
funktioniert es einwandfrei.

Vielen Dank für eure Hilfe!!!

von MaWin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
rollmops schrieb:
> Ich habe schon eine kleine Schaltung gebaut.

Wenn die eingetragenen Signalpegel und Formen richtig sind:

Einfach GND der Quelle mit +5V des uC verbinden.

Wenn das nicht geht: Einfach die unteren 1M entfernen, ich würde auch R 
mit 19k und C mit 100nF dimensionieren, weil sonst die Einschwingzeit, 
also die Zeit zwischen einschalten der Versorgung und Funktion der 
Schaltung zu lange dauert.


Falls deine Quelle niederohmig ist (mehr als 20mA liefern kann): Noch 
zumindest 4k7, besser 10k vor den C in Reihe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.