Свой LED драйвер или как избавится от режима SOS
- Цена: $14,39
- Перейти в магазин
Здравствуйте коллеги. (ссылка не на того продавца, а просто первый попавшийся похожий!!!!!!)
Обзор не про фонарь, а про переделку!!!
Этот фонарь я получил больше года назад, расстроил он меня сильно.
Под светодиодом дыра, ток едва 1А потреблял, а заказал фонарь побольше — думал помощнее будет. Нечего о нем рассказать.(хотя аккумулятор честные 5 ампер/час выдает — емкость замерил)
В общем забросил и не пользовался. Давно у меня мысль была изучать микроконтроллеры, и вот пришел черед до апгрэйда по своему вкусу.
SOS и моргание меня раздражает, 3 режима для меня мало 5 много, 4 в самый раз
Берем самый распространенный/дешевый МК attiny13 (у меня их навалом осталось от эксперементов)))
И любой N-Channel Logic Level MOSFET с дохлой материнки
Обязательно проверяем по даташиту чтоб он был Logic — это означает что он управляется 3-5 вольтами на управляющем электроде. у меня это был FDB7045L.
конденсатор можно не ставить, я поставил просто чтобы былО, типа избавить МК от помех.
Проблему дыры под светодиодом решил так — приклеил к звезде массивную гайку и гайку вклеил в корпус, теперь корпус хорошо прогревается
все внутренности в фонаре выкинул, резистор не ставил потому что при 100% мощности и заряженном аккумуляторе фонарь потребляет как раз 3А, видимо из-за длинных проводов. Так всё работает уже несколько месяцев, перегревов нет. И этот фонарь стал самым удобным.
Режим работы:
4 режима, переключается от максимума к минимуму покругу
(параметры мощности вывел эксперементально, удобные для себя)
самый минимум 4 %
средний режим 14 %
половина яркости 45 %
самый яркий режим 99 %
Алгоритм переключения.
Если включили и держим дольше секунды не выключая то при следующем включении режим мощности не меняем.
Если включили и выключили не дождавшись 1 секунды то при следующем включении меняем режим.
Для меня так удобно если постоянно пользуешься одним режимом не нужно постоянно перещелкивать.
частота ШИМ 9600000 / 8 / 256 = 4,6 килогерца моргания не видно
файл прошивки, фьюзы не трогаем
cloud.mail.ru/public/2f015c75c281/%D0%A4%D0%BE%D0%BD%D0%B0%D1%80%D1%8C%20XML-T6
видео как работает всё это
www.youtube.com/watch?feature=player_detailpage&v=TTzWQvQfWvs
естественно можно использовать и SMD компоненты, но у меня было внутри полно места. Всё естественно изолируем бумажным скотчем, не беспокоимся ничего не греется.
Обзор не про фонарь, а про переделку!!!
Этот фонарь я получил больше года назад, расстроил он меня сильно.
Под светодиодом дыра, ток едва 1А потреблял, а заказал фонарь побольше — думал помощнее будет. Нечего о нем рассказать.(хотя аккумулятор честные 5 ампер/час выдает — емкость замерил)
В общем забросил и не пользовался. Давно у меня мысль была изучать микроконтроллеры, и вот пришел черед до апгрэйда по своему вкусу.
SOS и моргание меня раздражает, 3 режима для меня мало 5 много, 4 в самый раз
Берем самый распространенный/дешевый МК attiny13 (у меня их навалом осталось от эксперементов)))
И любой N-Channel Logic Level MOSFET с дохлой материнки
Обязательно проверяем по даташиту чтоб он был Logic — это означает что он управляется 3-5 вольтами на управляющем электроде. у меня это был FDB7045L.
схема
конденсатор можно не ставить, я поставил просто чтобы былО, типа избавить МК от помех.
Проблему дыры под светодиодом решил так — приклеил к звезде массивную гайку и гайку вклеил в корпус, теперь корпус хорошо прогревается
все внутренности в фонаре выкинул, резистор не ставил потому что при 100% мощности и заряженном аккумуляторе фонарь потребляет как раз 3А, видимо из-за длинных проводов. Так всё работает уже несколько месяцев, перегревов нет. И этот фонарь стал самым удобным.
Режим работы:
4 режима, переключается от максимума к минимуму покругу
(параметры мощности вывел эксперементально, удобные для себя)
самый минимум 4 %
средний режим 14 %
половина яркости 45 %
самый яркий режим 99 %
Алгоритм переключения.
Если включили и держим дольше секунды не выключая то при следующем включении режим мощности не меняем.
Если включили и выключили не дождавшись 1 секунды то при следующем включении меняем режим.
Для меня так удобно если постоянно пользуешься одним режимом не нужно постоянно перещелкивать.
частота ШИМ 9600000 / 8 / 256 = 4,6 килогерца моргания не видно
файл прошивки, фьюзы не трогаем
(если микроконтроллер новый — то там поумолчанию установлен фьюз CKDIV8 — его нужно снять, это первоначальный делитель частоты генератора на 8. Если его не снять то частота ШИМа будет меньше в 8 раз)
cloud.mail.ru/public/2f015c75c281/%D0%A4%D0%BE%D0%BD%D0%B0%D1%80%D1%8C%20XML-T6
Программа на Си
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
//#define TIMER_FREQUENCY 9600000
// написал программу Ilya 22229999@mail.ru
unsigned int t=0;
#define PORT PORTB
#define PIN PINB
#define LED0 PB0
#define LED1 PB1
int i;
unsigned char u;
signed char w;
unsigned char eeprom_u EEMEM; // определяем переменную в EEPROM
unsigned char eeprom_w EEMEM; // определяем переменную в EEPROM
void vkluchLED(t)
{
PORT |= _BV(t);
}
void vIkluchLED(t)
{
PORT &= ~_BV(t);
}
void mig ()
{
vkluchLED(LED1);
_delay_ms(150);
vIkluchLED(LED1); // (зажигаем и гасим светодиод).
};
int main(void)
{
DDRB |= ((1 << LED0)|(1 << LED1));// выходы
/*
Это делается с помощью битов CS02 CS01 CS00 регистра TCCR0B.
CS02 | CS01 | CS00
0 | 0 | 0 — таймер/счетчик остановлен
0 | 0 | 1 — нет предделителя *
0 | 1 | 0 — предделитель 8 **
0 | 1 | 1 — предделитель 64 **
1 | 0 | 0 — предделитель 256 **
1 | 0 | 1 — предделитель 1024 **
*/
TCCR0A = 0b11000001; // управление выходом, ШИМ
TCCR0B = 0b00000010; // делитель N = 8
OCR0A = 255; // Значение регистра определяет яркость светодиода
u = eeprom_read_word(&eeprom_u); // считываем байт из EEPROM и помещаем его в
w = eeprom_read_word(&eeprom_w); // считываем байт из EEPROM и помещаем его в
if (w<1) // это для самого первого включения после программирования, прописывает 4 режим
{ eeprom_write_word(&eeprom_w, 4);
w = eeprom_read_word(&eeprom_w); // считываем байт из EEPROM и помещаем его в
}
if (u==1){
w--;
if (w<1){w=4;}
eeprom_write_word(&eeprom_w, w);
u=0;
}
u=1;
eeprom_write_word(&eeprom_u, 1); //при включении записываем ноль
while(1)
{
// w — текущая мощность от 1 до 4
if(w==1){ OCR0A=245; } // самый минимум 11 из 256 4 %
if(w==2){ OCR0A=220; } // четверть яркости 36 из 256 14 %
if(w==3){ OCR0A=140; } // половина яркости 116 из 256 45 %
if(w==4){ OCR0A=1; } // самый яркий режим 255 из 256 99 %
for(i=255;i>=0;i--) //это формирование задержки после которой режим не переключается после повторного включения
{
_delay_ms(60); }
mig(); // это временная индикация для отладки
if (u==1){ u=0; //здесь прописываем в память что при следующем включении изменять режим не нужно
eeprom_write_word(&eeprom_u, 0); //при включении записываем ноль
}
}}
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
//#define TIMER_FREQUENCY 9600000
// написал программу Ilya 22229999@mail.ru
unsigned int t=0;
#define PORT PORTB
#define PIN PINB
#define LED0 PB0
#define LED1 PB1
int i;
unsigned char u;
signed char w;
unsigned char eeprom_u EEMEM; // определяем переменную в EEPROM
unsigned char eeprom_w EEMEM; // определяем переменную в EEPROM
void vkluchLED(t)
{
PORT |= _BV(t);
}
void vIkluchLED(t)
{
PORT &= ~_BV(t);
}
void mig ()
{
vkluchLED(LED1);
_delay_ms(150);
vIkluchLED(LED1); // (зажигаем и гасим светодиод).
};
int main(void)
{
DDRB |= ((1 << LED0)|(1 << LED1));// выходы
/*
Это делается с помощью битов CS02 CS01 CS00 регистра TCCR0B.
CS02 | CS01 | CS00
0 | 0 | 0 — таймер/счетчик остановлен
0 | 0 | 1 — нет предделителя *
0 | 1 | 0 — предделитель 8 **
0 | 1 | 1 — предделитель 64 **
1 | 0 | 0 — предделитель 256 **
1 | 0 | 1 — предделитель 1024 **
*/
TCCR0A = 0b11000001; // управление выходом, ШИМ
TCCR0B = 0b00000010; // делитель N = 8
OCR0A = 255; // Значение регистра определяет яркость светодиода
u = eeprom_read_word(&eeprom_u); // считываем байт из EEPROM и помещаем его в
w = eeprom_read_word(&eeprom_w); // считываем байт из EEPROM и помещаем его в
if (w<1) // это для самого первого включения после программирования, прописывает 4 режим
{ eeprom_write_word(&eeprom_w, 4);
w = eeprom_read_word(&eeprom_w); // считываем байт из EEPROM и помещаем его в
}
if (u==1){
w--;
if (w<1){w=4;}
eeprom_write_word(&eeprom_w, w);
u=0;
}
u=1;
eeprom_write_word(&eeprom_u, 1); //при включении записываем ноль
while(1)
{
// w — текущая мощность от 1 до 4
if(w==1){ OCR0A=245; } // самый минимум 11 из 256 4 %
if(w==2){ OCR0A=220; } // четверть яркости 36 из 256 14 %
if(w==3){ OCR0A=140; } // половина яркости 116 из 256 45 %
if(w==4){ OCR0A=1; } // самый яркий режим 255 из 256 99 %
for(i=255;i>=0;i--) //это формирование задержки после которой режим не переключается после повторного включения
{
_delay_ms(60); }
mig(); // это временная индикация для отладки
if (u==1){ u=0; //здесь прописываем в память что при следующем включении изменять режим не нужно
eeprom_write_word(&eeprom_u, 0); //при включении записываем ноль
}
}}
видео как работает всё это
www.youtube.com/watch?feature=player_detailpage&v=TTzWQvQfWvs
естественно можно использовать и SMD компоненты, но у меня было внутри полно места. Всё естественно изолируем бумажным скотчем, не беспокоимся ничего не греется.
Самые обсуждаемые обзоры
+72 |
2107
159
|
+38 |
2308
65
|
«Это видео c ограниченным доступом»
Не покупной свой!
Но
А
И потому вопрос где конкретно приобрести товар «переделка», в каком «зарубежном интернет-магазине», остался открытым.
Этот вариант стоит 1-2 доллара и полчаса времени, МК можно купить в любом городе.
Желающим потратится и самое главное подождать 1-2 месяца нужно поискать другие обзоры.
кнопка выключения отключает и светодиод и микроконтроллер, так что никакой дежурки нет
2. Компенсировать яркость можно переходом на режим большей мощности
3. Стабилизация тока сьест приличную часть заряда аккумулятора
4. Контроль напряжения штука хорошая но не всё сразу и схема усложниться, как минимум нужен будет подстроечник и наладка(не все смогут правильно выставить делитель напряжения), а места в фонарях мало. И для меня это не очень важно.
я всё время держу аккумуляторы заряженными.
2. это неудобно, учитывая скачкообразное изменение яркости при переключении.
3. непонятно откуда такие выводы, ведь ток можно стабилизировать той же ШИМ, потери на шунте не существенны, учитывая что сейчас рассеивают провода.
4. нужен просто делитель из двух резисторов, достаточно поделить на 4, т.к. внутренний ИОН имеет 1,1 В, что позволит контролировать до 4,4 В. И ничего не придется подстраивать, просто выбрать сопротивления в отношении 3 к 1.
Кому верить?
Даже дорогие фонари порой хотелось бы изменить под себя
Мне нравятся линзованные фонари, чтоб можно было посветить под ноги и в помещении.
А эти конвои слепят точкой, был у меня такой
Я ни кому не навязываю своего мнения.
Во-первых,
u=0;
в условном блоке явно лишее. Все равно на выходе из условия мы безусловно приказываем u=1;
Во-вторых, нужно ли в бесконечном цикле постоянно задавать яркость и формировать задержку? По-моему можно один раз задать яркость, один раз подождать, потом сделать u=0 и крутить дальше пустой бесконечный цикл.
я быстренько на макетке запрограмировал, заработало, поставил в фонарь для обкатки
да так и оставил (цыкл оставил чтоб можно было наблюдать задержку, потому что долго играл с частотой камня и делителем ШИМа)
вылизывание совершенно ничего не изменит, даже потребление не изменится
я прошивку сюда выложил чтоб желающие могли подправить
1. Код страшный, название функций жесть, использование «магических чисел»
2. Светодиод подключаете напрямую к питанию? ШТААА? Вот прочтите
3. Контакты кнопки не подгорели?
4. Правда все работает несколько месяцев?
2. я у себя замерил, получилось 2,8 -3,2 А меня устраивает — зато КПД 100% на 100% мощности обычно долго негоняю
3. кнопка работает — что ей будет, а вот пружинка грелась ))) она стальная
я её дополнительно обмотал проводом
4. Всё работает
2. КПД чего? У светодиода не более 30% на излучение идет
3. Ей плохо будет при частом включении током 3А
4. Ну оно работает, но так действительно не стоит делать, люди могут повторить и что выйдет у них — неизвестно
цепь состоит не только из одного светодиода, есть ещё провода, транзистор и внутреннее сопротивление источника питания, которое и ограничивает ток
3. будет плохо поставьте рубильник помощнее
4. конечно не стоит делать, если слабо представляешь что делаешь, лучше купить очередную китайщину и чесать репу
Почему тогда во всех нормальных фонарях не подключают светодиод к аккумулятору напрямую? У вас в голове такая каша видимо, вы посчитайте указанные сопротивления, 1 Ом наберете?
Идея — хорошая, исполнение — отвратное. У Вас получился аналог автомобиля ВАЗ: ездит — да и фиг с ним.
в китайских драйверах???
AMC7135 который стоит в каждом китайском драйвере
это ЛИНЕЙНЫЙ стабилизатор
цель сделать копеечное рабочее устройство которое можно собрать на коленке
Вот и «инженеры» АвтоВАЗа так же работают
тоже похвастаться?
Вот, например, кусок разводки одной из плат стенда для испытаний ДВС, предсерийный вариант. На «снимке» сетевой контроллер W5200.
Всем невнимательным предлагаю заново прочитать название обзора
оно звучит Свой LED драйвер или как избавится от режима SOS
мне нужен был именно такой драйвер, и я его сделал
а контроль напряжения, если понадобится сделаю
Там коллективными усилиями сделана как раз для мелкой тиньки — с разными ништяками. Просто чтобы (если обзор не удалят за оффтоп) была референсная ссылка для будущих искателей.
(и дальше по параллельным темам)
Прочитал внимательно Ваш обзор и все комменты, ваше решение конечно не идеально, НО оно оптимально для вашего варианта, а это как раз то чего всегда не хватает «теоретикам».
Ну и я конечно тоже кину пару-тройку советов, как же Мы да со свиным-то рылом! :-)
1) Что не стали стабилизировать ток — абсолютно правильно, не стоит этого делать, а вот поставить в цепь токоограничительный резистор примерно 0.3-0.5 Ома может и стоит, мощности на нём потеряете немного и подстрахуете диод.
2) Отсечку по низкому напряжению можно сделать зацепившись ногой с АЦП прямо за диод, после транзистора, тогда можно и не городить делители.
3) Хотел Ышо подкинуть советов, но подумал что не стоит усовершенствовать то что работает как надо хозяину и думаю это правильно, успехов и ждём новых обзоров!
1. сначала я тоже так подумал, накупил 2ватных резисторов разных номиналов от 0,1 и выше
начал подключать диод к только что заряженной батарее, а ток то и не превышает допустимый, по этому так и оставил. Тем кому требуется обязательно надо ставить.
2. прям за диод не получится, внутренний АЦП измеряет или относительно питания МК (это нам вообще ничего не даёт) или относительно внутреннего ИОНа (осточника опорного напряжения) 1,1 вольта так что нужно городить резистивный делитель (а резисторы имеют разброс и тд.)
3. последнее время я стараюсь разрабатывать простые и дешевые решения
потому что дорого и сложно и дурак сделает
А сам на самом деле купил себе двухрежимные драйверы Тыц и сегодня только что «вколхозил» в свой Сипик, получил что МНЕ было нужно.
Mastech MS8201H Digital LCR Multimeter
ebay.com/itm/160663592182
покупал лет 10 назад, дорого
щюпы толстые, шунт там впаян 1 — 1,5 милиметра 4-5см длинной
Меня максимум на 2 стадии хватает))
лень только щас заниматься зарядкой-разрядкой чтоб доказывать