Autor tohoto materiálu neměl rád normální režimy provozu baterky BLF A6. Poté se rozhodl zablokovat softwarovou část baterky a nastavit její režimy. Jak se ukázalo, není to tak jednoduché, existuje jen minimum informací o firmwaru a pinoutech a musel je sbírat kousek po kousku. A aby se neztratila, rozhodl se pomoci ostatním a uspořádat vše do článku.
Pro práci budete tedy potřebovat:
Svítilna BLF A6 (pravděpodobně to bude fungovat s jinými baterkami založenými na ATtiny).
Pinzeta / kleště / malé nůžky.
Počítač pro firmware, nejlépe s distribucí Linuxu.
USB ASP / Programátor Arduino / něco, co dokáže programování AVR (samozřejmě, programátor USB ASP je lepší, ale průvodce použil Arduino).
Vysokorychlostní zesilovač Rail-to-Rail [SOIC-8] (bez něj se můžete obejít, ale je to velmi nepohodlné).
Vývojové desky a propojovací vodiče pro připojení.
Firmware.
Firmware pro BLF A6 (a mnoho dalších baterek) je k dispozici zde. K tomu je k dispozici diskusní fórum odkaz.
Firmware si můžete stáhnout spuštěním hledání „bzr branch lp: flashlight-firmware“. Potřebujete složku s firmwarem / ToyKeeper / blf-a6. Obsahuje kompilovaný soubor. hex, připravený na firmware (blf-a6.hex) a C kód, který lze také změnit (blf-a6.c). Pokud chcete flash firmware na skladě, můžete přeskočit další krok a použít pouze blf-a6.hex. V tomto úložišti bude pravděpodobně fungovat i jiný firmware.
Změnit firmware.
Pozor symboly, aby nedošlo ke zkreslení významu, jsou dány bez překladu.
Otevřete blf-a6.c ve svém preferovaném textovém editoru nebo IDE. Nejzajímavější řádky jsou skupiny režimů mezi řádky 94 a 109. Vypadají takto:
// Skupina režimů 1
#definovat NUM_MODES1 7
// PWM úrovně pro velký obvod (FET nebo Nx7135)
#define MODESNx1 0,0,0,7,56,137,255
// PWM úrovně pro malý obvod (1x7135)
#definovat MODES1x1 3,20,110,255,255,255,0
// Můj vzorek: 6 = 0,6, 7 = 2,11, 8 = 8,21 (15.,32)
// Krono vzorek: 6 = 5,21, 7 = 17,32, 8 = 33,96 (50,78)
// Manker2: 2 = 21, 3 = 39, 4 = 47, ... 6? = 68
// Rychlost PWM pro každý režim
#define MODES_PWM1 FÁZE, RYCHLÉ, RYCHLÉ, RYCHLÉ, RYCHLÉ, RYCHLÉ, FÁZOVÉ
// Skupina režimů 2
#definovat NUM_MODES2 4
#define MODESNx2 0,0,90,255
#definovat MODES1x2 20 230 255,0
#define MODES_PWM2 RYCHLÝ, RYCHLÝ, RYCHLÝ, FÁZOVÝ
Pro každou skupinu je MODESN hodnota PWM použitá pro FET a MODES1 je hodnota PWM použitá pro 7135 v každém režimu. Číslo je v rozsahu od 0 do 255 a odpovídá jasu světla. Více informací
zde. (přejděte dolů na "Ovládání režimu:") Master si není jistý, jaká je rychlost PWM.Pokud to někdo ví, řekněte mi to v komentářích. Tranzistor s polním efektem může produkovat více světla než 7135, ale 7135 udržuje úroveň světla víceméně stejnou po celou dobu životnosti baterie, zatímco při použití tranzistoru s polním efektem se světlo při vybití baterie ztmavne.
Zde můžeme upravit hodnoty PWM a vytvářet režimy podle našeho vkusu. Můžete také změnit počet režimů, ale master to neudělal, protože potřebuje čtyři režimy, a to je počet ve druhé skupině. Chtěl tmavší režim měsíčního svitu, a proto nastavil první na 0/1. Turbo režim také považuje za zbytečný, takže jsem jej nahradil 137/255, což je ekvivalent šestého režimu ve skupině sedmi režimů.
Pokud potřebujete kód, musíte jej zkompilovat do souboru .hex. Alespoň potřebujete gcc-avr a avr-libc. Pokud máte problémy, podívejte se na další závislosti v souboru readme. Úložiště obsahuje skript sestavení, takže vše, co musíte udělat, je spustit:
../../bin/build.sh 13 blf-a6
ve složce blf-a6. ../../Bin/build.sh je skript. 13 ukazuje, že je pro ATtiny13, a blf-a6 znamená, že je pro BLF A6.
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 = alloc, load --change-section-lma .eeprom = 0 - no-change-warning -O ihex blf-a6.elf blf-a6.hex
Program: 1022 bytů (99,8% plný)
data: 13 bytů (20,3% plné)
Týmy jsou již optimalizovány co do velikosti, takže pokud je napsáno, že jsou více než 100% plné, zkuste vymazat
#define FULL_BIKING_STROBE
Linka 125 kouzla malá kolo bleskové světlo. Pokud to nestačí, bude se muset snížit něco jiného.
Po dokončení kompilace by složka měla obsahovat soubor s názvem blf-a6.hex. Toto je kompilovaný kód, připravený pro firmware.
Demontáž baterky.
Odšroubujte světlomet. Existují dvě šroubová spojení. Ten, který je blíže k tělu svítilny, fixuje reflektor a LED a ten, který je blíže ke středu, upevní desku. Potřebujeme průměr.
Uvnitř uvidíte pojistný kroužek s pružinou a dvěma otvory podél okrajů. Vložte do otvorů pinzetu / tenké kleště / nůžky a otočte je proti směru hodinových ručiček.
Jakmile je prsten odstraněn, budete mít přístup k desce. Je stále připevněn dvěma dráty, takže buďte opatrní. Jsou zkrouceny dohromady, takže otáčejte deskou, dokud nejsou dráty uvolněné. Poté otočte desku. Je nutné, aby byl čip s nápisem „TINY13A“ přístupnější.
Pokud jsou dráty krátké a nefunguje to, musíte desku odstranit.
Připojení.
Nyní musíte připravit desku na firmware.
Průvodce používá rozhraní SOIC8 k propojení čipu ATtiny13 a programátoru.
Podívejte se na fotografii, jak průvodce vytváří spojení. Všimněte si červené čáry na druhém obrázku.
Pokud používáte programátor USB ASP V2.0, musíte jej připojit takto:
Pin 1 na ATtiny13 - Pin 5 na USB ASP (reset)
Pin 4 na ATtiny13 - Pin 10 na USB ASP (zem)
Pin 5 na ATtiny13 - Pin 1 na USB ASP (MOSI)
Pin 6 na ATtiny13 - Pin 9 na USB ASP (MISO)
Pin 7 na ATtiny13 - Pin 7 na USB ASP (SCK)
Pin 8 na ATtiny13 - Pin 2 na USB ASP (VCC)
Pokud používáte Arduino, jako průvodce, postupujte takto:
Otevřete Arduino IDE a ujistěte se, že je Arduino připojeno k počítači. Najděte skicu ISP v nabídce Soubor> Příklady> 11.ArduinoISP> ArduinoISP a nahrajte ji do Arduino. Poté k němu připojte ATtiny13 takto:
Pin 1 na ATtiny13 - Pin 10 na Arduino (reset)
Pin 4 na ATtiny13 - GND na Arduino (Ground)
Pin 5 na ATtiny13 - Pin 11 na Arduino (MOSI)
Pin 6 na ATtiny13 - Pin 12 na Arduino (MISO)
Pin 7 na ATtiny13 - Pin 13 na Arduino (SCK)
Pin 8 na ATtiny13 - VCC / 5V nebo 3,3 V na Arduino (5V upřednostňováno)
Firmware.
Krok 5: blesk
Pro firmware musíte nainstalovat AVRDUDE. Chcete-li zkontrolovat, zda to funguje s Arduino, píše průvodce příkaz:
avrdude -v -p attiny13 -c stk500v1 -P / dev / ttyUSB0 -b 19200 -n
Pokud to funguje, přejděte do prázdné složky a zaregistrujte se:
avrdude -v -p attiny13 -c stk500v1 -P / dev / ttyUSB0 -b 19200 -u -Uflash: r: flash-dump.hex: i -Ueprom: r: eeprom-dump.hex: i -Ulfuse: r: lfuse -dump.hex: i -Uhfuse: r: hfuse-dump.hex: i
Vytvořte záložní kopii existujícího firmwaru. Chcete-li flash, ze složky s upraveným blf-a6.hex se spustí:
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
Jako programátor musíte zadat stk500v1 a zadat rychlost přenosu portů a dat. Pokud používáte Arduino a máte pochybnosti, zkuste odpojit ATtiny13 od Arduino a nahrát skicu do Arduino IDE pomocí tato nastavení. Toto nebude fungovat, ale zjistíte, který příkaz se používá v okně konzoly. Dále můžete zkopírovat atributy do příkazu AVRDUDE.
Pokud používáte USB ASP programátor, spusťte:
avrdude -v -p attiny13 -c usbasp -n
Chcete-li zjistit, zda to funguje:
avrdude -v -p attiny13 -c usbasp -u -Uflash: r: flash-dump.hex: i -Ueprom: r: eeprom-dump.hex: i -Ulfuse: r: lfuse-dump.hex: i -Uhfuse: r: hfuse-dump.hex: i
Vytvořte zálohu:
avrdude -v -p attiny13 -c usbasp -u -Uflash: w: blf-a6.hex -Ulfuse: w: 0x75: m -Uhfuse: w: 0xFF: m
Blesk:
-Uflash: w: blf-a6.hex. Nahraďte blf-a6.hex názvem souboru, pokud se liší.
-Uluse: w: 0x75: ma -Uhuseuse: w: 0xFF: m
Pokud dojde k chybě, znamená to, že obrazový soubor je příliš velký na to, aby se vešel na čip, a budete muset odstranit část kódu. Pokud je vše v pořádku, měly by se zobrazit některé ukazatele pokroku a poté slova „avrdude hotovo. Děkuji.“
Poté, co jste čip blikali, sestavte baterku a zkontrolujte, zda funguje.