Тестер аккумуляторов для лотка.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014 пишет:

А вы файл batt.c в папку со скетчем положили? в нем рисунки батарейки.

Да, есть он там. Я пробовал в том числе и просто снова разворачивать архив, скачаный у вас с заменой файлов.

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

А ведь я уже заливал этот ино. Кстати, ардуино часто говорит, что файл со скетчем должен быть перемещен в такую то папку. И удаляет его из основной. Возможно ошибка связана с этим как то. А я по новой пихаю. Но старый скетч искать где? Если его нет в списке недавних?

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:

Да, есть он там. Я пробовал в том числе и просто снова разворачивать архив, скачаный у вас с заменой файлов.

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

А ведь я уже заливал этот ино. Кстати, ардуино часто говорит, что файл со скетчем должен быть перемещен в такую то папку. И удаляет его из основной. Возможно ошибка связана с этим как то. А я по новой пихаю. Но старый скетч искать где? Если его нет в списке недавних?

---Папка в которой лежит скетч должна иметь точно такое же название как и скетч без расширегия .ino если хоть один символ не тот она пересоздаст в новую папку.

---сомое простое откройте ардуино ИДЕ нажмите "сохранить как" оно откроет папку по умолчанию для скетчей, вы посмотрите где это на вашем компе и туда ставьте папки соскетчами.

 

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Спасибо, пошла загрузка. Дело оказалось в несовпадении имени папки (когда качаешь один архив несколько раз, ему присваевается дополнительный номер).

Вот так и получается. Для вас это само-собой, а для новичка - скачка по граблям. Должен сказать, что ваши объяснения в том числе в видео, часто помогают разъяснять такие вещи. А очень многие, в отличие от вас, говорят много лишнего и не говорят таких нюансов.

Еще раз благодарю.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Ваш скетч с буззером под активный либо пассивный буззер?

Он пищщит при окончании каждого этапа?

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:

Ваш скетч с буззером под активный либо пассивный буззер?

Он пищщит при окончании каждого этапа?

Счас гляну, уже выгрузил "скетч из головы" с ходу не вспомню)))

Посмотрел.

---под пассивный

---пищит когда разрядил и когда зарядил.

--пин бузера указывайте любой свободный.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

bodriy2014 пишет:

Счас гляну, уже выгрузил "скетч из головы" с ходу не вспомню)))

У меня хорошо развито воображение. Профессионального конструктора. Представил как вы вгружаете скетч. Супруга прибежала из соседней комнаты посмотреть, чего это я тут ржу.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:

У меня хорошо развито воображение. Профессионального конструктора. Представил как вы вгружаете скетч. Супруга прибежала из соседней комнаты посмотреть, чего это я тут ржу.

Где-то уже писал , что пока занимаюсь прибором держу весь код в голове и даже в поезеде могу кое что придумать, но когда отложи - могу забыть даже то что сам писал и самому тяжело разобрать.)))

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Сегодня переделал буззер. В скетче перенес его с 10 ноги, где параллельно ему сидел подтягивающий резистор и глушил его на 2 ногу.  Звук стал значительно громче.

Понравилось. Полезная функция.

И сам прибор пришелся весьма кстати. Скоро должны приехать 5 блочков преобразователей повышающих, буду свои приборы переводить на литий. А аккумуляторы штука такая. Мало ли, что там на нем написано. Тот, который я метил в первую очередь (написано 650), оказался 240 мач. всего. Не катит.

Поэтому спасибо за прибор.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:

Сегодня переделал буззер. В скетче перенес его с 10 ноги, где параллельно ему сидел подтягивающий резистор и глушил его на 2 ногу.  Звук стал значительно громче....

В том и прелесть скетчей можно под себя править, даже почти без знаний!

главное не лениться комментировать, тогда новички даже по скетчам учиться могут!

 

AzizIbnHattab
Offline
Зарегистрирован: 30.05.2016

Понадобился тестор для китайских аккумуляторов с али. Забрёл сюда, понравилась схемка-собрал. Добавил платку зарядки лития (на TP4056) вместо резистора и платку DC-DC (XM1584) для питания.Полевика P типа не было, сделал на N.Чудаковато, но работает. Единственно не распознаёт окончание зарядки-платка уже отключилась а ардуинка всё пытается заряжать. Отключается платка при 4,15В. Может предел зарядки в коде 4,15 установить? Собирал ещё схемку (http://lazyelectronics.com/index.php/ru/item/8-battester-ru). Результаты подсчёта ёмкости один в один.Там ещё тест Ni-MH реализован. Было бы неплохо здесь код дописать. Ещё редложение-в меню разрядки сделать выбор тока: на схеме выделенное пунктиром продублировать и завести управление на свободный пин. Тогда получиться 3 разрядных тока.

AzizIbnHattab
Offline
Зарегистрирован: 30.05.2016
Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

AzizIbnHattab пишет:

.Там ещё тест Ni-MH реализован. Было бы неплохо здесь код дописать. Ещё редложение-в меню разрядки сделать выбор тока: на схеме выделенное пунктиром продублировать и завести управление на свободный пин. Тогда получиться 3 разрядных тока.

Да, было бы неплохо иметь пункт в меню с выбором порогового напряжения. Метал-гидрид тоже достаточно распространены. 

Разный разрядный ток? Возможно. Но в принципе это можно легко реализовать просто переключением резисторов. Тумблером.

Если кто-нибудь может и хочет выполнить такую доработку программы, было бы интересно. Мне это не по зубам, увы.

yucan
Offline
Зарегистрирован: 20.04.2015

AzizIbnHattab пишет:

Может предел зарядки в коде 4,15 установить?

Да, в вашем случае код придётся подкорректировать. Я тоже пробовал ставить контроллер заряда. Только  LTC4054, но не помню уже корректировал ли код (вроде нет). В схеме управления контролером ставил биполярник. В схеме разряда - irl2505. Собирал на макетке тогда, законченное устройство так и не сделал.

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

По хорошему, 328 позволяет сделать 3 канала для разряда-заряда(ШИМ) или 6 каналов без ШИМ.

Так что использовать ПроМини на 33%(или 16%) мне кажетися несколько неразумным.

Для заряда лития и управления оным - поставить р-канальные полевики после ТР4056( можну одну - она до 1А даёт, так что для трёх вполне). В таком случае можно сделать 6 каналов(2 или 3 ТР4056).

Или сделать зарядный тока на ШИМ(что по мнению некоторых лучше), в этом случае 3 канала.

А для заряда никелевых - LM317 в режиме стабилизатора тока (до 1,5А) что вполне хватит для 3-6 акк.

Вопрос один - написать скетч. Я пробовал переделать скетч автора, но увы - моих знаний явно недостаточно.

yucan
Offline
Зарегистрирован: 20.04.2015

AzizIbnHattab пишет:

Собирал ещё схемку (http://lazyelectronics.com/index.php/ru/item/8-battester-ru). Результаты подсчёта ёмкости один в один.Там ещё тест Ni-MH реализован.

Собрал тоже этот тестер, попробовал. Индикация внутреннего сопротивления - вещь полезная, но немного не точно показывает. Если аккумулятор мощный - показания по нулям. Автору написал по поводу этого. Вот к  нему бы прикрутить зарядку  - получился бы полезный прибор. Плюс NI-MH можно тестить!

На фото тестирую LI-ION банку GTF 8800 ma/h. Конца теста не дождался - сейчас времени нет.

AzizIbnHattab
Offline
Зарегистрирован: 30.05.2016

Лекс 59 пишет:

Разный разрядный ток? Возможно. Но в принципе это можно легко реализовать просто переключением резисторов. Тумблером.

[/quote]

А как в коде учесть переключение тумблёра если там прописано разрядное сопротивление и через него считается ёмкость?Только ещё один полевик и сопротивление с учётом изменения нагрузки в коде.

На коте есть схемка на атмеге (http://radiokot.ru/circuit/power/charger/20/) там 3 разрядных тока перекидываются стабилизатором тока полевиком с операционником, и видимо программа учитывает это в расчетах.Вот ту реализацию сюда ба перетянуть, что бы в коде ардуинки токи подправить под себя.

Нашол Р канальный полевик, завтра попробую в схемку воткнуть, посмотрю что с зарядкой будет.

Жаль что познания в коде сводятся к замене цифр в переменных..

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

AzizIbnHattab пишет:

А как в коде учесть переключение тумблёра если там прописано разрядное сопротивление и через него считается ёмкость?Только ещё один полевик и сопротивление с учётом изменения нагрузки в коде....

Можно и без полевика просто тумблером, есть аж два варианта:

--взять сдвоенный переключатель одна половина которого переключает разистор вторая сообщает на пин какой разрядный ток учитывать

--взять простой тумблер и им переключать нагрузочные резисторы, и мониторить напряжение на одном из резисторов если есть считаем одним током если нет соответственно подключен второй резистор и считаем другим током.

Есть еще альтернативный вариант, так как резистор достаточно большого сопротивления аж 20 Ом то можно с помощью АЦП Ардуино посчитать падение напряжения на нем и высчитывать ток, даже без подключения внешнего датчика тока.

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

вот проект 

начал его пилить на предмет добавления возможности выбора типа (никель-литий), зарядки и циклов.

*рукалицо

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

yucan
Offline
Зарегистрирован: 20.04.2015

karl2233 пишет:

вот проект 

Это похоже он же

http://cxem.net/mc/mc100.php

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

угу.

странно что его я не видел ))))

хотя толку "0" - не получается у мну его переделать.

не выходит каменный цветок(с)

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Провожу такую пробу: просто поменял в скетче величины напряжений, применимых к никель-металлгидридным. Сейчас стоит разряжает. Медлеено правда, для него сопротивление великовато, но у ардуино терпения хватит.

Физически это выглядит так. Про-мини с другим вариантом. Вынул одну-вставил другую.

А вот при зарядке скорее всего спалит транзистор. Тот всего на 400 ма расчитан, а  разница напряжений больше.

..............................

В принципе работает и этот вариант. Разряжал 6 часов. До конца не довел. Еще столько же пришлось бы ждать. Насчитал 400 мач (с 1,3 до 1,25 вольта). Из 2400. Но аккум реально старый, лет пять у меня в мышке отпахал. Заряжать отказался. Сразу выключает. Видимо внутреннее сопротивление уже слишком велико. Т.е. этот вариант зарядного в принципе можно применить. Только вот пороговые значения в скетче придется подбирать. А это непростой вопрос. С литием проще.

Например. Когда я купил пару этих аккумов. Сделал для них зарядку стабильным током отключение компаратором по напруге. Сколько выставлять? Встречал совет. Разрядить до 1 вольта и заряжать стаб током 12-14 часов до появления некоторого нагрева. Измерить напряжение на зарядном и его считать пороговым. Ага.. у меня оно полезло уже к 1,6 вольтам (было давно, могу немного путать цифры). Не выдержали нервы и поставил 1,52 вольта. Много позже начитался форумов, что напруга не должна превышать 1,36 вольта на элемент на свежезаряженном и несколько снизил. Поставил 1,45 на компараторе. И после этого они у меня быстренько стали сдуваться. А может просто срок пришел. Но если по первости зватало на 4-6 месяцев одного, то теперь 3-4 недели. Так я и не знаю, что выставлять на зарядном. Форумов много, мнений хватает, однозначного ответа нет.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59

Вы все правильно делали с никелем так и нужно, они у вас видать еще живые но эффект памяти у них сильный, несколько раз правильно разрядить и зарядить и будут для приборов самое то.

Выставьте стабильный ток по даташиту, если нет его то 1/10 емкости и им заряжайте 14 часов или до появления нагрева ощутимого рукой, на напряжение вообще не смотрите оно будет большим чтоб ток обеспечивать, но после отключения стабилизируется на нужном уровне.

У никеля КПД низкий и 40% уходит в нагрев и они теплые во время зарядки а когда зарядились то они вообще 100% в тепло вот тогда и разогрев идет сильный!

Было время без лития жили все, так у меня с тех времен еще не один аккум не сдох, или потерялись или подарены/проданы вместе с техникой.

_______

моя зарядка не пойдет, там нет стбильного тока.

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

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Спасибо. Тренировать я пробовал. Эффекта не увидел. Теперь попробую разрядить и как вы советовали - до упора. И после этого выставлю напругу. Или просто подниму ее снова до 1,52. И фиг с ними.

А вообще в мечтах, вижу универсальную зарядку. Но не аймакс би шесть. Ток - произвольно, вплоть до ампера,  напругу отключения - произвольно, вплоть до 10 -14 вольт. Подсчет емкости - было бы неплохо. И алгоритм, типа вашего - зарядил - разрядил - зарядил и капельный. Т.е. и пальчики и литий и кроны и от апсов, все в кучу.

