Inhoudsopgave:

Aangepaste firmware flashen naar een BLF A6-zaklamp - Ajarnpa
Aangepaste firmware flashen naar een BLF A6-zaklamp - Ajarnpa

Video: Aangepaste firmware flashen naar een BLF A6-zaklamp - Ajarnpa

Video: Aangepaste firmware flashen naar een BLF A6-zaklamp - Ajarnpa
Video: MIB2 firmware update tutorial (VW Audi Skoda Seat download links) 2024, November
Anonim
Aangepaste firmware flashen naar een BLF A6-zaklamp
Aangepaste firmware flashen naar een BLF A6-zaklamp

Ik heb sinds kort een BLF A6. Het is erg mooi, maar ik hou niet van een van de standaardmodusgroepen, dus ik heb de firmware aangepast om mijn voorkeurshelderheden te gebruiken. De informatie was moeilijk te vinden, dus ik plaats alles wat ik heb geleerd hier voor mezelf en anderen.

Benodigdheden

BLF A6 (het zal waarschijnlijk werken met andere op ATtiny gebaseerde zaklampen)

Pincet / dunne tang / kleine schaar / iets om de borgring van het bestuurdersbord los te maken

Computer om mee te flashen, bij voorkeur met een Linux-distributie

USB ASP-programmeur / Arduino / iets dat AVR-programmering kan doen (blijkbaar wordt de USB ASP-programmeur aanbevolen, maar ik gebruikte een Arduino)

SOIC8-clip (het is mogelijk om zonder te doen, maar het is erg onhandig en helemaal niet aanbevolen)

(optioneel) Breadboard en/of jumperdraden om het aansluiten te vergemakkelijken

Stap 1: Download de firmware

De firmware voor de BLF A6 (en vele andere zaklampen) is hier beschikbaar. De auteur vertelt er hier over. Je kunt het downloaden door het volgende uit te voeren:

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

in een terminal. (misschien moet je bzr installeren)

Opmerking: in een eerdere bewerking van deze Instructable heb ik in plaats daarvan "bzr branch lp:flashlight-firmware" gebruikt. Ik heb sindsdien geleerd dat dit een verouderde versie downloadt met verkeerde waarden voor de off-time condensator, waardoor de knop onaangenaam lang ingedrukt wordt. (dankzij dit draadje op Reddit)

De gewenste map is blf-a6-final/ToyKeeper/blf-a6. Het bevat een gecompileerd.hex-bestand dat klaar is om te flashen (blf-a6.hex) en de C-code die u kunt wijzigen. (blf-a6.c) Als u de standaardfirmware wilt flashen, kunt u de volgende stap overslaan en gewoon blf-a6.hex gebruiken. Sommige van de andere firmware in die repository zullen waarschijnlijk ook werken.

Stap 2: wijzig de firmware

Open blf-a6.c in uw favoriete teksteditor of IDE. De meest interessante regels zijn de modusgroepen tussen regel 116 en 131. Ze zien er als volgt uit:

// Modusgroep 1#define NUM_MODES1 7 // PWM-niveaus voor het grote circuit (FET of Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // PWM-niveaus voor het kleine circuit (1x7135) # definieer MODES1x1 2, 20, 110, 255, 255, 255, 0 // Mijn voorbeeld: 6=0..6, 7=2..11, 8=8..21 (15..32) // Krono-voorbeeld: 6=5..21, 7=17..32, 8=33..96(50..78) // Manker2: 2=21, 3=39, 4=47, … 6?=68 // PWM-snelheid voor elke modus #define MODES_PWM1 FASE, FAST, FAST, FAST, FAST, FAST, PHASE // Mode group 2 #define NUM_MODES2 4 #define MODESNx2 0, 0, 90, 255 #define MODES1x2 20, 230, 255, 0 #define MODES_PWM2 SNEL, SNEL, SNEL, FASE

Voor elke groep is MODESN de PWM-waarde die wordt gebruikt voor de FET en MODES1 is de PWM-waarde die wordt gebruikt voor de 7135 in elke modus. Het getal ligt tussen 0 en 255 en komt overeen met de helderheid van het licht. Meer informatie hier. (scroll naar beneden naar "Mode-regeling:") Ik weet niet zeker wat PWM-snelheid precies is. Als iemand het weet, vertel het me dan in de comments. De FET kan meer licht produceren dan de 7135, maar de 7135 houdt het lichtniveau min of meer hetzelfde gedurende de levensduur van de batterij, terwijl de FET donkerder wordt naarmate de batterij leeg raakt.

Hier kunt u de PWM-waarden aanpassen om modi naar uw wens te produceren. Je kunt waarschijnlijk ook het aantal modi wijzigen, maar ik heb het niet geprobeerd omdat ik vier modi wilde, wat toevallig het nummer in de tweede groep is. Ik wilde een donkerdere maanlichtmodus, dus ik zette de eerste op 0/1, en ik vind de turbomodus een beetje zinloos, dus heb ik hem vervangen door 137/255, het equivalent van modus zes in de groep met zeven modi. U kunt de rest van de code waarschijnlijk indien nodig wijzigen, maar ik heb het niet geprobeerd.

Als je de gewenste code hebt, moet je deze compileren naar een.hex-bestand. Je hebt op zijn minst gcc-avr en avr-libc nodig. Als je problemen hebt, kijk dan naar de andere afhankelijkheden in de firmware readme. De repository bevat een buildscript, maar ik kreeg het niet werkend. In plaats daarvan heb ik de oude versie gedownload met

bzr branch lp:zaklamp-firmware

en kopieerde het oude build-script (dat ik aan het werk kon) over het nieuwe. Toen liep ik:

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

in de blf-a6-map. (er zou een betere manier moeten zijn om dat te doen) De../../bin/build.sh roept het script aan, de 13 specificeert dat het aan het bouwen is voor een ATtiny13 en de blf-a6 specificeert dat het voor de BLF A6 is. (duh) Het zou je moeten vertellen welke commando's het uitvoert en je de output geven. De mijne ziet er zo uit:

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 bytes (99,8% vol) Gegevens: 13 bytes (20,3% vol)

De commando's zijn al geoptimaliseerd voor grootte, dus als het zegt dat het meer dan 100% vol is, probeer dan commentaar te geven

#define FULL_BIKING_STROBE

op lijn 147 om de kleinere minimale fietsflitser te gebruiken. Als het nog steeds niet past, moet je waarschijnlijk ergens meer code verwijderen. Als het compileren klaar is, zou er een bestand met de naam blf-a6.hex in de map moeten staan. Dit is je gecompileerde code, klaar om te flashen.

Stap 3: Demonteer de zaklamp

Demonteer de zaklamp
Demonteer de zaklamp
Demonteer de zaklamp
Demonteer de zaklamp
Demonteer de zaklamp
Demonteer de zaklamp

Schroef het uiteinde van de lamp tegen de klok in los. Er zijn hier twee schroefverbindingen. Degene die zich dichter bij het gloeilampuiteinde van de zaklamp bevindt, opent de reflector en LED, en degene die dichter bij het midden is, opent het bestuurdersbord. Je wilt die dichter bij het midden.

Binnenin zou je de batterijveer en een borgring met twee gaten erin moeten zien. Steek je pincet / dunne tang / schaar in de gaatjes en draai ze tegen de klok in. Het is behoorlijk stijf en het gebruik van twee afzonderlijke objecten zal je waarschijnlijk niet genoeg hefboomwerking geven. Ik gebruikte de schaar op een Zwitsers zakmes.

Zodra je de ring eruit hebt, maak je het bestuurdersbord vrij. Het zit nog steeds vast met twee draden, dus wees voorzichtig. Ze zijn in elkaar gedraaid, dus draai het bord op de een of andere manier totdat de draden loskomen. Als je genoeg speelruimte hebt, draai je het bord om. Je wilt dat de chip met "TINY13A" erop hoger staat en beter toegankelijk is. Als het aan de verkeerde kant is, draai het dan de andere kant op. Stop de veer onder de zijkant. Dit houdt het tijdelijk op zijn plaats en maakt het gemakkelijker om bij de chip te komen. Als je hier problemen mee hebt, kun je waarschijnlijk de andere verbinding losschroeven en de twee draden van de andere kant losmaken, zodat je het bord volledig kunt verwijderen, maar ik heb het niet geprobeerd.

Stap 4: sluit knipperende hardware aan

Sluit knipperende hardware aan
Sluit knipperende hardware aan
Sluit knipperende hardware aan
Sluit knipperende hardware aan
Sluit knipperende hardware aan
Sluit knipperende hardware aan

Nu gebruik je de SOIC8 clip om de ATtiny13 chip en je programmer aan te sluiten. Met mijn SOIC8-clip, als ik de rode draad aan de linkerkant van beide uiteinden heb, komt de rij pinnen die het dichtst bij me is aan het uiteinde van de clip overeen met de rij pinnen die het dichtst bij me is aan het uiteinde van de connector, wanneer de connector naar beneden is gericht. (zie mijn superartistieke diagram) Deze gids raadt je aan een USB ASP V2.0 programmer te gebruiken. Als je dat doet, sluit je het als volgt aan:

  • Pin 1 op de ATtiny13 naar pin 5 op de USB ASP (reset)
  • Pin 4 op de ATtiny13 naar pin 10 op de USB ASP (aarde)
  • Pin 5 op de ATtiny13 naar pin 1 op de USB ASP (MOSI)
  • Pin 6 op de ATtiny13 naar pin 9 op de USB ASP (MISO)
  • Pin 7 op de ATtiny13 naar pin 7 op de USB ASP (SCK)
  • Pin 8 op de ATtiny13 naar pin 2 op de USB ASP (VCC)

Als je, zoals ik, een Arduino gebruikt, moet je wat meer voorbereiding doen. Volg stap nul en twee van deze handleiding:

Open de Arduino IDE en zorg ervoor dat uw Arduino is aangesloten op uw computer. Zoek de ISP-schets in Bestand>Voorbeelden>11. ArduinoISP>ArduinoISP en upload deze naar uw Arduino. Sluit de ATtiny13 er dan als volgt op aan:

  • Pin 1 op de ATtiny13 naar pin 10 op de Arduino (reset)
  • Pin 4 op de ATtiny13 naar GND op de Arduino (aarde)
  • Pin 5 op de ATtiny13 naar pin 11 op de Arduino (MOSI)
  • Pin 6 op de ATtiny13 naar pin 12 op de Arduino (MISO)
  • Pin 7 op de ATtiny13 naar pin 13 op de Arduino (SCK)
  • Pin 8 op de ATtiny13 naar VCC / 5V / 3.3V op de Arduino (alles zou moeten werken, maar 5V is betrouwbaarder) (VCC)

Ik heb het hardwarepakket ook geïnstalleerd, maar dat was waarschijnlijk niet nodig. Probeer het bij twijfel. Het kan geen kwaad. Maar verbrand de bootloader niet, omdat deze waarschijnlijk je zaklamp zal blokkeren.

Stap 5: Flash het

Om de firmware te flashen, moet u AVRDUDE installeren. Om te controleren of het werkt met mijn Arduino, voer ik uit:

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

Als het werkt, ga ik ergens naar een lege map en voer het volgende uit:

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

Om een back-up te maken van de bestaande firmware. En om het te flashen, vanuit de map met de gewijzigde blf-a6.hex die ik uitvoer:

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

Om de een of andere reden moet ik stk500v1 specificeren als de programmeur, en het werkte niet tenzij ik de poort en de baudrate specificeerde. Als je een Arduino gebruikt en twijfelt, probeer dan je ATtiny13 los te koppelen van de Arduino en een schets te uploaden in de Arduino IDE met behulp van de instellingen hier. Het zal mislukken, maar het zou moeten zeggen welk commando het gebruikt in het consolevenster. U kunt de attributen naar uw AVRDUDE-opdracht kopiëren.

Als u een USB ASP-programmeur gebruikt, voert u in plaats daarvan het volgende uit:

avrdude -v -p attiny13 -c usbasp -n

Om te zien of het werkt en:

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

Om een back-up te maken en:

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

Om het te flashen.

-Uflash:w:blf-a6.hex verwijst naar het bestand dat knippert. Vervang blf-a6.hex door uw bestandsnaam als deze anders is.

-Ulfuse:w:0x75:m en -Uhfuse:w:0xFF:m zijn de zekeringen. De jouwe kan anders zijn, dus controleer de waarden in flashlight-firmware/bin/flash-tiny13-fuses.sh.

Als het een fout buiten het bereik geeft, betekent dit dat de afbeelding te groot is om op de chip te passen en dat u een deel van de code moet verwijderen. Als het met succes knippert, zou het enkele voortgangsbalken moeten weergeven en vervolgens "avrdude done. Thank you" zeggen.

Als er "ongeldige apparaathandtekening" staat en de jumper op uw programmer is ingesteld op 3,3v, probeer deze dan in te stellen op 5v.

Nadat je het hebt geflitst, zet je je zaklamp weer in elkaar en kijk je of het werkt. Mine deed, maar de timing is uitgeschakeld voor een aantal ̶r̶e̶a̶s̶o̶n̶.̶ de lange persen moeten worden ongeveer drie seconden in plaats van 1.5. Ik weet niet of het is iets te maken met de Arduino of omdat ik heb gebruikt de verkeerde instellingen ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ Als je enig idee, ̶ laat het me weten in het ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Edit: ik heb het aangepast. (zie stap 1)

Aanbevolen: