Sommario:

Firmware personalizzato lampeggiante su una torcia BLF A6: 5 passaggi
Firmware personalizzato lampeggiante su una torcia BLF A6: 5 passaggi

Video: Firmware personalizzato lampeggiante su una torcia BLF A6: 5 passaggi

Video: Firmware personalizzato lampeggiante su una torcia BLF A6: 5 passaggi
Video: Come Disattivare/Resettare il Messaggio di Toner Esaurito su Stampanti Samsung (Chipless Firmware!) 2024, Dicembre
Anonim
Firmware personalizzato lampeggiante su una torcia BLF A6
Firmware personalizzato lampeggiante su una torcia BLF A6

Di recente ho ricevuto un BLF A6. È molto carino, ma non mi piace nessuno dei gruppi di modalità predefiniti, quindi ho modificato il firmware per utilizzare le mie luminosità preferite. Le informazioni erano difficili da trovare, quindi sto mettendo tutto ciò che ho imparato qui per me stesso e per gli altri.

Forniture

BLF A6 (probabilmente funzionerà con altre torce basate su ATtiny)

Pinzette / pinze sottili / piccole forbici / qualcosa per annullare l'anello di fissaggio della scheda driver

Computer con cui eseguire il flashing, preferibilmente con una distribuzione Linux

Programmatore USB ASP / Arduino / qualcosa che può fare la programmazione AVR (apparentemente il programmatore USB ASP è consigliato, ma ho usato un Arduino)

Clip SOIC8 (è possibile farne a meno, ma è molto laborioso e per nulla consigliato)

(opzionale) Breadboard e/o cavi jumper per facilitare il collegamento

Passaggio 1: scarica il firmware

Il firmware per il BLF A6 (e molte altre torce) è disponibile qui. L'autore ne parla qui. Puoi scaricarlo eseguendo:

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

in un terminale. (potrebbe essere necessario installare bzr)

Nota: in una precedente modifica di questo Instructable ho usato invece "bzr branch lp: flashlight-firmware". Da allora ho appreso che questo scarica una versione obsoleta con valori errati per il condensatore di spegnimento, rendendo il pulsante premuto a lungo in modo scomodo. (grazie a questo thread su Reddit)

La cartella che desideri è blf-a6-final/ToyKeeper/blf-a6. Contiene un file.hex compilato pronto per il flash (blf-a6.hex) e il codice C che è possibile modificare. (blf-a6.c) Se si desidera eseguire il flashing del firmware di serie, è possibile saltare il passaggio successivo e utilizzare semplicemente blf-a6.hex. Probabilmente funzioneranno anche alcuni degli altri firmware in quel repository.

Passaggio 2: modifica il firmware

Apri blf-a6.c nel tuo editor di testo o IDE preferito. Le righe più interessanti sono i gruppi di modalità tra le righe 116 e 131. Hanno questo aspetto:

// Mode group 1#define NUM_MODES1 7 // Livelli PWM per il circuito grande (FET o Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // Livelli PWM per il circuito piccolo (1x7135) # define MODES1x1 2, 20, 110, 255, 255, 255, 0 // Il mio campione: 6=0..6, 7=2..11, 8=8..21(15..32) // Campione Krono: 6=5..21, 7=17..32, 8=33..96(50..78) // Manker2: 2=21, 3=39, 4=47, … 6?=68 // Velocità PWM per ogni modalità #define MODES_PWM1 PHASE, FAST, FAST, FAST, FAST, FAST, PHASE // Gruppo modalità 2 #define NUM_MODES2 4 #define MODESNx2 0, 0, 90, 255 #define MODES1x2 20, 230, 255, 0 #define MODES_PWM2 VELOCE, VELOCE, VELOCE, FASE

Per ciascun gruppo, MODESN è il valore PWM utilizzato per il FET e MODES1 è il valore PWM utilizzato per il 7135 in ciascuna modalità. Il numero è compreso tra 0 e 255 e corrisponde alla luminosità della luce. Maggiori informazioni qui. (scorri fino a "Regolazione modalità:") Non sono sicuro di quale sia esattamente la velocità PWM. Se qualcuno lo sa me lo dica nei commenti. Il FET può produrre più luce del 7135, ma il 7135 mantiene il livello di luce più o meno lo stesso per tutta la durata della batteria, mentre il FET diventa più scuro quando si esaurisce la batteria.

