Die Software wurde mit dem Arduino Framework geschrieben.
Da die Hardware keinen RC-Tiefpass vorsieht muss die Messung Zum Aufspielen des LED-Stroms mit der PWM synchronisiert werden, d.h. der LED-Strom muss während des High-Teils des PWM Zyklus gemessen werden. Damit dies problemlos funktioniert Sketches auf den Tiny85 wird der Timer1 so eingestellt, dass sich eine PWMein ISP-Frequenz von ~245Hz ergibtProgrammer benötigt. Die Messung des Stroms erfolgt im Overflow-Interrupt des Timer1Im einfachsten Fall reicht dazu ein bestehender Arduino (z. Ab einem Duty-Cycle von caB. 20/255 ergeben sich stabile Arduino UNO) und korrekte Messwerteein Steckbrett. Der gemessene Wert kann nun Weiterhin muss in den momentanen Maximalstrom der LED umgerechnet Arduino IDE der passende Core installiert werden und über damit die IDE den vorgegebenen Soll-Strom in den neuen Duty-Cycle umgerechnet werdenATTiny85 unterstützt. Eine Anleitung für diese Dinge findet sich [http://highlowtech.org/?p=1695 hier].
Da die Hardware keinen RC-Tiefpass vorsieht muss die Messung des LED-Stroms mit der PWM synchronisiert werden, d.h. die Messung des LED-Stroms muss während des High-Teils des PWM Zyklus durchgeführt werden. Damit dies problemlos funktioniert wird der Timer1 so eingestellt, dass sich eine PWM-Frequenz von ~245Hz ergibt und somit bereits bei vergleichsweise niedrigen Duty Cycles ausreichend Zeit für die Strommessung übrig bleibt. Die Messung des Stroms erfolgt im Overflow-Interrupt des Timer1. Ab einem Duty-Cycle von ca. 20/255 ergeben sich stabile und korrekte Messwerte. Der gemessene Wert kann nun in den momentanen Maximalstrom der LED umgerechnet werden und über den vorgegebenen Soll-Strom in den neuen Duty-Cycle umgerechnet werden. Der LED Strom wird in etwa im Internvall von alle 4 Sekunden gemessen. Nach jeder Messung wird der PWM Duty cycle neu berechnet. Ebenso wird im gleichen Intervall auch Anschließend erfolgt die Messung der Batteriespannung gemessen. Bei unterschreiten eines Schwellwerts wird die Lampe abgeschaltet. ''('''Hinweis''': Der Teil des Codes der sich mit der Berechnung des PWM Duty Cycles sowie der Spannungsüberwachung beschäftigt verwendet derzeit noch Fließkommazahlen (double). Dies ist ineffizient und führt zu größeren Binaries. Ich werde diesen Teil des Codes in der Zukunft noch auf Integer umschreiben, danach sollte auch ein Tiny25 funktionieren...)''
Beim Taster wird zwischen kurzen (50-500ms) und langen (>500ms) Tastendrücken unterschieden.
''TODO: Sketch hochladen''
Zum Kompilieren dieses Sketches muss die Unterstützung für ATTiny85 CPUs in der Arduino IDE installiert werden. Eine Anleitung dazu findet sich [http://highlowtech.org/?p=1695 hier].
== Aufbau ==
''Bilder vom Aufbau folgen...''