LEDs einzeln per USB ansteuern

Fragen zu Schaltungen, Elektronik, Elektrik usw.

Moderator: T.Hoffmann

lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

So, 19.10.08, 17:00

Hallo,

nachdem ich mir mit Hilfe dieses Forums einiges an Know-How in Sachen LEDs angelesen habe, will ich mich jetzt mit etwas Komplizierterem befassen:

Der Titel sagt eigentlich schon alles. Ich möchte über die USB-Schnittstelle meines PCs bestimmte LEDs unabhängig voneinander ansteuern.

Die Software würde ich selbst schreiben. Ich habe zwar keine Lust auf USB-Treiberprogrammierung, aber ich werde wohl nicht daran vorbeikommen. Das grössere Übel scheint die Schnittstelle von meinem USB-Port zu den LEDs (oder einem Microcontroller) zu sein. Ich will nämlich folgendes: Per Software über USB zehn Controller ansteuern, die jeweils eine Gruppe von 20 LEDs in verschiedenen Mustern leuchten lassen.

- Was brauche ich da an Hardware?
- Welche Microcontroller?
- Wie kann ich die programmieren?

Ich weiss... viele Fragen. Ich bin für jede Art von Hilfe dankbar.
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

So, 19.10.08, 19:41

Ich würde einen USB-Seriell Konverter einsetzen. Dadurch entfällt die Programmierei für die USB-Schnittstelle bzw. ein Spezieller microcontroller. Vielleicht wird es sogar funktionieren alle 10 µC an die serielle Leitung zuhängen. Solange du keine Daten von µCs zum PC zurücksenden willst, könnte das sogar klappen.
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

So, 19.10.08, 19:51

Pehu hat geschrieben:Ich würde einen USB-Seriell Konverter einsetzen. Dadurch entfällt die Programmierei für die USB-Schnittstelle bzw. ein Spezieller microcontroller. Vielleicht wird es sogar funktionieren alle 10 µC an die serielle Leitung zuhängen. Solange du keine Daten von µCs zum PC zurücksenden willst, könnte das sogar klappen.
Sorry, aber da blicke ich nicht sofort durch: Was bedeutet es, die 10 Microcontroller an die serielle Leitung zu hängen? Ist es dann nicht unmöglich, verschiedene Muster (z.B. 10 von 20 LEDs leuchten, die anderen 10 nicht) pro Controller anzuzeigen? Ich bitte um Aufklärung.

Davon abgesehen: Das Programmieren der USB-Schnittstelle schreckt mich nicht unbedingt ab, immerhin kann ich dabei eine Menge lernen. Problematischer ist für mich das Ansteuern und Programmieren eines Microcontrollers. Ich habe da wirklich kaum Vorwissen.
Benutzeravatar
lithi
Hyper-User
Hyper-User
Beiträge: 1406
Registriert: So, 26.03.06, 16:49
Wohnort: Fuldabrück
Kontaktdaten:

So, 19.10.08, 19:56

ich weiß ja nicht in wie weit es deinen vorstellungen entspricht, aber wenn es dir sogesagt nur ums haben geht, und nicht um das selber machen, könnte eine relaiskarte das sein, was du sucht. hier mal eine von pollin. gibts aber auch von kemo und anderen herstelleren und verkäufern
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

So, 19.10.08, 20:13

lithi hat geschrieben:ich weiß ja nicht in wie weit es deinen vorstellungen entspricht, aber wenn es dir sogesagt nur ums haben geht, und nicht um das selber machen, könnte eine relaiskarte das sein, was du sucht. hier mal eine von pollin. gibts aber auch von kemo und anderen herstelleren und verkäufern
Danke für die Idee!

Wenn ich das aber richtig verstanden habe, kann man mit so einer Karte nur acht Verbraucher (hier: LEDs) schalten. Ich würde ja gern pro Controller viel mehr LEDs ansteuern.

Zeitlich würde mir eine beinahe-komplett-Lösung natürlich einiges abnehmen, aber ich habe wirklich nichts dagegen, vieles selbst zu machen. Es muss halt in einem vernünftigen Rahmen bleiben.
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

So, 19.10.08, 20:52

So einen Konverter meine ich:
http://www.pollin.de/shop/shop.php?cf=d ... Y5ODcyOTk=

An dem Konverter hängst du einen Pegelwandler dran, damit du die passende Spannung für die µCs kriegst.
An dem Pegelwandler hängst du dann deine 10 µCs dran.

Am PC kannst du dir ein Programm programmieren, der die serielle Schnittstelle bzw. den Konverter anspricht und einzelne 8-bit Pakete verschicken tut.

Da alle µCs an dieser einen Schnittstelle hängen, kriegen alle µCs diese Pakete. Jedoch kannst du selber bestimmen, wie und wer auf welchen Inhalt der Pakete reagieren soll.

Z.B.: Beim 1. Paket wird der µC festgelegt, der angesprochen werden soll.
Beim 2. Paket z.B. das Muster
usw.

Die µCs erhalten die Pakete und tuen die Pakete dementsprechend zerlegen und auswerten.
Wird nun ein Paket mit dem Inhalt "2" rausgeschickt, dann prüft jeder µC für sich nach ob das Paket für ihn bestimmt ist oder nicht.

Ich habe bereits ein Programm erstellt, dass den PC-Bildschirminhalt eines Bereichs ausliest, die Daten über seriellen Port an einen Atmega8/16/32 verschickt, an dem ein kleiner TFT-Display hängt. Der µC verarbeitet die Daten und gibt das Bild auf dem kleinen TFT-Display wieder.
Fasti
Mega-User
Mega-User
Beiträge: 213
Registriert: So, 07.01.07, 20:20

So, 19.10.08, 21:00

Servus,

also es gibt hier mehrere Möglichkeiten aber vorweg nur mal das, einen USB Treiber zu programmieren ist ausgesprochen nicht trivial und auch denkbar schlecht, wenn man nicht die passende Hardware dafür hat. Die Doku der USB 2.0 Spezifikiation hat gerademal 5000 Seiten also nicht unbedingt Wochenendlektüre.
Das was du suchst ist ein Mikrocontroller mit integrierten USB (Slave) oder ein einfache USB-Seriell Umsetzer ala FTDI FT232RL. Mit dem FTDI Chip kannst du jeden beliebigen uC mit serieller Schnittstelle verwenden. Als Vertreter der uC mit integrierter USB Schnittstelle fallen mir da die Microchip PIC18 (8-bitter) PIC24(16 bitter) und PIC32(32 bitter) ein, wobei der 32 bitter wohl eher Overkill ist für deine Applikation. Als leicht erhältlichen Bastlerchip würd ich dir einen ATMega empfehlen.
Der Vorteil von FTDI wie auch von Microchip ist, dass sie die Treiber für Windows zur Verfügung stellen. Bei den Microchip Teilen bin ich nicht so fit aber bei dem FTDI Chip gibt es unter Windows 2 Möglichkeiten der Anbindung. Entweder als USB-Seriell adapter, wo du in deinem Programm einfach einen Virtuellen Com-Port ansprichst, was auch gleichzeitig die einfachste Möglichkeit ist, oder du arbeitest dich in die API ein, welche dir viele Möglichkeiten gibt mit dem FTDI Chip zu kommunizieren, sodaß das Gerät unter Windows wie ein echtes USB Gerät aussieht.
Ich würde wie folgt vorgehen:
Ein USB-Seriell Wandler FTDI zu einem ATMega 8 oder PIC24F, welcher als Master für die restlichen uCs dient. Von da an per I²C, bei Atmel heisst das TWI, zu den restlichen uCs welche Slaves sind. Ein relativ einfaches Protokoll, je nach Anforderung kann hier ausreichen um alle die LEDs zu steuern.
Eine alternative wären LED-Treiber ICs, welche per I²C gesteuert werden können und mehrere LEDs auch gleichzeitig mit Konstantstrom Versorgen können und auch per PWM dimmen.

Soda, erstmal genug Input....

Grüße

Christian
Benutzeravatar
Fightclub
Post-Hero
Post-Hero
Beiträge: 5114
Registriert: Mi, 01.03.06, 18:40

So, 19.10.08, 21:24

Pehu hat geschrieben: Z.B.: Beim 1. Paket wird der µC festgelegt, der angesprochen werden soll.
Beim 2. Paket z.B. das Muster
usw.
Alternativ kannst du auch im Paket noch adressieren welcher µc angesprochen wird, das wäre noch etwas störungsresistenter.
Eventuell könnte man das ganze bei einem AVR an die USART-Schnittstelle anschließen, das würde das ganze dann auf der µc-Seite dann noch etwas einfacher machen, ich weiß nur nicht ob die USART-Schnittstelle für serielle Kommunikation mit dem Frame-Format des USB-Seriell-Wandlers klarkommt.
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

So, 19.10.08, 21:46

Pehu hat geschrieben:So einen Konverter meine ich:
http://www.pollin.de/shop/shop.php?cf=d ... Y5ODcyOTk=

An dem Konverter hängst du einen Pegelwandler dran, damit du die passende Spannung für die µCs kriegst.
An dem Pegelwandler hängst du dann deine 10 µCs dran.

Am PC kannst du dir ein Programm programmieren, der die serielle Schnittstelle bzw. den Konverter anspricht und einzelne 8-bit Pakete verschicken tut.

Da alle µCs an dieser einen Schnittstelle hängen, kriegen alle µCs diese Pakete. Jedoch kannst du selber bestimmen, wie und wer auf welchen Inhalt der Pakete reagieren soll.

Z.B.: Beim 1. Paket wird der µC festgelegt, der angesprochen werden soll.
Beim 2. Paket z.B. das Muster
usw.

Die µCs erhalten die Pakete und tuen die Pakete dementsprechend zerlegen und auswerten.
Wird nun ein Paket mit dem Inhalt "2" rausgeschickt, dann prüft jeder µC für sich nach ob das Paket für ihn bestimmt ist oder nicht.

Ich habe bereits ein Programm erstellt, dass den PC-Bildschirminhalt eines Bereichs ausliest, die Daten über seriellen Port an einen Atmega8/16/32 verschickt, an dem ein kleiner TFT-Display hängt. Der µC verarbeitet die Daten und gibt das Bild auf dem kleinen TFT-Display wieder.
Diesen Ansatz finde ich sehr interessant! Gerade die Programmierung des "Protokolls" zur Steuerung der LEDs erscheint mir nicht übermässig kompliziert.

Wenn ich das richtig verstanden habe, bräuchte ich dann nur das Folgende, oder?
- USB-Seriell-Konverter
- Pegelwandler
- 10 Microcontroller
- eine Möglichkeit, die 10 Microcontroller zu programmieren

Davon abgesehen, habe ich noch ein grundlegendes Verständnisproblem (falls ich es nicht erwähnte, ich bin ziemlicher LED-Anfänger): Wenn der Microcontroller z.B. auf 3,3V läuft, wie verträgt sich das mit meiner 12V-Spannung für die LEDs? Ich habe nämlich keine Vorstellung davon, wie man sowas dann verschalten müsste.
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

So, 19.10.08, 21:54

Fasti hat geschrieben:Servus,

also es gibt hier mehrere Möglichkeiten aber vorweg nur mal das, einen USB Treiber zu programmieren ist ausgesprochen nicht trivial und auch denkbar schlecht, wenn man nicht die passende Hardware dafür hat. Die Doku der USB 2.0 Spezifikiation hat gerademal 5000 Seiten also nicht unbedingt Wochenendlektüre.
Ich habe mir gestern einiges zum Thema USB-Programmierung durchgelesen. Du hast absolut Recht, das muss nicht sein. Ich wusste ja auch nichts von anderen Möglichkeiten, die um einiges einfacher sind.
Fasti hat geschrieben:Das was du suchst ist ein Mikrocontroller mit integrierten USB (Slave) oder ein einfache USB-Seriell Umsetzer ala FTDI FT232RL. Mit dem FTDI Chip kannst du jeden beliebigen uC mit serieller Schnittstelle verwenden. Als Vertreter der uC mit integrierter USB Schnittstelle fallen mir da die Microchip PIC18 (8-bitter) PIC24(16 bitter) und PIC32(32 bitter) ein, wobei der 32 bitter wohl eher Overkill ist für deine Applikation. Als leicht erhältlichen Bastlerchip würd ich dir einen ATMega empfehlen.
Der Vorteil von FTDI wie auch von Microchip ist, dass sie die Treiber für Windows zur Verfügung stellen. Bei den Microchip Teilen bin ich nicht so fit aber bei dem FTDI Chip gibt es unter Windows 2 Möglichkeiten der Anbindung. Entweder als USB-Seriell adapter, wo du in deinem Programm einfach einen Virtuellen Com-Port ansprichst, was auch gleichzeitig die einfachste Möglichkeit ist, oder du arbeitest dich in die API ein, welche dir viele Möglichkeiten gibt mit dem FTDI Chip zu kommunizieren, sodaß das Gerät unter Windows wie ein echtes USB Gerät aussieht.
Ich würde wie folgt vorgehen:
Ein USB-Seriell Wandler FTDI zu einem ATMega 8 oder PIC24F, welcher als Master für die restlichen uCs dient. Von da an per I²C, bei Atmel heisst das TWI, zu den restlichen uCs welche Slaves sind. Ein relativ einfaches Protokoll, je nach Anforderung kann hier ausreichen um alle die LEDs zu steuern.
Eine alternative wären LED-Treiber ICs, welche per I²C gesteuert werden können und mehrere LEDs auch gleichzeitig mit Konstantstrom Versorgen können und auch per PWM dimmen.

Soda, erstmal genug Input....

Grüße

Christian
Vielen Dank, das waren ja reichlich Informationen auf einmal.

Ich tendiere zu einer Lösung über den USB-COM-Port (siehe obiger Beitrag). Das erscheint mir für mein Problem die angemessenste Lösung zu sein.

Was die LED-Treiber-ICs angeht: Ich würde tippen, dass das nicht die billigste Möglichkeit ist. Es soll hier nicht um Geld gehen. Aber vielleicht kann ich bei einer eigenen Lösung mehr lernen. Und das ist ja auch nicht zu verachten.
Benutzeravatar
Fightclub
Post-Hero
Post-Hero
Beiträge: 5114
Registriert: Mi, 01.03.06, 18:40

So, 19.10.08, 22:05

lightbulb hat geschrieben:Davon abgesehen, habe ich noch ein grundlegendes Verständnisproblem (falls ich es nicht erwähnte, ich bin ziemlicher LED-Anfänger): Wenn der Microcontroller z.B. auf 3,3V läuft, wie verträgt sich das mit meiner 12V-Spannung für die LEDs? Ich habe nämlich keine Vorstellung davon, wie man sowas dann verschalten müsste.
Der Microcontoller läuft auf 5V, anders geht nicht. Du kannst die Ausgänge auch nur 5V oder 0V schalten. Wenn deine LEDs 12V benötigen hast du einen 12V Eingang, dahinter kommt dann ein Spannungsregler für die µc, der 5V ausgibt. An den Ausgang des µc hängst du dann einen Transistor. Die Kathoden der LEDs kommen dann an den Kollektor des Transistors und der Emitter geht nach Masse.
Benutzeravatar
tho_weiss
Mega-User
Mega-User
Beiträge: 129
Registriert: Di, 18.07.06, 17:48

Mo, 20.10.08, 06:48

Warum macht ihr es euch immer so kompliziert ? :roll:


Nimm doch einfach ein DMX512 Interface und als LED-Trieber sowas: http://www.brilldea.com/ sowas http://www.hoelscher-hi.de/hendrik/light/dmxled.htm oder sowas http://www.plischka.at/DMX-512.html...

Software gibbet hier http://www.freestylerdmx.be/

DMX ist schließlich für lichtsteuerung entwickelt worden...


gruß,
Thorsten
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

Mo, 20.10.08, 18:58

lightbulb hat geschrieben:Wenn ich das richtig verstanden habe, bräuchte ich dann nur das Folgende, oder?
- USB-Seriell-Konverter
- Pegelwandler
- 10 Microcontroller
- eine Möglichkeit, die 10 Microcontroller zu programmieren
Ja, korrekt. Ich würde erstmal 2 Microcontroller zum Testen nehmen.

So einen USB-Seriell-Konverter wollte ich auch kaufen, da ich einen zweiten Seriellen Port am PC zum Kommunizieren mit dem Microcontroller haben wollte und nicht jedes Mal zum programmieren der Microcontrollern umstecken wollte.

Aber da fiel mir ein, dass ich noch ein USB-Datenkabel für mein Sony Ericsson Handy hatte. Hab's zerlegt und siehe da drei Kabeln. Wird wohl TX, RX und Masse sein. :wink: Vorsichtshalber noch Spannung gemessen...
Ich habe dann das Datenkabel als seriell-Konverter mit integrietem Pegelwandler missbraucht. :mrgreen:

Vorteil ist, dass meistens der Pegelwandler integriert ist und man das Datenkabel direkt an den Microcontroller hängen kann. :D

Auf meinem Pollin-AVR-Board wo eigentlich der Pegelwander von MAX saß, sitzt nun ein IC-Socket mit dem Ende des USB-Datenkabels. :mrgreen:

Wenn du noch ein altes USB-Datenkabel hast, wäre es evtl.ein Versuch wert. Macht das ganze noch einfacher, weil der Pegelwandler entfällt...
Dateianhänge
usbseriell.jpg
USB-Datenkabel vom Handy missbraucht
usbseriell.jpg (57.71 KiB) 13160 mal betrachtet
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich
Kontaktdaten:

Di, 21.10.08, 09:09

moin
muss jetzt auch mal mein neues Spielzeug zeigen zwar kannst du damit keine 200 LEDs ansteuern aber vllt als Anregung
ethernet_mit_powerkit.png
ethernet_mit_powerkit.png (122.91 KiB) 13118 mal betrachtet
myEthernet hat ein ATmega644P 20 MHz mit
* 10 MegaBit Ethernet mit ENC28J60 von Microchip
* vorinstalliertem Webserver
* IP-Adresse, Port, Webseiten u.v.m. konfigurierbar
* 64 K FLASH
* 4 K Byte SRAM
* 2 K Byte EEPROM
* MicroSD-Kartenhalter
* Ethernet Buchse mit Übertrager
* ISP-Anschluss 10polig
* TWI / UART / SPI-Schnittstelle
* bis zu 22 digital I/O
* 8 analoge Eingänge
* 2 PWM Ausgänge
* Erweiterungsbuchse nach myAVR-Standard
* Qualitätsleiterplatte FR4, Industriefertigung, robust

oder
Mikrocontroller CY7C63001C-PXC mit Firmware
http://www.b-kainka.de/usb.htm
ist auch sehr schön und günstig aber nur 12 digital I/O

mit DMX kenn ich mich nicht aus und etwas zu teuer

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

Di, 21.10.08, 09:29

Es gibt, wenn man unbedingt noch weitere serielle Ports am Rechner braucht, auch Schnittstellenkarten. Steckste rein in den PCI-Slot, installierst evtl. noch Treiber und dann kannst sie benutzen.
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

Di, 21.10.08, 20:03

Ein paar nette Basteleien habt Ihr da. Jedenfalls für meinen Standard. :)
Pehu hat geschrieben:Aber da fiel mir ein, dass ich noch ein USB-Datenkabel für mein Sony Ericsson Handy hatte. Hab's zerlegt und siehe da drei Kabeln. Wird wohl TX, RX und Masse sein. :wink: Vorsichtshalber noch Spannung gemessen...
Ich habe dann das Datenkabel als seriell-Konverter mit integrietem Pegelwandler missbraucht. :mrgreen:
Genau so ein Dinge habe ich hier daheim Rumfliegen, ein USB-Datenkabel für mein altes Sony Ericsson. Das könnte ich in der Tat verwenden.
Synthy82 hat geschrieben:Es gibt, wenn man unbedingt noch weitere serielle Ports am Rechner braucht, auch Schnittstellenkarten. Steckste rein in den PCI-Slot, installierst evtl. noch Treiber und dann kannst sie benutzen.
Die Option für eine PCI-Karte fällt bei mir weg, habe nur Notebooks daheim.


Nach DMX habe ich eine Weile gegoogelt. Das wäre wohl einfacher als andere Lösungen. Aber ich habe Spass am Basteln. Und billig scheint das ja auch nicht unbedingt zu sein.


Ich habe gestern noch eine ganze Weile recherchiert. Da ist mir folgendes ins Auge gefallen: Octopus USB

Da habe ich einen USB-Anschluss mit 38 digitalen I/O-Ports. Kann ich das nicht als "Master" für 10 simplere Microcontroller nehmen, die dann wiederum jeweils ihre LEDs ansteuern? Auch hier könnte ich doch ein Protokoll für die Signale schreiben, die der Master-Controller an die Slaves aussendet, oder? Wäre bei dieser Lösung die bidirektionale Kommunikation möglich (beispielsweise 16 bit vom Master zu den Slaves und 16 bit von den Slaves zum Master)? Ich denke doch, oder missverstehe ich hier was?

An der Lösung mit dem Octopus-USB würde mir ganz besonders gefallen, dass es sich um ein Open-Source-Projekt handelt. Ich bin selbst Softwareentwickler und ein Verfechter von Open-Source, insofern würden mir die 39,- Euro weniger als Preis für ein Produkt als vielmehr wie eine Spende vorkommen.

Wenn Ihr dieses Produkt als geeignet erachtet, würde ich mich gerne darauf festlegen.
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich
Kontaktdaten:

Di, 21.10.08, 21:41

hey das ist auch nett, Octopus hat auch I2C Bus wo du bis zu 128 Geräte(Chip + LED?) Adressieren kannst

MfG
Jay
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

Di, 21.10.08, 22:11

Jay hat geschrieben:hey das ist auch nett, Octopus hat auch I2C Bus wo du bis zu 128 Geräte(Chip + LED?) Adressieren kannst

MfG
Jay
Na das klingt doch gut!

Die nächste Frage wäre dann: Welche Microcontroller sind I2C-fähig? Woran erkenne ich das?
Benutzeravatar
Jay
Hyper-User
Hyper-User
Beiträge: 1096
Registriert: Mo, 08.05.06, 07:54
Wohnort: Österreich
Kontaktdaten:

Mi, 22.10.08, 07:51

lightbulb hat geschrieben:Die nächste Frage wäre dann: Welche Microcontroller sind I2C-fähig? Woran erkenne ich das?
die Port Ausgänge mit der bezeichnung SDA & SCL
z.B.: bei ATmega16 Pin23 PC1 SDA & Pin 22 PC0 SCL
ATmega16.gif
ATmega16.gif (16.25 KiB) 12988 mal betrachtet
also das DMX und der Vergleich zu I2C hat änlichkeiten z.B.:
An jedem Gerät muss die Busadresse eingestellt werden!
und
es werden 8 Bit übertragen nur bei DMX mit 250 kHz Rechteck, Grenzfrequenz ~2,5 MHz & bei I2C vom Controller abhängig

MfG
Jay
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

Mi, 22.10.08, 12:42

Jay hat geschrieben:
lightbulb hat geschrieben:Die nächste Frage wäre dann: Welche Microcontroller sind I2C-fähig? Woran erkenne ich das?
die Port Ausgänge mit der bezeichnung SDA & SCL
z.B.: bei ATmega16 Pin23 PC1 SDA & Pin 22 PC0 SCL
ATmega16.gif
also das DMX und der Vergleich zu I2C hat änlichkeiten z.B.:
An jedem Gerät muss die Busadresse eingestellt werden!
und
es werden 8 Bit übertragen nur bei DMX mit 250 kHz Rechteck, Grenzfrequenz ~2,5 MHz & bei I2C vom Controller abhängig

MfG
Jay
Danke für die Erklärung!

Ich tendiere deswegen zu der Master-Slave-Lösung mit I2C, weil ich dann deutlich weniger Kabel ziehen muss. Von Controller zu Controller sind das ja dann jeweils nur zwei Leitungen. Das Layout, das ich vorher "geplant" hatte, wäre auf jeden Fall aufwendiger gewesen. Und so frische ich nebenbei wieder meine Microcontroller-Programmierkenntnisse auf.

Mir sind noch einige Dinge unklar. Ich lese mir erstmal etwas mehr an, bevor ich Euch hier mit weiteren Fragen bombardiere... :)
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

Do, 23.10.08, 18:23

So, ich will meine momentane Idee mal etwas konkreter fassen:

- am Notebook ein Octopus-USB als Master-Controller
- zehn Slave-Controller zur Ansteuerung der LEDs mit jeweils
- 10 roten LEDs, die einzeln angesteuert werden
- 30 weissen/gelben LEDs, die jeweils in 3er-Gruppen angesteuert werden

Ich mir ein paar Gedanken zur Programmierung der Controller gemacht. Bitte korrigiert mich, wenn ich irre:

Ich programmiere jeden der Slave-Controller mit einer bestimmten Adresse und einem Programm, das auf Anweisung des Master-Controllers bestimmte I/O-Ports auf 0 oder 1 setzt. Das wären dann im Prinzip die "Schalter", die meine LEDs ansteuern. Was ich also brauche, ist ein Protokoll, das dem Slave-Controller mitteilt, welche I/O-Ports er auf 0 oder 1 setzt und für wie lange (ich will per Software bestimmte Muster anzeigen lassen).

Und nun eine etwas kompliziertere Idee (jedenfalls für mich):

Ich würde gern die 10 roten LEDs als Einheit dimmen, d.h. jede der 10 roten LEDs sollte gleich stark leuchten. Wie kann ich das möglichst simpel umsetzen (das gleiche würde ich gern für die 30 anderen LEDs als Einheit machen)? Oder anders: Geht das überhaupt?

Das mit dem Dimmen wäre schon eine sehr feine Sache. Ich will ja die LEDs gar nicht einzeln dimmen, das sollte die Sache doch irgendwie vereinfachen.
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

Do, 23.10.08, 21:52

Mir ist gerade aufgefallen, dass der Octopus-USB 2 PWM-Ausgänge hat.

Könnte ich mit denen nicht meine zwei grossen LED-Gruppen (bestehenden aus den vielen Einzel-LEDs) dimmen? Wenn ja, wie stellt man das praktisch an?
Andi
Super-User
Super-User
Beiträge: 63
Registriert: Fr, 19.09.08, 13:03

Fr, 24.10.08, 08:40

Zum Dimmen und gleich hell leuchten:
- da nimmst ne KSQ https://www.leds.de/product_info.php?id ... cts_id=542
-> dachte immer die kann man per PWM dimmen, oder geht des nur bei der großen???
- wenn ne LED zu hell ist, dann mach nen Widerstand parallel dazu

oder du machst einfach ne Verstärkerschaltung mit nem OP
lightbulb
User
User
Beiträge: 18
Registriert: Di, 07.10.08, 00:45

Fr, 24.10.08, 16:26

Andi hat geschrieben:Zum Dimmen und gleich hell leuchten:
- da nimmst ne KSQ https://www.leds.de/product_info.php?id ... cts_id=542
-> dachte immer die kann man per PWM dimmen, oder geht des nur bei der großen???
- wenn ne LED zu hell ist, dann mach nen Widerstand parallel dazu

oder du machst einfach ne Verstärkerschaltung mit nem OP
Was genau bedeutet genau der letzte Absatz? :D (sorry)

Ich habe nun mal einen kleinen Platinen-Schaltplan angefertigt. Nur zur Erinnerung: Ich bin kein Elektriker, und ich besitze auch kein Tool, das speziell für Schaltkreise gedacht ist. Trotzdem, hier mal mein Entwurf (siehe Anhang) und meine Gedanken dazu:

Ein Netzteil stellt 12 V bereit. Daran schalte ich parallel zehn dieser Platinen. Auf jede Platine kommt ein Spannungsregler (5 V), der die Versorgungsspannung für den IC bereitstellt. Der IC kommuniziert über I2C mit dem Master-IC. 10 Ausgänge des ICs gehen an zehn Transistoren (im Bild exemplarisch nur einer), die den Stromkreis für die roten LEDs schliessen. Weitere 10 Ausgänge gehen an zehn Transistoren (im Bild auch nur einer), die den Stromkreis für jeweils drei gelbe LEDs schliessen.

Nach weiterem Lesen hab ich mir zum Dimmen folgendes gedacht: Kann ich nicht jeden Transistor über Software-PWM steuern? Ich bin mit der Materie noch nicht 100% vertraut, aber wenn das ginge, würde ein solcher Entwurf letztlich alle meine Anforderungen erfüllen und ich könnte loslegen.

Beim weiteren Lesen über I2C meine ich auch gesehen zu haben, dass man zwei "Hochziehwiderstände" in die Busleitungen schalten muss. Stimmt das?

Ansonsten würde ich davon ausgehen, dass ich mit diesem Layout alles machen kann: Master-IC steuert Slave-ICs, die wiederum spulen bestimmte Programme ab (n aus m LEDs an/aus, jeweils getrennt dimmbar über PWM).

Wenn ich mit meinen Gedanken daneben liege, dann klärt mich bitte auf.
Dateianhänge
platine.png
platine.png (5.93 KiB) 12690 mal betrachtet
Benutzeravatar
Pehu
Mega-User
Mega-User
Beiträge: 469
Registriert: Mi, 01.11.06, 19:33
Kontaktdaten:

Fr, 24.10.08, 16:56

lightbulb hat geschrieben: Und nun eine etwas kompliziertere Idee (jedenfalls für mich):

Ich würde gern die 10 roten LEDs als Einheit dimmen, d.h. jede der 10 roten LEDs sollte gleich stark leuchten. Wie kann ich das möglichst simpel umsetzen (das gleiche würde ich gern für die 30 anderen LEDs als Einheit machen)? Oder anders: Geht das überhaupt?

Das mit dem Dimmen wäre schon eine sehr feine Sache. Ich will ja die LEDs gar nicht einzeln dimmen, das sollte die Sache doch irgendwie vereinfachen.
Am einfachsten ist es, die Leds die einzeln angesteuert werden sollen, mit dem Pluspol der Leds an einen Port des µC anschließen. Dann den Minuspol der Leds die du als gemeinsame Gruppe dimmen willst, an einen NPN-Transistor hängen. Den Transistor kannst du z.B. per Hardware-PWM ansteuern. Dadurch ist das Dimmen sehr einfach und vor allem flackerfrei. Da ja Hardware-PWM...

Wenn du nun den Transistor z.B.: um 50 % dimmst, werden alle Leds bzw. die Gruppe runtergedimmt. Da ja alle Leds mit der einen Hälfte (Minuspol) am Transistor hängen.

Diese Technik habe ich in einem Projekt mit einer Led-Anzeige benutzt. Wo die komplette Led-Anzeige gedimmt werden soll.

Da die meisten µC zwei Hardware-PWMs haben und du zwei Led-Gruppen dimmen willst, wären deine Anforderungen hiermit ja abgedeckt?

Nur muss der µC soviele I/O-Ports verfügen, dass alle Leds die einzeln angesteuert werden sollen können auch einen eigenen I/O-Port kriegen...

Hoffe das war verständlich.
Antworten