Ай макс неплохо, но там фиксированные режимы. И вовсе не факт, что оптимальные, судя по моим аккумам.

А бипер это хорошо. Сейчас прервался, сходил и выключил ваш приборчик. Заряжал литий им. Он на кухне, я возле компа. Удобно.

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

Лекс 59 пишет:

Спасибо. Тренировать я пробовал. Эффекта не увидел. Т

с этого мест подробнее

 

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Все просто. У меня к заряднику прикреплен отдельный модуль разрядки. С сопротивлением и диодом шотки. Он разряжает аккум до примерно 0,95-0,97 вольта.

Вставляю в разрядник на сутки. Потом отлеживаться сколько удобно. При необходимости, если напруга без нагрузки сильно восстановилась, снова в разрядник. Отлежка, контроль напруги и на зарядку. Сейчас компаратор настроен на отключение 1,45 вольта (там встроеный вольтметр). Настраивал так, чтобы при отключении зарядного тока, напруга на аккумуляторе была 1,36 вольта. Сейчас они у меня заряжаются часа 4 всего. Ток 1/10 исходной емкости. Т.е. либо они потеряли емкость, либо я их недозаряжаю. Я могу отключить автомат и заряжать по времени. А напруга сколько получится.

Если вы имеете в виду, что никель металл-гидрид тренировке не поддаются и пытаетесь меня поддеть, то я в курсе. И в курсе, что тренировки практикуют с никель-кадмием. Но почему бы и не попробовать?

Оба я прогнал по 3 раза через  цикл разряд-заряд. Ничего не изменилось. По крайней мере заметно.

И сейчас поддгадаю период так, чтобы после 8-10 часов заряда они были под наблюдением. В смысле чтобы я был дома. И попробую что получится. Один естественно. У меня одноместный зарядник.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Лекс 59 пишет:

......

Если вы имеете в виду, что никель металл-гидрид тренировке не поддаются и пытаетесь меня поддеть, то я в курсе. И в курсе, что тренировки практикуют с никель-кадмием. Но почему бы и не попробовать?

Оба я прогнал по 3 раза через  цикл разряд-заряд. Ничего не изменилось. По крайней мере заметно.

И сейчас поддгадаю период так, чтобы после 8-10 часов заряда они были под наблюдением. В смысле чтобы я был дома. И попробую что получится. Один естественно. У меня одноместный зарядник.

Привет! поддеть не пытаюсь и тем более без смайла.

Я не знаю что можно назвать тренировкой, но у любого никелевого элемента (кадмий или метал гидрид) есть ярко выраженный эффект памяти. И каждый раз когда вы его будете не до конца разряжать или не до полной заряжать он будет на химическом уровне уменьшаться в емкости.

Есть методы и борьбы с этими неприятными явлениями с помощью импульсов, но они в паблик не лежат. Но не беда есть простые действенные методы.

--полный разряд вот здесь Ni-MG и Ni-Cd отличаются, металгидрид нельзя в ноль разряжать а не ниже 0,8В.

--дальше полный заряд как я писал выше и не важно что напряжение на банке подскочило до 1,68 главное фиксированный ток и постоянный контроль температуры.

-- и да если кипят слишком рано не через 10-14часов, а уже через 4 часа значит ваш элемент действительно на химическом уровне износился и нужно взять меньше ток заряда. Но даже изношенный в полном заряде он будет все равно отдавать больше емкости чем вам не дозаряженный.

Например АКБ написано 2100мА/ч заряжаем его током 210мА если через 5 часов он резко нагревается значит ждем пару часов разряжаем и снова на заряд но уже током меньше например 150мА. И так пока он не станет за 10-14ч заряжаться.

Можно контролировать окончание заряда по дельта-пик, мне этот метод нравится больше чем по времени.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Яссна. А про "поддеть" это для karl2233 пост 124.

Вряд ли я буду за эти два аккума так уж бороться. Правда, что интересно. Недавно покупал еще 2, по одному. Оба уже в мусор ушли.

Вибиру время и попробую дать полную выдержку с выключеной автоматикой (там просто тумблером щелкнуть) а вот ток там сложнее. Снова подбирать задающие резюки в стабилизаторе тока. Хотя... Я его на два диапазона лепил 100 и 250 ма. В принципе можно малым током тогда позаряжать.

Спасибо за идею. Попытаюсь вытащить этих двух товарищей. Особенно помня о новых двух в мусоре.

А метод дельта, мне нравится тоже. Я даже в свое время проверял. Записывал показания до сотых через определенные интервалы. Но дельта там была совсем невелика. В то время аппаратно и не слишком сложно я его реализовать не мог. Остановился на контроле напряжения. Хотя, если долговременная эксплуатация, целесообразнее видимо по времени заряжать. Но переделывать давно созданное законченное устройство уже в лом...

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

да я и не пытался никого поддевать!

а спросил о подробностях - ток заряда и разряда? напряжение заряда и разряда? 

я сделал простую зарядку на Атмеге8 и заметно подлечил несколько батареек за 4-5 циклов.

к меня ток заряда 40мА, разряда 100мА; напряжения - 0.8 и 1.45.

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Ток заряда я обычно делаю 0,1С. Есть разные мнения на этот счет, но я придерживаюсь такого.

Ток разряда не помню. Просто резистор с диодом последовательно. Диод не дает разрядить в "0". Вряд ли больше 50 ма. Греется резюк и диод совсем слабо. Назначение то ДОразрядить.

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

тогда странно что нет эффекта от парочки циклов.

может батарейкам пришел карачун?

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Через некоторое время узнаю.

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

а какое внутреннее сопротивление?

у моих до тренировки было 0,5 а после 0.2

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Не измерял. Хотя не проблема, конечно. Думаю, достаточно велико. Что будет, то и будет. Не смертельно. Но подбирать новые, да чтоб тоже послужили годы в лом, не говоря уж о деньгах. Попробую вначале как советовал Бодрый 2014.

yucan
Offline
Зарегистрирован: 20.04.2015

У меня долго не использовались несколько штук Ni-Mh аккумуляторы. После тренировки (не помню сколько циклов делал) их ёмкость почти полностью восстановилась. R вн у некоторых дошло до 0,1 ом (ёмкость 2500-3000 ма\ч). Если внутренее сопротивление не понижается после тренировки, то кирдык такому источнику

Лекс 59
Лекс 59 аватар
Offline
Зарегистрирован: 02.04.2016

Заряд идет уже 9 часов. Температура на 9 градусов выше среды. Напряжение 1,58 (при включенном заряднике, естественно).

12 часов дать не смогу. Только 10. Спать иногда тоже надо. Это первый. Второй в разряднике.

......................................

Напруга после 11 часов зарядки и после новчи вне зарядки 1,45 вольта. Как я понимаю, необратимые изменения в химии. Пока работает в мышке.

Второй заряжаю током 100 ма. Емкость на этикетке - 2400. Дам 14 часов. Это меньше половины исходной емкости, но может хоть так послужит.

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

н-дя...

если там написано "2400", то на деле, хорошо что  200-300 осталось.

и сколько "С" составляет ток в 100мА при таком раскладе?

а напряжение 1,45В это норм.

повторюсь - сообщение 128

yucan
Offline
Зарегистрирован: 20.04.2015

karl2233 пишет:

если там написано "2400", то на деле, хорошо что  200-300 осталось.

Вчера тестил полученные с Али аккумуляторы GTF 8800 ма\ч, литий-ионные. До напряжения 3,5 вольт показал емкость 2100.

AzizIbnHattab
Offline
Зарегистрирован: 30.05.2016

Жаль тема заглохла. Сюда бы 2й канал, металлгидрид(свинец возможно), зарядку нормальную, разряд-тестор на пару ампер со стабилизатором тока(можно любой ток поставить), но увы. Хотелок то не так много, а знаний в коде 0. Думаю универсальная зарядка на 2 канала + разрядник-тестор ёмкости многим бы пригодился. Как вариант надыбал разрядку-тестор, интересная штука...литий, свинец, металлгидрид, чё душе угодно до 20В. https://www.youtube.com/watch?v=qQwxXiKavYQ&list=PLQNYBHdgx3ndHuSNcgwGqIHlYlTvjUbgw&index=7  Есть ссылка на скетч и пояснения в нём разжованы.

Joiner
Offline
Зарегистрирован: 04.09.2014

AzizIbnHattab пишет:

................ Как вариант надыбал разрядку-тестор, интересная штука...литий, свинец, металлгидрид, чё душе угодно до 20В...........................

А зачем? Мне кажется гораздо легче и логичнее сделать три-четыре... устройства:

1. Зарядка-тестер NI-MH, NI-CD.

2. Зарядка-тестер Li-Ion и т.д.

3. Зарядка-тестер свинцовых автоаккумуляторов

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

смысл 3 устройств? лучше одно на два(три) канала, АТМ328 позволяет.

а для свинцовых отлельно: всё-таки там токи и размеры другие...

Joiner
Offline
Зарегистрирован: 04.09.2014

karl2233 пишет:

смысл 3 устройств? лучше одно на два(три) канала, АТМ328 позволяет.

а для свинцовых отлельно: всё-таки там токи и размеры другие...

Вот оно, универсальное устройство для заряда любых аккумуляторов http://www.ebay.com/itm/iMAX-B6-LCD-Digital-RC-Lipo-Battery-80W-Balance-Charger-for-RC-Quadcopter-/182139509133?hash=item2a685c598d:g:6TIAAOSw71BXPtgV

Из описания:

  • IMAX B6 is the new intelligent  multifunction charger which can charge and discharge for Lion, LiPo, LiFe (A123), Pb, NiCd and NiMH batteries. It's all-powerful in a way.
karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

угу.

тока оно не на 2-3 канала.

а так-то да - на али за 1000р можно купить вполне себе.

как и многое другое, что делают наши коллеги - паяльные станции, часы_барометры-машинки и т.д.

 

AzizIbnHattab
Offline
Зарегистрирован: 30.05.2016

Вот оно, универсальное устройство для заряда любых аккумуляторов http://www.ebay.com/itm/iMAX-B6

karl2233
karl2233 аватар
Offline
Зарегистрирован: 05.07.2015

упоминание В6 напоминает мантру =)

шо, може и мне кинуть сцыль на него? ))

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Автору в галерею собраных девайсов. Может, руки дойдут и корпус сваять, и скетч доработать...

BatTester

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

bodriy2014, мод на обозрение в теме можно выложить? Может кто захочет поковыряться в глюках альфа-версии :)

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

tekagi пишет:

bodriy2014, мод на обозрение в теме можно выложить? Может кто захочет поковыряться в глюках альфа-версии :)

С интересом ждем.

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Мод авторской версии, основан на скетче, изменённом arthemy под дисплей 1602.

Изменено:
-обычный индикатор 1602 вместо индикатора с i2c модулем и авторского 5110,
-изменена схема - использованы транзисторы КТ814 и КТ315, добавлены входы АЦП для повышения точности (в авторском скетче не учитывается падение напряжения на открытом транзисторе),
-изменена нумерация входов-выходов (см. схему),
-реализовано грубое тестирование внутреннего сопротивления,
-добавлена индикация тока заряда,
-убраны дублирующие переменные (в авторском скетче была заморочка с преобразованием float > int),
-добавлен ИОН на TL431 для коррекции измерений при нестабильном напряжении питания,
-выведены значения нагрузочно-ограничительных резистрорв в константы в setup, для удобства корректировки (изменяем R5, R10 и R15 в начале кода),
-сделан выбор типа тестируемого аккумулятора (Li-Ion, Li-Pol, LiFePO4). По умолчанию стоит Li-Ion,
-сделан выбор тока разряда (малый, средний, большой), чтобы тестировать мощные аккумуляторы быстрее,
-добавлен бузер, сигнализирующий переключение между режимами и окончании цикла измерений,
-зарядка по окончании теста достигает напряжения заряда, после чего поддерживается на уровне Vc-0,2,
-добавлено меню с настройками, чтобы менять параметры не перезагружая устройство.

В планах:
-сделать гистерезис отключения заряда в режиме окончания теста (возможно не будет реализовано за ненадобностью),
-сделать ещё один пункт "manual akk" в меню, где можно будет задать свои напряжения окончания разряда и заряда (с сохранением в EEPROM),
-оптимизировать алгоритм подсчёта времени разряда (на данный момент часы слегка отстают из-за фиксированого приращения по 5 секунд),
-сделать чтение с АЦП с оверсемплингом.
 



/*
Оригинальное описание и схема здесь. http://srukami.inf.ua/testbat3.htm
А также фото и видео работы.https://youtu.be/BODFInBvmFw
Автор оригинального скетча srukami
МОД создан на модифицированом скетче под I2C LCD 1602 от arthemy https://www.youtube.com/user/arthemy https://mega.nz/#F!NApFHaaA!g-swQBanZrVbW4QhXdZBXQ

MOD by tekagi ( t.e.k.a.g.i@yandex.ru )
Схема собиралась из закромов, поэтому выглядит столь монструозно.

Изменено:
-обычный индикатор 1602 вместо индикатора с i2c модулем и авторского 5110,
-изменена схема - использованы транзисторы КТ814 и КТ315, добавлены входы АЦП для повышения точности (в авторском скетче не учитывается падение напряжения на открытом транзисторе),
-изменена нумерация входов-выходов (см. схему   ),
-реализовано грубое тестирование внутреннего сопротивления,
-добавлена индикация тока заряда,
-убраны дублирующие переменные (в авторском скетче была заморочка с преобразованием float > int),
-добавлен ИОН на TL431 для коррекции измерений при нестабильном напряжении питания,
-выведены значения нагрузочно-ограничительных резистрорв в константы в setup, для удобства корректировки (изменяем R5, R10 и R15 в начале кода),
-сделан выбор типа тестируемого аккумулятора (Li-Ion, Li-Pol, LiFePO4). По умолчанию стоит Li-Ion,
-сделан выбор тока разряда (малый, средний, большой), чтобы тестировать мощные аккумуляторы быстрее,
-добавлен бузер, сигнализирующий переключение между режимами и окончании цикла измерений,
-зарядка по окончании теста достигает напряжения заряда, после чего поддерживается на уровне Vc-0,2,
-добавлено меню с настройками, чтобы менять параметры не перезагружая устройство.
В планах:
-сделать гистерезис отключения заряда в режиме окончания теста (возможно не будет реализовано за ненадобностью),
-сделать ещё один пункт "manual akk" в меню, где можно будет задать свои напряжения окончания разряда и заряда (с сохранением в EEPROM),
-оптимизировать алгоритм подсчёта времени разряда (на данный момент часы слегка отстают из-за фиксированого приращения по 5 секунд),
-сделать чтение с АЦП с оверсемплингом.


*/

#include <util/delay.h>
#include <LiquidCrystal.h>

const float R5 = 5.5;         //задаём сопротивление зарядного резистора R5
const float R10 = 22.3;       //задаём сопротивление разрядного резистора R10
const float R15 = 10.2;       //задаём сопротивление разрядного резистора R15
const int analogV = A0;       //назначаем аналоговый вход аккума
const int analogVC = A1;      //назначаем аналоговый вход заряда
const int analogVD = A2;      //назначаем аналоговый вход разряда
const int analogVD2 = A3;     //назначаем аналоговый вход разряда 2
const int analogV_TL431 = A4; //назначаем аналоговый вход коррекции напряжения
float coeff = 0.0;            //поправка на нестабильность напряжения
float volt = 0.0;             //задаем переменные
float R = 0.0;                //внутреннее сопротивление аккумулятора
float voltC = 0.0;            //Напряжение при заряде
float voltD = 0.0;            //Напряжение при разряде
float voltD2 = 0.0;           //Напряжение при разряде
float Vc = 0.0;               //Конечное напряжение заряда
float Vd = 0.0;               //Конечное напряжение разряда
float am = 0;                 //милиамперы
float amR = 0;                //милиамперы, ток определения внутреннего сопротивления
float amR2 = 0;               //милиамперы, ток определения внутреннего сопротивления
float amC = 0;                //милиамперы заряд
float capvrem= 0;             //временная емкость
float cap= 0;                 //емкость
float voltTEMP= 0;            //временная переменная для рассчёта внутреннего сопротивления
byte counteR = 0;             //счётчик циклов замера внутреннего сопротивления
byte knop = 0;                //переменная для хранения состояния кнопки
byte knop_menu = 1;           //переменная для хранения состояния кнопки
byte SEK = 0;                 //секунды
byte MIN = 0;                 //минуты
byte HOUR = 0;                //часы
byte akk_type = 0;            //переменная типа аккумулятора
byte discharge_type = 0;      //переменная типа разряда
byte recharge_control = 0;    //переменная для однократного подзаряда в конце
unsigned long prMillis = 0;
// initialize the library with the numbers of the interface pins       
LiquidCrystal lcd(12, 11, 5, 4, 19, 10);   // 19 - pinA5

void setup() 
{
  pinMode(analogV , INPUT);    //определяем тип порта (вход), АЦП
  pinMode(analogVC , INPUT);  //определяем тип порта (вход), АЦП
  pinMode(analogVD , INPUT);  //определяем тип порта (вход), АЦП
  pinMode(analogVD2 , INPUT);  //определяем тип порта (вход), АЦП
  pinMode(analogV_TL431 , INPUT);  //определяем тип порта (вход), АЦП
  pinMode(2, INPUT);         //определяем тип порта (вход), кнопка
  pinMode(3, INPUT);         //определяем тип порта (вход), кнопка
  pinMode(13, OUTPUT);   // бузер
  pinMode(9, OUTPUT);   // разряд
  pinMode(8, OUTPUT);   // заряд
  pinMode(7, OUTPUT);   //LED
  pinMode(6, OUTPUT);   //разряд2
  lcd.begin(16, 2); // размер дисплея 
  lcd.clear();      // Чистим экран
    
  hello_screen(); //вывод заставки (можно отключить, закомментировав данную строку)
  
  menu(); //вызов меню для начальной конфигурации
}


void loop()
{ 
  if (digitalRead(3)==HIGH)		//нажатие кнопки "меню"
    {
       knop_menu=1;
       digitalWrite(8,LOW);            //выключаем ключ зарядки аккумулятора
       digitalWrite(9,LOW);            //выключаем ключ нагрузки
       digitalWrite(6,LOW);            //выключаем ключ нагрузки 2
       digitalWrite(7,LOW);            //выключаем светодиод заряда
       _delay_ms(100);
       menu();
    }
coeff = 512/(float (analogRead(analogV_TL431)));      // считаем коэффициент погрешности опорного напряжения
volt = float (analogRead(analogV))*coeff*5/1024;      // 5В - опорное напряжение
voltC = float (analogRead(analogVC))*coeff*5/1024;    // Напряжение заряда
voltD = float (analogRead(analogVD))*coeff*5/1024;    // Напряжение разряда
voltD2 = float (analogRead(analogVD2))*coeff*5/1024;  // Напряжение разряда 2
  if (digitalRead(2)==HIGH)		//нажатие кнопки
  {
    tone(13, 1000, 70);
    knop++;
    lcd.clear();					      //чистим экран  
    if (knop>4){knop=1; }		  	// обнуляем четвёртое нажатие.  
    _delay_ms(250);
  }
  if (knop==0){    //сценарий устройство включено но незапущен тест
    lcd.setCursor(0, 0);
    lcd.print("Press 1Ch 2Rint ");
    lcd.setCursor(0, 1);
    lcd.print("3Dis 4FinCh ");
    lcd.print(volt, 1);  
    lcd.print("V           ");      
    _delay_ms(250);
  }
//-------------------------------------------------
  if (knop==1){		//отработка сценария зарядки после подключения
    lcd.clear();					      //чистим экран  
    cap= 0;			//обнуляем переменные
    am = 0;
    amR = 0;
    amR2 = 0;
    amC = 0;
    R = 0;
    SEK = 0; 
    MIN = 0; 
    HOUR = 0;
    counteR = 0;
    voltTEMP = 0;
    recharge_control = 0;
    digitalWrite(7,LOW);		//светодиод разряжено
    if (volt<Vc)
    {                   
      digitalWrite(8,HIGH);	//включаем ключ зарядки аккумулятора
      digitalWrite(9,LOW);		//отключаем ключ нагрузки
      amC=((voltC-volt)/R5)*1000;        //считаем ток в mA =Uтекущее/Rнагрузки,  *1000 получаем mA
      lcd.setCursor(0, 0);
      lcd.print("CHARGE: ");
      lcd.print(volt);     //выводим напряжение на аккумуляторе
      lcd.print("V        ");   
      lcd.setCursor(8, 1);
      lcd.print("I=");
      lcd.print(amC);        
    }
    if(volt>=Vc) {knop = 2;    tone(13, 1000, 150);}  // фиксируем зарядку АКБ, переходим в проверку внутреннего сопротивления
      _delay_ms(350);
  }
//----------------------------------------------------------------------------------------------------
  if (knop==2)            //замер внутреннего сопротивления
  {
   if (counteR<=252)
   {
       
        if (counteR<=230)      //первый цикл проверки
           {
            if (counteR==0) { lcd.clear(); } // Чистим экран
            digitalWrite(8,LOW);    //отключаем ключ зарядки аккумулятора
            digitalWrite(6,LOW);    //отключаем ключ нагрузки 2
            digitalWrite(9,HIGH);   //включаем ключ нагрузки
            amR=(voltD/R10);        //считаем ток
            lcd.setCursor(0, 0);
            lcd.print("Testing Rint ");
            lcd.setCursor(13, 0);   //ставим курсор в 14й столбец, первую строку (вспомогательные данные, можно закомментить строку)
            lcd.print("R10");        //используемый резистор (вспомогательные данные, можно закомментить строку)
            lcd.setCursor(0, 1);    //ставим курсор в первый столбец, вторую строку
            lcd.print(amR*1000,0);  //выводим значение тока разряда в мА
            lcd.print("mA ");       //
            lcd.print(volt,2);      //выводим напряжение на аккумляторе под нагрузкой
            lcd.print("V ");        //
            _delay_ms(500);         //задержка
            lcd.setCursor(0, 1);    //ставим курсор в первый столбец, вторую строку
            lcd.print("                ");        //чистим строку
            counteR++;              //инкрементируем счётчик
            if (counteR<=231)      //окончание первого цикла проверки
             {
               voltTEMP = volt;        //переносим значение напряжения под нагрузкой во временную переменную
             }
          }
       if (counteR>230 and counteR<=250)      //второй цикл проверки
          {
            if (counteR==231) { lcd.clear(); } // Чистим экран
            digitalWrite(8,LOW);    //отключаем ключ зарядки аккумулятора
            digitalWrite(9,LOW);    //отключаем ключ нагрузки           
            digitalWrite(6,HIGH);   //включаем ключ нагрузки 2
            amR2=(voltD2/R15);      //считаем ток
            lcd.setCursor(0, 0);
            lcd.print("Testing Rint");
            lcd.setCursor(13, 0);   //ставим курсор в 14й столбец, первую строку
            lcd.print("R15");        //используемый резистор (вспомогательные данные, можно закомментить строку)
            lcd.setCursor(0, 1);    //ставим курсор в первый столбец, вторую строку
            lcd.print(amR2*1000,0); //выводим значение тока разряда в мА
            lcd.print("mA ");       //
            lcd.print(volt,2);      //выводим напряжение на аккумляторе под нагрузкой
            lcd.print("V ");        //
            counteR++;              //инкрементируем счётчик
            _delay_ms(500);         //задержка         
            lcd.setCursor(0, 1);    //ставим курсор в первый столбец, вторую строку
            lcd.print("                ");        //чистим строку
          }

        if (counteR==251)             //заканчиваем проверку сопротивления
           {
             R = ((voltTEMP-volt)/(amR2-amR));  //считаем внутреннее сопротивление аккумулятора
             digitalWrite(9,LOW);         //выключаем ключ нагрузки
             digitalWrite(6,LOW);         //выключаем ключ нагрузки 2
             digitalWrite(8,LOW);         //выключаем ключ зарядки аккумулятора
             counteR++;                   //инкрементируем счётчик
             lcd.clear();  // Чистим экран
             lcd.setCursor(0, 1);         //ставим курсор в первый столбец, вторую строку
             lcd.print("Rin=");           //
             lcd.print(R,3);              //выводим значение внутреннего сопротивления
           }
        if (counteR>=252)  //восстанавливаем заряд аккумулятора перед тестом ёмкости, переходим в разряд
            {
             digitalWrite(9,LOW);     //выключаем ключ нагрузки
             digitalWrite(6,LOW);     //выключаем ключ нагрузки 2
             digitalWrite(8,HIGH);    //включаем ключ зарядки аккумулятор
             lcd.setCursor(0, 0);         //ставим курсор в первый столбец, первую строку
             lcd.print("re-charging");        //дозарядка до полного
             lcd.setCursor(11, 1);         //ставим курсор в 12й столбец, вторую строку
             lcd.print(volt);        //вывод текущего напряжения на аккумуляторе
             lcd.print("V");         //
             _delay_ms(350);
             lcd.setCursor(15, 0);         //ставим курсор в 16й столбец, первую строку
             lcd.print("*");               //мигающий значок заряда
             _delay_ms(350);
             lcd.setCursor(15, 0);         //ставим курсор в 16й столбец, первую строку
             lcd.print(" ");               //мигающий значок заряда
             lcd.setCursor(11, 1);         //ставим курсор в 12й столбец, вторую строку
             lcd.print("     ");         //
             
           if (volt>=Vc)             //если зарядился - переходим в разряд
                {
                 digitalWrite(8,LOW);    //выключаем ключ зарядки аккумулятора
                 knop = 3;                    //фиксация окончания замера внутреннего сопротивления, переход к замеру ёмкости
                 tone(13, 1000, 150);   //тональный сигнал смены цикла
                }
            } 

       
   }
  }
//----------------------------------------------------------------------------------------------------------------
  if (knop==3){					//проверка сценария для разрядки
    lcd.clear();      // Чистим экран
    if (volt>Vd)
    {
          digitalWrite(8,LOW);		//отключаем ключ зарядки аккумулятора
             if (discharge_type==1)
                {
                 digitalWrite(9,HIGH);  //включаем ключ нагрузки 
                }
            if (discharge_type==2)
                {
                 digitalWrite(6,HIGH);  //включаем ключ нагрузки 
                }
            if (discharge_type==3)
                {
                 digitalWrite(6,HIGH);  //включаем ключ нагрузки 
                 digitalWrite(9,HIGH);  //включаем ключ нагрузки 
                }
      //#########цикл отсчета
      if (millis()-prMillis>=5000){
        prMillis=millis();
        SEK=SEK+5;
            if (discharge_type==1)
                {
                 am=(voltD/R10)*1000;        //считаем ток в mA =Uтекущее/Rнагрузки,  *1000 получаем mA
                }
            if (discharge_type==2)
                {
                 am=(voltD2/R15)*1000;        //считаем ток в mA =Uтекущее/Rнагрузки,  *1000 получаем mA
                }
            if (discharge_type==3)
                {
                am=((voltD/R10)*1000)+((voltD2/R15)*1000);        //считаем ток в mA =Uтекущее/Rнагрузки,  *1000 получаем mA
                }
        capvrem=am/720; cap=cap+capvrem;	//считаем емкость в mAh, при замере раз в 5 сек (в часе 3600сек / 5 = 720)
        if (SEK>59){SEK=0;MIN++;}
        if (MIN>59){MIN=0;HOUR++;}
        if (HOUR>23) HOUR=0;
      }
        //######################## 
      lcd.setCursor(0, 0);
      lcd.print("DisCh  ");
      lcd.print("I=");		//вывод на экран
      lcd.print(am, 0);		//вывод на экран
      lcd.print("mA ");		//вывод на экран
      lcd.setCursor(0, 1);
      lcd.print(volt); 
      lcd.print("V  Q=");	//вывод на экран
      lcd.print(cap, 0);		//вывод на экран
      lcd.print("mAh    ");	//вывод на экран
      lcd.setCursor(12, 1);
    }
    _delay_ms(500);
    if (volt<=Vd){knop=4; tone(13, 1000, 150);}  //фиксация окончания разрядки и замера емкости   
  }
//-------------------------------------------------
  if (knop==4){					              //сценарий окончания подсчета емкости, вывод на экран и зарядка.
    lcd.setCursor(10, 1);
    lcd.print(volt, 1);               //вывод на экран текущего напряжения аккумулятора
    lcd.print("V");

   switch (recharge_control)
    {
      case 0:                          //тест окончен, но аккумулятор полностью разряжен, выводим результаты на экран
       digitalWrite(8,LOW);            //выключаем ключ зарядки аккумулятора
       digitalWrite(9,LOW);            //выключаем ключ нагрузки
       digitalWrite(6,LOW);            //выключаем ключ нагрузки 2
       digitalWrite(7,LOW);            //выключаем светодиод заряда
       lcd.setCursor(0, 0);            //выводим значение внутреннего сопротивления
       lcd.print("R=");
       lcd.print(R,3);
       lcd.print(" ");
       lcd.setCursor(8, 0);
      if (HOUR<1){ lcd.print("00");}   //вывод времени разряда на экран
         else {lcd.print(HOUR);}
       lcd.print(":");
      if (MIN<1){ lcd.print("00");}    //вывод на экран
         else {lcd.print(MIN);}
       lcd.print(":");
       lcd.print(SEK);
       lcd.setCursor(0, 1);
//     lcd.print("Q=");                //вывод на экран
       lcd.print(cap, 1);              //вывод на экран
       lcd.print("mAh ");              //вывод на экран
       recharge_control=1;             //инкремент счётчика
       _delay_ms(5);
       break;                          //выход из case

      case 1:                      //тест окончен, результаты отображены, заряжаем
            if (volt<Vc)               //после того как посчитали емкость заряжаем
             {
              digitalWrite(8,HIGH);    //включаем ключ зарядки аккумулятора
              lcd.setCursor(15, 1);    //столбец 16, строка 2
              lcd.print(" ");          //мигаем звёздочкой индикатора заряда
              _delay_ms(250);
              lcd.setCursor(15, 1);    //столбец 16, строка 2
              lcd.print("*");         //мигаем звёздочкой индикатора заряда
              _delay_ms(250);
              }
            if (volt>=Vc)   //после того как зарядили переходим к поддержанию заданного напряжения
            {
              digitalWrite(8,LOW);             //отключаем ключ зарядки аккумулятора
              digitalWrite(7,HIGH);            //включаем светодиод заряда
              recharge_control=2;              //инкрементируем счётчик
              tone(13, 500, 300);
              _delay_ms(301);
              tone(13, 700, 300);
              _delay_ms(301);
              tone(13, 900, 300);
              _delay_ms(301);
            }
              break;

      case 2:
    if (volt<(Vc-0.2))                 //после заряда поддерживаем напряжение на 0.2 вольта ниже 
           {
              digitalWrite(8,HIGH);    //включаем ключ зарядки аккумулятора
              _delay_ms(150);
           }
    
    if (volt>=(Vc-0.2))                //после заряда поддерживаем напряжение на 0.2 вольта ниже
        {
         digitalWrite(8,LOW);          //отключаем ключ зарядки аккумулятора
         _delay_ms(500);
        }
            break;

    }
  }
}

