Forum: Mikrocontroller und Digitale Elektronik Grundlegender Programmaufbau finden für eine RGB Stimmungslampe


von Chriss (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Programmierer...

Ich möchte demnächst eine LED RGB Kugellampe von ebay aus Glas mit einem 
Durchmesser von 30cm pimpen :)

Die Hardware steht grundsätzlich schon.
Ich habe einen ATMEGA mit 64kb Programmspeicher, 3x16 bit pwm und adc an 
dem ein Temperatursensor lm335 hängt zum überprüfen der Temperatur von 
den LEDs, jeweils 2 stück lumileds mit 3Watt in R G und B mit einem LED 
Treiber (einstellbare Stromquelle für 3 LEDs dimmbar durch pwm) von 
linear lt3496
Zum steuern der Lampe habe ich einen irda Empfänger den ich mit einer 
rgb Fernbedienung die ich im Internet erworben habe anspreche. Das 
Protokoll der Fernbedienung(bild im Anhang) herauszufinden und durch den 
µC zu die Daten zu verarbeiten müssten eigentlich nicht so das Problem 
darstellen. gibt ja genügend fertigen Code für solche Fälle im inet.

Also seitens der Hardware habe ich keine Probleme denke ich mal aber ich 
wollte mal fragen wie man den Programmaufbau grundsätzlich am besten 
macht.

Ich hätte mir gedacht ich hänge den irda Empfänger irgendwie an einen 
External Interrupt pin und werte dann die Daten aus. Wenn ein gültiges 
Kommando empfangen wurde setze ich eine Statusvariable auf true
CMD_RECEIVED = 1

Im Hauptprogramm bekomme ich diese Änderung der Variable mit und führe 
die gewünschte Aktion aus und setze die CMD_RECEIVED wieder auf 0.

Ich möchte ja mehrere Funktionen mit der Lampe abbilden können.
d.h. sie sollte mehrere modi haben.

z.b. manuelle Lichtfarbe
z.b. weicher Übergang durch die Farbpalette (mit Änderung der 
Geschwindigkeit)
z.b. hartes flashen (Geschwindigkeit einstellbar)
z.b. weiches flashen (Geschwindigkeit einstellbar)

und so weiter und so fort.

Für diesen Zweck hätte eine weitere Statusvariale eingeführt die ich 
dann immer auf den jeweiligen Status setzen würde, je nachdem welcher 
Programmablauf gerade ausgeführt wird bzw. werden soll.

also so z.b.

#define IDLE 0
#define MANUAL_OPERATION 1
#define FLASH 2
#define SMOOTH_FLASH 3

Wenn der Benutzer über die Fernbedienung von z.b. manuellem Programm auf 
Flashen mit weichen Übergang stellt dann setze ich die statusvariable 
auf SMOOTH_FLASH, auf diese Änderung der variable reagiere ich in meinem 
main und führe die gewünschten Operationen aus (starte Timer um die 
Flash Funktion ausführen zu können und so weiter)

Weitere Parameter würde ich dann auch über satus variablen abbilden.
z.b. Welche Geschwindigkeit hat der Anwender als letztes gewählt gehabt 
usw.

Wenn der Benutzer ein Kommando zum Ausschalten der Lampe über die 
Fernbedienung schickt, soll die Lampe die letzten Konfigurationen im 
EEprom verspeichern und dann beim Einschalten wieder laden und mit den 
zuletzt verwendeten Parametern weiterarbeiten.

Also das ist jetzt mal mein Programmablauf den ich mir ausgedacht habe.
Soweit ich weiß nennt sich so eine Programmiertechnik eine state machine 
oder?

Habt ihr eine bessere Idee für die Implementierung des Programmes dieser 
RGB Lampe oder irgendwelche Tips?

Wäre für jeden Hinweis dankbar...

schöne Grüße

von Marius S. (lupin) Benutzerseite


Lesenswert?

Da will wohl jemand mit Kanonen auf Spatzen schießen.

Stimmungslampen arbeiten indirekt im HSV Farbraum. Siehe dazu wikipedia. 
Mit direkter RGB Ansteuerung wirst nicht glücklich werden.

Das ganze braucht bestimmt nicht soviel Hardware wie du da einplanst. 
Temperatursensoren sind nur nötig, wenn du im Aufbau einen Fehler 
gemacht hast (zu kleiner Kühlkörper, zu kleine Vorwiderstände).

Ein lt3496 bringt dir gegenüber einen einfachen Vorwiderstand und einer 
durch den AVR generierten PWM keine großen Vorteile.

Ein AVR mit 64 kb Flash ist definitiv zuviel. Die Funktionen bekommt man 
noch sehr locker in 8kb rein, selbst mit deinem IR Empfänger.

Hier solltest mal rein schauen:
Beitrag "HSV RGB Led Dimmer, C Code & Video & Doku"

von hans (Gast)


Lesenswert?

Hallo Chriss,

für die Fernbedienung schau mal hier nach. Evtl. ist das
Protokoll und sogar eine passende Auswertung dabei.

http://www.sbprojects.com/knowledge/ir/ir.htm

Anregung für die Auswertung findest du sicher!
Gruß hans

von Chriss (Gast)


Lesenswert?

>>Das ganze braucht bestimmt nicht soviel Hardware wie du da einplanst.
>>Temperatursensoren sind nur nötig, wenn du im Aufbau einen Fehler
>>gemacht hast (zu kleiner Kühlkörper, zu kleine Vorwiderstände).

Den Temperatur Sensor habe ich nur damit ich sicherstellen kann, wenn 
ich die Lampe das erste mal längere zeit ohne Aufsicht betreibe, dass 
sie nicht zu warm wird und die LEDs beschädigt werden oder 
dergleichen...!
Temperaturabsicherung ist glaub ich auf jeder Hardware sinnvoll um 
Überhitzung zu verhindern.
Stell dir vor ein Beamer hätte keinen Temperaturfühler, dann würde er 
abbrennen wenn jemand ein Tuch auf die Lufteinlässe legt...

>>Ein lt3496 bringt dir gegenüber einen einfachen Vorwiderstand und einer
>>durch den AVR generierten PWM keine großen Vorteile.

Oh das glaub ich schon...
Ich habe jetzt da 6 leds, 2 von jeder farbe, wenn ich die einzelnen 
Farben der LEDs in Serie schalte dann habe ich eine diffusionsspannung 
von 6-8V
So jetzt bräuchte ich ein netzteil mit 9V und einem DC Konstantstrom von 
1,5A, und zudem würden die Vorwiderstände (mit viertel watt dingern 
kommst du da nicht aus) an 1-3V mit je 500 mA betrieben werden.
(Die Living Colors Lampe von Philips hat 4 Leds verbaut und für jede 
einzelne LED hat die Lampe eine LED treiber stufe)
Außerdem kann ich mit dem led treiber den maximalstrom für jede einzelne 
farbe genauer einstellen.
D.h. ich kann jeden Led treiber kanal so dimensionieren, dass ich alle 
einzelnen farben subjektiv als "gleich hell" bei 100% pwm empfinde.

>>Ein AVR mit 64 kb Flash ist definitiv zuviel. Die Funktionen bekommt man
>>noch sehr locker in 8kb rein, selbst mit deinem IR Empfänger.

Warum zuviel?
Ich habe diesen Atmega absichtlich gewählt, da es sonst keinen atmega 
gefunden habe der klein ist, 3x 16pwm hat und noch einen adconverter 
hat.
nur ein einziger kleiner atmel µC und zwar der at90usb162 hätte 3 stück 
16 bit pwm kanäle nur der hat leider keinen adc den brauche ich für den 
temperatur sensor. i2c hat er leider auch nicht sonst hätte ich einen 
lm75 auf meine led platine gepack.

also ich glaube von der Hardware her bedarf es keine großen 
Änderungen...
Hab das Ganze wirklich sehr lange durchgedacht!

schöne Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.