Forum: Mikrocontroller und Digitale Elektronik 50x PWM 8bit aus nem AVR


von Paul H. (powl)


Lesenswert?

Hi,

ich müsste grad mal 8-Bit 50PWM-Kanäl aus einem AVR herauszaubern.
Ich habe nun schon laaange nix mehr mit µC gemacht und bräuchte daher 
eine kleine Dimensionierungshilfe. Es sollten zwecks flackerfreiem 
Betrieb 100Hz sein.

Krieg ich das mit 1 AVR hin? Der muss nichts anderes machen als die 
Daten per RS-232 empfangen und die LEDs entsprechend ansteuern.

Sollte ich das mit Shiftregistern am SPI machen oder sollte ich besser 
nen großen AVR mit entsprechender Pin-Anzahl nehmen?

zum Programm:
Wie gehe ich da beim Programmieren geschickt vor? Wollte möglichst auf 
Assembler verzichten.

Nen Timer und im Overflow-Interrupt 50 PWM-Vorgabewerte mit einem 
Zählerstand vergleichen, das Ausgangsregister zusammenbasteln und dann 
alles rausshiften?

Mal überlegen, wie rechne ich das? Wie viel Rechentakte bleiben mir 
zwischen zwei Overflow-Interrupts? Taktfrequenz 16.000.000 Hz, also 
16mio. Takte pro Sekunde. Ich will auf ne PWM-Frequenz von 
optimalerweise 100Hz kommen. Der Timer zählt alle z.B. 2 Takte um eins 
hoch, und alle 256 mal Hochzählen, also alle 512 Takte gibt es einen 
Overflow-Interrupt in dem die Berechnung und Ausgabe erfolgt. Nach 256 
Overflow-Interrupts ist dann ein ganzer PWM-Zyklus rum. Das ganze 
erfolgt dann 16.000.000  2  256 / 256 = 122 in der Sekunde. Die 512 
Takte zwischen zwei Overflow-Interrupts werden mir aber nur schlecht 
reichen um 50 Werte mit irgendwas zu vergleichen und die Ausgabe 
zusammen zu basteln.

Natürlich gäbe es noch intelligentere Verfahren bei denen nebenher schon 
die Ausgabe berechnet und zwischengespeicher und dann zum entsprechenden 
Zeitpunkt einfach nur noch ausgegeben wird.

Wie machen das denn Leute die schon mehrere hunderte LEDs mit einem AVR 
gemultiplext haben?

lg PoWl

von P.-W. EM (Gast)


Lesenswert?

Paul Hamacher schrieb:
> Wie machen das denn Leute die schon mehrere hunderte LEDs mit einem AVR
> gemultiplext haben?

Hast Du einen Link?
Multiplexen ist noch keine PWM.

von Εrnst B. (ernst)


Lesenswert?

Schau mal im Soft-PWM-Artikel den "Intelligenten Ansatz" an, evtl. 
lässt sich der auf 50 Kanäle erweitern.

Milchmädchenrechnung:
1.2% CPU-Last bei 8 Kanälen ==> 7.5% CPU-Last bei 50 :)

von P.-W. EM (Gast)


Lesenswert?

Εrnst B✶ schrieb:
> Milchmädchenrechnung:

Richtig!
Die Berechnung der CPU-Last geht davon aus, dass sich im Leben nichts 
mehr ändert. Ändert man aber nur einen PWM-Wert, so muß die ganze 
'Schohse' neu berechnet werden.

Rechnet man wie ein Bäckerjunge, ergibt sich Folgendes: 100Hz mit 256 
Stufen erfordert eine Änderungsfrequenz von 25,6kHz; rund 39µs. Ein 
20MHz Prozessor hat dann ca. 780 Takte, um 50 Kanäle zu bearbeiten, was 
max. 15Takte/Kanal sind.
Mit geschickter Programmierung in Assembler könnte man das sogar 
schaffen. Aber wozu?
Da würde ich lieber 4-7 Mega48 (Tiny2313) verwenden, in denen ein 
identisches Programm läuft und die auch gleich genug Port-Pins liefern. 
Kostet nicht viel und die Programmierung ist recht einfach.

von rico (Gast)


Lesenswert?

oder einen pwm led treiber nehmen?

von hans (Gast)


Lesenswert?

50 LEDs könnten evtl. damit machbar sein:

http://www.mikrocontroller.net/articles/%22Additive%22_PWM

hans

von Paul H. (powl)


Lesenswert?

ich hab mir grad mal ein paar Samples von TLC5940 bestellt :-)
Ich werds wohl mit mehreren µCs machen.

Hat jemand Links zu Projekten bei denen eine große Anzahl an LEDs mit 
einem(!) AVR gemultiplext oder gePWMt werden?

Bin da immer mal wieder über solche Projekte gestolpert, aber hatte grad 
in Google dann keinen Erfolg mehr, vielleicht hat jemand von euch noch 
was in den Favoriten.

von Andreas K. (derandi)


Lesenswert?

Schieberegister mit 50 Ausgängen nehmen, ein einzelnes Bit Schritt für 
Schritt durchschieben. Jetzt kann man die LED, bei der das Bit grade 
gesetzt ist, über eine gemeinsame Anode/Kathode in der Helligkeit 
"ge-PWMt" werden.

Könnte man dahingehend optimieren, das man LED`s mit gleicher Helligkeit 
auch gleichzeitig ansteuert indem man ein passendes Bitmuster ins 
Register schiebt.

von Paul H. (powl)


Lesenswert?

Andreas K. schrieb:
> Schieberegister mit 50 Ausgängen nehmen, ein einzelnes Bit Schritt für
> Schritt durchschieben. Jetzt kann man die LED, bei der das Bit grade
> gesetzt ist, über eine gemeinsame Anode/Kathode in der Helligkeit
> "ge-PWMt" werden.
>
> Könnte man dahingehend optimieren, das man LED`s mit gleicher Helligkeit
> auch gleichzeitig ansteuert indem man ein passendes Bitmuster ins
> Register schiebt.

mit andern worten: 50-fach multiplexing und ne hardware-PWM? dann muss 
ich meinen RGB-LEDs aber auch den 50-fachen spitzenstrom geben. ich 
glaub nicht, dass die davon so begeistert sind, zumal ich dann 50x ne 
leistungsstufe à 1A brauche.

Ich sehe aber schon das ganze wird zwangsläufig in assembler-exzessen 
enden ;)

von m.n. (Gast)


Lesenswert?

Paul Hamacher schrieb:
> Krieg ich das mit 1 AVR hin? Der muss nichts anderes machen als die
> Daten per RS-232 empfangen und die LEDs entsprechend ansteuern.

Es gibt eine Lösung mit Mega48+SPI aber kein RS232 sondern IIC. 
http://www.mino-elektronik.de/AVR_PWM_64/AVR_PWM_64.htm

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
Noch kein Account? Hier anmelden.