Go Down

Topic: PWM abfragen Digital schalten (Read 2356 times) previous topic - next topic

Bernd_S.

Hallo zusammen,

bin noch nicht lange mit dem Arduino UNO unterwegs, und habe jetzt ein Problem bei dem ich nicht weiterkomme.

Ich möchte gern einen PWM-PIN abfragen (Pin 2). Wenn dieser Null ist soll der Digitalpin 10 eingeschaltet werden und umgekehrt.
Ich hoffe ich habe mich soweit verständlich ausgedrückt.

Vielen Dank für die Hilfe im voraus

Gruß Bernd

uwefed

Über Software geht das nicht?

Code: [Select]
analogwrite(2,PWMwert);
if (PWMwert==0)
{
digitalwrite(10, HIGH)
}
else
{
digitalwrite(10, LOW)
}


Grüße Uwe

Marcus W

Komiche Frage Uwe... wie sollte mab es sonst lösen?

maverick1509

Wäre nicht analogRead(PWMwert besser ? :-))

sth77

Es ist immer wieder merkwürdig, wie Anfragen formuliert werden können, dass jeder was anderes darunter versteht. ;)
Alkso ich habe das so verstanden: An Pin2 (Digitalpin) liegt ein Signal an, in diesem Fall eine PWM von einer externen Schaltung. Die ist gekennzeichnet durch ein bestimmtes Puls-Pause-Verhältnis, immer im Pausenbereich (also LOW) soll Pin 10 HIGH werden, also eigentlich nur eine Invertierung des Signals.

Und da sind wir schon beim nächsten Punkt: Wofür soll das denn sein? Vielleicht gibt es ja bessere Alternativen als die Ver(sch)wendung eines Mikrocontrollers bzw. von dessen Pins.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

uwefed

sth77, Deine Version hat was für sich da Pin 2 ja gar kein PWM -fähiges Pin ist. Dann würd ich es aber über pulsIn() lösen.
KRISTALLKUGEL wo bist du?
Grüße Uwe

Bernd_S.

Hallo zusammen,

entschuldigung, das meine Frage so verschieden interpretiert werden kann.

Als Vorbild habe ich den Sketch aus diesem Topic: http://arduino.cc/forum/index.php/topic,95007.0.html

Den Sketch habe ich soweit auf meine Bedürfnisse zugeschnitten.

Mein PWM pin ist als blue1pin deklariert. Es geht um eine Lichtsteuerung. Der Pin wird soll tagsüber eine LED ansteuern.
Ich möchte gerne den Pin (2) so abfragen, das wenn er ausserhalb der Zeit auf null ist, ein Digitaler Pin (10) eingeschaltet wird.
Mit dem Aktiv werden von Pin 2 soll Pin 10 wieder ausgeschaltet werden.

Ich hoffe das es jetzt etwas klarer ist.

Gruss Bernd

mkl0815


Wäre nicht analogRead(PWMwert besser ? :-))

Das geht aus 2 Gründen nicht. analogRead() liesst Daten von den analogen Pins und liefert einen Wert zwischen 0 und 1023, je nach anliegender Spannung (im Vergleich zu Referenzspannung).
Mit analogRead() kann man nicht den aktuell auf einem PWM-Pin gesetzten Wert für PWM auslesen.
Selbst wenn das ginge, hast Du ja trotzdem nur einen "gemittelten" Wert einer Spannung, der sich aus dem PWM-Verhältnis ergibt, aber nicht das PWM-Signal selbst.

sth77

#8
Apr 17, 2012, 08:03 am Last Edit: Apr 17, 2012, 08:07 am by sth77 Reason: 1
Okay, ganz verstanden hab ich es noch nicht, leichter wäre es, wenn du deinen Code hier einstellen würdest. Also geht es im konkreten Fall nicht um die Invertierung eines Signals, sondern um nur um eine einfache if-then-Anweisung abhängig vom PWM-Wert?
Code: [Select]
If (PWMwert==0) digitalWrite(10, HIGH);
Reicht das nicht aus, ggf. noch durch ein else ergänzt?

[edit] Okay, das läuft auf den Codeschnipsel von Uwe hinaus, nur eben ohne die analogWrite-Anweisung...
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

mkl0815


Mein PWM pin ist als blue1pin deklariert. Es geht um eine Lichtsteuerung. Der Pin wird soll tagsüber eine LED ansteuern.
Ich möchte gerne den Pin (2) so abfragen, das wenn er ausserhalb der Zeit auf null ist, ein Digitaler Pin (10) eingeschaltet wird.
Mit dem Aktiv werden von Pin 2 soll Pin 10 wieder ausgeschaltet werden.

Ich hoffe das es jetzt etwas klarer ist.

So ganz verstehe ich das noch nicht. Wird der "PWM-Pin" von "Außen" geschaltet, oder ist das nur ein Wert innerhalb des Programms, der auf Pin 2 als PWM ausgegeben wird (was aber nicht geht, das Pin 2 kein PWM Pin ist) und Du willst nur für den Fall das der Wert innerhalb des Programms auf "0" steht den Pin 10 auf HIGH schalten?

Wenn der Pin von außen ein PWM-Signal bekommt, dann hast Du vermutlich das Problem, das der Eingang ja zwischen HIGH und LOW hin und her schaltet. Jenachdem wann Du gerade den Pin abfragst, kann es passieren, das der halt gerade LOW ist, obwohl er ein PWM-Signal von außen bekommt. Dann solltest Du über pulseIn() auf einen HIGH-Puls warten und einen timeout-Wert angeben. Wenn der Timeout greift, kannst Du sicher sein, das kein PWM-Signal anliegt, sondern der Pin tatsächlich auf LOW steht.

Bernd_S.

Hallo,

Der PWM-Pin (2)  dient zur Ausgabe und Steuerung einer LED. Diese soll den Sonnenaufgang, die Sonne und den Untergang simulieren.
Der digitale Pin (10) soll  ausserhalb dieser Zeit eine LED als Mond einschalten.

Meinen Sketch kann ich leider im Moment nicht zur Verfügung stellen, da ich arbeiten muss

Der angefügte Sketch funktioniert zwar, so ganz verstanden habe ich ihn aber auch noch nicht, und mein Wissen in Bezug auf Arduino programmieren steckt noch in den Anfängen.
Ich kann mir zwar aus meinen Basic-Anfängen (vor 30 Jahren) innerhalb des Programms das ein oder andere zusammen reimen, aber das war es schon.

Ich hoffe ihr könnt mir weiter helfen

Gruss Bernd

Lena

Naja, Uwe hat doch schlicht in "Arduinisch" genau das geschrieben was Du beschrieben hast.

Wenn Sonne aus dann Mond an sonst Mond aus.

Und in Basic sieht das doch fast gleich aus.
„Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."

Albert Einstein

uwefed

Ihr überseht fast alle, daß Pin 2 kein PWM Ausgang ist. Pin 10 ist PWM fähig. Also Sonne und Mond umtauschen  ;) .
Ciao Uwe

Lena


...Also Sonne und Mond umtauschen  ;) .


Kannst doch nicht so einfach machen, wenn da jeder macht kommt ja das ganze Raumzeitgefüge durcheinander :-D
„Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."

Albert Einstein

uwefed

Eine ungedimmte Sonne aber auch nicht  8) 8) 8) 8) 8) 8) 8) 8) 8) 8) 8) 8)  ;)
Grüße Uwe

Go Up