Atmega 168, PWM flackert an 2 Pins

Hallo,

ja, ja, ich weiß,ein fast gleiches Thema gibt es schon, unter

http://forum.arduino.cc/index.php?topic=326962.0

Nur ist der Beitrag schon alt. Dann biegt es dort inhaltlich zuerst lange zum Thema "Konstantstromquellen" ab. Das ist aber gar kein relevanter Nebenschauplatz. Atmega 168 ins Steckboard, 6 baugleiche LEDs (20mA) mit 6 Vorwiderständen anschließen - 4x ist alles o.k., 2x flackert es stark (an Pin 5 & 17 (PDIP28) bzw. Pin 3 & 11 (nach Arduino-Zählweise)).

Später geht es dort um die Veränderung der PWM-Frequenz, allerdings nicht unumstritten und nur "spaßeshalber". Der betreffende Link mit Anleitung bzw. Programmcode bezieht sich dann zudem nicht auf den Atmega 168

Also, ganz "schlank" gefragt: Sind am Atmega168 alle 6 PWM-Pins gleichzeitig für selbigen Zweck genutzt und minimalst mit 6 LEDs + Vorwiderstand beschaltet, selbst dann flackert es stark an 2 Ausgängen.

Weiß wer warum? Und wie geht die Abhilfe?

Danke!

EDIT: Antwort entfernt.

Da Crossposting.

[quote author=marc16 ] Danke! Lassen wir das einfach. Dafür ist mir die Zeit zu schade. [/quote] Mir auch....

Wow, deine und meine Kristallkugel würden sich sehr gut verstehen!

Nur: wie, wo, warum?

Ich bin noch am experimentieren, hardwareseits wie softwarseits. Auch das Programm ist sehr minimalistisch. Den "PWM-Pins" wird unter void-loop ein Wert zugeschrieben, das wars. Ich jage da kein Mega-Programm auf den Atmega168, wo absichtlich oder versehentlich Timer 2 genutzt, verstellt oder was auch immer wurde.

Es gibt doch im Hintergrund sicherlich noch irgendwelche anderen Datein, die Arduino einbindet. Wo genau kann man denn da an Timer2 mal herumexperimentieren?

marc16: Weiß wer warum? Und wie geht die Abhilfe?

Das sollte der wissen, der a) das Schaltbild b) den Sketch vor seinen Augen und die wesentlichen Spezifikationen des Atmega168 Datenblatts im Kopf hat.

  • Schaltplan, großes Wort, z.B. schlicht Steckboard mit Atmega168, Pin 5 (=Arduino Pin3) > LED gelb 3mm, 20mA, > 560 Ohm > Masse

  • Sketch:

int LED = 3; void setup() { } void loop() { analogWrite(LED,7); // (Werte zwischen 0-255)}

beides jetzt probeweise größtmöglich minimiert - mit immer noch flackernder LED.

  • Datenblatt: Vorhanden und gelesen. Nur ist es ja gerade Witz von Arduino, dass einem vieles abgenommen wird, was man als "Nicht-Informatiker" nicht komplett durchdringen kann. Offenbar wird da irgendwo nur zuviel abgenommen. Nur was? Und wo?

marc16: - Schaltplan, großes Wort, z.B. schlicht Steckboard mit Atmega168, Pin 5 (=Arduino Pin3) > LED gelb 3mm, 20mA, > 560 Ohm > Masse

Na, dass die LED an einem Vorwiderstand von 560 Ohm betrieben wird, ist doch schon mal mehr als man in Deinem Ausgangsposting sieht.

Sind beide Stromversorgungspins des Atmega an 5V angeschlossen? Die verschiedenen GND-Anschlüsse des Stmega zwecks Potentialausgleich zusammengeschlossen?

Ein Flackern würde ja bedeuten, dass die PWM-Freqzenz weit unter 480 Hz liegt.

Das könnte man natürlich erreichen, indem man dem Programm vorgaugelt, es würde mit 16 MHz externem Takt laufen, dann aber den Controller tatsächlich nur mit 1 MHz interner Taktung laufen läßt. Dann hätte man statt480Hz nur 480/16= 30 Hz PWM-Frequenz.

Allerdings wäre auch das nicht unbedingt als "starkes Flackern" wahrnehmbar. Eventuell wenn noch Flackerndes Umgebungslicht hinzukommt. Also wenn Du beispielsweise bei 50 Hz Netzwechselspannung eine Energiesparlampe betreibst, dann flackert die mit 100Hz.

Und 100Hz ist nicht so weit weg von 3*30=90Hz, Da könnte sich dann eine Schwebungsfrequenz von 10Hz einstellen, zwischen jeweils 3 Phasen PWM-Duty-Cycle und zwei 50Hz Halbwellen der Netzfrequenz, und 10Hz wären ein starkes Flackern.

Aber das geht aus Deiner Beschreibung ja nicht hervor, ob Du Deinen Controller vielleicht nur mit 1MHz statt 16MHz betreibst und die Schaltung zusätzlich noch durch eine mit Netzspannung betriebene Fremdlichtquelle beleuchtet wird.

So rein nach Deinen Angaben kann ich das Flackern nicht nachvollziehen.

jaja, hast Recht. Das Weglassen des Widerstands tut hier deinem Informationsstand nicht gut. Und dort der LED selbst auch nicht. Aber dem Flackern schadet es leider nichts, wenn probeweise mal kurz weggelassen.

Ansonsten: Kreativ geraten, aber leider unzutreffend ;-)

Ich rede von extremsten Flackern, grob geschätzt 10Hz. Soweit man das mit bloßem Auge einschätzen kann, nahezu 10x/Sek "ein-aus" (und das dann aber wiederum brav in der Helligkeit entsprechend dem gewählten PWM-Wert.)

Vielleicht hilft das ja, das Problem einzukreisen. Wenn ich das Flackern ganz genau betrachte und drüber nachdenke, dann scheint bei der - relativ betrachtet - höherfrequenten PWM selbst alles zu stimmen. Nur irgendwas bringten den uC dann dazu, die PWM-Ausgabe an diesem Pin "niederfrequent" mit grob geschätzt 10Hz ununterbrochen an-und auszuschalten.

Mit zunehmendem Wert wächst sich das Flackern dann übrigens aus. Wie auch immer, zumindest sind es keine leichten Helligkeitsschwankungen. Nichts, was sich mit einer zweiten Lichtquelle und deren Frequenz erklären lässt.

Selbstverständlich ist alles am Atmega angeschossen. Die gewählte Taktung und ebenso die Frage, ob man ein externen Quartz nutzt oder nicht, ändert nichts.

Übrigens gerade den uC auch gegen neuen getauscht. Bleibt beim alten. An jenen 2 Pins flackert es, an den anderen PWM-Pins nicht.

Nachtrag:

https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM

und alles ist im Grünen.

(Allerdings ist mir in der letzten Konsequenz gerade noch nicht ganz klar, warum das Problem gelöst ist. )

Und verrätst Du noch dem geschätzten Publikum, was jetzt die Ursache war?