Dem Autor dieses Materials gefielen die normalen Betriebsarten der Taschenlampe BLF A6 nicht. Dann beschloss er, den Software-Teil der Taschenlampe zu flashen und die Modi einzustellen. Wie sich herausstellte, ist dies nicht so einfach, es gibt ein Minimum an Informationen über die Firmware und Pinbelegung und er musste sie Stück für Stück sammeln. Und damit sie sich nicht verlaufen würde, beschloss er, anderen zu helfen und alles in einem Artikel zu arrangieren.
Für die Arbeit benötigen Sie also Folgendes:
Taschenlampe BLF A6 (wahrscheinlich funktioniert dies mit anderen Taschenlampen, die auf ATtiny basieren).
Pinzette / dünne Zange / kleine Schere.
Ein Computer für Firmware, vorzugsweise mit einer Linux-Distribution.
USB ASP / Programmierer Arduino / etwas, was die AVR-Programmierung kann (offensichtlich ist der USB-ASP-Programmierer besser, aber der Assistent hat Arduino verwendet).
Hochgeschwindigkeits-Rail-to-Rail-Verstärker [SOIC-8] (Sie können darauf verzichten, aber es ist sehr unpraktisch).
Entwicklungsplatine und Überbrückungskabel zum Anschluss.
Firmware.
Firmware für BLF A6 (und viele andere Taschenlampen) ist verfügbar hier. Hierzu steht ein Diskussionsforum zur Verfügung der Link.
Sie können die Firmware herunterladen, indem Sie die Suche "bzr branch lp: flashlight-firmware" ausführen. Benötigen Sie Taschenlampen-Firmware / ToyKeeper / blf-a6 Ordner. Es enthält eine kompilierte Datei. hex, bereit für Firmware (blf-a6.hex) und C-Code, der auch geändert werden kann (blf-a6.c). Wenn Sie die Firmware flashen möchten, können Sie den nächsten Schritt überspringen und einfach blf-a6.hex verwenden. Einige andere Firmware in diesem Repository wird wahrscheinlich auch funktionieren.
Firmware ändern.
Achtung Symbole werden ohne Übersetzung angegeben, um die Bedeutung nicht zu verzerren.
Öffnen Sie blf-a6.c in Ihrem bevorzugten Texteditor oder Ihrer bevorzugten IDE. Die interessantesten Zeilen sind die Modusgruppen zwischen den Zeilen 94 und 109. Sie sehen folgendermaßen aus:
// Modusgruppe 1
#define NUM_MODES1 7
// PWM-Pegel für die große Schaltung (FET oder Nx7135)
#define MODESNx1 0,0,0,7,56,137,255
// PWM-Pegel für den kleinen Stromkreis (1x7135)
#define MODES1x1 3,20,110,255,255,255,0
// Meine Stichprobe: 6 = 0..6, 7 = 2..11, 8 = 8..21 (15..32)
// Krono-Probe: 6 = 5..21, 7 = 17..32, 8 = 33..96 (50..78)
// Manker2: 2 = 21, 3 = 39, 4 = 47, ... 6? = 68
// PWM-Geschwindigkeit für jeden Modus
#define MODES_PWM1 PHASE, SCHNELL, SCHNELL, SCHNELL, SCHNELL, SCHNELL, PHASE
// Modusgruppe 2
#define NUM_MODES2 4
#define MODESNx2 0,0,90,255
#define MODES1x2 20,230,255,0
#define MODES_PWM2 SCHNELL, SCHNELL, SCHNELL, PHASE
Für jede Gruppe ist MODESN der für den FET verwendete PWM-Wert und MODES1 der für 7135 in jedem Modus verwendete PWM-Wert. Die Zahl liegt im Bereich von 0 bis 255 und entspricht der Helligkeit des Lichts. Weitere Infos
hier. (Scrollen Sie nach unten zu "Modussteuerung:") Der Master ist sich nicht sicher, wie hoch die PWM-Geschwindigkeit ist.Wenn jemand weiß, sag es mir in den Kommentaren. Ein Feldeffekttransistor kann mehr Licht als 7135 erzeugen, aber 7135 hält den Lichtpegel während der gesamten Lebensdauer der Batterie mehr oder weniger gleich, während bei Verwendung eines Feldeffekttransistors das Licht gedimmt wird, wenn die Batterie leer ist.
Hier können wir die PWM-Werte anpassen, um Modi nach unseren Wünschen zu erstellen. Sie können auch die Anzahl der Modi ändern, aber der Master hat dies nicht getan, da er vier Modi benötigt, und dies ist die Nummer in der zweiten Gruppe. Er wollte ein dunkleres Mondlichtregime und setzte deshalb das erste auf 0/1. Er hält den Turbomodus auch für etwas sinnlos, deshalb habe ich ihn durch 137/255 ersetzt, was dem sechsten Modus in einer Gruppe von sieben Modi entspricht.
Wenn Sie den Code haben, den Sie benötigen, müssen Sie ihn in eine .hex-Datei kompilieren. Zumindest brauchst du gcc-avr und avr-libc. Wenn Sie Probleme haben, sehen Sie sich andere Abhängigkeiten in der Readme-Datei an. Das Repository enthält ein Build-Skript. Sie müssen also nur Folgendes ausführen:
../../bin/build.sh 13 blf-a6
im Ordner blf-a6. ../../Bin/build.sh ist das Skript. 13 zeigt an, dass es für ATtiny13 ist, und blf-a6 zeigt an, dass es für BLF A6 ist.
avr-gcc -Wall -g -Os -mmcu = attiny13 -c -std = gnu99 -fgnu89-inline -DATTINY = 13 -I .. -I ../ .. -I ../../ .. -fshort -enums -o blf-a6.o -c blf-a6.c
avr-gcc -Wall -g -Os -mmcu = attiny13 -fgnu89-inline -o blf-a6.elf blf-a6.o
avr-objcopy --set-section-flags = .eeprom = zuweisen, laden --change-section-lma .eeprom = 0 - keine Änderungswarnungen -O ihex blf-a6.elf blf-a6.hex
Programm: 1022 Bytes (99,8% voll)
Daten: 13 Bytes (20,3% voll)
Die Teams sind bereits in der Größe optimiert. Wenn also geschrieben steht, dass sie zu mehr als 100% voll sind, versuchen Sie es mit Löschen
#define FULL_BIKING_STROBE
Zeile 125 ist klein Fahrrad Blitzlicht. Wenn dies nicht ausreicht, muss etwas anderes geschnitten werden.
Nach Abschluss der Kompilierung sollte der Ordner eine Datei mit dem Namen blf-a6.hex enthalten. Dies ist kompilierter Code, der für die Firmware bereit ist.
Demontage der Taschenlampe.
Schrauben Sie den Scheinwerfer der Taschenlampe ab. Es gibt zwei Schraubverbindungen. Diejenige, die näher am Taschenlampengehäuse liegt, fixiert den Reflektor und die LED, und diejenige, die näher an der Mitte liegt, fixiert die Platine. Wir brauchen einen Durchschnitt.
Im Inneren sehen Sie einen Sprengring mit einer Feder und zwei Löchern entlang der Kanten. Führen Sie eine Pinzette / dünne Zange / Schere in die Löcher ein und drehen Sie sie gegen den Uhrzeigersinn.
Sobald der Ring entfernt ist, haben Sie Zugriff auf die Platine. Es ist immer noch mit zwei Drähten befestigt, seien Sie also vorsichtig. Sie sind miteinander verdrillt. Drehen Sie die Platine, bis die Drähte locker sind. Dann drehen Sie das Brett um. Es ist notwendig, dass der Chip mit der Aufschrift "TINY13A" besser zugänglich war.
Wenn die Drähte kurz sind und es nicht funktioniert, müssen Sie die Platine entfernen.
Verbindung.
Jetzt müssen Sie die Karte für die Firmware vorbereiten.
Der Assistent verwendet SOIC8, um den ATtiny13-Chip und den Programmierer zu verbinden.
Sehen Sie sich das Foto an, während der Assistent die Verbindung herstellt. Beachten Sie die rote Linie in der zweiten Abbildung.
Wenn Sie den USB ASP V2.0-Programmierer verwenden, müssen Sie ihn wie folgt anschließen:
Pin 1 an ATtiny13 - Pin 5 an USB ASP (Reset)
Pin 4 an ATtiny13 - Pin 10 an USB ASP (Masse)
Pin 5 an ATtiny13 - Pin 1 an USB ASP (MOSI)
Pin 6 an ATtiny13 - Pin 9 an USB ASP (MISO)
Pin 7 an ATtiny13 - Pin 7 an USB ASP (SCK)
Pin 8 an ATtiny13 - Pin 2 an USB ASP (VCC)
Wenn Sie Arduino wie den Assistenten verwenden, gehen Sie folgendermaßen vor:
Öffnen Sie die Arduino IDE und stellen Sie sicher, dass Ihr Arduino mit dem Computer verbunden ist. Suchen Sie die ISP-Skizze unter Datei> Beispiele> 11.ArduinoISP> ArduinoISP und laden Sie sie auf Arduino hoch. Schließen Sie dann den ATtiny13 wie folgt an:
Pin 1 auf ATtiny13 - Pin 10 auf Arduino (Reset)
Pin 4 auf ATtiny13 - GND auf Arduino (Ground)
Pin 5 auf ATtiny13 - Pin 11 auf Arduino (MOSI)
Pin 6 auf ATtiny13 - Pin 12 auf Arduino (MISO)
Pin 7 auf ATtiny13 - Pin 13 auf Arduino (SCK)
Pin 8 an ATtiny13 - VCC / 5V oder 3,3V an Arduino (5V bevorzugt)
Firmware.
Schritt 5: Flashen Sie es
Für die Firmware müssen Sie AVRDUDE installieren. Um zu überprüfen, ob dies mit Arduino funktioniert, schreibt der Assistent einen Befehl:
avrdude -v -p attiny13 -c stk500v1 -P / dev / ttyUSB0 -b 19200 -n
Wenn dies funktioniert, gehen Sie in den leeren Ordner und registrieren Sie sich:
avrdude -v -p attiny13 -c stk500v1 -P / dev / ttyUSB0 -b 19200 -u -Uflash: r: flash-dump.hex: i -Ueeprom: r: eeprom-dump.hex: i -Ulfuse: r: lfuse -dump.hex: i -Uhfuse: r: hfuse-dump.hex: i
Erstellen Sie eine Sicherungskopie der vorhandenen Firmware. Zum Flashen startet es aus dem Ordner mit dem modifizierten blf-a6.hex:
avrdude -v -p attiny13 -c stk500v1 -P / dev / ttyUSB0 -b 19200 -u -Uflash: w: blf-a6.hex -Ulfuse: w: 0x75: m -Uhfuse: w: 0xFF: m
Sie müssen stk500v1 als Programmierer angeben und den Port und die Datenübertragungsgeschwindigkeit angeben. Wenn Sie Arduino verwenden und Zweifel haben, trennen Sie ATtiny13 von Arduino und laden Sie die Skizze mit in die Arduino IDE hoch diese Einstellungen. Dies funktioniert nicht, aber Sie werden herausfinden, welcher Befehl im Konsolenfenster verwendet wird. Als Nächstes können Sie die Attribute in den Befehl AVRDUDE kopieren.
Wenn Sie einen USB-ASP-Programmierer verwenden, führen Sie Folgendes aus:
avrdude -v -p attiny13 -c usbasp -n
Um zu sehen, ob dies funktioniert:
avrdude -v -p attiny13 -c usbasp -u -Uflash: r: flash-dump.hex: i -Ueeprom: r: eeprom-dump.hex: i -Ulfuse: r: lfuse-dump.hex: i -Uhfuse: r: hfuse-dump.hex: i
Erstellen Sie ein Backup:
avrdude -v -p attiny13 -c usbasp -u -Uflash: w: blf-a6.hex -Ulfuse: w: 0x75: m -Uhfuse: w: 0xFF: m
So blinken Sie:
-Uflash: w: blf-a6.hex. Ersetzen Sie blf-a6.hex durch Ihren Dateinamen, falls dieser anders ist.
-Ulfuse: w: 0x75: m und -Uhfuse: w: 0xFF: m
Wenn ein Fehler auftritt, bedeutet dies, dass die Bilddatei zu groß ist, um auf den Chip zu passen, und dass Sie einen Teil des Codes löschen müssen. Wenn alles normal ist, sollten einige Fortschrittsanzeigen angezeigt werden und dann die Worte "avrdude done. Danke".
Nachdem Sie den Chip geflasht haben, bauen Sie die Taschenlampe zusammen und prüfen Sie, ob sie funktioniert.