Änderungen
Aus Hackerspace Ffm
/* Schaltplan */
=== Liste ===
* ATTiny85ATTiny45/85 (ATTiny25 ist derzeit nicht unterstützt, siehe [[Flaschenlampe#Software|Software]])
* Empfohlen: Sockel für den Controller
* 3W LED (z.B. Cree MX-6) auf Sternplatine
=== Schaltplan ===
''('''Hinweis''': Der Schaltplan zeigt weder den Akku selbst noch die USB-Ladeschaltung. Die LED wird Ladeschaltung gibt es ab etwa 1€-1.50€ in verschiedenen Ausführungen mit und ohne Vorwiderstand direkt aus Schutzelektronik im Internet unter dem Akku gespeist und über den BC337 geschaltetStichwort "TP4056" zu kaufen. Dadurch wird die maximale Spannung über der LED auf ca. 3.5V bei vollem Der Zusammenschluss von Akku begrenzt, das Ladeschaltung und Lampenschaltung sollte bei für den meisten 3W LEDs problemlos möglich geneigten Bastler aber kein Problem sein. Tests mit verschiedenen LEDs zeigten einen Strom von ca. 500-700mA bei vollem Akku. Hinter dem Transistor sitzt noch ein kleiner Shunt-Widerstand um den Strom In der LED Sektion [[Flaschenlampe#Aufbau|Aufbau]] ist zu messen (hier 0sehen wie ich meine Lampe verdrahtet habe.22 Ohm). Der Wert darf nicht zu klein sein da ansonsten der ADC des Controllers an seine Auflösungsgrenzen gerät, aber auch nicht zu groß um keinen übermäßig hohen zusätzlichen Spannungsabfall zu verursachen. 0.22 Ohm haben sich als praktikabler Wert herausgestellt, man sollte aber deutlich unter 0.5 Ohm bleiben.''
Der Strom wird direkt gemessen, d.h. ohne RC-Tiefpass. Für genaue Messungen muss der ADC darum mit der PWM synchronisiert werden, siehe [[Flaschenlampe#Software|Software]] Der Widerstandsteiler aus R? R3 und R? R4 wird aus Pin PB? PB1 mit VBat gespeist und nur bei Bedarf eingeschaltet damit der Teiler nicht permanent Strom aus der Batterie zieht. Alle ADC Messungen werden gegen die interne 1.1V Referenz des ATTiny85 gemacht und sind somit weitgehend unabhängig von der Batteriespannung.
Der Taster schaltet gegen Masse, der Eingangspin verwendet den internen Pullup.
Die Software wurde mit dem Arduino Framework geschrieben.
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''
== Aufbau ==
''Bilder vom Aufbau folgen...''