|
|
|
11813 14 3 0 |
|
Опции темы | Поиск в этой теме |
30.10.2012, 10:55 | 1 | |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Модифицируем модифицированный народный драйвер:)
Выделено из темы "Модифицируем народный линейный драйвер 8х7135" по моей просьбе.
Преамбула. Как известно, спасение утопающих - личное горе самих утопающих. Поскольку для меня фонарь не способ пальцегнутиясамовыражения, а необходимый инструмент, пришлось погружаться в предмет. Инструмент для чего. Я довольно много езжу на велосипеде. И много по темноте. И по городу, и по загороду. Я снова сел на лисапед в прошлом году, после десятилетнего перерыва. Не со времен детства перерыв, со времен активного увлечения спортивным велотуризмом. За два сезона проехал изрядно километров по темноте. Пришло понимание, чего и сколько мне от фонаря нужно. Не путать с рассуждениями "от фонаря". ))) Задача стоит такая. Сваять драйвер на базе народного, с минимальными аппаратными доработками, создав расширенный функционал программными средствами. Идеологические предпосылки (личные): - люменов много бывает (ослепление избыточным светом) (мне не шашечки, мне ехать), - четыре режима постоянного свечения (три для разных условий между сумерками и ночью, четвертый - ночной габаритный огонь на освещенной дороге), - пара мигалок, до которых добраться не так просто, но можно при нужде (тоже тема, кому интересно, отпишу), - тема камрада lux-rc, где он показывает разительную разницу в кпд и рантайме между оптимальным током и максимальным, - тема камрада Tamagotchi, где он сваял примерно то же самое, но заточенное под другие потребности. Конкретно: 1. Нужен алгоритм "без памяти последнего режима" - раз. Со стартом с минимального режима - два. Два аргумента "за": - бывает, нужно включить свет для обозначения себя в сложной дорожной обстановке. На стремном перекрестке. Днем ли, в сумерках ли, луч света я не вижу. Если в фонаре присутствует память последнего режима, я должен помнить, какой использовал последним. Либо прикладывать ладошку к морде, чтобы выяснить. Это отвлекает от сложной дорожной обстановки, что чревато повреждением организма. В случае "беспамятного" драйвера такой проблемы нет. Я всегда знаю, с какого режима он включится, и сколько полунажатий мне сделать для выхода на желаемый. Ночью подними, от зубов отскочит. - когда я включаю фонарь спросонок, я совершенно уверен, что он не ослепит меня на все свои стопицот люменов. Мощный фонарь жалкие десять ватт способны разбудить мирно спящего соседа по палатке сквозь смеженные веки. Проверено на сыне. Нехорошо. 2. Режимов постоянного свечения нужно четыре, со ступенями по току в три раза. Так уж по личной практике осознано. Не настаиваю, для другого человека может и не так. Знаю одного велосипедиста, очень опытного, мощного, умелого, для которого существуют лишь два режима - "освещать дорогу" и "габарит". У него Brinyte C2, XM-L, 1,4 А, он считает средний режим ненужным излишеством. 3. Стартовать нужно с минимального, чтобы не получить внезапно выхлоп сцукобластера в морду среди ночи. (Ага, забыл, что выключил неделю назад в максималке.) Мало - переключим повыше без проблем. Пара секунд. Вот когда много - переключение становится судорожным ("да заткнись же ты, епт!") 4. Рантайм важен. Особенно знание остатка рантайма. В прошивке Tamagotchi есть оценочная индикация остатка заряда средствами фонаря. 5. Термоконтроль не нужен. У меня тушка С2, с хорошим теплоотводом, в движении (при обдуве) легко переваривает запредельный ток 4 А (проверено). Такой ток через одиночный XM-L не нужен, бестолковый нагрев окружающего четверга. Достаточно двух ампер, и то иногда. Подчеркиваю, это мне столько не нужно, давайте не будем спорить. Кому нужно больше - решения есть. Как по мне, разница в свете между 2 и 3 амперами практически неощутима, зато рантайм резко падает. 6. Литий-фосфат не нужен. Дешевый Sanyo 2600 легко отдает 5 А при большей емкости, что перекрывает потребности с запасом. В прошивке Тамагочи на это задействована отдельная нога микросхемы, а ноги в нашем случае жесткий дефицит. 7. "Высасыватель заряда" нужен. То есть - последовательная блокировка старших режимов по мере разряда аккумулятора с целью иметь хоть какой-то свет достаточно долго. 8. Принудительное полное отключение по заданному порогу не нужно. Даже вредно. Чтобы не остаться внезапно на скорости вообще без света. Не человек для аккмулятора, аккумулятор для человека. Собственно, это миф - убить аккумулятор белым диодом. Это неделями нужно светить в режиме электробычка. В этом плане мне нравится решение в кайдоменовском драйвере, он не бьет тебя по башке, а тихо жалуется, просит батарейку. Брат Митька помирает... ухи просит.. Отключает свет на секунду раз в минуту. Однако, секунда - это много, за секунду можно в колдобину влететь. В идеале нужно что-то более заметное, но очень непродолжительное, например два-три четких быстрых моргания за полсекунды. Тык-тык-тык! Пауза. Тык-тык-тык! Практика показала, что мне мерещится плохой контакт, когда драйвер гасит светодиод на секунду. Особенно на расколбасе, когда луч прыгает вверх-вниз и нет четного восприятия импульса тьмы. Когда за эту секунду ты совершаешь два-три виража, обруливая неровности высокой колеи, выдергиваешь передок вверх, перепрыгиваешь через межколейную канаву, поддергиваешь заднее колесо, норовящее сползти в эту самую канавку. Лучше всего, наверное, скоростная серия импульсов, с частотой доли герца. Тр-р-р! Минутная пауза. Тр-р-р! Брат Митька ухи просит... Отсюда и буду плясать. ===== Содержимое исходного поста, зачавшего тему (уже не актуально, пожалуй). *** Уважаемые знатоки программирования AVR! Возьмется ли кто-нибудь помочь мне с модификацией последней версии прошивки? Слишком много непонятного для моих старческих мозгов. 1. Мне нужен режим 0 = 2,1А. Тут вроде понятно, как делать: Код:
#define POW2100VER // Версия с максом 2100mA //#define POW2450VER // Версия с максом 2450mA //#define POW2800VER // Версия с максом 2800mA Код:
else if (mode == 2) { OCR0A = 0x80; // 175mA (* 60 = 125mA *) Код:
static inline void set_moon_mode() { if(get_batt() < OFF_VOLTAGE_300) { delay_ms(200); // пауза для батареи OCR0A = 0x06; // повышаем ШИМ если напруга меньше 3-х вольт } else OCR0A = 0x05; } Теперь непонятки. 3. Цитата:
4. И самый сложный для меня момент. Как сделать включение всегда в режиме 3 ("без памяти")? Посмотрел на функцию initialize(), но ничего не понял. Я в программировании разбираюсь на зачаточном уровне, максимум простенькие скрипты на php и jawascript.
__________________
Никогда ничего не трогай на моей лодке! [Исправлено: 027, 01.11.2012 в 01:01] |
|
30.10.2012, 23:39 | 2 |
Завсегдатай Фонарёвки
Регистрация: 16.02.2011 Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
|
31.10.2012, 00:24 | 3 |
Ветеран Фонарёвки
Регистрация: 12.09.2012 Последняя активность: 13.05.2014 18:58
Сообщений: 1876
Сказал(а) спасибо: 324
Поблагодарили: 383 раз(а) в 257 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
попробуйте так,
Код:
static inline void decode_mode(void) { unsigned char last_tape = 0; unsigned char current_mode_loc = 0; ReadCfgByte(CFG_CURRENTMODE, ¤t_mode_loc); ReadCfgByte(CFG_LASTTAPE, &last_tape); UpdateCfgByte(CFG_LASTTAPE, TAP_EMPTY); unsigned char short_counter = 0; if(last_tape == TAP_LONG) // меняем режим, если last_tape = TAP_LONG { current_mode_loc++; UpdateCfgByte(CFG_TABSHORT_COU, 0); } else if(last_tape == TAP_SHORT) { if(ReadCfgByte(CFG_TABSHORT_COU, &short_counter) != 0) // считываем счетчик коротких нажатий short_counter++; if (short_counter >= 2) // нужно 3 коротких нажатия для отмаргиваний батареи { short_counter = 0; display_voltage(); } UpdateCfgByte(CFG_TABSHORT_COU, short_counter); } else if(last_tape == TAP_EMPTY) { current_mode_loc = 0;// нужный режим при включении } current_mode = current_mode_loc; if (current_mode > MAX_MODES) // проверяем на выход за границу current_mode = 0; UpdateCfgByte(CFG_CURRENTMODE, current_mode); // пишем режим в EEPROM } Код:
else if(last_tape == TAP_EMPTY) { current_mode_loc = 0;// нужный режим при включении } да и судя по сообщениям выше, что то выкидывать придется, чтобы этот код добавить. места он займет байт 5-10 скорее всего, но все же. [Исправлено: kruvas, 31.10.2012 в 00:26] |
31.10.2012, 01:30 | 4 |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
Имеется в виду старт с одного предопределенного режима. А не с последнего "долго работающего", как это принято для драйверов "с памятью". В отличие от драйверов "no memory", которые всегда включают следующий по циклу режим. Без памяти, но предыдущий помнит. Терминология идиотская, конечно.
Термоконтроль. Мне он не нужен. Тушка С2 в движении на велосипеде легко переварит 2А. Тем более, как у меня, эпизодически. Говорят, люменов много не бывает, я с этим не согласен. Напрочь отшибает сумеречное зрение, а мне это важно. |
31.10.2012, 02:02 | 5 |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
kruvas, простите меня за неумение читать код. Я и раньше где-то читал, что для "беспамятного" алгоритма требуется добавить в код строки. В отличие от "памяти последнего режима".
Чисто по алгоритму. Ну, как понимаю. МК не может измерить время в отключке, только время работы. Это козе понятно. МК после определенного периода записывает в память флаг "юзер не дергал кнопку". По-человечески это означает, что юзверь выбрал таки нужный режим и успокоился. Это понятно даже козе. Если не успел записать, значит, юзверь продолжает дрочить нажимать кнопку, разрывая питание. Что-то его не устраивает, гада такого. Новый цикл работы. Питание пропало, питание появилось. Стартуем. Смотрим: таймер в прежней жизни отработал? "Долго светил в том, последнем режиме"? Флаг есть? Да - этот старт означает, что хозяин был в прежней жизни доволен. Нет - этот старт означает, что надо включить следующий режим по кругу. Сволочь, неймется ему. Если "да", два нормальных варианта: "С памятью" - включить тот режим, который был сохранен в памяти сразу после перехода в него. "Без памяти" - включить предопределенный режим. Например, минимальный. Идиотский вариант - включить следующий, без разницы, сколько времени прожили в предыдущей жизни. То есть, не засекать время непрерывной работы, а тупо и сразу переписать прежний режим на текущий. (Или текущий на следующий, без разницы. Тупой инкремент. Не рассматриваем.) Вопрос в рассуждении экономии строк кода: какая разница, откуда читать, по адресу, где записан текущий режим или по адресу, где записана константа? Не могу понять, мне кажется проще читать значение (предопределенная константа), чем читать значение (переменная) плюс выполнять инкремент. Откуда лишняя строка? |
31.10.2012, 03:41 | 6 |
Ветеран Фонарёвки
Регистрация: 12.09.2012 Последняя активность: 13.05.2014 18:58
Сообщений: 1876
Сказал(а) спасибо: 324
Поблагодарили: 383 раз(а) в 257 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
это не ко мне ) последний раз когда я программировал для микроконтроллера, это было 10 лет назад и на ассемблере, и контроллер был отечественным аналогом pic16f84.
тутошний алгоритм я не разбирал до косточек, силы воли не хватило, при случае для самообразования поизучаю. в общем я кажется ерунду предложил. вы правильно расписали процесс. если последнее время работы было больше макс интервала, то фонарь включится на дефолтном режиме. если начать управлять - будет переключаться. если перестать и снова попробовать кликать - снова сбросится в исходный режим и от него начнет менять режимы. то есть при любом перключении режимов после долгой паузы или включении фонаря, режимы начинают перебираться от исходного по кольцу то что вы хотите сделать, надо делать по другому. как именно - надо думать. нужно как то знать, что фонарь долго был выключен. а как это узнать - я пока не знаю. ибо он может измерять время включенного состояния. и с его стороны выключение на 0.1 секунды и на пару недель - одно и тоже. вот такие пироги. [Исправлено: kruvas, 31.10.2012 в 03:44] |
31.10.2012, 15:57 | 7 | |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
Разобрался. Алгоритм переключения "с памятью" такой:
- после включения записываем номер следующего режима и запускаем таймер; - когда таймер отработает, записываем туда же номер текущего режима. Таким образом, если во время работы таймера кнопка не нажималась, при следующем включении будет считан номер последнего использованного режима. Если кнопка нажималась - таймер не успел отработать - номер следующего по кольцу. Цитата:
Ничего подобного я делать не собираюсь. Это невозможно в народном драйвере без радикальной переделки схемы. Я же писал выше: [Исправлено: 027, 31.10.2012 в 16:05] |
|
31.10.2012, 16:16 | 8 | |
Ветеран Фонарёвки
Регистрация: 12.09.2012 Последняя активность: 13.05.2014 18:58
Сообщений: 1876
Сказал(а) спасибо: 324
Поблагодарили: 383 раз(а) в 257 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
отсюда
чтобы сделать включение всегда без памяти, нужно знать что это именно включение, а не перебор режимов. Цитата:
так что никто с вами не спорил, читайте внимательнее |
|
31.10.2012, 16:57 | 9 | |
Ветеран Фонарёвки
Регистрация: 12.09.2012 Последняя активность: 13.05.2014 18:58
Сообщений: 1876
Сказал(а) спасибо: 324
Поблагодарили: 383 раз(а) в 257 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
Цитата:
есть во флэшпамяти ячейка, в которую после подачи питания спустя некоторое время пишется время работы во включенном состоянии (кодами интервалов времени). есть также ячейка во флэшпамяти, со счетчиком последовательных коротких включений-кликов и есть третья ячейка, с номером текущего режима. вот: Цитата:
1) проверяется сколько фонарь проработал в предыдущем режиме - 2.1) если мало в определенных рамках, то в ячейку коротких нажатий прибавляется энное число, но ничего не происходит, пока таких кликов не наберется 3, после число счетчик кликов сбрасывается и показывается заряд батареи. 2.2) если предыдущий клик был долгий, но не больше определенного времени, то переключаем режим на следующий по кольцу 2.3) во всех остальных случаях (долгая работа во включенном состоянии, дребезг кнопки или контактов акка просто включаемся на последнем рабочем режиме номер режима записывается в память сразу же после его смены, таймеры нужны только для понимания какой тип клика был, и был ли он вообще 4 типа "клика" 1) меньше 10 циклов - игнорируется, переменная таймера не трогается, принимается за дребезг или помеху 2) 10-35 циклов - короткий клик, для индикации питания 3) 36-174 цикла - длинный клик, переключение режимов 4) больше 175 циклов - длительная работа после включения примерно вот так. так что то что я предложил напрямую использовать нельзя сразу по двум причинам 1) переключение режима при включенном долго фонаре сбросит режим на дефолтный и пойдет переключение по кругу с начального (хотя в принципе терпимо, но неприятно) 2) дребезг кнопки в аналогичной ситуации будет делать тоже самое, а это уже серьезная проблема. [Исправлено: kruvas, 31.10.2012 в 17:01] |
|
31.10.2012, 19:06 | 10 |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
Извиняюсь. Это все оттого, что в голове пока что каша.
Да ведь это именно то, что мне нужно! Только направление кольца другое, от меньшего режима к большему, начиная с самого младшего. |
31.10.2012, 20:39 | 11 |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Re: Модифицируем народный линейный драйвер 8х7135
Все, я попал))) Скачал Atmel Studio, даташит на тиньку, самомучитель по AVR... Пишу, пока комп шуршит блинами, устанавливая это монструозное поделие атмела.
|
01.11.2012, 01:11 | 12 |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Re: Модифицируем модифицированный народный драйвер:)
В первом посте сейчас изложена идеология будущей прошивки. Просьба заинтересованным перечитать первый пост, важно. Критика категорически приветствуется.
|
01.11.2012, 10:39 | 13 |
Регистрация: 08.06.2011 Последняя активность: 02.11.2023 21:50 Адрес: Украина
Сообщений: 7396
Сказал(а) спасибо: 1935
Поблагодарили: 2291 раз(а) в 1027 сообщениях
|
Re: Модифицируем модифицированный народный драйвер:)
Незнаю можно ли прикрутить тактовую копку в тот драйвер, но если да, то управление организовать так (и вне зависимости включен фонарь или нет, окромя если включен, то одиночное нажатие его выключает):
одно нажатие- максимальный режим, два клика-средний, удержание 2 секунды- минимум. Моргалки- удержание кнопки 5 секунд, а там дальше сами придумывайте. Индикация заряда тройным кликом или вообще отдельным индикатором типа этого https://forum.fonarevka.ru/... |
01.11.2012, 17:45 | 14 |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Re: Модифицируем модифицированный народный драйвер:)
Нет, тактовой не будет. Обратный клик вполне устраивает. И пилить тушку нет никакого желания.
А теоретически прикрутить можно, у меня одна нога свободная будет. В прошивке Тамагочи задействована нога на термоконтроль и нога на выбор химии. Ни то, ни другое мне не нужно. |
01.11.2012, 21:34 | 15 |
Можно спрашивать
Регистрация: 31.08.2011 Последняя активность: 10.07.2022 15:34 Адрес: Волгоград
Сообщений: 7594
Сказал(а) спасибо: 1793
Поблагодарили: 2512 раз(а) в 1343 сообщениях
|
Re: Модифицируем модифицированный народный драйвер:)
Камрад AVSel предложил идею оценивать время выключенного состояния, подвесив достаточно толстый кондер на ногу RESET.
Интересная идея, но, по здравому размышлению, я от нее отказался. Дело в том, что я использую фичу типового алгоритма переключения - выключаю фонарь не дожидаясь фиксации текущего режима. При следующем включении (через неопределенное время) я получу нужный мне следующий режим по кольцу. Не текущий (драйвер "с памятью"), не единственный предопределенный (драйвер "без памяти"), а произвольно заданный мною. |