void hello_screen()
{
  //вывод заставки ========================   
  lcd.setCursor(0, 0);                    //
  lcd.print("TestBAT ver0.55a");          //
  _delay_ms(1100);                        //
  lcd.setCursor(0, 0);                    //
  lcd.print(" Scatch srukami ");          //
  lcd.setCursor(0, 1);                    //
  lcd.print("  (bodriy2014)  ");          //
  _delay_ms(900);                         //
  lcd.setCursor(0, 0);                    //
  lcd.print("  1602 mod by   ");          //
  lcd.setCursor(0, 1);                    //
  lcd.print("    arthemy     ");          //
  _delay_ms(900);                         //
  lcd.setCursor(0, 0);                    //
  lcd.print("  final mod by  ");          //
  lcd.setCursor(0, 1);                    //
  lcd.print("     tekagi     ");          //
  _delay_ms(900);                         //
                                          //
  //вывод заставки ........................
}



void menu()                    //меню
{
knop=0;                        //обнуляем используемые переменные
akk_type=1;                    //по умолчанию Li-Ion
discharge_type=1;              //по умолчанию минимальный ток разряда
_delay_ms(150);              //задержка - антидребезг
while  (knop_menu!=0)            //пока не произведены начальные настройки остаёмся в меню
{
    if (digitalRead(2)==HIGH)    //нажатие кнопки
  {
    lcd.clear();                //чистим экран 
    knop++;                     //инкремент кнопки
    tone(13, 1000, 70);         //бипер
    if (knop>3){knop=1; }       // обнуляем нажатие  
    _delay_ms(75);              //задержка - антидребезг
  }
    if (digitalRead(3)==HIGH)    //нажатие кнопки
  {
    knop=0; 
    lcd.clear();                //чистим экран 
    knop_menu++;                //инкремент кнопки
    tone(13, 1000, 70);         //бипер
    if (knop_menu>3){knop_menu=1; }       // обнуляем нажатие  
    _delay_ms(75);              //задержка - антидребезг
  }     
switch(knop_menu)                //выбор типа аккумулятора и тока разряда
 {
case 1:                //выбор типа аккумулятора
     {
              lcd.setCursor(0, 0);                  //индикация текущего типа аккумулятора
              lcd.print("  akkum. type:  ");
                     if (knop==0)                    
                       {
                         lcd.setCursor(0, 0);
                         lcd.print("change akk type?");

                       if (akk_type==1)
                         {
                           lcd.setCursor(0, 1);
                           lcd.print("Li-Ion 2.9V-4.1V");
                         }
                       if (akk_type==2)
                         {
                           lcd.setCursor(0, 1);
                           lcd.print("Li-Pol 2.9V-4.2V");
                         }
                       if (akk_type==3)
                         {
                           lcd.setCursor(0, 1);
                           lcd.print("Li-Fe 2.8V-3.6V ");
                         }

                      }

                if (knop==1)                    //выбор литий-ионной батареи
                {
                  lcd.setCursor(0, 1);
                  lcd.print("Li-Ion 2.9V-4.1V");
                  akk_type=1;
                }
                if (knop==2)                    //выбор литий-полимерной батареи
                {
                  lcd.setCursor(0, 1);
                  lcd.print("Li-Pol 2.9V-4.2V");
                  akk_type=2;
                }
                if (knop==3)                    //выбор литий-железо-фосфатной батареи
                {
                  lcd.setCursor(0, 1);
                  lcd.print("Li-Fe 2.8V-3.6V ");
                  akk_type=3;
                }
            _delay_ms(250);
            break;
     }


case 2:                       //выбор тока разряда
    {
              lcd.setCursor(0, 0);
              lcd.print("discharge type: ");


             if (knop==0)                
              {
                  lcd.setCursor(0, 0);           //индикация текущей уставки тока разряда
                  lcd.print("change I disch.?");

                 if (discharge_type==1)       //минимальный ток
                   {
                     lcd.setCursor(0, 1);
                     lcd.print("minimum current ");
                   }

                 if (discharge_type==2)      //средний ток
                   {
                     lcd.setCursor(0, 1);
                     lcd.print("middle current  ");
                   }

                 if (discharge_type==3)      //максимальный ток
                   {
                     lcd.setCursor(0, 1);
                     lcd.print("maximum current ");
                   }
              }

                if (knop==1)                //выбор минимального тока разряда (R10)
                {
                  lcd.setCursor(0, 1);
                  lcd.print("minimal current ");
                  discharge_type=1;
                }
                if (knop==2)               //выбор среднего тока разряда (R15)
                {
                  lcd.setCursor(0, 1);
                  lcd.print("middle current  ");
                  discharge_type=2;
                }
                if (knop==3)               //выбор максимального тока разряда (R10+R15)
                {
                  lcd.setCursor(0, 1);
                  lcd.print("maximum current ");
                  discharge_type=3;
                }
           _delay_ms(250);                //задержка
           break;
    }

case 3:                                       //сохранение параметров и переход к тесту
    {
              lcd.setCursor(0, 0);
              lcd.print("  save and go   ");
              lcd.setCursor(0, 1);
              lcd.print("    to test?    ");
                if(knop==1)
                  {
                   knop_menu=0;

                     if (akk_type==1)
                         {
                           Vd=2.9;
                           Vc=4.1;
                         }
                     if (akk_type==2)
                         {
                           Vd=2.9;
                           Vc=4.2;
                         }
                     if (akk_type==3)
                         {
                           Vd=2.8;
                           Vc=3.6;
                         }
                  }
           _delay_ms(250);                //задержка
            break;
    }
 }
}
       knop=0;                             //обнуляем переменные
       knop_menu=0;                        //обнуляем переменные
}


Схема:

Схема.

 

Навикация по функциям и меню:

Меню.

На данный момент альфа-версия, только вчера добавил в скетч меню, пока на стадии тестирования, так что возможны глюки.

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

tekagi пишет:

...

Схема:

Схема.

 

Навикация по функциям и меню:

Меню.

....

Посмотрел схему и описание, это отдельный само достаточный прибор.

На голову выше того что я представил.

Он обладает более широким спектром возможностей и тонких настроек.

Заслуживает отдельной ветки и своего эксклюзивного названия (на совести автора)

tekagi
tekagi аватар
Offline
Зарегистрирован: 07.10.2016

Думаю в отдельную ветку выносить особого смысла нет, основной код взят из Вашей версии.