Indholdsfortegnelse:

Blinkende brugerdefineret firmware til en BLF A6 lommelygte: 5 trin
Blinkende brugerdefineret firmware til en BLF A6 lommelygte: 5 trin

Video: Blinkende brugerdefineret firmware til en BLF A6 lommelygte: 5 trin

Video: Blinkende brugerdefineret firmware til en BLF A6 lommelygte: 5 trin
Video: Marlin Firmware - VScode PlatformIO Install - Build Basics 2024, November
Anonim
Blinkende brugerdefineret firmware til en BLF A6 lommelygte
Blinkende brugerdefineret firmware til en BLF A6 lommelygte

Jeg har for nylig fået en BLF A6. Det er meget rart, men jeg kan ikke lide nogen af standardtilstandsgrupperne, så jeg ændrede firmwaren til at bruge mine foretrukne lysstyrker. Informationen var svær at finde, så jeg lægger alt, hvad jeg lærte her, for mig selv og andre.

Forbrugsvarer

BLF A6 (det fungerer sandsynligvis med andre ATtiny -baserede lommelygter)

Pincet / tynd tang / lille saks / noget for at fortryde førerkortets låsering

Computer til at blinke med, helst køre en Linux -distribution

USB ASP programmer / Arduino / noget der kan lave AVR programmering (tilsyneladende anbefales USB ASP programmereren, men jeg brugte en Arduino)

SOIC8 -klip (det er muligt at undvære, men det er meget besværligt og anbefales slet ikke)

(valgfrit) Brødbræt og/eller jumpertråde for at gøre tilslutningen lettere

Trin 1: Download firmwaren

Firmwaren til BLF A6 (og mange andre lommelygter) er tilgængelig her. Forfatteren taler om det her. Du kan downloade den ved at køre:

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

i en terminal. (du skal muligvis installere bzr)

Bemærk: i en tidligere redigering af denne instruerbare brugte jeg i stedet "bzr branch lp: flashlight-firmware". Jeg har siden lært, at dette downloader en forældet version med forkerte værdier for off-time kondensatoren, hvilket gør, at knappen trykker ubehageligt længe. (tak til denne tråd på Reddit)

Den ønskede mappe er blf-a6-final/ToyKeeper/blf-a6. Den indeholder en kompileret.hex-fil, der er klar til at blinke (blf-a6.hex) og C-koden, som du kan ændre. (blf-a6.c) Hvis du vil blinke lager firmware, kan du springe det næste trin over og bare bruge blf-a6.hex. Nogle af de andre firmware i det lager vil sandsynligvis også fungere.

Trin 2: Rediger firmwaren

Åbn blf-a6.c i din foretrukne teksteditor eller IDE. De mest interessante linjer er tilstandsgrupperne mellem linje 116 og 131. De ser sådan ud:

// Tilstandsgruppe 1 #definer NUM_MODES1 7 // PWM -niveauer for det store kredsløb (FET eller Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // PWM -niveauer for det lille kredsløb (1x7135) # definere MODES1x1 2, 20, 110, 255, 255, 255, 0 // Min prøve: 6 = 0..6, 7 = 2..11, 8 = 8..21 (15..32) // Krono -prøve: 6 = 5..21, 7 = 17..32, 8 = 33..96 (50..78) // Manker2: 2 = 21, 3 = 39, 4 = 47,… 6? = 68 // PWM -hastighed for hver tilstand #define MODES_PWM1 FASE, HURTIG, HURTIG, HURTIG, HURTIG, HURTIG, FASE // Tilstandsgruppe 2 #define NUM_MODES2 4 #define MODESNx2 0, 0, 90, 255 #define MODES1x2 20, 230, 255, 0 #define MODES_PWM2 HURTIG, HURTIG, HURTIG, FASE

For hver gruppe er MODESN den PWM -værdi, der bruges til FET, og MODES1 er den PWM -værdi, der bruges til 7135 i hver tilstand. Tallet er mellem 0 og 255 og svarer til lysets lysstyrke. Mere information her. (rul ned til "Tilstandsregulering:") Jeg er ikke sikker på, hvad PWM -hastigheden nøjagtigt er. Hvis nogen ved det, så sig det til mig i kommentarerne. FET kan producere mere lys end 7135, men 7135 holder lysniveauet mere eller mindre det samme gennem batteriets levetid, mens FET bliver mørkere, når det løber tør for batteri.

Her kan du justere PWM -værdierne til at producere tilstande efter din smag. Du kan sikkert også ændre antallet af tilstande, men jeg har ikke prøvet det, da jeg ville have fire tilstande, hvilket tilfældigvis er tallet i den anden gruppe. Jeg ville have en mørkere måneskin -tilstand, så jeg satte den første til 0/1, og jeg synes, at turbotilstanden var lidt meningsløs, så jeg erstattede den med 137/255, svarende til tilstand seks i gruppen med syv tilstande. Du kan sandsynligvis ændre resten af koden, hvis det er nødvendigt, men jeg har ikke prøvet det.

Når du har den ønskede kode, skal du kompilere den til en.hex -fil. I det mindste har du brug for gcc-avr og avr-libc. Hvis du har problemer, skal du se på de andre afhængigheder i firmwaren. Depotet indeholder et build -script, men jeg kunne ikke få det til at fungere. I stedet downloadede jeg den gamle version med

bzr branch lp: lommelygte-firmware

og kopierede det gamle build -script (som jeg kunne komme i gang med) over det nye. Så løb jeg:

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

i blf-a6-mappen. (der burde være en bedre måde at gøre det på)../../bin/build.sh kalder scriptet, 13 angiver, at det bygger til en ATtiny13, og blf-a6 angiver, at det er til BLF A6. (duh) Det skulle fortælle dig, hvilke kommandoer det kører og give dig output. Min ser sådan ud:

avr -gcc -Wall -g -Os -mmcu = attiny13 -c -std = gnu99 -fgnu89 -inline -DATTINY = 13 -I.. -I../.. -I../../.. -fshort -enummer -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-advarsler -O ihex blf-a6.elf blf-a6.hex Program: 1022 bytes (99,8% fuld) Data: 13 bytes (20,3% fuld)

Kommandoerne er allerede optimeret til størrelse, så hvis den siger, at den er mere end 100% fuld, kan du prøve at kommentere

#define FULL_BIKING_STROBE

på linje 147 for at bruge den mindre minimale cykelstrobe. Hvis det stadig ikke passer, skal du sandsynligvis fjerne mere kode et eller andet sted. Når den er færdig med at kompilere, skal der være en fil kaldet blf-a6.hex i mappen. Dette er din kompilerede kode, klar til at blinke.

Trin 3: Adskil lommelygten

Skil lommelygten ad
Skil lommelygten ad
Skil lommelygten ad
Skil lommelygten ad
Skil lommelygten ad
Skil lommelygten ad

Skru pæreenden ud mod uret. Der er to skrueforbindelser her. Den tættere på pæreenden af lommelygten åbner reflektoren og LED'en, og den tættere på midten åbner driverbrættet. Du vil have den tættere på midten.

Inde skal du se batterifjederen og en fastholdelsesring med to huller i den. Sæt din pincet / tynde tang / saks i hullerne, og drej dem mod uret. Det er ret stift, og brug af to separate objekter vil sandsynligvis ikke give dig nok gearing. Jeg brugte saksen på en schweizisk hærkniv.

Når du har fået ringen ud, skal du frigøre driverbrættet. Det er stadig fastgjort med to ledninger, så vær forsigtig. De er snoet sammen, så drej brættet på en eller anden måde, indtil ledningerne løsner. Når du har nok spillerum, skal du vende brættet. Du vil have det, så chippen med "TINY13A" på er højere oppe og mere tilgængelig. Hvis det er på den forkerte side, skal du vende det den anden vej. Træk fjederen ind under siden. Dette vil midlertidigt holde det på plads og gøre det lettere at komme til chippen. Hvis du har problemer med dette, kan du sandsynligvis skrue den anden samling af og aflodde de to ledninger fra den anden side, så du kan fjerne brættet helt, men jeg har ikke prøvet det.

Trin 4: Tilslut blinkende hardware

Tilslut blinkende hardware
Tilslut blinkende hardware
Tilslut blinkende hardware
Tilslut blinkende hardware
Tilslut blinkende hardware
Tilslut blinkende hardware

Nu bruger du SOIC8 -klippet til at forbinde ATtiny13 -chippen og din programmør. Med mit SOIC8 -klip, hvis jeg har den røde ledning i venstre side af begge ender, svarer rækken af stifter tættere på mig på klipenden til rækken af stifter tættere på mig på konnektorenden, når stikket vender nedad. (se mit super kunstneriske diagram) Denne vejledning anbefaler, at du bruger en USB ASP V2.0 programmerer. Hvis du gør det, skal du forbinde det sådan:

  • Pin 1 på ATtiny13 til pin 5 på USB ASP (nulstil)
  • Pin 4 på ATtiny13 til pin 10 på USB ASP (jord)
  • Pin 5 på ATtiny13 til pin 1 på USB ASP (MOSI)
  • Pin 6 på ATtiny13 til pin 9 på USB ASP (MISO)
  • Pin 7 på ATtiny13 til pin 7 på USB ASP (SCK)
  • Pin 8 på ATtiny13 til pin 2 på USB ASP (VCC)

Hvis du ligesom mig bruger en Arduino, skal du forberede dig lidt mere. Følg trin nul og to i denne vejledning:

Åbn Arduino IDE, og kontroller, at din Arduino er forbundet til din computer. Find ISP -skitsen i Filer> Eksempler> 11. ArduinoISP> ArduinoISP, og upload den til din Arduino. Tilslut derefter ATtiny13 til det sådan:

  • Pin 1 på ATtiny13 til pin 10 på Arduino (nulstil)
  • Pin 4 på ATtiny13 til GND på Arduino (jorden)
  • Pin 5 på ATtiny13 til pin 11 på Arduino (MOSI)
  • Pin 6 på ATtiny13 til pin 12 på Arduino (MISO)
  • Pin 7 på ATtiny13 til pin 13 på Arduino (SCK)
  • Pin 8 på ATtiny13 til VCC / 5V / 3.3V på Arduino (enhver skal fungere, men 5V er mere pålidelig) (VCC)

Jeg har også installeret hardwarepakken, men det var sandsynligvis ikke nødvendigt. Hvis du er i tvivl, prøv det. Det vil ikke gøre nogen skade. Men lad være med at brænde bootloaderen, fordi den sandsynligvis vil tegne din lommelygte.

Trin 5: Flash det

For at flashe firmwaren skal du installere AVRDUDE. For at kontrollere, at det fungerer med min Arduino, kører jeg:

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

Hvis det virker, flytter jeg til en tom mappe et sted og kører:

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

For at lave en sikkerhedskopi af den eksisterende firmware. Og for at blinke det, fra mappen med den modificerede blf-a6.hex kører jeg:

avrdude -v -p attiny13 -c stk500v1 -P /dev /ttyUSB0 -b 19200 -u -Unflash: w: blf -a6.hex -Ulfuse: w: 0x75: m -Uhfuse: w: 0xFF: m

Af en eller anden grund er jeg nødt til at angive stk500v1 som programmør, og det fungerede ikke, medmindre jeg angav port og baudrate. Hvis du bruger en Arduino og er i tvivl, kan du prøve at afbryde din ATtiny13 fra Arduino og uploade en skitse i Arduino IDE ved hjælp af indstillingerne her. Det mislykkes, men det skal sige, hvilken kommando det bruger i konsolvinduet. Du kan kopiere attributterne til din AVRDUDE -kommando.

Hvis du bruger en USB ASP -programmør, skal du i stedet køre:

avrdude -v -p attiny13 -c usbasp -n

For at se om det virker og:

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

For at lave en sikkerhedskopi og:

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

For at blinke det.

-Uflash: w: blf-a6.hex refererer til den fil, den blinker. Erstat blf-a6.hex med dit filnavn, hvis det er anderledes.

-Ulfuse: w: 0x75: m og -Uhfuse: w: 0xFF: m er sikringerne. Din kan være anderledes, så tjek værdierne i lommelygte-firmware/bin/flash-tiny13-fuses.sh.

Hvis det giver en fejl uden for rækkevidde, betyder det, at billedet er for stort til at passe på chippen, og du skal fjerne noget af koden. Hvis det blinker med succes, skal det vise nogle statuslinjer og derefter sige "avrdude done. Tak."

Hvis der står "ugyldig enheds signatur", og jumperen på din programmør er indstillet til 3,3v, kan du prøve at indstille den til 5v.

Når du har blinket det, skal du samle din lommelygte igen og se, om den virker. Mine gjorde, men timingen er slukket for nogle ̶r̶e̶a̶s̶o̶n̶.̶ det lange presser nødt til at være cirka tre sekunder i stedet for 1.5. Jeg ved ikke, hvis udviklingsværdien er noget at gøre med Arduino, eller fordi jeg har brugt forkerte indstillinger ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ Hvis du har nogen idé, ̶ lad mig vide i ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Edit: Jeg fik rettet det. (se trin 1)

Anbefalede: