6 RGB LEDs unabhängig ansteuern

Unterbodenbeleuchtung, Pimp my room, usw.

Moderator: T.Hoffmann

Antworten
Dogee
Mini-User
Beiträge: 2
Registriert: Fr, 19.06.09, 15:39

Fr, 19.06.09, 17:39

Hallo

Ich bin was das Posten angeht neu hier, aber habe in der Vergangenheit schon des öfteren im Forum gestöbert.

Da ich schon seit einer ganzen Weile mit LEDs bastele und mir die Ideen ausgegangen sind, habe mich gestern dazu endschlossen, mich mal an Microcontroller ranzuwagen. Um gleich mal an den Rand des Möglichen zu gehen, habe ich mir überlegt, dass es interressant wäre einen RGB LED Würfel zu konstruieren mit einer Kantenlänge von etwa 7-10 cm, der die Eigenschaft besitzt, an jeder Seite individuell die Farbe zu ändern (6 RGB LEDs). Als Microcontroller habe ich vorerst mal den Atmel Atmega8 ins Auge gefasst, sollte es Speicherplatzprobleme geben kämen auch größere Versionen des Atmega in Frage.

Die LEDs die ich gerne verwenden würde sind diese http://www.leds.de/p167/Standard_LEDs/S ... d_120.html

Nach diversen Recherchen habe ich mal eine kleine Schaltskizze gemacht, von der ich denke das sie funktionieren könnte. Ist leider nur mit (nicht lachen :lol: ) Powerpoint gemacht, ich hoffe sie ist trotzdem verständlich ;)

Bild

Output: PD 0/1/4/5/6/7 sollen Rot steuern PC0 - PC5 Grün und PB0 - PB5 Blau.
Input: Über PD2 habe ich vor mit der Interrupt Funktion die einzelnen LEDs durchzuschalten (1,2,3,4,5,6,Alle) und die ausgewählte(n) mit Auslösen von PD3 die Farben zu wechseln. Also quasi einen RGB Fade der nur dann abläuft wenn der Kontakt PD3 geschlossen ist. Gefadet werden soll mit einem 256 Stufen Software PWM an dem ich grade noch ein bisschen zu beißen habe.

Die Pins PB6 und PB7 will ich vorerst ohne Programmanbindung lassen. Die Schalter die dort in der Skizze abgebildet sind überlege ich noch nachträglich einzubauen.

Meine Frage ist jetzt, würde der Atmega die LEDs teoretisch so ansteuern können wie ich es mir vorstelle (hardware- bzw. verkabelungstechnisch - dass das Ding nicht gleich in die Luft geht :P)? Und speziell: kann ich ohne Transistoren vorzuschalten 6 RGB LEDs am Atmega betreiben?
Benutzeravatar
CRI 93+ / Ra 93+
Auserwählter
Auserwählter
Beiträge: 2801
Registriert: So, 19.10.08, 23:56
Wohnort: Hannover

Fr, 19.06.09, 18:30

Die Atmegas sind sehr hart im nehmen, der Mega8 kann glaube ich bei 5V sogar bis zu 40 ma pro Port und 140..200 ma gesamt.
Kurzschlüsse töten ihn auch nicht gleich.

Die neueren, sparsameren Atmels, wie ATMega48/ATMega88/ATMega168/ATMega328 (die sind bis auf den Speicherplatz Flash/EEPROM/RAM identisch: 4 bis 32 kB Flash) oder ATMega644 (64 kB Flash und mehr Ports, aber immer noch günstig und Stromsparend) können weniger, nur ca. 2-10 mA pro Port, je nach Versorgungsspannung.

Mit dem Mega8 kannst Du also bedenkenlos eine LED mit 20 mA direkt ansteuern, allerdings kann es sein, dass im Atmel mehr Spannung abfällt, als es an einem Transistor der Fall wäre (mit bis zu 1V würde ich rechnen). Und Du musst auch jeder einzelnen LED/jedem Port einen eigenen Vorwiderstand verpassen.

Der ATMega8 hat 2 Timer, da kannst Du einen Timer-Interrupt dafür nehmen, die Farbwerte zu ändern. Zwischen den Flächen umschalten muss nicht per IRQ gemacht werden.

Ein Tipp noch zur Programmierung:
In Interrupts grundsätzlich keine Delays oder Schleifen verwenden (außer es geht wirklich nciht anders und das übrige programm ist auf die dadurch "geklaute" Rechenzeit nicht angewiesen)

Mit dem kostenlosen Atmel AVRStudio (auf www.atmel.com oder auf der CD, die jedem STK 500 MK II Programmiergerät beiliegt) + WinAVR bekommt man eine ganz brauchbare C-Entwicklungumgebung.

Unter www.hpinfotech.ro gibt es eine bis 4 kB Programmcode kostenlose Evaluation Version von CodeVision. Da das Ding aber an einer Einzelperson hängt und in der vergangenheit gelegentlich auch mal durch kleinere Compilerfehler negativ aufgefallen ist, würde ich AVRStudio + gcc empfehlen. (gcc ist in winavr enthalten).

Einfach AVRStudio und WinAVR installieren , wenn man beides installiert hat, kann man mit der AVRStudio-IDE auch in C programmieren (es erkennt das installierte WinAVR automatisch). Standardmäßig geht in AVRStudio nur Assembler, aber Microcontroller sind heute einfach zu billig und zu leistungsfähig, als dass man die ersnthaft in Assembler programmieren wollen würde, wenn man nicht gerade irgendwas ab 100.000 Stück aufwärts produzieren will und durch verwendung von Assembler z.B. den ATMega48 mit nur 4 kB nehmen und ein paar Cent sparen könnte....
Dogee
Mini-User
Beiträge: 2
Registriert: Fr, 19.06.09, 15:39

Fr, 19.06.09, 19:39

Vielen Dank für die schnelle Antwort!
Die Atmegas sind sehr hart im nehmen, der Mega8 kann glaube ich bei 5V sogar bis zu 40 ma pro Port und 140..200 ma gesamt.
Wobei wenn alle 6 Leds (3x 18mA) = 324mA leuchten wird das Gesammte ja überschritten.. Selbst wenn man weiß als Möglichkeit weglässt ists immer noch zu viel.. oder stehen die 18mA für die Gesammtleistung einer LED und nicht für jede Farbe einzeln? (würde mich wundern) An sonsten wärs warscheinlich das einfachste zwei ATMega's irgendwie zu koppeln.. bevor ich zusätzlich 18 Transistoren und demendsprechend auch 18 Widerstände verbaue.. dann kann man auch mehr mit Effekten/Benutzerfreundlichkeit machen wenn man die restlichen Pins als input nutzt..

Das Bascom AVR war das Programm was ich mir mal runter geladen habe, da ich viel mit Quick Basic gearbeitet habe und es mir daher leichter fällt den Code zu verstehen. Allerdings macht es natürlich sinn, gleich mit dem Atmel AVRStudio anzufangen, wenn es dort keine Programmcode Begrenzung gibt. (und keine Compiler Fehler)
Borax
Star-Admin
Star-Admin
Beiträge: 12243
Registriert: Mo, 10.09.07, 16:28

Fr, 19.06.09, 23:14

Also Widerstände brauchst Du ja sowieso. Wenn Du auf ca.15mA runtergehst, sollte es problemlos reichen.
Laut Datenblatt ist die max. Belastung so zu 'verteilen':
Vcc = 5V under steady state conditions (non-transient)
1] The sum of all IOH, for all ports, should not exceed 300 mA.
2] The sum of all IOH, for port C0 - C5, should not exceed 100 mA.
3] The sum of all IOH, for ports B0 - B7, C6, D0 - D7 and XTAL2, should not exceed 200 mA.
Antworten