PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein erstes Projekt: 2 RGB Leds über Computer ansteuern



NexX
15.11.2008, 22:01
Hallo,

bin neu hier im Forum und fang auch mit Elektronik erst an...
Vor 2 Tagen ist mir eine Idee in den Sinn gekommen, die ich jetzt auch umsetzen möchte :cheesy:

Also es sollen 2 RGB-Leds in einem Milchglasgehäuse verbaut werden und dann mit einem Microcontroller über den Seriellen Port am PC gesteuert werden. Gedacht ist das ganze für Farben, Farbverläufe etc. z.B. auch Signalfarben die dann vom PC oder meiner Software (bin eig. ein guter Programmierer, aber so Microcontroller ist dennoch neu für mich :D ) gesendet werden und dann dargestellt werden. Das ist nützlich, wenn man so durch ein blinken signalisieren kann, wenn man eine eMail bekommen hat, oder derartiges.
Natürlich wären auch Farbverläufe nett, doch da wären wir beim nächsten Punkt. Wie sollte man die Baudrate usw. wählen, dass man die Daten für einen flüssigen Farbverlauf schnell genug übertragen kann?

Die 2 Leds sollen einzeln ansteuerbar sein, und das wie gesagt über den Microcontroller über serielle Daten. Dazu bräuchte ich natürlich ein Protokoll... Gibts da schon vordefinierte? Sonst müsst ich halt selber eins ausdenken.. sowas wie

0/1,0-255,0-255,0-255; für die LED (0 links, 1 rechts), R, G und B.

Und jetzt fangen die Fragen an^^ Wie steuer ich eine RGB Led an? Sind ja nicht billig, die Teile... 5 € bei Conrad für eine mit 3 Anoden und 3 Kathoden, wenn ich das richtig seh. Und wie steuert man sowas dann an?

Ich hoffe ihr könnt mir ein bisschen dabei helfen, da ich Elektronik und die Microcontrollerprogrammierung sehr interessant finde, vor allem weil ich ja eh (Hobby-)Programmierer bin und somit Programme auch ohne Computer benutzen kann....

thx, NexX :cheesy:

stromflo
15.11.2008, 23:45
Hallo,

RGB LED's die die Farbe wechseln würd ich über die PWM (https://www.roboternetz.de/wissen/index.php/Pulsweitenmodulation)(PulsWeitenModulation) Ausgänge eines Mikrocontrollers verwirklichen. Welchen Controllertyp willst du einsetzen? AVR, Pic?

Du schreibst ja von zwei RGB-LED's möchtest du, dass beide LED's immer den gleichen Farbton wiedergeben oder unterschiedliche? Danach richtet sich der Controllertyp.

Hab dir mal ein Beispiel angehängt, wie du an einen Atmega88 eine RGB-LED mit gemeinsamer Kathode anschließen könntest. Hab mal den Atmega88 gewählt weil der 6 PWM Ausgänge bietet.

Gruß Flo

NexX
16.11.2008, 00:25
Hi,

ich wollte eigentlich einen normalen AVR nehmen.
Die LEDs sollen im Regelfall die gleichen Farben haben, aber auch einzeln ansteuerbar sein. Also doch einzeln über Seriell... Sollt ich oben auch erwähnt haben, oder?
Ich schau mal nach was PWM ist :cheesy:

thx, NexX


Edit: Irgendwie komm ich mit dem Anhang nicht zurrecht... Wo überschneiden sich Leitungen und wo sind sie miteinander verbunden? :-s

stromflo
16.11.2008, 00:42
ich wollte eigentlich einen normalen AVR nehmen.

Dann passt der Atmega88 ja schon mal ganz gut....



Sollt ich oben auch erwähnt haben, oder?

Edit: Irgendwie komm ich mit dem Anhang nicht zurrecht... Wo überschneiden sich Leitungen und wo sind sie miteinander verbunden? Eh?

Hast auch, ich habs übersehen!
Ich hab den Schaltplan exportiert und dann waren die Verbindungspunkte weg. Ich hab es jetzt geändert und neu hochgeladen....

Gruß Flo

thewulf00
16.11.2008, 12:32
Für RGB-LEDs könntest Du auch mal bei anderen Versendern schauen, die sind u.U. billiger.
z.B.:
- Reichelt
- eBay
- led.de
- leds.de
usw.

Du solltest auf jeden Fall einen Vorwiderstand pro Leitung benutzen, sonst betreibst Du die LEDs über Ihrem Arbeitspunkt, was bedeutet, sie gehen sehr schnell kaputt.

Über die serielle Schnittstelle ist eine gute Idee, falls Du das PC-seitig programmiert bekommst. Aber dann kannst Du es auch auf jeden Fall schonmal schön testen, ohne etwas programmiert zu haben.

Wenn Du übrigens den Controller nichts anderes machen lassen willst, dann würde ich Dir empfehlen, die PWMs (eine pro Leitung, ergo 6 Stück), per Software zu machen. Und des weiteren wäre ein Treiber nicht verkehrt, es sei denn die Summe aller Ströme (abhängig vom Vorwiderstand) ist kleiner als das im Datenblatt des Atmels angegebene Maximum. (Damit meine ich nicht die 20mA per Kanal, es gibt noch ein anderes Maximum)

stromflo
16.11.2008, 14:18
Du solltest auf jeden Fall einen Vorwiderstand pro Leitung benutzen, sonst betreibst Du die LEDs über Ihrem Arbeitspunkt, was bedeutet, sie gehen sehr schnell kaputt.

Oh wei, war gestern einfach schon ein wenig spät, hab die Vorwiderstände in dem Anhang eingefügt und neu hochgeladen.


(Damit meine ich nicht die 20mA per Kanal, es gibt noch ein anderes Maximum)

Ein Maximum von 20mA pro Kanal ist mir neu, es sind 40mA pro Kanal möglich. Dabei darf aber der Gesamtstrom von 200mA nicht überschritten werden.


Wenn Du übrigens den Controller nichts anderes machen lassen willst, dann würde ich Dir empfehlen, die PWMs (eine pro Leitung, ergo 6 Stück), per Software zu machen

Es kommt auch noch drauf an, welchen Controller er wählt. Nimmt er den Atmega88 dann stehen 6 PWM Ausgänge (Hardware-PWM) zur Verfügung.

Als Treiber könnte z.B. ULN2803 verwendet werden.

Gruß Flo

NexX
16.11.2008, 16:30
Und wie würde man das dann am Controller per PWM anzusteuern?

thewulf00
16.11.2008, 17:56
Mein Gott, Du hast Recht, im DB stehen 40mA. Ich ging bis dato von 20 aus. Das hat man davon, wenn man Freunden traut...

Ich meinte das softwaremäßige Erzeugen der PWM aus Flexibilitätsgründen.

stromflo
16.11.2008, 18:16
Und wie würde man das dann am Controller per PWM anzusteuern?

Grundlegendes zur PWM:

Bei Pulsweiten Modulationen werden die angeschlossenen Verbraucher mit einem Rechtecksignal angesteuert. Die Frequenz dieses Rechtecksignals ist konstant und kann über den Vorteiler (Prescaler) eingestellt werden. Dabei wird die Frequenz so gewählt, dass das menschliche Auge kein flimmern mehr wahrnehmen kann. Der Ausgang wird nun immer kurze Zeit auf High-Pegel (eingeschalten z.B. 5V) und dann wieder auf LOW-Pegel(ausgeschalten 0V) geschalten. Die Ein- und Auschaltzeit ergeben zusammen die Periodendauer, die stets konstant bleibt. Allerdings kann nun das Verhältnis von Ein- und Auschaltzeit verändert werden.
Beispielsweise kann der Ausgang 100%(bei 8-Bit 255) der Periode eingeschalten und 0%(bei 8-Bit 0) ausgeschalten sein (die LED würde auf voller Helligkeit leuchten) oder der Ausgang kann zu 4%(bei 8-Bit 10) eingeschalten und zu 96% (bei 8-Bit 245) ausgeschalten sein (Die LED würde glimmen).

Bei den AVR's kann die Auflösung(Pulsbreite) eingestellt werden, (8-Bit,9-Bit,10-Bit). Bei 8-Bit wären also 256 verchiedene Helligkeitsstufen möglich. Bei 10-Bit 1024 Helligkeitsstufen.

Bei deiner RGB-LED hättest du nun 3 solcher Ausgäng für eine LED. Durch die verschiedenen Helligkeitstufen der einzelnen Farben in der RGB-LED würden sich nun unterschiedliche Farbtöne ergeben.

Die RGB-LED's müssen bei Hardware PWM nun an die Controller Ausgänge über einen Vorwiderstand OC0A,OC0B,OC1A,OC1B,OC2A,OC2B angeschlossen werden. Wenn die Last an den Ausgänge pro pin 40mA oder Gesamt 200mA überschreitet ist zusätzlich ein Ausgangstreiber notwendig.

In der Software müssen nun die Timer0,1,2 bei Atmega88 für den PWM-Modus konfiguriert werden.

Ein paar Hinweise wie sowas funktioniert findest du z.B. hier (http://www.bunbury.de/technik/avr/).

Hast du eigentlich schon Hardware womit du die Controller flashen bzw. brennen kannst?

Gruß Flo

NexX
16.11.2008, 18:25
Ah, jetzt versteh ich... Also je nachdem wie schnell an und aus geschaltet wird, verändert sich die Helligkeit und dadurch bei der passenden Mischung die Farbe.
Naja, ich wollte eigentlich erstmal die Grundschaltung aus dem Wiki (https://www.roboternetz.de/wissen/index.php/AVR-Einstieg_leicht_gemacht) benutzen.

EDIT: So einfach ist das? Hab mir jetzt mal das Tutorial angeschaut, vorallem das Kapitel mit der PWM. Sieht eigentlich ganz einfach aus... Jetzt muss ich nur noch lesen oder testen, welche Werte welche Farben erzeugen, das mit der seriellen Schnittstelle austüfteln und dann die Teile besorgen.

stromflo
16.11.2008, 19:32
Ich meinte das softwaremäßige Erzeugen der PWM aus Flexibilitätsgründen.

da hast du natürlich vollkommen recht, ich dachte mir lieber Hardware PWM weil es meiner Meinung nach für Anfänger einfacher ist und ich die Möglichkeit hätte im Controller auch noch andere Aufgaben abzuarbeiten.

Bei Software PWM ist der Controller halt durch die PWM schon fast ausgelastet.




Jetzt muss ich nur noch lesen oder testen, welche Werte welche Farben erzeugen, das mit der seriellen Schnittstelle austüfteln und dann die Teile besorgen.

Ich hab mir die Vorwiderstände für die RGB LED's(innerhalb der im Datenblatt beschriebenen Rahmenbedingungen) kürzlich für ein Projekt so angepasst , dass die drei Farben in etwa gleich hell leuchten und damit ungefähr die Farben der RGB-Farbpalette nachbilden. Dabei spielten kleinere Abweichungen aber keine Rolle. Prinzipiell kannst du auch durch die Helligkeitswerte noch software-korrekturen vornehmen um die RGB-Farben annähernd zu erreichen.

Gruß Flo

thewulf00
16.11.2008, 20:42
Ich kann Dir noch einen Tipp geben:

Wenn du wissen willst, wie Du eine bestimmte Farbe erzeugst, dann geh in ein Grafikprogramm, wie z.B. Paint oder GIMP, und erzeuge dort eine Farbe in der Palette. Dabei musst Du Dir ja die entsprechenden Farbwerte für RGB aussuchen, und die gleichen Werte kannst Du dann auch an die LEDs weitergeben. So habe ich mir mein erstes Moodlight gebaut.

NexX
16.11.2008, 21:11
Guter Tipp :) Kenn allerdings auch von HTML und CSS her einige Farbcombis. Die müsste man nur noch umrechnen (hex => dez) aber über gimp bleibt mir das erspart...

wkrug
17.11.2008, 08:43
Wenn man wirklich nur 3 PWM Ausgäge braucht würde ich auch die Hardware PWM's benutzen.
Braucht man mehr Ausgänge bleibt ( beim ATMEGA 8 ) nur der Weg über Software PWM's - aber das wurde hier ja alles schon geschrieben.

Die Farbsteuerung bei meinem letzten Projekt ( RGB LED Strahler ) hab ich über Look Up Tables gemacht.
Die 3 PWM's laufen mit 256 Schritten auf 2 Timern.
Für jede Farbe wird nun eine Farbtabelle generiert, die 256 Werte umfasst.

Tabelle Rot:
0,1,1,2,2,3,4,5,6,7,8,usw.
An die PWM's werden dann die Werte ausgegeben die in der Tabelle am jeweiligen Platz stehen.
Also Platz 3 = Tabellenwert 2 -> PWM.

Damit kann man für jede Helligkeit eine Farbmischung erreichen, die Weiß entspricht. Damit sollten dann eigentlich die Mischfarben recht gut getroffen werden.

Nimmt man dann eines Tages andere LED's braucht nur die entsprechende Tabelle umgeschrieben werden.

Der Nachteil der Methode ist, das dabei natürlich 3 * 256 Byte für die Tabelle gebraucht werden.
Aber das sollte bei einer so einfachen Anwendung kein Problem sein.

Für die Lichtsteuerung empfehle ich gerne das DMX 512 Protokoll.
Das ist aber für die Ansteuerung nur eines Strahlers schon ziemlich "Oversized".
Wenn es mal mehr Lampen werden sollen würd ich mir an Deiner Stelle das Protokoll mal ansehen, da es dafür schon fertige ( kostenlose ) Software für den PC gibt. Freestyler, DMX-Control, DC-WIN...

stromflo
17.11.2008, 09:29
Wenn man wirklich nur 3 PWM Ausgäge braucht würde ich auch die Hardware PWM's benutzen.
Braucht man mehr Ausgänge bleibt ( beim ATMEGA 8 ) nur der Weg über Software PWM's - aber das wurde hier ja alles schon geschrieben.

Also ich würde die Hardware-PWM immer bevorzugen so lang es geht. Für dein Projekt würd ich einfach Atmega88 mit 6PWM Ausgängen nehmen.




Tabelle Rot:
0,1,1,2,2,3,4,5,6,7,8,usw.
An die PWM's werden dann die Werte ausgegeben die in der Tabelle am jeweiligen Platz stehen.
Also Platz 3 = Tabellenwert 2 -> PWM.


Das ist eine gute Idee, hab ich auch schon so gemacht. Allerdings könnt er doch auch die Farbwerte über die UART zum Controller senden. Für jede Farbe wird z.B. ein Byte gesendet, was dann die Farbe ergibt.

Gruß Flo

NexX
17.11.2008, 15:10
Mal so ne blöde Frage:
Bei Reichelt finde ich, wenn ich nach dem atmega88 suche 2 (eig 4) verschiedene:

ATMEGA 88-20 PU ATMega AVR-RISC-Controller
ATMEGA 88-20 AU ATMega AVR-RISC-Controller

(Die anderen beiden:
ATMEGA 88V-10 AU ATMega AVR-RISC-Controller
ATMEGA 88V-10 PU ATMega AVR-RISC-Controller)

So, welchen jetzt? ich tippe mal auf PU... Allerdings ist das ja kein Tippspiel^^

thewulf00
17.11.2008, 15:23
Schau doch einfach im DB nach, da stehen die genauen Bedeutungen dieser Bezeichnungen.

Die anderen beiden mit dem 'V' sind die Low-Voltage-Version, die laufen schon ab (glaub ich) 1,7V.

NexX
17.11.2008, 15:37
DB?

Achja noch so ne blöde frage: pwm ist ja im prinzip schnell "an und aus schalten". ist das für die LED nicht schlecht??

-Hurricane-
17.11.2008, 15:56
Hi,

DB = Datenblatt

denke ich mal :)

Mfg Michi

thewulf00
17.11.2008, 16:01
DB = Datenblatt

denke ich mal :)
Brauchst Dich nicht zu verstecken, hast doch vollkommen Recht. \:D/

-Hurricane-
17.11.2008, 16:05
Joa :)

Bin ja selbst erst recht neu hier :)

Mfg Michi

hardware.bas
01.12.2008, 21:10
NEXX: PWM ist das Beste für LEDs, die können mehrere Millionen mal
in der Sekunde ein- und ausgeschaltet werden. Bei PWM hat man auch
ein ziemmlich lineares Verhältnis zu Pulsdauer und Helligkeit, was bei
analoger Ansteuerung nicht ist. Schon die Dimensionierung des RC-Gliedes dafür ist schwierig. Den Aufwand kann man sich sparen. PWM!!!!