Moin
Ich bin auf der Suche nach externen PWM Bausteinen, am liebsten mit 8
AUsgängen zum direkten (oder indirekten) Anteuern von LEDs. Ich dachte
dabei könnte pro Ausgang der Wert 0-255 seriell übertragen werden was
schließlich in der Helligkeitsänderung der angeschlossenen LED
resultiert.
Bislang habe ich mit dem TL494 gelibäugelt, aber vielleicht gibt es ja
bessere Lösungen...
Gruß
Kamin Katze
Danke für die Tipps erstmal.
Allerdings ist mir das ganze zu langsam... Ich bin dabei, eine RGB-Led
Leiste mit etwa 100 LEDs (a 5mm = 50cm) durch Rotation als leuchtende
"Littfasssäule" darzustellen. Der Umfang sollte etwa 200 LEDs sein; das
heißt, dass sich die Leiste pro Umdrehung 200 mal ändert. Bei einer
Geschwindigkeit von etwa 100 Umdrehungen pro Sekunde (evtl. gehts auch
mit 50 flimmerfrei, bin dahingehend noch am testen) ändert sich die
Leiste also 20.000 mal pro Sekunde.
Halbbilder (Interlacing) darstellen usw. kommt nicht in Frage, da durch
die Umdrehung jede LED nur 1/200 pro Sekunde an jeder einzelnen
horizontalen Position leuchtet. Die Leuchtkraft wird durch die Trägheit
des Auges ohnehin schon stark vermindert, jede weitere Absenkung wäre in
der Tat strafbar...
Die Ansteuerung habe ich auf 3 AVRs aufgeteilt (pro Farbe 1 AVR), das
dürfte ausreichen. Allerdings stellt PWM wohl das größte Problem dar...
Der PCA9626 (24LED PWM Treiber) hat zum Beispiel eine 97 kHz
PWM-Frequenz. Bei 20.000 Umdrehungen würden also pro LED und Position
etwa 5PWM Zyklen durchlaufen werden. Das ist zwar nicht viel, würde aber
funktionieren.
Schlechter schaut es mit der Ansteuerung der PWM-Treiber aus. Der
obgenannte Treiber wird per I2C angesteuert im normalen Modus also mit
100kb/s. Das ist eindeutig zu wenig, um die PWM-Daten für 24LED zu
übertragen.
Hat jemand einen Lösungsansatz?
Gruß
Kamin Katze
> Hat jemand einen Lösungsansatz?
Klar, versuch's mal mit nachdenken.
100 Umdrehungen pro Sekunde, 200 Positionen, 5 komplette PWM Zyklen,
Helligkeit mit 8 bit also 256 Stufen, macht 25.6MHz PWM Takt.
Schon mit einem AVR die 60 kByte Helligkeitswerte 100 mal pro Sekunde
umherzuschalfen, ist 'ambitioniert', woher sollen die Daten denn auch
kommen, RAM gibt's jedenfalls nicht so viel.
Einen TL494 bloss weil er PMC Controller heisst, als LED Dimmer
einzusetzen, zeugt von grandioser Unkenntnis.
Die üblichen spinning LED signs machen gar keine Helligkeit, sondern nur
voll an oder voll aus. Nehmen wir an, die Helligkeitsregulierung um
Videos darzustellen ist das Besondere an deiner Schaltung. 5 PWM Zyklen
brauchst du nicht. Wenn man bei digitaler PWM bleibt (also LED ist n/256
der Zeit voll an, dann aus) mit 300 Kanälen, müssen 300 Byte-Counter
5120000 mal pro Sekunde dekrementiert und 20000 mal pro Sekunden neu
geladen werden. Will man das mit einem Chip machen, sollte man zu einem
FPGA greifen, einem Spartan mit mindestens 80000 Zellen und 320 I/O
Pins. Die haben dann auch 60k RAM zum Puffern der Daten. Das sind schon
die grösseren, also lass dich im FPGA Forum nach der preiswertesten
Lösung beraten.
Mit fertigen serilee versorgten mehrkanaligen LED PWM Dimmern wirst du
Abstriche machen müssen.
Hallo Kamin,
Wenn du bewegte Bilder anzeigen möchtest sehe ich schwarz.
Wenn du "nur" fixe Bilder anzeigen möchtest, würde es folgender Maßen
gehen: Aus dem Bild werden die RGB-Infos extrahiert, und diese wiederum
in PWM-Infos in einer Tabelle abgelegt. Die Tabelle wird anschliessend
auf "Vor-Ort"-AVR's aufgeteilt. Dazu wird eine normale serielle
Übertragung benutzt. Die Vor-Ort-AVR's ´treiben die LED's direkt (das
können die). Einige AVR'S können bis 20MHz getaktet werden, das heisst
ein Takt dauert 50 ns (Nano-Sekunden). Die meisten Maschinenbefehle
dauern 1-2 Takt-Zyklen.
Laut deinen Angaben, wird eine LED für 50us mit einer best. PWM
angesteuert (1/(200Umdr. x 200 LED's)=50us). Während dieser Zeit sollen
mindestens 5 PWM-Zyklen durchlaufen werden. Man hat also 50us Zeit, die
PWM-Daten für die nächsten 50us vorzubereiten. Mithin ca. 500
Maschineninstruktionen. Das sollte reichen, um aus einer Tabelle
indiziert zu lesen.
Damit die LED's auch alle schön synchron sind, müssen die Vor-Ort-AVR
pro Runde einmal per externem Hardware-Signal synchronisiert werden.
Hallo Michael
AVR sind für die direkte Ansteuerung nicht geeignet, da pro LED etwa
20mA, je nach Farbe sogar bis zu 30mA, benötigt werden. Außerdem braucht
man bei einer Leiste mit 100 RGB-LEDs, sprich 300 LEDs auch 300 direkte
Ausgänge die alle PWM beherrschen bzw per Software simulieren. Da brauch
man Unmengen von AVRs dazu...
Ich hab mir die Sache mit FPGA schon überlegt, genauer gesagt hab ich
mir mal einen Xilinx XC3S4000 angeschaut. Die sind mit 100Euro erheblich
tuerer als eine AVR Lösung wäre aber das größte Problem wird wohl sein,
den Chip mit seinen 900 Pins mal auf die Platte zu bekommen. Wäre toll
wenns da so ne Lösung gäbe, wie bei SOcket 775, hab aber bislang nix
gefunden.
Gruß
Kamin Katze
Hallo nochmal,
Ich wünsch Dir weiterhin viel Glück bei deinem Projekt.
Wie du schon erkannt hast, sind 300 Ausgänge eine Menge. Gerade deswegen
würde ich eine modulare Lösung vorziehen. Bei den Stromangaben muss ich
Dir wiedersprechen, laut Original Atmel-Dokumentation, liegen die
"absolute maximum-ratings" für "DC-Current per I/O-Pin" bei 40mA.
So, dann noch viel Spass beim Löten von 300 FPGA-Pins ;-)
ja, pro Pin vielleicht. Aber insgesamt hast du nicht mehr als 300mA
Source zu verfügung, 350mA als Sink (ungefähr, müsst nochmals
nachschaun...)
Gruß
Kamin Katze
@ Kamin Katze (Gast)
>Ich hab mir die Sache mit FPGA schon überlegt, genauer gesagt hab ich>mir mal einen Xilinx XC3S4000 angeschaut. Die sind mit 100Euro erheblich
Ist da ne 0 zuviel? Back erst mal kleinere Brötchen, nimm einen vom
Kaliber XC3S400 (vierhundert), der hat im TQFP144 Gehäuse ~100 User-IOs
und ist sehr preiswert.
Davon drei und fertig ist die Laube.
MfG
Falk