Qui puoi regolare i valori PWM per produrre modalità a tuo piacimento. Probabilmente puoi anche cambiare il numero di modalità, ma non l'ho provato perché volevo quattro modalità, che risulta essere il numero nel secondo gruppo. Volevo una modalità chiaro di luna più scura, quindi ho impostato la prima su 0/1 e trovo la modalità turbo un po' inutile, quindi l'ho sostituita con 137/255, l'equivalente della modalità sei nel gruppo delle sette modalità. Probabilmente puoi modificare il resto del codice se necessario, ma non l'ho provato.

Quando hai il codice che desideri, devi compilarlo in un file.hex. Per lo meno, hai bisogno di gcc-avr e avr-libc. Se hai problemi, guarda le altre dipendenze nel file readme del firmware. Il repository include uno script di compilazione, ma non sono riuscito a farlo funzionare. Invece, ho scaricato la vecchia versione con

bzr branch lp: firmware torcia

e ho copiato il vecchio script di build (che potevo mettere al lavoro) su quello nuovo. Poi ho eseguito:

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

nella cartella blf-a6. (dovrebbe esserci un modo migliore per farlo) Il../../bin/build.sh chiama lo script, il 13 specifica che sta costruendo per un ATtiny13 e il blf-a6 specifica che è per il BLF A6. (duh) Dovrebbe dirti quali comandi sta eseguendo e darti l'output. Il mio assomiglia a questo:

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 Programma: 1022 byte (99,8% pieno) Dati: 13 byte (20,3% pieno)

I comandi sono già ottimizzati per le dimensioni, quindi se dice che è pieno più del 100%, prova a commentare

#define FULL_BIKING_STROBE

sulla linea 147 per utilizzare lo stroboscopio minimale più piccolo. Se ancora non si adatta, probabilmente dovrai rimuovere più codice da qualche parte. Al termine della compilazione, dovrebbe esserci un file chiamato blf-a6.hex nella cartella. Questo è il tuo codice compilato, pronto per il flash.

Passaggio 3: smontare la torcia

Smontare la torcia
Smontare la torcia
Smontare la torcia
Smontare la torcia
Smontare la torcia
Smontare la torcia

Svitare l'estremità della lampadina in senso antiorario. Ci sono due giunti a vite qui. Quello più vicino all'estremità della lampadina della torcia apre il riflettore e il LED, e quello più vicino al centro apre la scheda del driver. Vuoi quello più vicino al centro.

All'interno, dovresti vedere la molla della batteria e un anello di sicurezza con due fori. Inserisci le tue pinzette / pinze sottili / forbici nei fori e ruotale in senso antiorario. È piuttosto rigido e l'uso di due oggetti separati probabilmente non ti darà abbastanza leva. Ho usato le forbici su un coltellino svizzero.

Una volta estratto l'anello, libera la scheda del conducente. È ancora collegato con due fili, quindi fai attenzione. Sono attorcigliati insieme, quindi ruota la scheda in un modo o nell'altro finché i fili non si allentano. Quando hai abbastanza margine di manovra, capovolgi il tabellone. Lo vuoi in modo che il chip con "TINY13A" sia più in alto e più accessibile. Se è dalla parte sbagliata, giralo dall'altra parte. Infila la molla sotto il lato. Questo lo manterrà temporaneamente in posizione e renderà più facile raggiungere il chip. Se hai problemi con questo, puoi probabilmente svitare l'altra giunzione e dissaldare i due fili dall'altro lato in modo da poter rimuovere completamente la scheda, ma non l'ho provato.

Passaggio 4: collegare l'hardware lampeggiante

Collega l'hardware lampeggiante
Collega l'hardware lampeggiante
Collega l'hardware lampeggiante
Collega l'hardware lampeggiante
Collega l'hardware lampeggiante
Collega l'hardware lampeggiante

Ora usi la clip SOIC8 per collegare il chip ATtiny13 e il tuo programmatore. Con la mia clip SOIC8, se ho il filo rosso a sinistra di entrambe le estremità, la fila di pin più vicina a me sull'estremità della clip corrisponde alla fila di pin più vicina a me sull'estremità del connettore, quando il connettore è rivolto verso il basso. (vedi il mio diagramma super artistico) Questa guida consiglia di utilizzare un programmatore USB ASP V2.0. Se lo fai, collegalo in questo modo:

  • Pin 1 su ATtiny13 al pin 5 su USB ASP (reset)
  • Pin 4 su ATtiny13 al pin 10 su USB ASP (terra)
  • Pin 5 su ATtiny13 a pin 1 su USB ASP (MOSI)
  • Pin 6 su ATtiny13 a pin 9 su USB ASP (MISO)
  • Pin 7 su ATtiny13 a pin 7 su USB ASP (SCK)
  • Pin 8 su ATtiny13 al pin 2 su USB ASP (VCC)

Se, come me, stai usando un Arduino, devi fare un po' più di preparazione. Segui i passaggi zero e due di questa guida:

Apri l'IDE di Arduino e assicurati che il tuo Arduino sia connesso al tuo computer. Trova lo sketch ISP in File>Esempi>11. ArduinoISP>ArduinoISP e caricalo sul tuo Arduino. Quindi collega ATtiny13 ad esso in questo modo:

  • Pin 1 su ATtiny13 a pin 10 su Arduino (reset)
  • Pin 4 su ATtiny13 a GND su Arduino (terra)
  • Pin 5 su ATtiny13 a pin 11 su Arduino (MOSI)
  • Pin 6 su ATtiny13 a pin 12 su Arduino (MISO)
  • Pin 7 su ATtiny13 a pin 13 su Arduino (SCK)
  • Pin 8 su ATtiny13 a VCC / 5V / 3.3V su Arduino (qualsiasi dovrebbe funzionare, ma 5V è più affidabile) (VCC)

Ho installato anche il pacchetto hardware, ma probabilmente non era necessario. In caso di dubbio, provalo. Non farà alcun male. Ma non bruciare il bootloader perché probabilmente bloccherà la tua torcia.

Passaggio 5: Flash It

Per eseguire il flashing del firmware, è necessario installare AVRDUDE. Per verificare che funzioni con il mio Arduino, eseguo:

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

Se funziona, mi sposto in una cartella vuota da qualche parte ed eseguo:

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

Per eseguire un backup del firmware esistente. E per flasharlo, dalla cartella con il blf-a6.hex modificato eseguo:

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

Per qualche motivo, devo specificare stk500v1 come programmatore e non ha funzionato a meno che non avessi specificato la porta e la velocità di trasmissione. Se stai usando un Arduino e hai dei dubbi, prova a scollegare il tuo ATtiny13 da Arduino e a caricare uno schizzo nell'IDE di Arduino usando le impostazioni qui. Fallirà, ma dovrebbe dire quale comando sta usando nella finestra della console. Puoi copiare gli attributi nel tuo comando AVRDUDE.

Se stai utilizzando un programmatore ASP USB, esegui invece:

avrdude -v -p attiny13 -c usbasp -n

Per vedere se funziona e:

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

Per fare un backup e:

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

Per lampeggiarlo.

-Uflash:w:blf-a6.hex si riferisce al file che sta lampeggiando. Sostituisci blf-a6.hex con il nome del tuo file se è diverso.

-Ulfuse:w:0x75:m e -Uhfuse:w:0xFF:m sono i fusibili. Il tuo potrebbe essere diverso, quindi ricontrolla i valori in flashlight-firmware/bin/flash-tiny13-fuses.sh.

Se dà un errore fuori portata, significa che l'immagine è troppo grande per adattarsi al chip e devi rimuovere parte del codice. Se lampeggia correttamente, dovrebbe visualizzare alcune barre di avanzamento, quindi dire "avrdude done. Grazie".

Se dice "firma del dispositivo non valida" e il jumper sul tuo programmatore è impostato su 3.3v, prova a impostarlo su 5v.

Dopo averlo flashato, rimonta la torcia e vedi se funziona. La mia ha fatto, ma i tempi è spento per un po '̶r̶e̶a̶s̶o̶n̶.̶ la lunga presse hanno bisogno di essere circa tre secondi, invece di 1.5. Non so se E'a che fare con Arduino o perché Ive usato The Wrong impostazioni ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ Se avete qualche idea, ̶ fatemelo sapere nei ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Edit: ho risolto. (vedi passaggio 1)

Consigliato: