Hi, als Kontroller benutze ich einen Atmega16. Dieser hat ja 3 Timer, diese kann man ja unteranderem im PWM Modus betreiben. Habe jetzt den timer1 am laufen und kann an Port PD5 (OCRA1) meine PWM ausgeben. 1.Frage kann ich dieses Signal auch auf einen anderen Pin legen, Wieivel PWM ignale kann ich maximal nur erzeugen? 3 Timer --> nur 3 PWMs? Danke
1.Jein. Zu OCR1A gehört OC1A. Aber es gibt ja auch OCR1B/OC1B und ... 2.Zähl die Anzahl OCx Pins.
1. nein, das ist intern fest verdrahtet 2. pro Output-Compare-Einheit eine PWM. Beim M16 also insgesamt vier, da Timer1 zwei solche Ausgänge hat (OC1A und B)
>>Wieivel PWM ignale kann ich maximal nur erzeugen? >>3 Timer --> nur 3 PWMs? >> 2.Zähl die Anzahl OCx Pins. Völliger Quatsch! Du kannst soviele PWM-Kanäle aufmachen, wie Du Portpins hast. Mit einem Timer-Interupt und einer Hand voll Befehlen ist das ÜBERHAUPT KEIN Problem. Mit einem Portexpander (z.B. Schieberegister) könntest Du an einem kleinen Tiny auch 100 PWM Kanäle basteln. Ist halt nur etwas Handarbeit beim programmieren, aber eigentlich eine winzige Anfängeraufgabe. Nix schlimmes. Jochen Müller
> Mit einem Portexpander (z.B. Schieberegister) könntest Du > an einem kleinen Tiny auch 100 PWM Kanäle basteln. Schieberegister--> flops meinste damit ganz dumm gefragt :-) Mein Ziel ist es halt rgb leds anzusteuern, dafür benötige ich halt 3 pwms
@ Jochen Müller (taschenbuch) >Mit einem Timer-Interupt und einer Hand voll Befehlen ist das ÜBERHAUPT >KEIN Problem. Mit einem Portexpander (z.B. Schieberegister) könntest Du >an einem kleinen Tiny auch 100 PWM Kanäle basteln. Ist halt nur etwas Du bist wohl Mathematiker, was? Alles lösbar. Der Beweis bleibt aber aus. 100 PWM Kanäle, dazu noch über seriell angebundenes Schieberegister, hmmm. 1 Hz bei 4 Bit Auflösung, was? >Handarbeit beim programmieren, aber eigentlich eine winzige >Anfängeraufgabe. Nix schlimmes. Na dann zeig mal die Lösung. Ist doch nix schlimmes. MFG Falk
Falk, Ich betreibe hier in etlichen Projekten 64 LEDs an 3 Portleitungen, (Clock, DATA, STROBE), die.... -einzeln in jeweils 64/128 PWM-Stufen steuerbar sind -50x/Sec upgedatet werden Das Ganze kostet 3 Portpins und 8 Schieberegister (4094) Und kann mit weiteren Portpins (DATA) auch noch skaliert werden, Clock und Strobe sind gemeinsam an allen Schieberegistern. In einer Extrem-Anwendung habe ich IN DER TAT über 200 PWM-Kanäle, und wenn Du rechnen würdest, siehst Du sehr schnell das da viel mehr als 1 HZ bei 4Bit Auflösung möglich ist. Wie Du schon sagtest: es IST Mathematik. Bei 64 LEDS, 64 Stufen und 50x/Sec sind das gerade mal grob 200KHZ Datenrate. Das schafft ein ATiny und langweilt sich dabei noch. Was bitte muss für Dich da extra bewiesen werden, die Grundrechenarten wirst Du wohl können. Oder eher nicht? Jochen Müller
Na, was Falk da sagen wollte ist mir auch schleierhaft. So wie ich das sehe hat Jochen da völlig recht und ich selbst habe ähnliche Sachen mit bis zu 50 Leds per PWM (einzeln steuerbar) an einem Mega8 schon gemacht. Das ist überhaupt kein problem, allerdings hatte ich ein anderes Schiebereg. verwendet, 74164, prinzipiell aber das Gleiche. Zur Ergänzung: Bei 64 PWM-Stufen aus dem Beispiel und 50 Frames/Sekunde ist das gerade mal eine Interuptfrequenz von 3200Hz, also völlig lächerlich für jeden avr. Wenn 50HZ Framerate nicht reichen, könnte man die problemlos sogar noch deutlich steigern, bei mir hatten für die LEd aber auch so um die 50 gereicht. Keine Ahnung, warum Falk da solche Rechenprobleme hat, aber bedenklich ist das schon. Thomas
@marco m: taschenbuch und rechenknecht haben zwar völlig recht mit dem was sie schrieben, aber das hilft dir wahrscheinlich jetzt auch nicht direkt. ich versuche also dir mal kurz zu erklären wie selbstgemachtes pwm geht: 1) du machst einen timer-interupt auf, berechnung des timing kommt später. 2) du brauchst noch eine zählvariable, die über das ganze programm für den interupt reserviert bleibt, also global ist. wir nennen die pwm-zähler. 3) für jede led hast du nun einen datenwert, der die helligkeit festlegt. dieser wert liegt dann zwischen 0 und einem maximalwert, den du selbst festlegen kannst, zum beispiel 100. ---INNERHALB DES TIMER-INTERUPT: Du erhöhst den pwm-zähler um 1. Wenn der wert die maximale pwm-auflösung erreicht hat, setzt du den pwm-zähler wieder auf 0. in diesem beispiel also bei 101, weil die helligkeit der leds ja von 0..100 laufen soll. nun musst du nur jeden der led-werte mit dem pwm-zähler vergleichen. ist der pwm-zähler kleiner als der led-wert -> led einschalten bei größer oder gleich -> led abschalten. ---ENDE DES TIMER-INT Das war schon alles! Wie Jochen schon sagte, ist das wirklich keine Kunst! Jochen hatte nur zusätzlich die EIN/AUS Daten für alle LEDs in ein Schieberegister geschoben, das kannst Du dir aber sparen, wenn du genügend Portpins hast, um deine led(s) direkt anzuschliessen. Nun musst Du nur noch festlegen, wie oft der Timer-Int kommen muss. Das ist ebenfalls völlig simpel. (Anzahl Updates je sekunde) x (pwm-zähler-maximalwert) Bei 50 Frames/Sekunde und Wertebereich 0..100 ist das 50x100=5000, also muss der Timer-Int in diesem Beispiel 5000x/Sekunde kommen. lg Dirk
@ Jochen Müller (taschenbuch) Ich glaube das @Falk Brunner (falk) nur Andeuten wollte, das nicht nur diskutiert wird. Es kann doch so ein bisschen COD gleich von dir zur Verfügung gestellt werden. Man tut sich hier sehr schwer ,kleine lauffähige Codeschnipsel zu veröffentlichen.
Hey Dirk vielen, vielen Dank für deine Ausführliche Antwort. Also wenn ich das richtig verstanden habe, dann kann ich max. an 4 Ports meine LEDs anschließen und diese einzeln steuern, wenn ich für jede LED einen pwm bin benutze (OC0,OC1B,OC1A,OC2) oder ich benutze Schieberegister, dem ich einen Takt gebe. An dieses schließe ich zb 10 Leds an und weise jeder led eine Variable zu dann Dimme ich die Leds in einer ISR. Da das menschliche Auge das umschalten zwischen den einzelnen LEDs nicht sieht kann man man sie auch an einen PWM kanal hängen. ich glaube wenn diese möglichkeit ginge wäre das am einfachsten--> -nur eine ISR für Timer -Takt für Schieberegister erzeugen -1 variable pro led und los gehts.... oder habe ich mich irgendwo vertan.
Da Code angemahnt wurde... Habe gaaaaannnnz einfachen Code für Software-PWM gefunden, der zumindest etwas zum Verständnis beitragen könnte. Beitrag "MENÜ-STEUERUNG" KH
Kachel-Heinz wrote: > Da Code angemahnt wurde... > > Habe gaaaaannnnz einfachen Code für Software-PWM gefunden, der zumindest > etwas zum Verständnis beitragen könnte. > > Beitrag "MENÜ-STEUERUNG" > > KH das ist ja asm code :-( gar nicht mein Ding^^
@rechenknecht (Gast) >Bei 64 PWM-Stufen aus dem Beispiel und 50 Frames/Sekunde ist das gerade >mal eine Interuptfrequenz von 3200Hz, also völlig lächerlich für jeden >avr. >Keine Ahnung, warum Falk da solche Rechenprobleme hat, aber bedenklich >ist das schon. Ich hab keine Rechenproblem. Aber man bedenke, dass viele Leute immer schneller weiter höher wollen. Lies mal die Dutzenden LED Threads. Alle wollen 100..200 HZ PWM Frequenz und 8..10 Bit. Wie sinnvoll das ist sei mal dahingestellt. Und wenn man sowas über Schieberegister mache will wirds eng. Sehr eng. 50Hz/6 Bit gehen schon, das hat keiner bezweifelt. MFG Falk
Marco M. wrote: > Hey Dirk vielen, vielen Dank für deine Ausführliche Antwort. > > Also wenn ich das richtig verstanden habe, dann kann ich max. an 4 Ports > meine LEDs anschließen und diese einzeln steuern, wenn ich für jede LED > einen pwm pin benutze (OC0,OC1B,OC1A,OC2) > > oder > > > ich benutze Schieberegister, dem ich einen Takt gebe. An dieses schließe > ich zb 10 Leds an und weise jeder led eine Variable zu dann Dimme ich > die Leds in einer ISR. Da das menschliche Auge das umschalten zwischen > den einzelnen LEDs nicht sieht kann man man sie auch an einen PWM kanal > hängen. > > ich glaube wenn diese möglichkeit ginge wäre das am einfachsten--> > > -nur eine ISR für Timer > -Takt für Schieberegister erzeugen > -1 variable pro led > > und los gehts.... > > oder habe ich mich irgendwo vertan. kann jemand meine Aussage nochmal kommentieren, leider hatte sich keiner dazu geäußert. Inzwischen habe ich 3 Leds mit PWM über die 3 PWM Kanäle angesteuert, möchte dies nun aber doch lieber nur mit einem Kanal machen. Dazu wurde mir das Stichwort "schieberegister" genannt. Kann ich den von mir im Zitat gewählten Ansatz zur Schiebergisterlösung wählen, oder gibt es da einne grundsätzlichen Gedankenfehler? MFG Marco
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.