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
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"
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
>>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.