Arduino analogWrite funktioniert nicht richtig -was mache ich falsch?

3 Antworten

Also ich kann mir nicht erklären, warum das eine Programm funktionieren soll und das andere nicht, denn soweit ist erst einmal alles richtig. Folgendes gebe ich aber zu bedenken:

  1. Der Wert von led muss auf einen Pin verweisen, der auch PWM unterstützt.
  2. Du darfst die Timer, die PWM auf den jeweiligen Pins realisieren, nicht für andere Zwecke verwenden, z.B. um Geräusche über tone() auszugeben oder Servo-Motoren zu steuern.
  3. Die Helligkeit der LED verändert sich nicht linear. Je nach LED-Typ kann es sein, dass zwischen 150 und 250 kaum Helligkeitsunterschied bemerkbar ist, während es bspw. zwischen 50 und 100 dann sehr schnell dunkel wird. Vielleicht versuchst du mal andere Abstufungen. Du könntest testweise auch einmal diese Schleife probieren:
for (byte n=255; n>=0; n--) {
  analogWrite(led, n);
  delay(20);
}

Diese durchläuft innerhalb von ca. 10 Sekunden alle Helligkeitsstufen.

Woher ich das weiß:Hobby

Analog-Write benutzt den DAC des Mikrocontrollers, heißt, er wandelt ein digitales Signal in eine Ausgangsspannung um.

LEDs werden aber nicht über die Spannung geregelt, sondern über ihren Strom oder besser über Pulsweitenmodulation.

Nimm also nicht den DAC Ausgang deines Mikrocontrollers, sondern einen PWM-Ausgang und steuere die Helligkeit der LED über die Pulsweite.

Xkcdy 
Fragesteller
 16.04.2020, 15:23

Ich glaub ich hab das schon über PWM gemacht. Hätte sonst nicht der 2. Sketch, den ich gemacht habe, gar nicht erst funktioniert?

0
Gehilfling  16.04.2020, 15:29
@Xkcdy

Was ist denn der zweite Sketch und der erste?

Ich seh gerade, dass die Arduino-Library wohl "AnalogWrite" zur Ausgabe von PWM-Signalen nutzt - finde ich etwas irreführend genannt aber nagut.

Beachte mal hier unten den Hinweis:

https://www.arduino.cc/reference/de/language/functions/analog-io/analogwrite/

Versuch die Implementierung mal ohne "Busy Waiting" mit Hilfe von "delay" sondern anders zu lösen, eventuell kommen sich die Timer in die Quere.

0
Xkcdy 
Fragesteller
 16.04.2020, 15:40
@Gehilfling

Wie kann man die Implementierung anders lösen als mit Delay? Sorry, bin noch totaler Anfänger und habe auf die Schnelle jetzt grad auch nichts dazu gefunden auf Google.

Also der erste Sketch, der nicht funktioniert hat, ist:

analogWrite(led, 250);

delay(500);

analogWrite(led, 200);

delay(500);

analogWrite(led, 150);

delay(500);

analogWrite(led, 100);

delay(500);

analogWrite(led, 50);

delay(500);

analogWrite(led, 0);

delay(500);

und der zweite Sketch, der funktioniert hat, ist:

analogWrite(led, 255);

delay(500);

analogWrite(led, 100);

delay(500);

0

An welchen Pin hast du die LED angeschlossen?

Woher ich das weiß:Hobby – Weil ich mich schon seit Jahren mit solchen Dingen bafasse
Xkcdy 
Fragesteller
 18.04.2020, 00:07

Ich habs mit verschiedenen Pins zwischen 2 und 13 versucht, z.B. mit Pin 6 habe ichs sicher probiert.

0
MaxLeSchlau  18.04.2020, 00:12
@Xkcdy

Also es funktionieren nur die Pins 3, 5, 6, 9, 10, 11. Also nur PWM Pins. Vielleicht kannst du mal deinen ganzen Code schicken. mit Setup und allen Variablen

0