Как прошить фонарик для изменения режимов работы

Автору этого материала не нравились штатные режимы работы фонарика BLF A6. Тогда он решил перепрошить программную часть фонарика, установив свои режимы. Как оказалось, это не так просто, информации по прошивке и распиновки минимум и ему пришлось собирать ее по крупицам. А чтобы она не затерялась, он и решил помочь другим и оформить все в статью.

Итак, для работы понадобится следующее:
Фонарик BLF A6 (вероятно, это будет работать и с другими фонарями на базе ATtiny).
Пинцеты / тонкие плоскогубцы / маленькие ножницы.
Компьютер для прошивки, желательно с дистрибутивом Linux.
Программатор USB ASP / Arduino / что-то, что может делать программирование AVR (очевидно, программатор USB ASP лучше, но мастер использовал Arduino).
Быстродействующий Rail-to-Rail усилитель [SOIC-8] (можно обойтись без него, но очень неудобно).
Макетная плата и провода-перемычки для подключения.

Прошивка.
Прошивка для BLF A6 (и многих других фонарей) доступна здесь. Форум с обсуждениями доступен по этой ссылке.
Скачать прошивку можно запустив поиск «bzr branch lp:flashlight-firmware». Нужна папка flashlight-firmware / ToyKeeper / blf-a6. Она содержит скомпилированный файл. hex, готовый для прошивки (blf-a6.hex), и код C, который также можно изменить (blf-a6.c). Если вы хотите прошить стоковую прошивку, вы можете пропустить следующий шаг и просто использовать blf-a6.hex. Некоторые другие прошивки в этом хранилище, вероятно, тоже будут работать.

Изменить прошивку.
Внимание символы, дабы не исказить смысл, приводятся без перевода.
Откройте blf-a6.c в предпочитаемом вами текстовом редакторе или IDE. Самые интересные строки — это группы мод между строками 94 и 109. Они выглядят так:
// Mode group 1
#define NUM_MODES1 7
// PWM levels for the big circuit (FET or Nx7135)
#define MODESNx1 0,0,0,7,56,137,255
// PWM levels for the small circuit (1×7135)
#define MODES1x1 3,20,110,255,255,255,0
// My sample: 6=0..6, 7=2..11, 8=8..21(15..32)
// Krono sample: 6=5..21, 7=17..32, 8=33..96(50..78)
// Manker2: 2=21, 3=39, 4=47, … 6?=68
// PWM speed for each mode
#define MODES_PWM1 PHASE,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 FAST,FAST,FAST,PHASE
Для каждой группы MODESN — это значение ШИМ, используемое для FET, а MODES1 — это значение ШИМ, используемое для 7135 в каждом режиме. Число находится в диапазоне от 0 до 255 и соответствует яркости света. Больше информации
здесь. (прокрутите вниз до «Регулирование режима:») Мастер не уверен, какая именно скорость ШИМ. Если кто знает, подскажите в комментариях. Полевой транзистор может производить больше света, чем 7135, но 7135 сохраняет уровень освещенности более или менее одинаковым на протяжении всего срока службы батареи, в то время как при использовании полевого транзистора свет тускнеет, когда заканчивается заряд батареи.

Здесь мы можем настроить значения ШИМ для создания режимов по своему вкусу. Также можно изменить количество режимов, но мастер не делал этого, потому что ему нужно четыре режима, а это число во второй группе. Он хотел более темный режим лунного света, поэтому и установил первый на 0/1. Также он считает турбо-режим немного бессмысленным, поэтому я заменил его на 137/255, что эквивалентно шестому режиму в группе из семи режимов.

Когда у вас есть нужный код, вы должны скомпилировать его в файл .hex. По крайней мере, вам нужны gcc-avr и avr-libc. Если у вас есть проблемы, посмотрите на другие зависимости в файле readme. Репозиторий включает в себя скрипт сборки, поэтому все, что вам нужно сделать, это запустить:
../../bin/build.sh 13 blf-a6
в папке blf-a6. ../../Bin/build.sh находится скрипт. 13 указывает, что он для ATtiny13, а blf-a6 указывает, что он для BLF A6.
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.c
avr-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
Program: 1022 bytes (99.8% Full)
dаta: 13 bytes (20.3% Full)
Команды уже оптимизированы по размеру, поэтому, если написано, что они заполнены более чем на 100%, попробуйте удалить
#define FULL_BIKING_STROBE

В строке 125 прописан малый велосипедный стробоскоп. Если этого будет мало, то придется еще что-то урезать.
Когда компиляция будет завершена, в папке должен быть файл с именем blf-a6.hex. Это скомпилированный код, готовый для прошивки.

Разборка фонарика.
Открутите фару фонарика. Здесь есть два винтовых соединения. Тот, что ближе к корпусу фонарика, фиксирует отражатель и светодиод, а тот, что ближе к середине, фиксирует плату. Нам нужен средний.

Внутри вы увидите стопорное кольцо с пружиной и двумя отверстиями по краям. Вставьте пинцет / тонкие плоскогубцы / ножницы в отверстия и поверните их против часовой стрелки.

Как только кольцо будет снято, у вас будет доступ к плате. Она все еще прикреплена двумя проводами, так что будьте осторожны. Они скручены вместе, поэтому вращайте плату, пока провода не ослабнут. Затем переверните доску. Нужно чтобы микросхема с надписью «TINY13A» была более доступной.

Если провода короткие и так не получится, то нужно выпаять плату.

Подключение.
Теперь нужно подготовить плату к прошивке.
Мастер использует SOIC8 для соединения чипа ATtiny13 и программатора.

Смотрите фото, как мастер выполняет соединение. Обратите внимание на красную линию во втором рисунке.

Если вы будете использовать программатор USB ASP V2.0, то подключать его нужно так:
Контакт 1 на ATtiny13 — контакт 5 на USB ASP (reset)
Контакт 4 на ATtiny13 — контакт 10 на USB ASP (земля)
Контакт 5 на ATtiny13 — контакт 1 на USB ASP (MOSI)
Контакт 6 на ATtiny13 — контакт 9 на USB ASP (MISO)
Контакт 7 на ATtiny13 — контакт 7 на USB ASP (SCK)
Контакт 8 на ATtiny13 — контакт 2 на USB ASP (VCC)

Если, вы используете Arduino, как и мастер, то выполните следующие шаги:
Откройте Arduino IDE и убедитесь, что ваш Arduino подключен к компьютеру. Найдите эскиз ISP в File>Examples>11.ArduinoISP>ArduinoISP и загрузите его на Arduino. Затем подключите ATtiny13 к нему следующим образом:
Контакт 1 на ATtiny13 — контакт 10 на Arduino (reset)
Контакт 4 на ATtiny13 — GND на Arduino (земля)
Контакт 5 на ATtiny13 — контакт 11 на Arduino (MOSI)
Контакт 6 на ATtiny13 — контакт 12 на Arduino (MISO)
Контакт 7 на ATtiny13 — контакт 13 на Arduino (SCK)
Контакт 8 на ATtiny13 — VCC / 5V или 3.3V на Arduino ( 5V предпочтительней)

Прошивка.
Шаг 5: прошить его
Для прошивки необходимо установить AVRDUDE. Чтобы проверить, работает ли это с Arduino, мастер пишет команду:
avrdude -v -p attiny13 -c stk500v1 -P / dev / ttyUSB0 -b 19200 -n
Если это работает, нужно перейти в пустую папку и прописать:
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
Сделать резервную копию существующей прошивки. Чтобы прошить, из папки с измененным blf-a6.hex запускает:
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
Нужно указать stk500v1 в качестве программатора, и указать порт и скорость передачи данных. Если вы используете Arduino и сомневаетесь, попробуйте отключить ATtiny13 от Arduino и загрузить эскиз в IDE Arduino, используя эти настройки. Это не пройдет, но вы узнаете, какая команда используется в окне консоли. Дальше можно скопировать атрибуты в команду AVRDUDE.

Если вы используете USB ASP программатор, вместо этого запустите:
avrdude -v -p attiny13 -c usbasp -n
Чтобы увидеть, работает ли это:
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
Сделать резервную копию:
avrdude -v -p attiny13 -c usbasp -u -Uflash: w: blf-a6.hex -Ulfuse: w: 0x75: m -Uhfuse: w: 0xFF: m
Чтобы прошить:
-Uflash: w: blf-a6.hex. Замените blf-a6.hex на имя вашего файла, если оно другое.
-Ulfuse: w: 0x75: m и -Uhfuse: w: 0xFF: m
Если выдает ошибку, это означает, что изображение файл слишком большой, чтобы поместиться на чипе, и вам придется удалить часть кода. Если все нормально, должны отображаться некоторые индикаторы выполнения, а затем слова «avrdude done. Thank you.».
После того, как вы прошили чип, соберите фонарик и посмотрите, работает ли он.

Вопростема автоматически публикуется в соц. сети сайта — следите и там за ответами:

Источник (Source)

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Источник: usamodelkina.ru

Понравилась статья? Поделиться с друзьями:
автомобильные новости
Добавить комментарий