Índice:

Flash de firmware personalizado para uma lanterna BLF A6: 5 etapas
Flash de firmware personalizado para uma lanterna BLF A6: 5 etapas

Vídeo: Flash de firmware personalizado para uma lanterna BLF A6: 5 etapas

Vídeo: Flash de firmware personalizado para uma lanterna BLF A6: 5 etapas
Vídeo: Обзор фонарика: BLF A6 Astrolux S1 (1200+ люмен), бюджетный светодиодный фонарь за 30 долларов (самый яркий размер EDC 2016 г.) 2024, Julho
Anonim
Flashing de firmware personalizado para uma lanterna BLF A6
Flashing de firmware personalizado para uma lanterna BLF A6

Recentemente, comprei um BLF A6. É muito bom, mas não gosto de nenhum dos grupos de modo padrão, então modifiquei o firmware para usar meus brilhos preferidos. A informação foi difícil de encontrar, então estou colocando tudo o que aprendi aqui para mim e para os outros.

Suprimentos

BLF A6 (provavelmente funcionará com outras lanternas baseadas em ATtiny)

Pinças / alicates finos / tesouras pequenas / algo para desfazer o anel de retenção da placa do driver

Computador para usar o flash, de preferência executando uma distribuição Linux

Programador USB ASP / Arduino / algo que pode fazer programação AVR (aparentemente, o programador USB ASP é recomendado, mas usei um Arduino)

Clipe SOIC8 (é possível dispensar, mas é muito complicado e nada recomendado)

(opcional) Placa de ensaio e / ou fios de jumper para tornar a conexão mais fácil

Etapa 1: Baixe o Firmware

O firmware para o BLF A6 (e muitas outras lanternas) está disponível aqui. O autor fala sobre isso aqui. Você pode baixá-lo executando:

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

em um terminal. (pode ser necessário instalar o bzr)

Nota: em uma edição anterior deste Instructable, usei "bzr branch lp: flashlight-firmware". Desde então, aprendi que isso baixa uma versão desatualizada com valores errados para o capacitor off-time, tornando os pressionamentos de botão desconfortavelmente longos. (graças a este tópico no Reddit)

A pasta desejada é blf-a6-final / ToyKeeper / blf-a6. Ele contém um arquivo.hex compilado pronto para piscar (blf-a6.hex) e o código C que você pode modificar. (blf-a6.c) Se você deseja atualizar o firmware padrão, pode pular a próxima etapa e apenas usar blf-a6.hex. Alguns dos outros firmware nesse repositório provavelmente funcionarão também.

Etapa 2: modificar o firmware

Abra blf-a6.c em seu editor de texto ou IDE preferido. As linhas mais interessantes são os grupos de modo entre as linhas 116 e 131. Eles se parecem com isto:

// Grupo de modo 1 # define NUM_MODES1 7 // Níveis PWM para o circuito grande (FET ou Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // Níveis PWM para o circuito pequeno (1x7135) # define MODES1x1 2, 20, 110, 255, 255, 255, 0 // Minha amostra: 6 = 0..6, 7 = 2..11, 8 = 8..21 (15..32) // Amostra Krono: 6 = 5..21, 7 = 17..32, 8 = 33..96 (50..78) // Manker2: 2 = 21, 3 = 39, 4 = 47,… 6? = 68 // Velocidade 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 é o valor PWM usado para o FET e MODES1 é o valor PWM usado para o 7135 em cada modo. O número está entre 0 e 255 e corresponde ao brilho da luz. Mais informações aqui. (role para baixo até "Modo de regulação:") Não tenho certeza de qual é a velocidade do PWM exatamente. Se alguém souber, me diga nos comentários. O FET pode produzir mais luz do que o 7135, mas o 7135 mantém o nível de luz mais ou menos o mesmo durante a vida útil da bateria, enquanto o FET fica mais escuro à medida que fica sem bateria.

