Cuprins:

Firmware personalizat intermitent pe o lanternă BLF A6: 5 pași
Firmware personalizat intermitent pe o lanternă BLF A6: 5 pași

Video: Firmware personalizat intermitent pe o lanternă BLF A6: 5 pași

Video: Firmware personalizat intermitent pe o lanternă BLF A6: 5 pași
Video: Доработка Китайской Android магнитолы. 📲 Часть 2 - Работа с SPFlashTool, дамп, перепрошивка 2024, Iulie
Anonim
Firmware personalizat intermitent pe o lanternă BLF A6
Firmware personalizat intermitent pe o lanternă BLF A6

Am primit recent un BLF A6. Este foarte frumos, dar nu-mi place nici unul dintre grupurile de moduri implicite, așa că am modificat firmware-ul pentru a utiliza luminozitățile mele preferate. Informațiile au fost greu de găsit, așa că pun tot ceea ce am învățat aici pentru mine și pentru alții.

Provizii

BLF A6 (va funcționa probabil cu alte lanterne bazate pe ATtiny)

Pensete / clește subțire / foarfece mici / ceva pentru a anula inelul de fixare a plăcii șoferului

Computer cu care să blițezi, de preferință rulează o distribuție Linux

Programator USB ASP / Arduino / ceva ce poate face programare AVR (se pare că este recomandat programatorul USB ASP, dar am folosit un Arduino)

Clip SOIC8 (se poate face fără, dar este foarte complicat și deloc recomandat)

(opțional) Sârmă de pană și / sau jumper pentru a face conexiunea mai ușoară

Pasul 1: Descărcați firmware-ul

Firmware-ul pentru BLF A6 (și multe alte lanterne) este disponibil aici. Autorul vorbește despre asta aici. O puteți descărca executând:

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

într-un terminal. (s-ar putea să trebuiască să instalați bzr)

Notă: într-o ediție anterioară a acestui Instructable am folosit în schimb „bzr branch lp: lanternă-firmware”. De atunci am aflat că acest lucru descarcă o versiune învechită cu valori greșite pentru condensatorul off-time, făcând butonul să apese incomod. (datorită acestui thread de pe Reddit)

Dosarul pe care îl doriți este blf-a6-final / ToyKeeper / blf-a6. Acesta conține un fișier.hex compilat gata să clipească (blf-a6.hex) și codul C pe care îl puteți modifica. (blf-a6.c) Dacă doriți să blocați firmware-ul stoc, puteți sări peste pasul următor și utilizați doar blf-a6.hex. Unele dintre celelalte firmware-uri din acel depozit vor funcționa probabil.

Pasul 2: Modificați firmware-ul

Deschideți blf-a6.c în editorul de text preferat sau IDE. Cele mai interesante linii sunt grupurile de moduri între liniile 116 și 131. Acestea arată astfel:

// Mod grup 1 # define NUM_MODES1 7 // Niveluri PWM pentru circuitul mare (FET sau Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // Niveluri PWM pentru circuitul mic (1x7135) # definiți MODURI 1x1 2, 20, 110, 255, 255, 255, 0 // Eșantionul meu: 6 = 0..6, 7 = 2..11, 8 = 8..21 (15..32) // Eșantion Krono: 6 = 5..21, 7 = 17..32, 8 = 33..96 (50..78) // Manker2: 2 = 21, 3 = 39, 4 = 47, … 6? = 68 // Viteza PWM pentru fiecare mod #define MODES_PWM1 PHASE, FAST, FAST, FAST, FAST, FAST, FAST, PHASE // Mod grup 2 #define NUM_MODES2 4 #define MODESNx2 0, 0, 90, 255 #define MODES1x2 20, 230, 255, 0 #define MODES_PWM2 RAPID, RAPID, RAPID, FAZĂ

Pentru fiecare grup, MODESN este valoarea PWM utilizată pentru FET, iar MODES1 este valoarea PWM utilizată pentru 7135 în fiecare mod. Numărul este între 0 și 255 și corespunde luminozității luminii. Mai multe informații aici. (derulați în jos până la „Reglare mod:”) Nu sunt sigur care este viteza PWM exact. Dacă știe cineva, spune-mi în comentarii. FET poate produce mai multă lumină decât modelul 7135, dar modelul 7135 menține nivelul luminii mai mult sau mai puțin la fel pe durata de viață a bateriei, în timp ce FET devine mai întunecat pe măsură ce rămâne fără baterie.

Aici puteți regla valorile PWM pentru a produce moduri pe placul dvs. Probabil puteți schimba și numărul de moduri, dar nu l-am încercat, deoarece am vrut patru moduri, ceea ce se întâmplă să fie numărul din al doilea grup. Am vrut un mod de lună mai întunecat, așa că l-am setat pe primul la 0/1 și consider că modul turbo este puțin inutil, așa că l-am înlocuit cu 137/255, echivalentul modului șase din grupul de șapte moduri. Probabil puteți modifica restul codului dacă este necesar, dar nu l-am încercat.

Când aveți codul dorit, trebuie să îl compilați într-un fișier.hex. Cel puțin, aveți nevoie de gcc-avr și avr-libc. Dacă aveți probleme, uitați-vă la celelalte dependențe din readme-ul firmware-ului. Depozitul include un script de compilare, dar nu am reușit să funcționeze. În schimb, am descărcat versiunea veche cu

bzr branch lp: lanternă-firmware

și am copiat vechiul script de construcție (pe care aș putea să-l pun la lucru) peste cel nou. Apoi am fugit:

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

în folderul blf-a6. (ar trebui să existe o modalitate mai bună de a face acest lucru)../../bin/build.sh apelează scriptul, 13 specifică că este construit pentru un ATtiny13 și blf-a6 specifică că este pentru BLF A6. (duh) Ar trebui să vă spună ce comenzi rulează și să vă dea rezultatul. Al meu arată astfel:

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)) Date: 13 octeți (20,3% complet)

Comenzile sunt deja optimizate pentru dimensiune, așa că, dacă se spune că este mai mare de 100%, încercați să comentați

#define FULL_BIKING_STROBE

pe linia 147 pentru a utiliza stroboscopul minim de ciclism. Dacă încă nu se potrivește, va trebui probabil să eliminați mai mult cod undeva. Când se termină compilarea, ar trebui să existe un fișier numit blf-a6.hex în folder. Acesta este codul dvs. compilat, gata să clipească.

Pasul 3: Demontați lanterna

Demontați lanterna
Demontați lanterna
Demontați lanterna
Demontați lanterna
Demontați lanterna
Demontați lanterna

Deșurubați capătul becului în sens invers acelor de ceasornic. Aici sunt două îmbinări cu șurub. Cel mai aproape de capătul becului lanternei deschide reflectorul și LED-ul, iar cel mai aproape de mijloc deschide placa șoferului. Îl vrei pe cel mai aproape de mijloc.

În interior, ar trebui să vedeți arcul bateriei și un inel de fixare cu două găuri în el. Introduceți penseta / cleștele subțire / foarfecele în găuri și rotiți-le în sens invers acelor de ceasornic. Este destul de rigid, iar utilizarea a două obiecte separate probabil nu vă va oferi suficientă pârghie. Am folosit foarfeca pe un cuțit de armată elvețian.

După ce ați sunat, eliberați placa de conducător auto. Este încă atașat cu două fire, așa că aveți grijă. Sunt răsucite împreună, așa că rotiți placa într-un fel sau altul până când firele se slăbesc. Când aveți suficientă libertate, întoarceți tabloul. Îl doriți, astfel încât cipul cu „TINY13A” să fie mai sus și mai accesibil. Dacă este pe partea greșită, întoarceți-o în sens invers. Puneți arcul sub lateral. Acest lucru îl va menține temporar în poziție și va facilita accesul la cip. Dacă aveți probleme cu acest lucru, probabil că deșurubați cealaltă îmbinare și desudați cele două fire din cealaltă parte, astfel încât să puteți scoate placa complet, dar nu am încercat-o.

Pasul 4: Conectați hardware-ul intermitent

Conectați Hardware intermitent
Conectați Hardware intermitent
Conectați Hardware intermitent
Conectați Hardware intermitent
Conectați Hardware intermitent
Conectați Hardware intermitent

Acum utilizați clipul SOIC8 pentru a conecta cipul ATtiny13 și programatorul dvs. Cu clipul meu SOIC8, dacă am firul roșu în stânga ambelor capete, rândul de pini mai aproape de mine de la capătul clipului corespunde rândului de pini mai aproape de mine de la capătul conectorului, atunci când conectorul este orientat în jos. (vezi schema super artistică) Acest ghid vă recomandă să utilizați un programator USB ASP V2.0. Dacă faceți acest lucru, conectați-l astfel:

  • Pin 1 pe ATtiny13 la pin 5 pe USB ASP (resetare)
  • Pinul 4 pe ATtiny13 la pinul 10 pe USB ASP (masă)
  • Pinul 5 pe ATtiny13 la pinul 1 pe USB ASP (MOSI)
  • Pinul 6 pe ATtiny13 la pinul 9 pe USB ASP (MISO)
  • Pin 7 pe ATtiny13 la pin 7 pe USB ASP (SCK)
  • Pinul 8 pe ATtiny13 la pinul 2 pe USB ASP (VCC)

Dacă, la fel ca mine, folosiți un Arduino, trebuie să faceți ceva mai multă pregătire. Urmați pașii zero și doi din acest ghid:

Deschideți ID-ul Arduino și asigurați-vă că dispozitivul dvs. Arduino este conectat la computer. Găsiți schița ISP în Fișier> Exemple> 11. ArduinoISP> ArduinoISP și încărcați-o pe Arduino. Apoi conectați ATtiny13 la acesta astfel:

  • Pin 1 pe ATtiny13 la pin 10 pe Arduino (resetare)
  • Pinul 4 de la ATtiny13 la GND pe Arduino (la sol)
  • Pinul 5 pe ATtiny13 la pinul 11 pe Arduino (MOSI)
  • Pinul 6 pe ATtiny13 la pinul 12 pe Arduino (MISO)
  • Pinul 7 pe ATtiny13 la pinul 13 pe Arduino (SCK)
  • Pinul 8 de la ATtiny13 la VCC / 5V / 3.3V pe Arduino (oricare ar trebui să funcționeze, dar 5V este mai fiabil) (VCC)

Am instalat și pachetul hardware, dar probabil că nu era necesar. Dacă aveți dubii, încercați. Nu va face nici un rău. Dar nu ardeți încărcătorul de încărcare, deoarece probabil că vă va împiedica lanterna.

Pasul 5: Flash It

Pentru a bloca firmware-ul, trebuie să instalați AVRDUDE. Pentru a verifica dacă funcționează cu Arduino, execut:

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

Dacă funcționează, mă mut într-un folder gol undeva și rulez:

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

Pentru a face o copie de rezervă a firmware-ului existent. Și pentru al bloca, din folderul cu blf-a6.hex modificat execut:

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

Din anumite motive, trebuie să specific stk500v1 ca programator și nu a funcționat decât dacă am specificat portul și rata de transmisie. Dacă folosiți un Arduino și aveți dubii, încercați să deconectați ATtiny13 de la Arduino și să încărcați o schiță în IDE Arduino folosind setările de aici. Va eșua, dar ar trebui să spună ce comandă folosește în fereastra consolei. Puteți copia atributele în comanda AVRDUDE.

Dacă utilizați un programator USB ASP, rulați în schimb:

avrdude -v -p attiny13 -c usbasp -n

Pentru a vedea dacă funcționează și:

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

Pentru a face o copie de rezervă și:

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

Pentru a-l bloca.

-Uflash: w: blf-a6.hex se referă la fișierul pe care îl aprinde intermitent. Înlocuiți blf-a6.hex cu numele fișierului dvs. dacă este diferit.

-Ulfuse: w: 0x75: m și -Uhfuse: w: 0xFF: m sunt siguranțele. A ta poate fi diferită, deci verifică dublu valorile din lanterna-firmware / bin / flash-tiny13-fuses.sh.

Dacă dă o eroare în afara intervalului, înseamnă că imaginea este prea mare pentru a se potrivi pe cip și trebuie să eliminați o parte din cod. Dacă clipește cu succes, ar trebui să afișeze câteva bare de progres, apoi să spună „avrdude done. Mulțumesc”.

Dacă scrie „semnătură invalidă a dispozitivului” și jumperul din programatorul dvs. este setat la 3,3v, încercați să-l setați la 5v.

După ce ați aprins-o, reasamblați lanterna și vedeți dacă funcționează. Al meu a făcut, dar cronometrarea este OPRITĂ pentru a putea ̶r̶e̶a̶s̶o̶n̶.̶ Lungul DE INDREPTAT nevoie de la aproximativ trei secunde în loc de ̶1̶.̶5̶.̶ Nu stiu daca aceasta este de a face cu Arduino sau din cauza Ive second-hand necorespunz ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ setări în cazul în care aveți o idee, ̶ Anunțați-ne în ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Edit: l-am remediat. (vezi pasul 1)

Recomandat: