Innehållsförteckning:

Blinkande anpassad firmware till en BLF A6 ficklampa: 5 steg
Blinkande anpassad firmware till en BLF A6 ficklampa: 5 steg

Video: Blinkande anpassad firmware till en BLF A6 ficklampa: 5 steg

Video: Blinkande anpassad firmware till en BLF A6 ficklampa: 5 steg
Video: Безопасность Windows: для администраторов и технической поддержки 2024, Juli
Anonim
Blinkande anpassad fast programvara till en BLF A6 ficklampa
Blinkande anpassad fast programvara till en BLF A6 ficklampa

Jag fick nyligen en BLF A6. Det är väldigt trevligt, men jag gillar inte någon av standardlägesgrupperna, så jag ändrade firmware för att använda mina föredragna ljusstyrkor. Informationen var svår att hitta, så jag lägger allt jag lärt mig här för mig själv och andra.

Tillbehör

BLF A6 (det kommer förmodligen att fungera med andra ATtiny -baserade ficklampor)

Pincett / tunn tång / liten sax / något för att ta bort förarbrädets låsring

Dator att blinka med, helst med Linux -distribution

USB ASP -programmerare / Arduino / något som kan göra AVR -programmering (tydligen rekommenderas USB ASP -programmeraren, men jag använde en Arduino)

SOIC8 -klipp (det går att klara sig utan, men det är väldigt jobbigt och rekommenderas inte alls)

(tillval) Brödbräda och/eller bygelstrådar för att göra anslutningen enklare

Steg 1: Ladda ner firmware

Firmware för BLF A6 (och många andra ficklampor) finns här. Författaren talar om det här. Du kan ladda ner den genom att köra:

bzr branch lp: ~ toykeeper/ficklampa-firmware/blf-a6-final

i en terminal. (du kanske måste installera bzr)

Obs: i en tidigare redigering av denna instruerbara jag använde "bzr branch lp: flashlight-firmware" istället. Jag har sedan lärt mig att den här laddar ner en föråldrad version med fel värden för off-time-kondensatorn, vilket gör att knappen trycks obehagligt lång. (tack till den här tråden på Reddit)

Den mapp du vill ha är blf-a6-final/ToyKeeper/blf-a6. Den innehåller en sammanställd.hex-fil som är klar att blinka (blf-a6.hex) och C-koden som du kan ändra. (blf-a6.c) Om du vill blinka med fast programvara kan du hoppa över nästa steg och bara använda blf-a6.hex. En del av den andra firmware i det förvaret kommer förmodligen att fungera också.

Steg 2: Ändra firmware

Öppna blf-a6.c i önskad textredigerare eller IDE. De mest intressanta raderna är modgrupperna mellan raderna 116 och 131. De ser ut så här:

// Lägesgrupp 1 #definiera NUM_MODES1 7 // PWM -nivåer för den stora kretsen (FET eller Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // PWM -nivåer för den lilla kretsen (1x7135) # definiera MODES1x1 2, 20, 110, 255, 255, 255, 0 // Mitt prov: 6 = 0..6, 7 = 2..11, 8 = 8..21 (15..32) // Krono -prov: 6 = 5..21, 7 = 17..32, 8 = 33..96 (50..78) // Manker2: 2 = 21, 3 = 39, 4 = 47,… 6? = 68 // PWM -hastighet för varje läge #define MODES_PWM1 PHASE, FAST, FAST, FAST, FAST, FAST, PHAS // Mode group 2 #define NUM_MODES2 4 #define MODESNx2 0, 0, 90, 255 #define MODES1x2 20, 230, 255, 0 #define MODES_PWM2 FAST, FAST, FAST, FASE

För varje grupp är MODESN PWM -värdet som används för FET, och MODES1 är PWM -värdet som används för 7135 i varje läge. Siffran ligger mellan 0 och 255 och motsvarar ljusets ljusstyrka. Mer information här. (bläddra ner till "Lägesreglering:") Jag är inte säker på vad PWM -hastigheten är exakt. Om någon vet, berätta för mig i kommentarerna. FET kan producera mer ljus än 7135, men 7135 håller ljusnivån mer eller mindre densamma under batteriets livslängd, medan FET blir mörkare när det tar slut på batteriet.

Här kan du justera PWM -värdena för att producera lägen efter eget tycke. Du kan förmodligen ändra antalet lägen också, men jag har inte provat det eftersom jag ville ha fyra lägen, vilket råkar vara antalet i den andra gruppen. Jag ville ha ett mörkare månskensläge, så jag ställde in det första till 0/1, och jag tycker att turboläget var lite meningslöst, så jag ersatte det med 137/255, motsvarande läge sex i gruppen med sju lägen. Du kan förmodligen ändra resten av koden om det behövs, men jag har inte provat det.

När du har den kod du vill ha måste du kompilera den till en.hex -fil. Åtminstone behöver du gcc-avr och avr-libc. Om du har problem kan du titta på de andra beroendena i programvaran. Förvaret innehåller ett byggskript, men jag kunde inte få det att fungera. Istället laddade jag ner den gamla versionen med

bzr branch lp: ficklampa-firmware

och kopierade det gamla byggskriptet (som jag kunde komma till jobbet) över det nya. Sen sprang jag:

../../bin/build.sh 13 blf-a6

i mappen blf-a6. (det borde finnas ett bättre sätt att göra det)../../bin/build.sh kallar manuset, 13 anger att det bygger för en ATtiny13 och blf-a6 anger att det är för BLF A6. (duh) Det borde berätta vilka kommandon det kör och ge dig utdata. Min ser ut så här:

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.cavr -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-warnings -O ihex blf-a6.elf blf-a6.hex Program: 1022 bytes (99,8% Full) Data: 13 byte (20,3% full)

Kommandona är redan optimerade för storlek, så om det står att det är mer än 100% fullt, försök att kommentera

#define FULL_BIKING_STROBE

på rad 147 för att använda den mindre minimala cykelstrålkastaren. Om det fortfarande inte passar måste du förmodligen ta bort mer kod någonstans. När den är färdig kompilerad bör det finnas en fil som heter blf-a6.hex i mappen. Detta är din sammanställda kod, redo att blinka.

Steg 3: Demontera ficklampan

Ta isär ficklampan
Ta isär ficklampan
Ta isär ficklampan
Ta isär ficklampan
Ta isär ficklampan
Ta isär ficklampan

Skruva loss glödlampans ände moturs. Det finns två skruvförband här. Den som är närmare glödlampans ände öppnar reflektorn och lysdioden, och den närmare mitten öppnar förarkortet. Du vill ha den närmare mitten.

Inuti bör du se batterifjädern och en låsring med två hål i den. Sätt in din pincett / tunna tång / sax i hålen och vrid dem moturs. Det är ganska styvt, och att använda två separata objekt ger förmodligen inte tillräckligt med hävstångseffekt. Jag använde saxen på en schweizisk armékniv.

När du har fått ut ringen, frigör förarkortet. Det är fortfarande fäst med två ledningar, så var försiktig. De är tvinnade ihop, så vrid brädan på ett eller annat sätt tills trådarna lossnar. När du har tillräckligt med spelrum, vänd styrelsen. Du vill ha det så att chipet med "TINY13A" på är högre upp och mer tillgängligt. Om det är på fel sida, vänd det åt andra hållet. Skjut in fjädern under sidan. Detta kommer tillfälligt att hålla det på plats och göra det lättare att komma till chipet. Om du har problem med detta kan du förmodligen skruva loss den andra skarven och avlöda de två trådarna från andra sidan så att du kan ta bort kortet helt, men jag har inte provat det.

Steg 4: Anslut blinkande hårdvara

Anslut blinkande hårdvara
Anslut blinkande hårdvara
Anslut blinkande hårdvara
Anslut blinkande hårdvara
Anslut blinkande hårdvara
Anslut blinkande hårdvara

Nu använder du SOIC8 -klippet för att ansluta ATtiny13 -chipet och din programmerare. Med mitt SOIC8 -klipp, om jag har den röda tråden till vänster om båda ändarna, motsvarar pinnraden närmare mig på klippänden raden med stift närmare mig på kontaktänden, när kontakten är nedåt. (se mitt super konstnärliga diagram) Den här guiden rekommenderar att du använder en USB ASP V2.0 programmerare. Om du gör det, anslut det så här:

  • Pin 1 på ATtiny13 till pin 5 på USB ASP (återställ)
  • Pin 4 på ATtiny13 till pin 10 på USB ASP (mark)
  • Pin 5 på ATtiny13 till pin 1 på USB ASP (MOSI)
  • Pin 6 på ATtiny13 till pin 9 på USB ASP (MISO)
  • Pin 7 på ATtiny13 till pin 7 på USB ASP (SCK)
  • Pin 8 på ATtiny13 till pin 2 på USB ASP (VCC)

Om du, precis som jag, använder en Arduino måste du göra lite mer förberedelser. Följ steg noll och två i den här guiden:

Öppna Arduino IDE och se till att din Arduino är ansluten till din dator. Hitta ISP -skissen i Arkiv> Exempel> 11. ArduinoISP> ArduinoISP och ladda upp den till din Arduino. Anslut sedan ATtiny13 till den så här:

  • Pin 1 på ATtiny13 till pin 10 på Arduino (återställ)
  • Pin 4 på ATtiny13 till GND på Arduino (mark)
  • Pin 5 på ATtiny13 till pin 11 på Arduino (MOSI)
  • Pin 6 på ATtiny13 till pin 12 på Arduino (MISO)
  • Pin 7 på ATtiny13 till pin 13 på Arduino (SCK)
  • Pin 8 på ATtiny13 till VCC / 5V / 3.3V på Arduino (alla borde fungera, men 5V är mer tillförlitliga) (VCC)

Jag installerade också hårdvarupaketet, men det var förmodligen inte nödvändigt. Om du är osäker, prova. Det gör ingen skada. Men bränn inte startladdaren eftersom det förmodligen kommer att täta din ficklampa.

Steg 5: Flash det

För att flasha firmware måste du installera AVRDUDE. För att kontrollera att det fungerar med min Arduino kör jag:

avrdude -v -p attiny13 -c stk500v1 -P /dev /ttyUSB0 -b 19200 -n

Om det fungerar, flyttar jag till en tom mapp någonstans och kör:

avrdude -v -p attiny13 -c stk500v1 -P /dev /ttyUSB0 -b 19200 -u -Ulash: r: flash -dump.hex: i -Ueeprom: r: eeprom -dump.hex: i -Ulfuse: r: lfuse -dump.hex: i -Uhfuse: r: hfuse -dump.hex: i

För att göra en säkerhetskopia av befintlig firmware. Och för att blinka det, från mappen med den modifierade blf-a6.hex kör jag:

avrdude -v -p attiny13 -c stk500v1 -P /dev /ttyUSB0 -b 19200 -u -Utflash: w: blf -a6.hex -Ulfuse: w: 0x75: m -Funktion: w: 0xFF: m

Av någon anledning måste jag ange stk500v1 som programmerare, och det fungerade inte om jag inte angav port och överföringshastighet. Om du använder en Arduino och är osäker, försök koppla bort din ATtiny13 från Arduino och ladda upp en skiss i Arduino IDE med hjälp av inställningarna här. Det misslyckas, men det ska säga vilket kommando det använder i konsolfönstret. Du kan kopiera attributen till ditt AVRDUDE -kommando.

Om du använder en USB ASP -programmerare, kör istället:

avrdude -v -p attiny13 -c usbasp -n

För att se om det fungerar och:

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

För att göra en säkerhetskopia och:

avrdude -v -p attiny13 -c usbasp -u -Uflash: w: blf -a6.hex -Ulfuse: w: 0x75: m -Uhfuse: w: 0xFF: m

För att blinka.

-Uffash: w: blf-a6.hex hänvisar till filen som den blinkar. Ersätt blf-a6.hex med ditt filnamn om det är annorlunda.

-Ulfuse: w: 0x75: m och -Uhfuse: w: 0xFF: m är säkringarna. Din kan vara annorlunda, så dubbelkolla värdena i ficklampa-firmware/bin/flash-tiny13-fuses.sh.

Om det ger ett fel utanför intervallet betyder det att bilden är för stor för att passa på chipet och du måste ta bort en del av koden. Om det blinkar framgångsrikt bör det visa några förloppsfält och sedan säga "avrdude gjort. Tack."

Om det står "ogiltig enhetssignatur" och bygeln på din programmerare är inställd på 3,3v, försök att ställa in den till 5v.

När du har blinkat, montera tillbaka ficklampan och se om det fungerar. Mine gjorde, men tidpunkten är avstängd för vissa ̶r̶e̶a̶s̶o̶n̶.̶ den långa pressar behöver vara ungefär tre sekunder i stället för 1.5. Jag vet inte om det är något att göra med Arduino eller på grund Jag har använt fel inställningar ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ om du har någon idé, ̶ låt mig veta i ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Edit: Jag fixade det. (se steg 1)

Rekommenderad: