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
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.
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 :)
Ε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.
50 LEDs könnten evtl. damit machbar sein: http://www.mikrocontroller.net/articles/%22Additive%22_PWM hans
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.
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.
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.