Komplizierte LED Ansteuerung!

Fragen zu Schaltungen, Elektronik, Elektrik usw.

Moderator: T.Hoffmann

Antworten
Flak
Mini-User
Beiträge: 3
Registriert: Do, 30.11.06, 13:34

Do, 25.10.07, 08:20

hi @ all,

ich möchte einige LEDs mit dem PC einzel ansteuern können. Ich habe mir viele Gedanken gemacht und habe auch keine Lösung im Internet gefunden und hoffe hier im Forum einen Lösungsweg zufinden.

Mein Ziel ist es ca. 60 LEDs am PC anzuschließen und mehrere selbstgeschriebene Programme vom PC aus laufen zu lassen, z.B. Lauflicht, Blinkreinfolge, Wechselblinken, usw. Unteranderem möchte ich versuchen eine Audiopegel (aus winamp z.B.) ebenfalls über die LEDs anzeigen zu lassen (nur bei Bas ausschlagen zu lassen). Ich kann mir gut denken, das man die LEDs nicht einfach zusammenlöten kann und per USB an den Pc anschließen kann. Ich habe mir gedacht ein Microcontroller könnte dieses Problem lösen, aber es werden doch nur Programme in den IC gespeichert, die dann ausgeführt werden. Somit könnte ich diese aktive Audiopegelanzeige nicht ausführen (denke ich). Ich habe meine Gedanken einmal zu Papier gebracht und unten im Bild anzeigen lassen.
Ich hoffe ihr könnt mir bei meinem Problem weiterhelfen....

Vielen Dank im vorraus.
Flak


Bild
synvox
Mega-User
Mega-User
Beiträge: 147
Registriert: Fr, 27.04.07, 04:40
Wohnort: Schweiz

Do, 25.10.07, 09:41

Hallo Flak,

ein µC kann prinzipiell fast alles machen, wozu du ihn programmierst. Du musst ja nicht unbedingt immer fertige Sequenzen einprogrammieren, sondern kannst auch eine Art Kommunikationsprotokoll implementieren. Also bildlich gesprochen sendest du von einem PC-Programm aus über USB selbst definierte Befehle an den µC, welcher dann die LEDs entsprechend steuert. Also zum Beispiel sendest du Befehle wie "LED 1 ein", "LED 2 aus" etc. oder je nach Applikation und Implementation auch schon 'höhere' Befehle wie "LEDs der Aussteuerungsanzeige im LED-Strang Alpha bitte dem Wert X entsprechend einschalten" (natürlich nicht als wörtlichen Satz, das ist hier nur zur Erklärung. Man würde entsprechend definierte Befehlscodes und Parameter senden) etc. Prinzipiell sind jegliche Befehle/Protokolle möglich, alles was deine Phantasie und dein Programmierkönnen hergeben :wink: .

Gruss
Neni
Synthy82
Hyper-User
Hyper-User
Beiträge: 1956
Registriert: Do, 05.04.07, 15:15
Wohnort: Hamburg
Kontaktdaten:

Do, 25.10.07, 10:02

Wie sieht das eigentlich aus. Jetzt, wo es mal so einen Thread gibt, kann ich mal drauf einsteigen.. ;-)

Wie sehen die USB-Controller aus, die man da an den Rechner anschließt? Und bis zu welcher Schicht des OSI-Modells arbeiten sie? Was muss man also noch darüber implementieren, wenn man ne Kommunikation zu Stande bringen will?
silversurfer
Super-User
Super-User
Beiträge: 83
Registriert: Mi, 28.06.06, 16:44

Di, 30.10.07, 21:11

Mach es doch erstmal gaaanz einfach. Steuer die LED's über die parallele Schnittstelle ohne extra µProz. Daführ gibt es sogar schon fertige Winamp Plugins. Ohne zusätzliche Elektronik lassen sich 8 LEDs (bei niedrigem Strom!) betreiben. Mit etwas Elektronik (4x8Bit Treiber) können stolze 32 LEDs angesteuert werden. Das Plugin ist glaube ich DiscoLitez oder so ähnlich.
Benutzeravatar
Doc_McCoy
Hyper-User
Hyper-User
Beiträge: 1962
Registriert: Sa, 03.06.06, 15:49
Wohnort: Neualbenreuth
Kontaktdaten:

Mi, 31.10.07, 11:40

silversurfer sagt es eindeutig! Ich würde als Anfänger auch erst einmal die Parallelportmethode verwenden. Wenn zu hohe Ströme da sind einfach Tranistoren vor den Leds schalten.

Aber 60 Leds kann man kaum einzelnen ansteueren, nur mit einer größeren Schaltung.

Dies wird aber mit µC nicht einfacher, da man da auch nur eine begrenzte Anzahl an Ausgängen hat, kommt auf den Typ drauf an, aber man kann auch von 8 ausgehen. Diese Ausgänge müsste man mit einem zweiten µC wieder erweitern.
synvox
Mega-User
Mega-User
Beiträge: 147
Registriert: Fr, 27.04.07, 04:40
Wohnort: Schweiz

Mi, 31.10.07, 15:39

Also bei grosser LED-Anzahl kann man bei einem µC die Matrix-Ansteuer-Methode benutzen, um Ausgänge einzusparen, oder aber man verwendet Schieberegister (Seriell nach Parallel), um die Anzahl Ausgänge zu erhöhen. Möglichkeiten gibt es da jedenfalls viele.

Was USB betrifft, so gibt's von FTDI (http://www.ftdichip.com) sehr schöne, kleine Chips z.Bsp. zur Wandlung von USB nach Seriell Interface (RS232), und einen seriellen UART hat heutzutage auch der popeligste µC zu bieten.
Ich selbst nutze immer den FT232R bzw. die auf diesem Chip beruhenden Module von FTDI für die Kommunikation zwischen PC und Atmel AVR, das funktioniert wirklich problemlos und einfach. Nach der Treiber-Installation erscheint der FTDI-Chip auf dem PC als virtueller COM-Port, d.h. man kann dann mit eigenen VB6-Applikationen den COM-Port ansprechen oder sogar zu Testzwecken mittels Terminalprogramm mit dem µC kommunizieren.

Es gibt sogar eine Möglichkeit mit USB-Steuerung ganz auf den µC zu verzichten. Der FTDI-Chip FT245R nämlich wandelt den USB-Datenstrom nach Parallel. Dabei ist es sogar möglich, den 8-Bit Parallel-Port des Chips im Bit-Bang-Mode zu benutzen, d.h. direktes Setzen bzw. Rücksetzen der einzelnen Bits des Parallelports per USB. Allerdings muss man dazu die entsprechenden Funktionen in der Treiber-DLL des Chips z.Bsp. aus eigenen VB6-Programmen etc. direkt ansprechen.

Gruss
Neni
mors
Mini-User
Beiträge: 5
Registriert: Fr, 15.12.06, 13:54

Fr, 09.11.07, 00:59

Hi!

Multiplexen (also mit "Matrix-Ansteuer-Methode" ansteuern) Würd ich LEDs nicht, denn dann kannst du die nur zu einem Teiler Ihrer vollen Leistung ansteuern. Wenn du zB 6x2 LEDS zu 12 kanälen mit einfachen Mitteln multiplexen würdest, könntest du jede 6er-Reihe nur 50% der Zeit maximal leuchten lassen. Das wär ja verschwendung ;)

An den Threadstarter und alle anderen die daran Interesse haben:
Seit einer Weile bastele ich an einer Microcontroller-Schaltung mit einem PIC microcontroler (18F2550). Dieser hat die nötige Hardware für USB on-board. Ich versuche damit 4 RGB-Kanäle per PWM anzusteuern, die 4 RGB Kanäle können dann ganz komfortabel per USB eingestellt werden, und das schnell genug um flüssige Farbübergänge zu ermöglichen! Ich werde in den nächsten Tagen dazu einen Thread starten, denn inzwischen gibts scho was zu sehn! (Windows-Software ist leider noch nicht ausgereift genug und PWM-Interruptroutine ist noch zu zeitfressend, aber der rest passt...).

Grüße,
Felix
synvox
Mega-User
Mega-User
Beiträge: 147
Registriert: Fr, 27.04.07, 04:40
Wohnort: Schweiz

Fr, 09.11.07, 06:35

Naja, man kann bei der Matrix-Ansteuerung aber während des kurzen Spaltenpulses die LEDs dann eben mit einem entsprechend höheren Strom ansteuern (die LEDs vertragen ja im gepulsten Betrieb deutlich höhere Ströme als im Dauerbetrieb). Damit wäre der Effizienz- resp. Helligkeitsverlust nicht so dramatisch.

Aber ansonsten stimme ich absolut mit dir überein Felix. Gerade bei RGB-Anwendungen (wo noch pro Farbe gePWMt wird) würde ich keine Matrix-Ansteuerung verwenden sondern dedizierte PWM-Ausgänge für jeden unabhängig zu steuernden PWM-Kanal. Ich verwende dabei am liebsten die Hardware-PWM-Register bzw. -Ausgänge von entsprechenden AVR-µCs. Das ergibt die schönsten und flackerfreisten Farbsteuerungen auch bei zusätzlicher, komplexer Funktionsauslastung des µCs.

Gruss
Neni
mors
Mini-User
Beiträge: 5
Registriert: Fr, 15.12.06, 13:54

Fr, 09.11.07, 19:59

jo da haste recht Neni.. kurzzeitig vertragen leds schon einiges an folter. wär ne möglichkeit!

Wie sieht das bei den AVRs aus, wieviele PWM ausgänge kann man da maximal parallel betreiben?? habe derzeit 12 kanäle per software realisiert, das verträgt sich sogar ganz anständig mit dem Prozessorbedarf von USB bei ~100Hz, aber man kann da noch einiges optimieren. (hab zwangsweise meine Assemblerkentnisse aufpoliert, da kann man noch einiges rausholen.. aber eigentlich brauchts nicht viel mehr performance).

Grüße
Felix
synvox
Mega-User
Mega-User
Beiträge: 147
Registriert: Fr, 27.04.07, 04:40
Wohnort: Schweiz

Fr, 09.11.07, 21:45

Wenn man Hardware-PWM verwenden will, dann muss man sich bei den aktuellen AVR-Typen mit maximal 6 Kanälen (ATmega48/88/168) begnügen. Das reicht, um zwei RGB-LEDs pro Chip unabhängig zu steuern (das habe ich ja bei der Mood-P.I.L.L. ausgenutzt). Ich fahre dort die PWM aber mit ca. 250 Hz und 8 Bit Auflösung, möglich wären allerdings sogar bis zu mehreren 10 kHz ohne das die sonstige Performance des AVRs auch nur im Geringsten tangiert wird, da ja die Timer selbsttätig die PWM generieren.
Wenn man mehr PWMs will, muss man auch bei diesen AVRs mit Software-PWM arbeiten, und da muss man dann eben die üblichen Kompromisse eingehen (die Anzahl möglicher PWM-Kanäle verhält sich dann ja umgekehrt proportional zur maximalen PWM-Frequenz und PWM-Auflösung). Ob dann am Ende ein AVR mehr PWM-Kanäle gleichzeitig schaffen kann als ein PIC, weiss ich nicht, hab's nie verglichen bzw. getestet. Ich bezweifle es aber stark, wahrscheinlich wird die Performance ungefähr ähnlich sein bei entsprechend bester Optimierung auf beiden Chips.

Gruss
Neni
Hanni
Mini-User
Beiträge: 3
Registriert: Sa, 07.07.07, 20:48

Fr, 09.11.07, 22:03

Naja, möglich ist mit so nem kleinem AVR ne ganze Menge.
Mein persönlicher Rekord liegt bei 16 8Bit PWM Kanälen mit ner Frequenz von 1kHz. Die Auslastung lag da so ca bei 30%.

Grüße,
Hanni
synvox
Mega-User
Mega-User
Beiträge: 147
Registriert: Fr, 27.04.07, 04:40
Wohnort: Schweiz

Sa, 10.11.07, 01:20

hmm, wie hoch hast du denn da den AVR getaktet gehabt, und wie war die Implemetation der Software-PWM gelöst... klassisch mit Interrupt und Zählvariable und entprechend vielen (der PWM-Anzahl entsprechend) Vergleichen im Interrupt, und in deinem Fall dann Interrupt-Aufrufrate von 256 kHz?

Gruss
Neni
Hanni
Mini-User
Beiträge: 3
Registriert: Sa, 07.07.07, 20:48

Sa, 10.11.07, 12:59

Der AVR (ATmega 88) lief in diesem Fall mit 20 MHz. Die klassische Form die du angesprochen hattest konnte ich nicht verwenden. Das wäre etwas zuviel für die Interrupt Routine geworden.

Der von mir gewählte Weg ist etwas aufwändiger.
Grundsätzlich wird in einem solchem Zyklus ja nur 17 Mal etwas ausgegeben. einmal bei 0 (die an die ungleich 0 sind) und bei den 16 jeweiligen Werten für die PWM.
Daher werden die gewünschten Werte in eine Bitmaske umgesetzt und ggf zusammengefasst (bei gleichen Werten in verschiedenen Kanälen).
Im Interrupt werden diese Masken zu gegebener Zeit lediglich ausgegeben.

Das ganze sollte vom Prinzip her recht gut skalierbar sein.

Grüße,
Hanni
mors
Mini-User
Beiträge: 5
Registriert: Fr, 15.12.06, 13:54

Sa, 10.11.07, 16:01

Hey genau das hatte ich mir bereits vorgenommen! Gut zu wissen, dass es echt geht ;) mit dem PIC den ich benutze kann man mit einem 20 MHz Quartz per PLL ne Taktfrequenz von 48 MHz erzeugen, die dann für USB mitbenutzt wird. Ein Arbeitsschrit ist 4 Takte lang, dh der µC läuft mit 12 MIPS. auslastung ist bei geschätzten 40%, allerdings wie gesagt nur 12 Kanäle und 100 Hz bei 8 bit. Optimierung folgt Montag :D
monte310389
Mega-User
Mega-User
Beiträge: 433
Registriert: Mo, 15.05.06, 15:53
Kontaktdaten:

Sa, 10.11.07, 16:10

Ich will jetzt nicht viel sagen aber ich wef jetzt mal einfach "DMX" in den Raum ;)
Hanni
Mini-User
Beiträge: 3
Registriert: Sa, 07.07.07, 20:48

Sa, 10.11.07, 18:46

monte310389 hat geschrieben:Ich will jetzt nicht viel sagen aber ich wef jetzt mal einfach "DMX" in den Raum ;)
Just 4 Info: dieser kleine AVR den ich oben erwähnte wertet tatsächlich auch DMX aus.
Übrigens ist es recht egal, wie die Daten in den kleinen Käfer kommen. Ob nun via DMX oder über USB bzw. nem USB -> Seriell Wandler ...

Grüße,
Hanni
monte310389
Mega-User
Mega-User
Beiträge: 433
Registriert: Mo, 15.05.06, 15:53
Kontaktdaten:

Sa, 10.11.07, 20:57

Ich find DMX einfach genial.
wen man das einmal raushat wil man echt alles damit bauen ;)
bin jetzt dabei 2 projektre gleich zeitig zu bauen ^^
wen man das vom freund noch mit zählt sogar 3 und das hat 50 DMX kanäle^^
Antworten