Taula de continguts:

Firmware personalitzat intermitent a una llanterna BLF A6: 5 passos
Firmware personalitzat intermitent a una llanterna BLF A6: 5 passos

Vídeo: Firmware personalitzat intermitent a una llanterna BLF A6: 5 passos

Vídeo: Firmware personalitzat intermitent a una llanterna BLF A6: 5 passos
Vídeo: FULL BUILD | Rebuilding A DESTROYED Porsche 911 Turbo! 2024, Desembre
Anonim
Firmware personalitzat intermitent a una llanterna BLF A6
Firmware personalitzat intermitent a una llanterna BLF A6

Recentment he obtingut un BLF A6. És molt bonic, però no m'agrada cap dels grups de mode per defecte, així que vaig modificar el firmware per utilitzar les meves brillantors preferides. La informació era difícil de trobar, així que poso tot el que he après aquí per a mi i per als altres.

Subministraments

BLF A6 (probablement funcionarà amb altres llanternes basades en ATtiny)

Pinces / alicates fines / tisores petites / alguna cosa per desfer l'anell de retenció del tauler del conductor

Ordinador amb el qual fer flaix, preferiblement executant una distribució Linux

Programador USB ASP / Arduino / alguna cosa que pot fer la programació AVR (pel que sembla, es recomana el programador USB ASP, però he utilitzat un Arduino)

Clip SOIC8 (és possible prescindir-ne, però és molt complicat i gens recomanable)

(opcional) Taulers de pa i / o cables de pont per facilitar la connexió

Pas 1: descarregueu el firmware

El firmware del BLF A6 (i moltes altres llanternes) està disponible aquí. L’autor en parla aquí. Podeu descarregar-lo executant:

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

en un terminal. (potser haureu d'instal·lar bzr)

Nota: en una edició anterior d'aquest instructiu, vaig utilitzar "bzr branch lp: flashlight-firmware". Des de llavors he sabut que això descarrega una versió obsoleta amb valors equivocats per al condensador fora de temps, cosa que fa que el botó prengui un temps incòmode. (gràcies a aquest fil a Reddit)

La carpeta que voleu és blf-a6-final / ToyKeeper / blf-a6. Conté un fitxer.hex compilat i llest per llampegar (blf-a6.hex) i el codi C que podeu modificar. (blf-a6.c) Si voleu llançar el microprogramari existent, podeu ometre el següent pas i simplement utilitzar blf-a6.hex. Probablement, alguns dels altres microprogramaris d’aquest dipòsit també funcionaran.

Pas 2: Modifiqueu el firmware

Obriu blf-a6.c a l'editor de text o IDE preferit. Les línies més interessants són els grups de modes entre les línies 116 i 131. Tenen l’aspecte següent:

// Grup de modes 1 # defineix NUM_MODES1 7 // Nivells PWM per al circuit gran (FET o Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // Nivells PWM per al circuit petit (1x7135) # defineix MODES1x1 2, 20, 110, 255, 255, 255, 0 // La meva mostra: 6 = 0..6, 7 = 2..11, 8 = 8..21 (15..32) // Mostra de Krono: 6 = 5..21, 7 = 17..32, 8 = 33..96 (50..78) // Manker2: 2 = 21, 3 = 39, 4 = 47, … 6? = 68 // Velocitat PWM per a cada mode #define MODES_PWM1 FASE, RÀPID, RÀPID, RÀPID, RÀPID, RÀPID, FASE // Grup de modes 2 #define NUM_MODES2 4 #define MODESNx2 0, 0, 90, 255 #define MODES1x2 20, 230, 255, 0 #define MODES_PWM2 RÀPID, RÀPID, RÀPID, FASE

Per a cada grup, MODESN és el valor PWM utilitzat per al FET i MODES1 és el valor PWM utilitzat per al 7135 en cada mode. El nombre està entre 0 i 255 i correspon a la brillantor de la llum. Més informació aquí. (desplaceu-vos cap avall fins a "Regulació del mode"). No estic segur de quina és la velocitat PWM exactament. Si algú ho sap, digueu-ho als comentaris. El FET pot produir més llum que el 7135, però el 7135 manté el nivell de llum més o menys igual durant la vida de la bateria, mentre que el FET es fa més fosc a mesura que s’acaba la bateria.

Aquí podeu ajustar els valors de PWM per produir modes al vostre gust. Probablement també podeu canviar el nombre de modes, però no ho he provat ja que volia quatre modes, que és el número del segon grup. Volia un mode de lluna més fosc, de manera que vaig establir el primer a 0/1 i em sembla que el mode turbo és una mica inútil, de manera que el vaig substituir per 137/255, l’equivalent al mode sis del grup de set modes. Probablement podeu modificar la resta del codi si cal, però no ho he provat.

Quan tingueu el codi que voleu, haureu de compilar-lo en un fitxer.hex. Com a mínim, necessiteu gcc-avr i avr-libc. Si teniu problemes, mireu les altres dependències al readme del firmware. El dipòsit inclou un script de compilació, però no he pogut aconseguir que funcioni. En el seu lloc, he descarregat la versió antiga amb

bzr branch lp: llanterna-firmware

i vaig copiar l'antic script de compilació (que podia començar a treballar) sobre el nou. Llavors vaig córrer:

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

a la carpeta blf-a6. (Hi hauria d'haver una manera millor de fer-ho). El../../bin/build.sh crida a l'script, el 13 especifica que s'està construint per a un ATtiny13 i el blf-a6 especifica que és per al BLF A6. (duh) Us hauria de dir quines ordres s'està executant i donar-vos la sortida. El meu té aquest aspecte:

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 Programa: 1022 bytes (99,8% complet)) Dades: 13 bytes (20,3% complet)

Les ordres ja estan optimitzades per a la mida, de manera que si diu que està més del 100%, proveu de fer comentaris

#define FULL_BIKING_STROBE

a la línia 147 per utilitzar l’estroboscòpic de bicicleta mínim més petit. Si encara no encaixa, probablement haureu de treure més codi en algun lloc. Quan s'hagi acabat de compilar, hi hauria d'haver un fitxer anomenat blf-a6.hex a la carpeta. Aquest és el vostre codi compilat, a punt per parpellejar.

Pas 3: desmunteu la llanterna

Desmunteu la llanterna
Desmunteu la llanterna
Desmunteu la llanterna
Desmunteu la llanterna
Desmunteu la llanterna
Desmunteu la llanterna

Desenrosqueu l'extrem de la bombeta en sentit antihorari. Aquí hi ha dues juntes de cargol. El que es troba més a prop de l’extrem de la bombeta de la llanterna obre el reflector i el LED i el més proper al centre obre la placa del controlador. Voleu el més proper al mig.

A l’interior, heu de veure la molla de la bateria i un anell de retenció amb dos forats. Introduïu les pinces / tenalles fines / tisores als forats i gireu-les en sentit antihorari. És bastant rígid i, probablement, l’ús de dos objectes separats no us proporcionarà prou palanca. Vaig utilitzar les tisores en un ganivet suís.

Un cop hagis rebut el timbre, allibera la placa del conductor. Encara està connectat amb dos cables, així que aneu amb compte. Estan torçats, de manera que gireu el tauler d’una manera o altra fins que els cables s’afluixin. Quan tingueu prou marge, gireu el tauler. El voleu perquè el xip amb "TINY13A" sigui més alt i sigui més accessible. Si està en el costat equivocat, gireu-lo cap a l’altre costat. Introduïu la molla sota el lateral. Això el mantindrà temporalment al seu lloc i facilitarà l’accés al xip. Si teniu problemes amb això, probablement pugueu descargolar l'altra unió i dessoldar els dos cables de l'altre costat perquè pugueu eliminar la placa completament, però jo no ho he provat.

Pas 4: connecteu el maquinari intermitent

Connecteu el maquinari intermitent
Connecteu el maquinari intermitent
Connecteu el maquinari intermitent
Connecteu el maquinari intermitent
Connecteu el maquinari intermitent
Connecteu el maquinari intermitent

Ara utilitzeu el clip SOIC8 per connectar el xip ATtiny13 i el vostre programador. Amb el meu clip SOIC8, si tinc el fil vermell a l’esquerra dels dos extrems, la fila de pins més propers a l’extrem del clip correspon a la fila de pins més propers a l’extrem del connector, quan el connector està cap avall. (vegeu el meu diagrama súper artístic) Aquesta guia us recomana utilitzar un programador USB ASP V2.0. Si ho feu, connecteu-lo així:

  • Pin 1 de l'ATtiny13 al pin 5 de l'ASP USB (restabliment)
  • Pin 4 de l'ATtiny13 al pin 10 de l'ASP USB (terra)
  • Pin 5 de l'ATtiny13 al pin 1 de l'ASP USB (MOSI)
  • Pin 6 de l'ATtiny13 al pin 9 de l'ASP USB (MISO)
  • Pin 7 de l'ATtiny13 al pin 7 de l'ASP USB (SCK)
  • Pin 8 de l'ATtiny13 al pin 2 de l'ASP USB (VCC)

Si, com jo, utilitzeu un Arduino, heu de fer una mica més de preparació. Seguiu els passos zero i dos d'aquesta guia:

Obriu l'IDE Arduino i assegureu-vos que el vostre Arduino estigui connectat a l'ordinador. Cerqueu l'esbós de l'ISP a Fitxer> Exemples> 11. ArduinoISP> ArduinoISP i pengeu-lo al vostre Arduino. A continuació, connecteu-hi ATtiny13 així:

  • Pin 1 de l'ATtiny13 al pin 10 de l'Arduino (restabliment)
  • Pin 4 de l'ATtiny13 a GND a l'Arduino (terra)
  • Pin 5 de l'ATtiny13 al pin 11 de l'Arduino (MOSI)
  • Pin 6 de l'ATtiny13 al pin 12 de l'Arduino (MISO)
  • Pin 7 de l'ATtiny13 al pin 13 de l'Arduino (SCK)
  • Pin 8 de l'ATtiny13 a VCC / 5V / 3.3V a l'Arduino (qualsevol hauria de funcionar, però el 5V és més fiable) (VCC)

També he instal·lat el paquet de maquinari, però probablement no ha estat necessari. En cas de dubte, proveu-ho. No farà cap mal. Però no cremeu el carregador d’arrencada perquè probablement us enganxarà la llanterna.

Pas 5: Flash It

Per fer flaixar el firmware, heu d’instal·lar AVRDUDE. Per comprovar que funciona amb el meu Arduino, executo:

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

Si funciona, em passo a una carpeta buida en algun lloc i executo:

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 fer una còpia de seguretat del firmware existent. I per flashear-lo, des de la carpeta amb el blf-a6.hex modificat executo:

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 alguna raó, he d'especificar stk500v1 com a programador, i no va funcionar tret que especifiqués el port i la velocitat de transmissió. Si utilitzeu un Arduino i teniu dubtes, proveu de desconnectar el vostre ATtiny13 de l’Arduino i penjar un esbós a l’IDE d’Arduino mitjançant la configuració d’aquí. Fallarà, però hauria de dir quina ordre utilitza a la finestra de la consola. Podeu copiar els atributs a l'ordre AVRDUDE.

Si feu servir un programador USB ASP, executeu el següent:

avrdude -v -p attiny13 -c usbasp -n

Per veure si funciona 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

Per fer una còpia de seguretat i:

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

Per flaixar-lo.

-Uflash: w: blf-a6.hex fa referència al fitxer que està parpellejant. Substituïu blf-a6.hex pel vostre nom de fitxer si és diferent.

-Ulfuse: w: 0x75: m i -Uhfuse: w: 0xFF: m són els fusibles. Pot ser que el vostre sigui diferent, de manera que comproveu els valors a la llanterna-firmware / bin / flash-tiny13-fuses.sh.

Si es produeix un error fora del rang, significa que la imatge és massa gran per cabre-la al xip i que heu d’eliminar part del codi. Si parpelleja correctament, hauria de mostrar algunes barres de progrés i dir "Avrdude done. Gràcies".

Si diu "signatura de dispositiu no vàlida" i el pont del programador està definit a 3,3 v, proveu de configurar-lo a 5 v.

Després d’haver-lo llançat, torneu a muntar la llanterna i comproveu si funciona. La meva, però el temps està apagat per alguna ̶r̶e̶a̶s̶o̶n̶.̶ el llarg premses necessitat d'estar prop de tres segons en lloc de 1.5. No sé si és alguna cosa a veure amb l'Arduino o perquè he utilitzat The Wrong Ajustaments ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ Si vostè té alguna idea, ̶ que em faci saber al ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Edició: ho vaig arreglar. (vegeu el pas 1)

Recomanat: