Go Down

Topic: Externes Gerät als Inputsignal (Read 1 time) previous topic - next topic

uxomm

#15
Apr 20, 2017, 08:51 pm Last Edit: Apr 20, 2017, 08:51 pm by uxomm
Oder so
Always decouple electronic circuitry.

HotSystems

Oder so

Richtig, aber beim internen gibt es keine Probleme mit den Farbringen. ;)
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

uxomm

Ach ja die Farbringe...
da lob ich mir mein Multimeter ;)
Always decouple electronic circuitry.

ludwigm

#18
Apr 22, 2017, 11:54 am Last Edit: Apr 22, 2017, 12:03 pm by ludwigm
Hallo,
ein internen Pullup verwende ich beim Arduino so?

Code: [Select]
digitalWrite(12,HIGH);

Ansonsten brauch ich auf der Emitter/Colector Seite keinen Widerstand?


Aber brauche ich nicht eher einen Pulldown? Ich möchte ja, wenn die LED des Optokopplers leuchtet, HIGH am Controller anliegen haben.

Danke im Voraus
ludwigm

uxomm

#19
Apr 22, 2017, 12:37 pm Last Edit: Apr 22, 2017, 12:38 pm by uxomm
Um den internen Pullupwiderstand zu aktivieren gibt es mehrere Möglichkeiten, hier sind 2 davon:
Code: [Select]
pinMode(12, INPUT);  //diese Zeile ist nicht unbedingt nötig, weil nach einem Reset die Pins generell INPUT sind
digitalWrite(12,HIGH);  //aktiviert den internen Pullupwiderstand

oder:
Code: [Select]
pinMode(12, INPUT_PULLUP);  //aktiviert den internen Pullup
Mit internem Pullup brauchst du keinen zusätzlichen Widerstand auf der "rechten" Seite des Optokopplers.

Aber brauche ich nicht eher einen Pulldown? Ich möchte ja, wenn die LED des Optokopplers leuchtet, HIGH am Controller anliegen haben.
Die Schaltung von #15 invertiert das Signal (egal ob mit internem oder externem Pullupwiderstand). Das heißt, wenn es "links" HIGH gibt, dann ist "rechts" LOW und umgekehrt. Das ist aber kein Fehler/Nachteil. Wichtig ist, dass du ein eindeutiges "sicheres" Signal bekommst und das ist hier der Fall. Du fragst im Arduino-Sketch einfach auf LOW statt auf HIGH ab - that's it.

Wenn du aus "ästhetischen" Gründen lieber ein "nichtinvertiertes" Signal haben willst, kannst du auch einen Pulldownwiderstand verwenden (den gibt es aber nicht in der "internen" Variante). :)
Always decouple electronic circuitry.

HotSystems

Hallo,
ein internen Pullup verwende ich beim Arduino so?

Ansonsten brauch ich auf der Emitter/Colector Seite keinen Widerstand?

Aber brauche ich nicht eher einen Pulldown? Ich möchte ja, wenn die LED des Optokopplers leuchtet, HIGH am Controller anliegen haben.

Danke im Voraus
ludwigm
Du definierst einen Pullup-Widerstand am Besten im Setup mit
Code: [Select]
pinMode(name, INPUT_PULLUP);
Am Optokoppler kannst du es nicht direkt beeinflussen.
Wenn die Led leuchtet, geht der Ausgang in der gezeigten Schaltung immer auf LOW.
Du kannst es doch per Software anpassen.
Alternativ wäre den Kollektor auf +5Volt, einen Widerstand am Emitter gegen GND und das Signal am Emitter abgreifen und an den Arduino anschließen. Da geht aber kein interner Pullup-Widerstand.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

ludwigm

Ich habe den internen Pullup-Widerstand verwendet.

Jetzt funktioniert es so wie es soll :)
Vielen Dank an alle, die in diesem Beitrag geschrieben haben.

Gruß Ludwigm

ludwigm

Ich muss mich leider nochmal melden.
Der Arduino registriert jetzt gelegentlich ein Inputsignal, wenn eigentlich keins gesendet wurde. Eigentlich habe ich doch extra dafür den internen Pullup-Widerstand aktiviert?!

Soll ich vielleicht doch lieber auf einen "richtigen", verbauten Widerstand setzen?


Gruß ludwigm

Tommy56

Das wird keine Änderung bringen. Widerstand ist Widerstand.
Ich gehe mal davon aus, das der Optokoppler sehr nahe am Arduino sitzt. Ist das richtig?
Wenn ja, dann könnte die Störung nur auf der Zuleitung zum Optokoppler eingespeist werden.
Wie lang ist diese und was kann Dein externes Gerät treiben?
Dann könnte man evtl. den Vorwiderstand der LED des Optokopplers verringern, so dass mehr Strom fließen muss, den die Störung erst mal aufbringen muss.

Ich habe nicht den ganzen Thread durchgelesen, evtl. habe ich Daten übersehen. Das soll erst mal nur eine mögliche Richtung andeuten.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

ludwigm

Das falsche Inputsignal wird durch Betätigen eines Lichtschalters in der Nähe ausgelöst.
Der Arduino ist über ein Netzteil mit Strom versorgt. Im selben Stromkreis wie die Steckdose des Netzteils ist noch eine Lampe die über ein Lichtschalter betrieben wird. Wird dieser betätigt registriert der Arduino gelgentlich  am Input-Pin "LOW", da ein interner Pullup-Widerstand vorhanden ist.
Eigentlich soll der Arduino nur den Stromfluss einer Klingel erkennen, woraufhin eine SMS mit Hilfe des GSM Shields gesendet werden soll.

Habt ihr eine Idee, wie ich diese falschen Inputsignale verhindern kann?

Vielen Dank im Voraus
Ludwig

StefanBoth

Eine schöne, alte Klingel? Mit dicker Spule?
Und der Optokoppler ist parallel daran angeschlossen?

HotSystems

Habt ihr eine Idee, wie ich diese falschen Inputsignale verhindern kann?
Dann bleibt dir nichts weiter übrig, als einen externen Pullup-Widerstand einzusetzen.
Den kannst du problemlos mit 1 kOhm ansetzen. Den internen kannst du dabei belassen.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up