Aqui você pode ajustar os valores de PWM para produzir os modos de sua preferência. Provavelmente, você também pode alterar o número de modos, mas não tentei porque queria quatro modos, que por acaso é o número do segundo grupo. Eu queria um modo de luar mais escuro, então configurei o primeiro para 0/1 e achei o modo turbo um pouco inútil, então o substituí por 137/255, o equivalente ao modo seis no grupo de sete modos. Você provavelmente pode modificar o resto do código se necessário, mas não tentei.

Quando você tiver o código que deseja, terá que compilá-lo em um arquivo.hex. No mínimo, você precisa de gcc-avr e avr-libc. Se você tiver problemas, examine as outras dependências no leia-me do firmware. O repositório inclui um script de construção, mas não consegui fazê-lo funcionar. Em vez disso, baixei a versão antiga com

bzr branch lp: flashlight-firmware

e copiei o script de construção antigo (que eu poderia começar a trabalhar) sobre o novo. Então eu corri:

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

na pasta blf-a6. (deve haver uma maneira melhor de fazer isso) O../../bin/build.sh chama o script, o 13 especifica que está sendo construído para um ATtiny13 e o blf-a6 especifica que é para o BLF A6. (duh) Ele deve informar quais comandos está executando e fornecer a saída. O meu é assim:

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

Os comandos já estão otimizados para tamanho, então se disser que está mais de 100% cheio, tente comentar

#define FULL_BIKING_STROBE

na linha 147 para usar o estroboscópio de bicicleta mínimo menor. Se ainda não couber, você provavelmente terá que remover mais código em algum lugar. Quando terminar de compilar, deve haver um arquivo chamado blf-a6.hex na pasta. Este é o seu código compilado, pronto para piscar.

Etapa 3: desmonte a lanterna

Desmonte a lanterna
Desmonte a lanterna
Desmonte a lanterna
Desmonte a lanterna
Desmonte a lanterna
Desmonte a lanterna

Desaparafuse a extremidade da lâmpada no sentido anti-horário. Existem duas juntas de parafuso aqui. O que está mais perto da ponta da lâmpada da lanterna abre o refletor e o LED, e o que está mais perto do meio abre a placa do driver. Você quer aquele mais perto do meio.

Dentro, você deve ver a mola da bateria e um anel de retenção com dois orifícios. Insira suas pinças / alicates finos / tesouras nos orifícios e gire-os no sentido anti-horário. É bastante rígido e usar dois objetos separados provavelmente não lhe dará força suficiente. Usei a tesoura em um canivete suíço.

Depois de tirar o anel, liberte a placa do driver. Ele ainda está conectado com dois fios, então tome cuidado. Eles estão torcidos juntos, então gire a placa de uma forma ou de outra até que os fios se soltem. Quando você tiver margem de manobra suficiente, vire o tabuleiro. Você deseja que o chip com "TINY13A" fique mais alto e mais acessível. Se estiver do lado errado, vire para o outro lado. Coloque a mola embaixo da lateral. Isso o manterá temporariamente no lugar e tornará mais fácil chegar ao chip. Se você tiver problemas com isso, provavelmente poderá desparafusar a outra junta e dessoldar os dois fios do outro lado para que possa remover a placa completamente, mas não tentei.

Etapa 4: Conecte o Hardware Flash

Conectar Hardware Flashing
Conectar Hardware Flashing
Conectar Hardware Flashing
Conectar Hardware Flashing
Conectar Hardware Flashing
Conectar Hardware Flashing

Agora você usa o clipe SOIC8 para conectar o chip ATtiny13 e seu programador. Com meu clipe SOIC8, se eu tiver o fio vermelho à esquerda de ambas as extremidades, a fileira de pinos mais perto de mim na ponta do clipe corresponde à fileira de pinos mais perto de mim na ponta do conector, quando o conector está voltado para baixo. (veja meu diagrama super artístico) Este guia recomenda que você use um programador USB ASP V2.0. Se você fizer isso, conecte-o assim:

  • Pino 1 no ATtiny13 ao pino 5 no USB ASP (redefinir)
  • Pino 4 no ATtiny13 ao pino 10 no USB ASP (terra)
  • Pino 5 no ATtiny13 ao pino 1 no USB ASP (MOSI)
  • Pino 6 no ATtiny13 ao pino 9 no USB ASP (MISO)
  • Pino 7 no ATtiny13 ao pino 7 no USB ASP (SCK)
  • Pino 8 no ATtiny13 ao pino 2 no USB ASP (VCC)

Se, como eu, você está usando um Arduino, precisa se preparar um pouco mais. Siga as etapas zero e dois deste guia:

Abra o IDE do Arduino e verifique se o Arduino está conectado ao computador. Encontre o esboço do ISP em Arquivo> Exemplos> 11. ArduinoISP> ArduinoISP e carregue-o em seu Arduino. Em seguida, conecte o ATtiny13 a ele assim:

  • Pino 1 no ATtiny13 ao pino 10 no Arduino (redefinir)
  • Pino 4 no ATtiny13 para GND no Arduino (terra)
  • Pino 5 no ATtiny13 ao pino 11 no Arduino (MOSI)
  • Pino 6 no ATtiny13 ao pino 12 no Arduino (MISO)
  • Pino 7 no ATtiny13 ao pino 13 no Arduino (SCK)
  • Pino 8 no ATtiny13 para VCC / 5V / 3,3V no Arduino (qualquer um deve funcionar, mas 5V é mais confiável) (VCC)

Eu instalei o pacote de hardware também, mas provavelmente não foi necessário. Em caso de dúvida, experimente. Não fará mal nenhum. Mas não queime o bootloader porque provavelmente irá danificar sua lanterna.

Etapa 5: Flash It

Para fazer o flash do firmware, você precisa instalar o AVRDUDE. Para verificar se funciona com meu Arduino, executo:

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

Se funcionar, vou para uma pasta vazia em algum lugar e 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

Para fazer um backup do firmware existente. E para piscar, da pasta com o blf-a6.hex modificado eu corro:

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 algum motivo, tenho que especificar stk500v1 como o programador e não funcionou a menos que eu especificasse a porta e a taxa de transmissão. Se você estiver usando um Arduino e estiver em dúvida, tente desconectar seu ATtiny13 do Arduino e enviar um esboço no IDE do Arduino usando as configurações aqui. Ele falhará, mas deve informar qual comando está usando na janela do console. Você pode copiar os atributos em seu comando AVRDUDE.

Se você estiver usando um programador USB ASP, execute:

avrdude -v -p attiny13 -c usbasp -n

Para ver se funciona 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

Para fazer um backup e:

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

Para piscar.

-Uflash: w: blf-a6.hex refere-se ao arquivo que está piscando. Substitua blf-a6.hex pelo nome do arquivo se for diferente.

-Ulfuse: w: 0x75: me -Uhfuse: w: 0xFF: m são os fusíveis. O seu pode ser diferente, portanto, verifique os valores em flashlight-firmware / bin / flash-tiny13-fuses.sh.

Se der um erro fora do intervalo, significa que a imagem é muito grande para caber no chip e você tem que remover parte do código. Se ele piscar com sucesso, ele deve exibir algumas barras de progresso e dizer "avrdude done. Obrigado."

Se disser "assinatura de dispositivo inválida" e o jumper no seu programador estiver definido para 3,3v, tente defini-lo para 5v.

Depois de acendê-la, monte novamente sua lanterna e veja se funciona. Meu fez, mas o tempo está fora por algum ̶r̶e̶a̶s̶o̶n̶.̶ a longo pressiona precisam ser cerca de três segundos, em vez de ̶1̶.̶5̶.̶ Eu não sei se este estiver algo a ver com o Arduino ou porque Ive usado as configurações erradas das ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ Se você tiver alguma idéia, ̶ deixe-me saber nos ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Edit: eu consertei. (veja a etapa 1)

Recomendado: