Tabla de contenido:

Actualización de firmware personalizado a una linterna BLF A6: 5 pasos
Actualización de firmware personalizado a una linterna BLF A6: 5 pasos

Video: Actualización de firmware personalizado a una linterna BLF A6: 5 pasos

Video: Actualización de firmware personalizado a una linterna BLF A6: 5 pasos
Video: Flashlight Review: BLF A6 Astrolux S1 (1200+ Lumens) Budget $30 LED Torch (Brightest EDC size 2016) 2024, Noviembre
Anonim
Actualización de firmware personalizado a una linterna BLF A6
Actualización de firmware personalizado a una linterna BLF A6

Recientemente obtuve un BLF A6. Es muy agradable, pero no me gusta ninguno de los grupos de modo predeterminado, así que modifiqué el firmware para usar mis brillos preferidos. La información fue difícil de encontrar, así que estoy poniendo todo lo que aprendí aquí para mí y para los demás.

Suministros

BLF A6 (probablemente funcionará con otras linternas basadas en ATtiny)

Pinzas / alicates finos / tijeras pequeñas / algo para deshacer el anillo de retención de la placa del controlador

Computadora para flashear, preferiblemente con una distribución de Linux

Programador ASP USB / Arduino / algo que pueda hacer programación AVR (aparentemente se recomienda el programador ASP USB, pero usé un Arduino)

Clip SOIC8 (es posible prescindir, pero es muy complicado y no se recomienda en absoluto)

(opcional) Protoboard y / o cables de puente para facilitar la conexión

Paso 1: descargue el firmware

El firmware para el BLF A6 (y muchas otras linternas) está disponible aquí. El autor habla de ello aquí. Puede descargarlo ejecutando:

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

en una terminal. (puede que tengas que instalar bzr)

Nota: en una edición anterior de este Instructable usé "bzr branch lp: flashlight-firmware" en su lugar. Desde entonces, aprendí que esto descarga una versión desactualizada con valores incorrectos para el capacitor de tiempo de inactividad, lo que hace que las presiones del botón sean incómodamente largas. (gracias a este hilo en Reddit)

La carpeta que desea es blf-a6-final / ToyKeeper / blf-a6. Contiene un archivo.hex compilado listo para flashear (blf-a6.hex) y el código C que puede modificar. (blf-a6.c) Si desea actualizar el firmware original, puede omitir el siguiente paso y usar blf-a6.hex. Es probable que algunos de los demás firmware de ese repositorio también funcionen.

Paso 2: modificar el firmware

Abra blf-a6.c en su editor de texto o IDE preferido. Las líneas más interesantes son los grupos de modos entre las líneas 116 y 131. Se ven así:

// Grupo de modos 1 # define NUM_MODES1 7 // Niveles PWM para el circuito grande (FET o Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // Niveles PWM para el circuito pequeño (1x7135) # define MODES1x1 2, 20, 110, 255, 255, 255, 0 // Mi muestra: 6 = 0..6, 7 = 2..11, 8 = 8..21 (15..32) // Muestra de Krono: 6 = 5..21, 7 = 17..32, 8 = 33..96 (50..78) // Manker2: 2 = 21, 3 = 39, 4 = 47,… 6? = 68 // Velocidad PWM para cada modo #define MODES_PWM1 FASE, RÁPIDO, RÁPIDO, RÁPIDO, RÁPIDO, RÁPIDO, FASE // Grupo de modo 2 #define NUM_MODES2 4 #define MODESNx2 0, 0, 90, 255 #define MODES1x2 20, 230, 255, 0 #define MODES_PWM2 RÁPIDO, RÁPIDO, RÁPIDO, FASE

Para cada grupo, MODESN es el valor de PWM usado para el FET y MODES1 es el valor de PWM usado para el 7135 en cada modo. El número está entre 0 y 255 y corresponde al brillo de la luz. Más información aquí. (desplácese hacia abajo hasta "Regulación de modo:") No estoy seguro de qué velocidad PWM es exactamente. Si alguien lo sabe, dímelo en los comentarios. El FET puede producir más luz que el 7135, pero el 7135 mantiene el nivel de luz más o menos igual durante la vida útil de la batería, mientras que el FET se oscurece a medida que se agota la batería.

Aquí puede ajustar los valores de PWM para producir modos a su gusto. Probablemente también puedas cambiar el número de modos, pero no lo he probado porque quería cuatro modos, que resulta ser el número en el segundo grupo. Quería un modo de luz de luna más oscuro, así que configuré el primero en 0/1, y el modo turbo me pareció un poco inútil, así que lo reemplacé con 137/255, el equivalente al modo seis en el grupo de siete modos. Probablemente pueda modificar el resto del código si es necesario, pero no lo he probado.

Cuando tenga el código que desea, debe compilarlo en un archivo.hex. Como mínimo, necesita gcc-avr y avr-libc. Si tiene problemas, consulte las otras dependencias en el archivo Léame del firmware. El repositorio incluye un script de compilación, pero no pude hacerlo funcionar. En cambio, descargué la versión anterior con

bzr branch lp: linterna-firmware

y copié el antiguo script de compilación (que pude ponerme a trabajar) sobre el nuevo. Entonces corrí:

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

en la carpeta blf-a6. (Debería haber una mejor manera de hacerlo) El../../bin/build.sh llama al script, el 13 especifica que se está construyendo para un ATtiny13 y el blf-a6 especifica que es para el BLF A6. (duh) Debería decirte qué comandos está ejecutando y darte la salida. El mío se ve así:

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% completo) Datos: 13 bytes (20,3% completo)

Los comandos ya están optimizados para el tamaño, por lo que si dice que está más del 100% lleno, intente comentar

#define FULL_BIKING_STROBE

en la línea 147 para usar la luz estroboscópica de ciclismo mínima más pequeña. Si aún no encaja, probablemente tendrá que eliminar más código en alguna parte. Cuando termine de compilar, debería haber un archivo llamado blf-a6.hex en la carpeta. Este es su código compilado, listo para flashear.

Paso 3: desmonte la linterna

Desmontar la linterna
Desmontar la linterna
Desmontar la linterna
Desmontar la linterna
Desmontar la linterna
Desmontar la linterna

Desatornille el extremo de la bombilla en sentido antihorario. Aquí hay dos uniones roscadas. El que está más cerca del extremo de la bombilla de la linterna abre el reflector y el LED, y el que está más cerca del centro abre la placa del controlador. Quieres el que está más cerca del medio.

En el interior, debería ver el resorte de la batería y un anillo de retención con dos orificios. Inserte sus pinzas / alicates finos / tijeras en los orificios y gírelos en sentido antihorario. Es bastante rígido y el uso de dos objetos separados probablemente no le dará suficiente apalancamiento. Usé las tijeras en una navaja suiza.

Una vez que haya sacado el anillo, libere la placa del controlador. Todavía está conectado con dos cables, así que ten cuidado. Están trenzados, por lo tanto, gire la placa de una forma u otra hasta que los cables se aflojen. Cuando tenga suficiente margen, voltee el tablero. Lo desea para que el chip con "TINY13A" esté más arriba y sea más accesible. Si está del lado equivocado, dale la vuelta. Meta el resorte debajo del costado. Esto lo mantendrá temporalmente en su lugar y facilitará el acceso al chip. Si tiene problemas con esto, probablemente pueda desenroscar la otra unión y desoldar los dos cables del otro lado para que pueda quitar la placa por completo, pero no lo he probado.

Paso 4: conecte el hardware intermitente

Conectar hardware intermitente
Conectar hardware intermitente
Conectar hardware intermitente
Conectar hardware intermitente
Conectar hardware intermitente
Conectar hardware intermitente

Ahora usa el clip SOIC8 para conectar el chip ATtiny13 y su programador. Con mi clip SOIC8, si tengo el cable rojo a la izquierda de ambos extremos, la fila de pines más cerca de mí en el extremo del clip corresponde a la fila de pines más cerca de mí en el extremo del conector, cuando el conector está hacia abajo. (vea mi diagrama súper artístico) Esta guía recomienda que utilice un programador USB ASP V2.0. Si lo hace, conéctelo así:

  • Pin 1 en el ATtiny13 al pin 5 en el USB ASP (reiniciar)
  • Pin 4 en el ATtiny13 al pin 10 en el USB ASP (tierra)
  • Pin 5 en el ATtiny13 al pin 1 en el USB ASP (MOSI)
  • Pin 6 en el ATtiny13 al pin 9 en el USB ASP (MISO)
  • Pin 7 en el ATtiny13 al pin 7 en el USB ASP (SCK)
  • Pin 8 en el ATtiny13 al pin 2 en el USB ASP (VCC)

Si, como yo, estás usando un Arduino, tienes que prepararte un poco más. Siga los pasos cero y dos de esta guía:

Abra el IDE de Arduino y asegúrese de que su Arduino esté conectado a su computadora. Busque el boceto del ISP en Archivo> Ejemplos> 11. ArduinoISP> ArduinoISP y cárguelo en su Arduino. Luego, conecte el ATtiny13 de esta manera:

  • Pin 1 en el ATtiny13 al pin 10 en el Arduino (reiniciar)
  • Pin 4 en el ATtiny13 a GND en el Arduino (tierra)
  • Pin 5 en el ATtiny13 al pin 11 en el Arduino (MOSI)
  • Pin 6 en el ATtiny13 al pin 12 en el Arduino (MISO)
  • Pin 7 en el ATtiny13 al pin 13 en el Arduino (SCK)
  • Pin 8 en ATtiny13 a VCC / 5V / 3.3V en Arduino (cualquiera debería funcionar, pero 5V es más confiable) (VCC)

También instalé el paquete de hardware, pero probablemente no fue necesario. En caso de duda, pruébelo. No hará ningún daño. Pero no quemes el cargador de arranque porque probablemente bloqueará tu linterna.

Paso 5: flashearlo

Para actualizar el firmware, debe instalar AVRDUDE. Para comprobar que funciona con mi Arduino, ejecuto:

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

Si funciona, me muevo a una carpeta vacía en algún lugar y ejecuto:

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

Hacer una copia de seguridad del firmware existente. Y para flashearlo, desde la carpeta con el blf-a6.hex modificado ejecuto:

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

Por alguna razón, tengo que especificar stk500v1 como programador, y no funcionó a menos que especifique el puerto y la velocidad en baudios. Si está usando un Arduino y tiene dudas, intente desconectar su ATtiny13 del Arduino y cargar un boceto en el IDE de Arduino usando la configuración aquí. Fallará, pero debería decir qué comando está usando en la ventana de la consola. Puede copiar los atributos en su comando AVRDUDE.

Si está utilizando un programador ASP USB, en su lugar ejecute:

avrdude -v -p attiny13 -c usbasp -n

Para ver si funciona y:

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

Para hacer una copia de seguridad y:

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

Para mostrarlo.

-Uflash: w: blf-a6.hex se refiere al archivo que está parpadeando. Reemplace blf-a6.hex con su nombre de archivo si es diferente.

-Ulfuse: w: 0x75: my -Uhfuse: w: 0xFF: m son los fusibles. El tuyo puede ser diferente, así que revisa los valores en flashlight-firmware / bin / flash-tiny13-fuses.sh.

Si da un error fuera de rango, significa que la imagen es demasiado grande para caber en el chip y debe eliminar parte del código. Si parpadea correctamente, debería mostrar algunas barras de progreso, luego diga "avrdude done. Gracias".

Si dice "firma de dispositivo no válida" y el puente de su programador está configurado en 3.3v, intente configurarlo en 5v.

Después de que lo haya mostrado, vuelva a armar su linterna y vea si funciona. La mía, pero el tiempo está apagado por alguna ̶r̶e̶a̶s̶o̶n̶.̶ el largo prensas necesidad de estar cerca de tres segundos en lugar de 1.5. No sé si Es algo que ver con el Arduino o porque he utilizado The Wrong Ajustes ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ Si usted tiene alguna idea, ̶ que me haga saber en el ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Editar: lo arreglé. (ver paso 1)

Recomendado: