Автор Сообщение
RomaST
СообщениеДобавлено: Вт 07 Фев, 2017 17:18    Заголовок сообщения:

Алексей, спасибо. Всё заработало! Yahoo
Lex
СообщениеДобавлено: Вт 07 Фев, 2017 14:55    Заголовок сообщения:

RomaST писал(а):
LaleksUi писал(а):

:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFFFFFFFFFFFFFFFFFF15
:20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:20006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:20008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:2000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:2000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:2000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:00000001FF


У меня теперь есть программатор.
Делаю очередную неудачную попытку выставить шаг изменения напряжения в режиме ЗАР равным 10мВ.

Последовательность такая:
1) При помощи hex editor удаляю весь код из .eep файла и заменяю его вышепредставленным кодом.
2) Пытаюсь залить этот файл, но программа программатора выдает ошибку контрольной суммы.


из поста http://mobipower.ru/modules.php?name=Forums&file=viewtopic&p=6590#6590
Цитата:
итого, строка полностью:
Код:
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFFFFFFFFFFFFFFFFFFF5


Это первая строка. Как видим, тут в конце чексумма F5, вместо Вашей 15.
Меняйте в том файле первую строку на указанную. Должно прошиться.
RomaST
СообщениеДобавлено: Вс 05 Фев, 2017 10:23    Заголовок сообщения:

LaleksUi писал(а):

:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFFFFFFFFFFFFFFFFFF15
:20002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
:20004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
:20006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
:20008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
:2000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
:2000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
:2000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
:00000001FF


У меня теперь есть программатор.
Делаю очередную неудачную попытку выставить шаг изменения напряжения в режиме ЗАР равным 10мВ.

Последовательность такая:
1) При помощи hex editor удаляю весь код из .eep файла и заменяю его вышепредставленным кодом.
2) Пытаюсь залить этот файл, но программа программатора выдает ошибку контрольной суммы.
Lex
СообщениеДобавлено: Вт 31 Янв, 2017 18:03    Заголовок сообщения:

Цитата:
Подключаем последовательно с заряжаемым аккумулятором резистор (можно переменный).
Можно. Но найти переменный резистор на несколько ватт рассеиваемой мощности не слишком просто.
Цитата:
Я пользовался лампочкой. (лампа накаливания - это бареттер, у неё меняется сопротивление в зависимости от тока (и накала), нужно чёткое понимание как эта схема подключения будет работать, не любая лампочка подойдет)
Я бы сказал, нечто среднее между бареттером и резистором. Ток она стабилизирует, но слабо.

Моя лампочка 12В 4Вт из поворотника каких-то жигулей. При номинальном напряжении её потребляемый ток 4/12 = 0.33 A. При меньшем падении напряжения на лампочке -- ток через неё всё же уменьшается, хотя и медленнее чем на резисторе по закону Ома.
При зарядке никелевых аккумуляторов необходимо добиться лишь чтобы ток заряда был безопасной величины как для ВЦ, так и для заряжаемых аккумуляторов.
В моём случае максимальный ток через лампочку не превышает 0.35-0.4А даже при максимальном положении регулятора напряжения ВЦ. Эта величина безопасна при зарядке даже мизинчиковых NiMh (750mAh) аккумуляторов. Для пальчиковых запас ещё больше.

При зарядке одного мизинчикового аккумулятора от ВЦ с выкрученным в минимум регулятором напряжения -- ток через лампочку получается порядка 70 мА.

Таким образом, при неизменной лампочке я имею 2 способа регулировки тока через аккумуляторы:
- крутим напряжение и смотрим показания в канале тока. При максимальном положении ограничителя тока. В этом случае за ограничение тока отвечает лампочка. По мере зарядки аккумуляторов (повышении их напряжения) ток может незначительно уменьшаться.
- ставим напряжение заведомо выше необходимого, и следя за тем же каналом измерения тока крутим регулятор ограничения тока. В этом случае за силой тока следит электрическая часть ВЦ, ток получается более стабильным.

Теперь о резисторе.
Для безопасной зарядки резистор необходимо правильно рассчитать. Для этого используем закон Ома ( I = U/R ) и формулу для мощности P = U*I.
Для начала по закону Ома находим необходимое сопротивление, исходя из безопасного тока для зарядки аккумуляторов.
U принимаем как разность минимально возможного напряжения на выходе ВЦ (показания канала U при выкрученной в минимум ручке напряжения, в моём случае 3.9В) и номинального напряжения на заряжаемом аккумуляторе (для 1 банки NiMh можно принять 1.3В)
Получаем U = 3.9-1.3 = 2.6В. Это минимальное напряжение на рассчитываемом резисторе. (т.к. ручка выкручена в минимум).
Далее берём безопасную величину тока для аккумулятора. Я стараюсь не заряжать аккумуляторы током, выше 0.5C (где C -- ёмкость аккумулятора в A*ч). Так как времени всегда мало -- я выбираю ток выше рекомендуемых 0.1C.
Для мизинчикового аккумулятора ёмкостью 750мА*ч ток желательно ограничить 350мА = 0.35А.
R = 2.6В/0.35А = 7.43Ом.
По таблице номиналов резисторов -- ближайшими будут 7.5 для 5% точности и 8.2 для 10%. Меньшие значения выбирать не советую, т.к. это увеличит ток относительно рассчётного.

Далее, что необходимо рассчитать -- мощность, рассеиваемую на резисторе.
P = 2.6В*0.35А =0.91Вт
Не следует забывать, что мы рассчитываем режим с минимальным напряжением на выходе ВЦ. При его повышении получим соответствующий рост напряжения на резисторе и рассеиваемой им мощности.
Получили минимальную необходимую мощность резистора 1Вт. По опыту скажу, что резистор МЛТ, работающий на мощности близкой к максимальной можно сравнить с небольшой печкой, об которую легко обжечься. Так что в данном случае лучше брать резистор не менее 2 Вт. Будет горячий, но терпимо.

Относительно рассчётного ток можно увеличить, повысив напряжение на выходе ВЦ. При этом появляется возможность второй ручкой задать ограничение тока. Но не следует забывать, что ток ниже рассчитанного получить невозможно, т.к. пример приведён для минимально возможного напряжения на выходе ВЦ. Ниже этого напряжения ВЦ при ограничении тока также не сможет просадить выход.

Теперь можно посчитать КПД при зарядке.

На выходе ВЦ у нас Pou = U * I = 3.9 * 0.35 = 1.365Вт
В аккумулятор вкачивается 1.3 * 0.35 = 0.455Вт
КПД = 0.455/1.365 = 0.33 = 33%.
Оставшимися 0.91Вт мы греем атмосферу, приближая глобальное потепление.


P.S. На практике безопасные токи зарядки варьируются плюс-минус лапоть, их величину каждый для себя принимает сам. Так что не стОит относиться к моим цифрам, как к истине в последней инстанции.
И для универсального варианта можно рассчитать резистор, обеспечивающий минимальный из необходимых ток заряда (при мин. напряжении ВЦ, которое в примере 3.9).
- далее выкручиваем ручки тока и напряжения в минимум
- следя за каналом I (на всякий случай), увеличиваем напрядение ручкой U. ВЦ при этом должен уйти в ограничение тока на уровне минимального, согласно ручке I. Можно накрутить U до максимума, Фактическое напряжение в режиме ограничения тока меняться не должно (тут спорный момент, пусть Николай прокомментирует)
- увеличиваем ток до необходимого ручкой ограничения тока, включаем режим зарядки аккумуляторов, и наблюдаем процесс.

Ввиду большой неопределённости в ЛС по поводу лампочки (нельзя вот просто так взять и пользовать), попробую ещё раз разжевать:
На ней пишут её номинальное напряжение и ток, либо напряжение и мощность. Это значит, что при номинальном напряжении через неё будет течь соответствующий ток, либо будет выделяться соответствующая мощность (при этом ток из мощности вычисляется по формуле выше).

Далее достаточно руководствоваться 2мя правилами:
1. при напряжении на лампочке ниже номинального, ток в ней всегда будет ниже номинального.
2. Не следует превышать номинальное напряжение лампочки (в принципе, лампы переживают и 2х-кратное превышение, и после этого работают, но всё равно не советую).
Ещё раз уточню: При последовательном соединении на лампочке будет разность напряжений выхода ВЦ и заряжаемого аккумулятора.
И ещё, позанудствую для ясности: Под лампочкой понимаем исключительно лампу накаливания.

P.P.S. Коли уж просили поподробнее -- получайте. Хотя и сомневаюсь, что многие прочтут полностью)
Lex
СообщениеДобавлено: Вт 31 Янв, 2017 16:51    Заголовок сообщения:

LaleksUi писал(а):
Лекс, это:
http://www.mobipower.ru/modules.php?name=Forums&file=viewtopic&p=6546#6546
будет реализовано на МК ?

интересно для инструкции.
при достаточном размере флешки -- реализовать не проблема.
Все параметры (напряжения и токи) измеряются всё время, пока включён МК.

Главное не забывать, что МК доступа к движку автоотключения не имеет -- стало быть работать будет независимо от его положения.
Lex
СообщениеДобавлено: Вт 31 Янв, 2017 16:29    Заголовок сообщения:

LaleksUi писал(а):
для инструкции нужно пересчитать контрольную сумму для исправленной строки:
было:
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0FFFFFFFFFFFFFFFFFF15

стало:
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFFFFFFFFFFFFFFFFFF??

какая сумма? Лекс, проверьте пожалуйста, только у вас объективно сейчас есть возможность это сделать, Роман не прочитал моего письма до сих пор, Николай говорил что ему пока некогда тестировать, ко мне программатор не прилетел ещё; а в инструкцию нужно правильный пример вписать, готовый к употреблению.

Ищу в яндексе intel hex. Открываю статью https://ru.wikipedia.org/wiki/Intel_HEX
читаю:
Последний байт в записи является контрольной суммой. Рассчитывается так чтобы сумма всех байтов в записи была равна 0.

Количество байт в записи у нас 0x20, то есть 32. Из них 31 байт равны 0xFF.
Код:
31*0xFF + 0x0A = 0x1EEB
. -- обрезаем до одного байта, выходит 0xEB
Туда же прибавляем оставшиеся байты
Код:
0x 20 00 00 00
.
Код:
0x1EEB + 0x20 + 0x00 + 0x00 + 0x00 = 0x1F0B


Теперь ищем, чем дополнить 0x0B, чтобы младший байт был равен 0x00
Код:
0x100 - 0x0B = 0xF5
-- Полученное должно быть нашей искомой контрольной суммой.

альтернативный вариант (кому как понятнее):
Код:
0x00 - 0x0B = 0xFFFFFFF5
(так мне калькулятор выдал). Берём отсюда один младший байт: 0xF5

итого, строка полностью:
Код:
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFFFFFFFFFFFFFFFFFFF5


Цитата:
это же пару минут - запустить утилиту - пусть выдаст чексумму. Спасибо.
Утилита без подключенного МК не работает. Развинчивать лишний раз ну совсем нет желания -- у моего нового экземпляра корпус закрывается проблематично
nik34
СообщениеДобавлено: Вс 29 Янв, 2017 11:25    Заголовок сообщения:

Цитата:
{Алексей} Николай по физике рассуждает верно, но он забыл учесть одну особенность алгоритма контроллера (измерение при выключенном выходе), которая сильно упрощает жизнь. (далее?...)

Прошу прощения, я, действительно, забыл, что у нас измерение напряжения на заряжаемом акк. идет при снятом токе. Тогда, согласен, можно использовать внешний резистор.
---
Давно не заглядывал в тему. Такое ощущение, что она все усложняется и нормальному человеку, не программисту-перфекционисту разбираться в этих дебрях проблематично. По моему, и сам Алексей Lex уже про себя матерится, что связался. Wink Сам я уже давно потерял суть обсуждения.
Я, например, сейчас в оставшиеся платы ВЦ6 ставлю 2ю версию прошивки, и предполагаю, что большинство она вполне устроит.
LaleksUi
СообщениеДобавлено: Сб 28 Янв, 2017 10:42    Заголовок сообщения:

начало нашей беседы с Лексом:
Цитата:
**{Алексей} Лайфхак для зарядки аккумуляторов с напряжением ниже выходного:
в прошивке сохранена возможность установить напряжение зарядки внешних аккумуляторов от 1В, но в приборе не работает ограничение тока при низких выходных напряжениях...

Подключаем последовательно с заряжаемым аккумулятором резистор (можно переменный). Я пользовался лампочкой. (лампа накаливания - это бареттер, у неё меняется сопротивление в зависимости от тока (и накала), нужно чёткое понимание как эта схема подключения будет работать, не любая лампочка подойдет)
В результате имеем ограничение тока, а т.к. напряжение прибор измеряет при отключённой повышайке -- и корректное измерение напряжение окончания заряда через тот же резистор.
Таким способом мне удаётся заряжать 1 мизинчиковый аккумулятор, пусть и с низким КПД.
Разумеется, сопротивление и мощность резистора должны соответствовать требованиям режима работы.
(лайфхак - это что-то простое; а здесь неопределенность, сколько напряжения падало на резисторе, какое напряжение окончания заряда надо ставить в ВЦ, какое напряжение МК измерит через резистор, это же делитель, а у акк, особенно маленьких, бывает разное внутреннее сопротивление, это не просто; тут мультиметр нужен, что бы все правильно сделать, ИМХО, даже с пониманием как.
требуется более подробное описание, какой резистор взять для А1, какой для А2, какие напряжения окончания ставить в МК, все 4 случая надо описать: 1, 2 ААА, 1, 2 АА)
я написал Николаю вопрос:
Цитата:
Лекс предложил поправку
к вашим словам, в разделе разработка:
Цитата:
можно добавить комментарий (с согласия автора), что контроль будет. Через резистор. Программа сразу будет работать в режиме "окончания заряда", измеряя напругу на отключённом выходе.
в спойлере КЗ в А1 и А2.
(я сомневаюсь в его образовании на эту тему, и он это не опровергает);
уже давно прожеванная тема опять всплывает, процитирую:

Цитата:
****{Роман} писал:
Николай, а как выйти из этой ситуации? Чего добавить к аккумулятору, чтоб зарядить его?
******{Николай} Купить USB зарядник для АА/ААА акк. (как пример, та же Литокала, что у меня на сайте)
Поставить резистор, чтобы ограничить ток до безопасного для 10 часовой зарядки. Правда, в этом случае, не будет контроля по напряжению, но он и не нужен, т.к. контроль будет по времени. И будет плохой КПД такой зарядки, т.к. половина энергии уйдет в нагрев резистора. (Это при зарядке 1 или 2х последовательных акк. на 1.2В, от 3х и более - будет штатная работа.)
что это значит "контроль будет. Через резистор." ?

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

этот пост (сп. КЗ в А1 и А2), там где в середине:
Цитата:
**{Алексей} Лайфхак для зарядки аккумуляторов с напряжением ниже выходного:
он красный от моих замечаний, и у нас с Лексом вышел вялый спор, недопонимание на эту темy;
что же будет с другими пользователями, они, в большинстве своём, не будут умнее нас. значит история повторится.

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

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

желательно по лампочке и по резистору как-то отдельно высказаться, потому что даже я понимаю, что это разные вещи, а Лекс их смешивает.
чуть выше в статье есть спойлер вашим подробным описанием "почему нельзя",
но, как видите, люди упрямы, и хотят знать как "всё-таки можно".

просто непонимание объективно присутствует, и мне хочется это разжёвано внести в Инструкцию. Спасибо.
вот подготовленный для публикации ответ Николая:
Цитата:
Цитата: как подключить внешний резистор для зарядки 1.2В аккумуляторов от вампирчика?
(пользователю, который не знает, как использовать закон Ома, этот метод не подходит. следует купить какой-нибудь USB зарядник для пальчиков, например Литокаала и т.п., который нормально зарядит АА/ААА и сделает это с большим КПД, чем с использованием резистора).

**{Николай} Резистор нужен, чтобы ограничить ток, который потечет в аккумулятор. Его сопротивление можно выбрать используя формулу закона Ома:
R = U / I
где:
U - разность напряжений между выходом ВЦ (или любого другого БП) и акк;
I - желаемый ток заряда.
Т.е. если мы выставим на ВЦ напряжение 4В, а на аккумуляторе будет около 1.5В, и захотим заряжать током 0.1А, то номинал резистора будет (4-1.5)/0.1= 25 Ом.

Никого контроля со стороны микроконтроллера за окончанием заряда мы делать не сможем, т.к. измеряем только то напряжение, что есть на выходе, т.е. 4В.
(теоретически, мы, конечно можем, зная номинал резистора и выходной ток, вычислить напряжение на аккумуляторе, но на практике точность такого измерения будет небольшая, т.е. это делать бессмысленно. К тому же, надо будет вводить в МК величину резистора, т.к. он может быть разным - мало ли какой найдется у пользователя.)

Поэтому, этот вариант подходит только тем, кто и так сам сообразит, что делать.
Тем более, если можно купить какой-нибудь USB зарядник для пальчиков. Например, те же Литокаала и т.п., который нормально зарядит АА/ААА и сделает это с большим КПД, чем с использованием резистора. И без "танцев с бубном".

Что касается лампочки накаливания вместо резистора - это тот же резистор, но сопротивление которого меняется, в зависимости от тока, который через нее идет.
Тут каша с объяснениями получится еще больше, чем с постоянным резистором.

Лекс предложил лампочку для стабилизации тока заряда аккумулятора, чтобы он изменялся в процессе заряда в меньшей степени, чем с использованием резистора. Но так ли нужна нам эта стабилизация тока, который и так меньше безопасного? И если резистор подходящего номинала в загашнике еще можно найти, то лампочку - вряд ли.
В общем, лишние заморочки.
****{Алексей} Николай по физике рассуждает верно, но он забыл учесть одну особенность алгоритма контроллера (измерение при выключенном выходе), которая сильно упрощает жизнь. (далее?...)
LaleksUi
СообщениеДобавлено: Сб 28 Янв, 2017 8:23    Заголовок сообщения:

Лекс, это:
http://www.mobipower.ru/modules.php?name=Forums&file=viewtopic&p=6546#6546
будет реализовано на МК ?

интересно для инструкции.
LaleksUi
СообщениеДобавлено: Сб 28 Янв, 2017 8:12    Заголовок сообщения:

для инструкции нужно пересчитать контрольную сумму для исправленной строки:
было:
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0FFFFFFFFFFFFFFFFFF15

стало:
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0AFFFFFFFFFFFFFFFFFF??

какая сумма? Лекс, проверьте пожалуйста, только у вас объективно сейчас есть возможность это сделать, Роман не прочитал моего письма до сих пор, Николай говорил что ему пока некогда тестировать, ко мне программатор не прилетел ещё; а в инструкцию нужно правильный пример вписать, готовый к употреблению. это же пару минут - запустить утилиту - пусть выдаст чексумму. Спасибо.
LaleksUi
СообщениеДобавлено: Сб 28 Янв, 2017 7:57    Заголовок сообщения:

Lex писал(а):
Цитата:
темно-красный: требуется комментарий/разъяснение разработчика. призыв к пользователю задуматься.
Я, как разработчик, в этом путаюсь. И начинаю комментировать призывы к пользователю задуматься. Может быть, имеет смысл части не решённые с разработчиками выделять иначе?
Скрытый текст:показать

если я правильно понял исходную фразу: и места, где требуется разъяснение, и места, где пользователь должен сам подумать, выделяются однотипно.
здесь нет противоречия, просто это одно и тоже, увиденное с разных сторон.
инструкция существует долго, разработчики заняты, пользователю остаётся только самому задумываться, если профессионалы (пока ещё? а когда? ожидание = "8 на боку"...) не доделали.

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

все красные замечания желательно заменить хотя бы синими или полностью разжевать, объяснить. в разделе Разработка это можно не делать, он для разработчиков, профессионалов. но всё что для пользователей, надо разжевывать, это же обязательно! уж вы, как программист, вполне способны меня понять именно сквозь свой опыт.
подведу ИТОГ. это одно и тоже - где не доделал профи будет колхозить пользователь, это неизбежность. оставим по прежнему.
LaleksUi
СообщениеДобавлено: Сб 28 Янв, 2017 7:32    Заголовок сообщения:

Lex писал(а):
Цитата:
после надписи [FUL] кнопки будут заблокированы, и в ВЦ6 будут работать только фонарик, входные разъёмы (понижайка и зарядка внутр. акк) и [USB2], но только если ОН НЕ подключён параллельно [USB1] (джампером внутри корпуса). То есть, при воткнутом питании, например СолБат, на [USB2] будет напряжение от понижайки. В случае параллельного подключеня [USB] разъёмов, [USB2] будет отключён от понижайки, и НЕ будет активен.
Здесь можно попробовать упростить.
Основная суть в следующем:

При отображаемой надписи [FUL] прибор фактически работает с нажатой кнопкой выключения.

Всё остальное напрямую следует из данного факта. То есть не включается (не работает) повышайка. Все остальные части прибора функционируют без изменений. В этом режиме контроллер, пока включён, по сути "держит" кнопку выключения.
упростить - в смысле уменьшить количество слов? то есть меньше разжевать, более умно, коротко, вплоть до гениальности высказаться, так?
только что бы понять гениальное надо быть не меньшим гением: вспомним Шерлока Холмса. (что я имел ввиду? я высказался кратко, но понятно ли я сказал?)

я понимаю такой способ мышления, от противного, способом вычитания малого из общего, очень экономит силы, согласен. но для него нужно знать целое, а я на это не могу рассчитывать, у меня как раз все наоборот.
Цитата:
прибор фактически работает с нажатой кнопкой выключения.
переведу на русский: работает когда выключен.
подробнее: у кнопки выкл есть не 2 как обычно, 3 состояния - вкл, выкл и недовыкл. (заметьте, это не факты, это мои фантазии, выдумки), что означает недовыкл? разве он описан в руководстве в ВЦ6 ? по моему нет. значит фантазия не верна. значит, первый вариант, значит ВЦ6 работает в выключенном состоянии. но и это противоречит здравому смыслу. запихивать такое противоречие в голову читателя = усложнить а не упростить.

моя задача не обучать пользователя, а упростить порог вхождения в материал, что бы менее заточенный в теме человек тоже смог воспользоваться, при желании.
подведу ИТОГ: ваша фраза не содержит информации. этот способ только усложнит восприятие пользователю. оставим как есть.
совет: говорить с пользователем только в направлении "с начала до конца" мыслеобраза, но не в обратном порядке. в обоих направлениях можно говорить только с профессионалами, только они знают образ целиком, и могут идти от обратного.
Lex
СообщениеДобавлено: Сб 28 Янв, 2017 1:37    Заголовок сообщения:

В инструкции и сообщениях часто мелькают числа в формате 0xNNNN. Считаю, что это требует пояснения, особенно для людей, далёких от программирования.
Так вот, приставка 0x у чисел указывает, что данное число записано в шестнадцатеричном (hexadecimal, hex) формате. Вместо традиционного десятичного.
В качестве примера:
0x0 = 0;
0x9 = 9;
0xA = 0xa = 10;
0xF = 15;
0xFF = 255;
0x100 = 256.
Lex
СообщениеДобавлено: Сб 28 Янв, 2017 1:17    Заголовок сообщения:

Цитата:
после надписи [FUL] кнопки будут заблокированы, и в ВЦ6 будут работать только фонарик, входные разъёмы (понижайка и зарядка внутр. акк) и [USB2], но только если ОН НЕ подключён параллельно [USB1] (джампером внутри корпуса). То есть, при воткнутом питании, например СолБат, на [USB2] будет напряжение от понижайки. В случае параллельного подключеня [USB] разъёмов, [USB2] будет отключён от понижайки, и НЕ будет активен.
Здесь можно попробовать упростить.
Основная суть в следующем:

При отображаемой надписи [FUL] прибор фактически работает с нажатой кнопкой выключения.

Всё остальное напрямую следует из данного факта. То есть не включается (не работает) повышайка. Все остальные части прибора функционируют без изменений. В этом режиме контроллер, пока включён, по сути "держит" кнопку выключения.
Lex
СообщениеДобавлено: Пт 27 Янв, 2017 23:00    Заголовок сообщения:

Цитата:
темно-красный: требуется комментарий/разъяснение разработчика. призыв к пользователю задуматься.
Я, как разработчик, в этом путаюсь. И начинаю комментировать призывы к пользователю задуматься. Может быть, имеет смысл части не решённые с разработчиками выделять иначе?
Скрытый текст:показать

если я правильно понял исходную фразу: и места, где требуется разъяснение, и места, где пользователь должен сам подумать, выделяются однотипно.
Lex
СообщениеДобавлено: Чт 26 Янв, 2017 18:22    Заголовок сообщения:

Предлагаю здесь писать по принципу один вопрос=один пост. Чтобы удобнее было чистить решённые вопросы.
Lex
СообщениеДобавлено: Чт 26 Янв, 2017 18:19    Заголовок сообщения:

Цитата:
==
это: программатор, самостоятельная прошивка, калибровка->8. Настройка шага изменения U в режиме ЗАР в .eep (для 006):
вы писали: Величина смещения искомого байта = 22 = 0x16.
сверху строка от 5 прошивки eep, снизу от 6.
в меру понимания обычного человека, я просто посчитал байты, и как видите, ваша правка на 23 месте:
Код:

:20000000FFFFFFFF001001110212031304140515061607170818FFFFFFFFFFFFFFFFFFFF16
01 2 04 08 10 16 20 22
:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0FFFFFFFFFFFFFFFFFF15

в чем я ошибаюсь? или вы ошиблись, а Роман вообще бред несет?
это надо правильно вписать в инструкцию.

В меру понимания обычного человека -- всё верно. Но есть нюанс. Люди в жизни оперируют натуральными числами (1, 2, и т.д.), а в программировании счёт часто с нуля начинается.
В данном примере у байта помеченного "01" смещение 0. То есть он смещён относительно начальной позиции на 0 байт.
А 23е место относительно начального (1го) смещено, соответственно, на 22 байта. То есть тут я посчитал правильно.
А ошибся я запутавшись в обратном порядке байт, (в строке выше ..0818.. следует интерпретировать как число 0x1808). И переставил местами части одного байта (10=) 0x0A->0xA0 (=160) -- этого делать не нужно.

Правильный ответ: вместо A0 должно быть 0A

Написал маленькую программку, и скормил ей файлы с калибровками. Вышло следующее:

файл-пример из поста http://mobipower.ru/modules.php?name=Forums&file=viewtopic&p=6462#6462
Код:
 sizeof=25
magic = 0xFFFFFFFF
cal[0]=0x1000
cal[1]=0x1101
cal[2]=0x1202
cal[3]=0x1303
cal[4]=0x1404
cal[5]=0x1505
cal[6]=0x1606
cal[7]=0x1707
cal[8]=0x1808
volt_step = 0xFF
fullres = 0xFF
lowlight = 0xFF


Файл с шагом 10 мВ для RomaST. Обсуждался начиная отсюда: http://mobipower.ru/modules.php?name=Forums&file=viewtopic&p=6509#6509
Код:
 sizeof=25
magic = 0xFFFFFFFF
cal[0]=0xFFFF
cal[1]=0xFFFF
cal[2]=0xFFFF
cal[3]=0xFFFF
cal[4]=0xFFFF
cal[5]=0xFFFF
cal[6]=0xFFFF
cal[7]=0xFFFF
cal[8]=0xFFFF
volt_step = 0xA0
fullres = 0xFF
lowlight = 0xFF

Согласно увиденному, шаг перестройки должен быть равен 0xA0=160мВ. Т.е. да, я промахнулся на один шестнадцатеричный разряд. На остальные настройки повлиять не должно -- они заполнены значением по умолчанию.

Чтобы окончательно докопаться до истины -- можно проверить на реальном железе. Шаг в режиме ЗАР должен измениться на 0.16В, и это должно быть единственным изменением.
Если кому [не лень/есть время] -- проверьте и отпишитесь.
LaleksUi
СообщениеДобавлено: Чт 19 Янв, 2017 3:55    Заголовок сообщения:

резерв 06
LaleksUi
СообщениеДобавлено: Чт 19 Янв, 2017 3:55    Заголовок сообщения:

резерв 05
LaleksUi
СообщениеДобавлено: Чт 19 Янв, 2017 3:54    Заголовок сообщения:

резерв 04
LaleksUi
СообщениеДобавлено: Чт 19 Янв, 2017 3:54    Заголовок сообщения:

сборка с 1,2,3,4,5,6,7,8- страницы
правки L1,L2,N,L,L,L3.

История Разработки.
условные обозначения:показать

[...] - элементы управления на ВЦ, экран, кнопки, крутилки, рычажки, джамперы, разъемы.
{Николай, nik34} - Автор аппаратной части, собственно электроники ВЦ6, радиомастер.
{Александр, alsegor} - Автор первоначальной прошивки ещё для ВЦ5, программист.
{Алексей, Lex} - Автор новой прошивки для ВЦ6, программист.
{Роман, RomaST} - Роман, первый тестер.
**,****,****** - вложенность диалогов в сложной беседе.
выделения цветом:
темно-красный: требуется комментарий/разъяснение разработчика. призыв к пользователю задуматься.
темно-синий: желательно обратить внимание.
ярко-синий: требуется обратить внимание.
светло-серый: неважное или второстепенное замечание или отсылка. (для удобства чтения можно выделить текст мышкой)
серый: чуть более важное, чем неважное; и всегда второстепенное замечание.
разработка:показать

Схема подключения контроллера, делителей АЦП:показать


МК только измеряет напряжение в заданном канале, кроме случая работы в режиме [ЗАР] (зарядника). В этом случае он дополнительно подает сигнал остановки работы (единица) на ножку 15 (pb3, mosi).
По каналу termo просто подается плюс питания, если будет низкий уровень, то МК подаст сигнал отключения на ножку 15, решив, что сработал термодатчик. (этот кусок в программе не нужен, т.к. сейчас термозащита контроллер не использует.)
Pou лучше мерять в единицах Вт. Заодно исчезнет индикация мощности без нагрузки:показать

{Алексей} ноги растут от ненулевых значений тока на холостом ходу. Либо в них поправку или минимальный порог вводить, либо тогда и ток округлять до единиц сильно превосходящих миллиамперы. Иначе это похоже на лечение симптомов вместо болезни.
{Николай} Ненулевые показания тока не убрать, т.к. это свойство микросхемы измерителя. Но можно убрать ненужное разрешение, оно не увеличивает точность. все должно быть согласовано: грубому датчику - достаточная степень округления. Лишнее мелькание цифр раздражает, они уже не значащие. разрешение и точность в 0.1Вт вполне устроит большинство.
**{Алексей} Давайте попробуем разобраться, из-за чего так происходит, вдруг можно немного компенисровать.
Моё предположение: для измерения тока используется токовый монитор, измеряющий напряжение на шунте в "+" шине. Ток его потребления и вносит нам дополнительную погрешность в измерения. И если этот ток как-то нормирован -- можно соответствующее значение вычитать из результата. Таким образом может получиться снизить разрешение измерителя до 10-20мА.
****{Николай} Там стоит токовый монитор с выходом по напряжению, а не току. MAX4372F, шунт 20мОм.
Если интересно, можете глянуть даташит на него. В общем, несколько процентов погрешности иметь будем.
Есть идея вычислять мощность входную/выходную/ещё какую:показать

{Алексей} Если по выходу всё очевидно, [I ] * [U ]; то для входной что перемножать, чтобы было юзабельно?
Например [Uac] * [Ich] даст мощность, текущую в аккумуляторы, но только при отсутствии дополнительной нагрузки [USB2] у понижайки.
{Николай} Входную мощность можно определить только косвенно, перемножив [Ich] на 5В (в режиме стабилизатора) или [Ich] * ([Uac] + 0.45В) (в режиме зарядника) и на 1.2 (как учет КПД импульсной части и выпрямителя). Но точность будет маленькая, т.к. ток меряется грубо и не калибруется (только если каждый для себя будет подгонять резисторы).
Можно программно скорректировать погрешность измерения тока выхода - там после примерно 1.5А ВЦ начинает завышать показания.
**{Алексей} Если завышение имеет высокую повторяемость на разных экземплярах и в разных условиях -- можно попробовать табличку пересчёта добавить. Завышает по причине нагрева шунта? (На плате есть нечто, выглядящее как шунт. Какую функцию оно выполняет?)
В описании контроллера упоминаются часы реального времени:показать

{Алексей} Кварца на плате я не заметил. Это значит, что с часами работать не получится? Полезо было бы иметь информацию о времени для подсчёта заряда/энергии.
{Николай} Кварца нет, используется внутренний RC-генератор контроллера, а он довольно грубый. Так что, с часами - пролет.
{Александр} Генератор наверняка будет плавать так как там RC цепь, но вот в каких пределах не проверял, не было необходимости, боюсь он и от экземпляра МК будет меняться, поэтому длительные задержки будут иметь высокую погрешность.
{Николай} Она будет равной точности RC-генератора. В конце-концов, точность нам большая и не нужна, даже 20% хватит с лихвой - это же, скорее, предохранительный таймер, он может быть очень грубым.
{Алексей} Мой вопрос был не понят. Я имел в виду нестабильность в рамках одного экземпляра. Если каждый пользователь откалибрует свой прибор через меню, насколько потом частота может гулять?
{Николай} Не знаю точно. Нужно брать datasheet на контроллер, там обычно указано.
{Роман} ...отключаемый таймер в режиме [ А ]. Чтоб можно было выбирать способ окончания заряда, либо по напряжению, либо по времени, либо по тому, что наступит раньше.
{Алексей} На практике, выйдет очень и очень приблизительный таймер, основанный на циклах программы, считающий "попугаев" (сравнимых с минутами), и в лучшем случае откалиброванный по моему экземпляру прибора. При таком подходе погрешность 10-20% вполне возможна.
{Николай} Да хоть 50% точность. Это таймер безопасности, его нет смысла делать точным.
Подробности работы режима ЗАР:показать

1.{Роман} Что происходит во время глюка и как это программно исправить, Николай, надеюсь, подробнее обяснит.
По сути, режим ЗАР отключает питание заряда внешних аккумуляторов при достижении нужного напряжения на этих аккумуляторах.
**{Николай} Совершенно верно. Только используется более сложный алгоритм с измерением напряжения без тока заряда и несколькими проверками, для исключения влияния помех.
1.{Роман} ...Достаточно оставить в этом режиме только одну функцию: возможность выбора напряжения отключения от 1.00В(нижний порог) до 16.00В, с шагом выбора 0.01В.
**{Николай} По сути дела, так и сделано. Только добавлен промежуточный выбор "для чайников", которые не знают на память, до какого же напряжения им заряжать. Поэтому и добавлены типа "1шт LiI0n", "2шт LiIon" и т.д.;
Разрешение АЦП в МК не позволяет мерять с таким (0.01В) малым шагом. Поэтому шаг 0.1В.
**{Алексей} чисто математически, разрешение АЦП = 1.1*16/1024 = 0,0171875 В. Или с учётом 16ти измерений с усреднением -- вообще 1.1/1024 = 0,001074219 В. Это если не учитывать калибровки, шумы, погрешность внутреннего источника 1.1В...
****{Николай} Если с циферкой 0.017 я еще могу согласиться, то с утверждением, что при большем количестве измерений мы увеличим точность - нет. По этой логике, если мы 500 раз померяем 2х позиционным индикатором какое-нибудь напряжение, то получим разрешение в 1/1000? Чудеса?
******{Алексей} Тут я рассуждал из соображений, что ошибка измерений младшего разряда подвержена равномерному распределению вероятности.
Например, если фактическая величина напряжения составляет 0,7 от младшего разряда, тогда мы должны получить примерно в 70% измерений большее значение, в 30% меньшее. Это идеализированная теория. А так да, пусть будет 0.02В. Можно в качестве шага выбрать 0.05.
**{Алексей} Но никто не мешает нижний порог изменить хоть сейчас. В данный момент там 4000 мВ.
****{Николай} Изменить, то можно, но классическая схема понижающего преобразователя не может иметь на выходе напряжение меньше, чем на ее входе (с точностью до падения на прямовключенном диоде). А у нас питание от 3 до 4.2В.
1.{Роман} ...Что бы корректно зарядить внешний аккумулятор на 100%, напряжение нужно мерять в момент отключения питания. Если мерять выход повышайки, получим недозаряд аккумулятора.
**{Николай} Это уже описывалось несколько раз. (глюк)
Если коротко, то чуть-чуть недозаряжает и отключается, не выдавая надпись [Ful].
Суть в том, что для исключения влияния внутреннего сопротивления заряжаемого аккумулятора, мы измеряем напряжение на нем, останавливая зарядный ток, временно отключая повышающий преобразователь.
В 5й версии сигнал МК на приостановку работы подавался на сам преобразователь и после снятия сигнала, работа преобразователя продолжалась. И только в конце, когда МК решал, что акк. уже заряжен, он писал [Ful] и выдавал сигнал остановки постоянно.
В 6й же, текущей, версии сигнал остановки с МК идет не на преобразователь, а в схему выключения (фактически, на кнопку [выкл]), соответственно он просто, тупо выключает ВЦ.
Ситуацию спасает, что кнопка [выкл] срабатывает с задержкой и при однократном измерении напряжения на заряжаемом акк. МК успевает снять напряжение с выхода, измерить напряжение на акк. и снова разрешить зарядку. Но в конце зарядки, прежде, чем окончательно отключиться, МК делает измерения несколько раз подряд и суммарное время оказывается большим и кнопка [выкл] успевает окончательно сработать и полностью выключить ВЦ.

{Алексей} В режиме зарядки, в теле основного цикла делается:
1. анализ напряжения (при зарядке тут же периодическое отключение выхода с включением на следующей итерации)
2. цикл по всем входам АЦП, в котором:
2.1 цикл по текущему входу АЦП (кол-во итераций=коэфф. деления +4 холостых), в котором:
2.1.1. одно измерение напряжения
2.1.2. опрос кнопок
2.1.3. отображение очередной позиции индикатора (из 3)
Иными словами, при измерении напряжения заряжаемых акк, выход пребывает в выключенном состоянии ровно одну итерацию основного цикла, пока работает измерение всех входов (та самая пачка).
КЗ в А1 и А2; и почти-невозможность зарядки меньше 3х AA акк:показать

{Роман}
В режиме А1 и А2 нет смысла, т.к. 1 или 2 NiMH вампирчик уводят в КЗ.
**{Николай}
В соседней теме:показать

{Николай} В ВЦ используется классическая схема повышающего преобразователя, которая в принципе, не позволяет ограничивать ток при напряжении на выходе ниже, чем на входе. НО, между выходом преобразователя и выходным разъемом стоит последовательный полевик (р-типа) для защиты от перепутки полярности. Это полевик и позволял иметь такую недокументированную возможность, как ограничение тока при низком выходном напряжении.
За счет чего это получалось? Этот полевик открывается при напряжении около 4В, поэтому, если схема регулировки тока в повышайке понизит напряжение на выходе повышайки до минимума, т.е. в реале ниже 4В, это последовательный полевик закрывается и ограничивает ток в нагрузку. Собственно таким образом и достигалась относительно безопасная регулировка тока при напряжениях ниже напряжения питания повышайки.
Почему же теперь идут сообщения о невозможности ограничить ток при низких напряжениях на выходе?
Дело в том, что в 5й версии ВЦ на выходе в защите стоял полевик типа IRFR5305, который имеет порог открывания 4В(макс). Этот полевик имеет сопротивление канала около 65мОм. Сейчас в 6й ВЦ ставлю полевик типа SUD50P06, который имеет более низкий порог - не более 3В, зато, сопротивление канала в 4 раз меньше, около 15мОм. Т.е., даже если схема повышайки опустила напряжение на ее выходе до минимума, то его все равно еще достаточно для открывания последовательного полевика и через него в нагрузку "шпарит" ток.
Если быть более точным, то этот порог открывания проходит где-то по границе минимального выхода повышайки, поэтому выходной ток зависит от уровня заряженности внутренних акк.
В общем, получается, что мы уменьшив резистивные потери на последовательном полевике, лишились регулировки тока при зарядке акк. с напряжением ниже, чем на внутренних акк. Т.е. эта недокументированная возможность стала негарантированной. Этим пришлось заплатить за некоторое повышение КПД.
Повторюсь, возможность негарантированная. Она зависит от типа использованного полевика и от разброса его напряжения включения. В старых моделях работала стабильно, сейчас - как повезет.
Также, кроме sud50p06 может стоять и p3506, у которого порог открывания выше, чем у sud50р06. В этом случае, скорее всего зарядка низковольтных акк. будет возможна. В общем, здесь без гарантий.
**Цитата:
Стало быть, при выкрученной в минимум ручке напряжения, прибор следует рассматривать, как защищённый [внутренний] аккумулятор?
{Николай} Фактически, да. Несмотря на то, что нет регулировки тока. При КЗ на выходе, во-первых, ток ограничивается сопротивлением последовательного полевика, когда он находится в режиме начала проводимости, т.е. не может пропустить большой ток, во-вторых, напряжение на акк. при большом токе тоже проседает, что еще более закрывает полевик. Т.е. даже если не влияет регулируемый ограничитель, ток все равно будет не слишком большим.
А, далее, этот ток разогревает полевик и срабатывает термозащита, которая его отключает. ну а дальше, цикл - вкл/откл, при поддержании температуры на полевике около 80гр.
Т.е. акк. мы защитили от КЗ.
**Цитата:
Насчёт грубого разрешения измерителя при калибровке плат могу предложить калибровочный вариант прошивки: Будут отображаться только 3 младших десятичных разряда во всех режимах измерений. Это позволит исключить погрешность отображения при калибровке.
{Николай} Нет, спасибо.
Мне что, больше делать нечего, как часами "ловить блох" с милливольтами? ВЦ все же не измерительный прибор, а всего лишь "блок питания на батарейках". И любой перфекционизм с точностями должен иметь границы, чтобы не превратиться в маразм. 2 цифры после запятой, как сейчас, вполне достаточно.
(кстати, Алексей, спасибо, стало гораздо удобнее настраивать).
я описал, почему не стоит надеяться на гарантированную зарядку аккумуляторов с напряжением ниже чем у внутренних акк. вампирчика. Поэтому не думаю, что в прошивке стоит плясать от этих низковольтных измерений.

**{Алексей} Лайфхак для зарядки аккумуляторов с напряжением ниже выходного:
в прошивке сохранена возможность установить напряжение зарядки внешних аккумуляторов от 1В, но в приборе не работает ограничение тока при низких выходных напряжениях...

Подключаем последовательно с заряжаемым аккумулятором резистор (можно переменный). Я пользовался лампочкой. (лампа накаливания - это бареттер, у неё меняется сопротивление в зависимости от тока (и накала), нужно чёткое понимание как эта схема подключения будет работать, не любая лампочка подойдет)
В результате имеем ограничение тока, а т.к. напряжение прибор измеряет при отключённой повышайке -- и корректное измерение напряжение окончания заряда через тот же резистор.
Таким способом мне удаётся заряжать 1 мизинчиковый аккумулятор, пусть и с низким КПД.
Разумеется, сопротивление и мощность резистора должны соответствовать требованиям режима работы.
(лайфхак - это что-то простое; а здесь неопределенность, сколько напряжения падало на резисторе, какое напряжение окончания заряда надо ставить в ВЦ, какое напряжение МК измерит через резистор, это же делитель, а у акк, особенно маленьких, бывает разное внутреннее сопротивление, это не просто; тут мультиметр нужен, что бы все правильно сделать, ИМХО, даже с пониманием как.
требуется более подробное описание, какой резистор взять для А1, какой для А2, какие напряжения окончания ставить в МК, все 4 случая надо описать: 1, 2 ААА, 1, 2 АА)


****{Роман} писал:
Николай, а как выйти из этой ситуации? Чего добавить к аккумулятору, чтоб зарядить его?
******{Николай} Купить USB зарядник для АА/ААА акк. (как пример, та же Литокала, что у меня на сайте)
Поставить резистор, чтобы ограничить ток до безопасного для 10 часовой зарядки. Правда, в этом случае, не будет контроля по напряжению, но он и не нужен, т.к. контроль будет по времени. И будет плохой КПД такой зарядки, т.к. половина энергии уйдет в нагрев резистора. (Это при зарядке 1 или 2х последовательных акк. на 1.2В, от 3х и более - будет штатная работа.)
Вопросы о первоначальной прошивке и апп. устройстве ВЦ6:показать

1. Максимальное измеряемое напряжение в 17.6В при максимальном заявленном пороге в 25В как-то не серьёзно. Не критично ли изменится погрешность, если делитель будет 23?
** Да, для канала [Uin] (измерения напряжения зарядки) коэффициент делителя логично будет поменять, там не нужна большая точность. (нужно перепаять резистор 15к на 22к в делителе перед АЦП МК)

2. Измерение для [Ich] опять же имеет делитель 16; 17.5А при максимуме в 3А -- как-то многовато...
** Величина напряжения, была подобрана чтобы можно было использовать первоначальную прошивку. Да, можно изменить номинал резистора, чтобы обеспечить большее разрешение в канале. Но, из-за низкой точности самого измерителя, гнаться за точностью при измерении смысла нет.
А, вообще, там нет делителя. просто резистор на который подается ток от измерителя тока.

3. А встроенный клокгенератор насколько сильно плавает от внешних факторов? Если его откалибровать -- для примерных измерений времени сойдёт?
** Десяток процентов, думаю. В разовом варианте, конечно, можно откалибровать, но в серии смысла не вижу, т.к. могут ставиться МК из разных партий, со своими разбросами.
А3. Генератор наверняка будет плавать так как там RC цепь, но вот в каких пределах не проверял, не было необходимости, боюсь он и от экземпляра МК будет меняться, поэтому длительные задержки будут иметь высокую погрешность.
**{Николай} Она будет равной точности RC-генератора. В конце-концов, точность нам большая и не нужна, даже 20% хватит с лихвой - это же, скорее, предохранительный таймер, он может быть очень грубым.

4. Подключённый датчик освещённости позволит изменять яркость индикатора в зависимости от окружающего освещения.
** А надо? Максимальную яркость задаем резисторами и программно можем только уменьшать, она и сейчас не слишком большая.

5. термометр позволит контролировать и выводить температуру внутри корпуса
** Она будет равна уличной, когда ВЦ не включен; все остальное время будет непонятная циферка (теплого корпуса).
Здесь смысл может быть только если МК будет при сильном нагреве прерывать работу выходного преобразователя, чтобы снизить среднюю мощность и нагрев. Но такой вариант во-первых, должен быть отключаемым - вдруг, какому-то гаджету не понравится такой режим, а, во-вторых, МК должен быть неотключаемым.

6. а если и кнопку включения на ногу МК повесить? Или могут быть ложные включения при инициализации контроллера?
** Тоже возможно. Как это сделано у всех "китайцев".
Но я как-то опасаюсь полностью завязывать работоспособность "железа" на программу - программные сбои наблюдаются гораздо чаще, чем отказы электроники.
** МК можно поручить некритичные вещи, например, фонарик, автовыключение при малом токе, внешний индикатор уровня, токовый индикатор и т.п. (теоретически, если пофантазировать, то можно заложить еще один МК для сервисных функций, а также под реализацию истинного МРРТ)
Но все это возможно в другой версии платы, с измененной разводкой. Сейчас в 6й версии в Вашем распоряжении остались только две свободные ноги на МК, к которым можно подпаяться и как-то задействовать.

7. Придётся аппетиты умерить немного на всякие дополнительные фичи, и аккуратнее писать. Видать, предыдущий автор прошивки на сишнике для большого компа писал немного.
С такими хотелками скоро на мегу88 переезжать придётся.
** А1-А4 - ответы Александра, автора первоначальной прошивки:
А1. Я писал как можно проще, так как писал для возможности самостоятельной правки Николаем. Так как памяти хватало, то оптимизацию кода не делал.
А2. Пустые циклы измерения, сделаны для "стабилизации" сигнала на выбранном входе после переключения, так как сразу после переключения из за емкостей на входе АЦП есть еще "воспоминания" от ранее подключенного входа.
это мы с Николаем в процессе работы выяснили, без этого погрешность была высокая, даже китайский мультиметр показывал точнее.
**{Николай} Алексей, чего-нибудь лишнего не выкиньте...
****{Алексей} Я себе позволял только арифметику и логику работы править. Не касаясь физической части. Но любопытно. Стало быть, в контроллере один АЦП, физически коммутируемый на разные входы...
******{Николай} Наиболее вероятно. Давно в его описание не заглядывал, там должно быть указано.
А4. Мега 88 сейчас антиквариат и поэтому цена у него антикварная как и доставабельность, тем более Microchip купил не так давно Atmel и не известно что будет дальше.
Рекомендовал бы посмотреть в сторону STM32F0ХХ или STM32F1ХХ.
Если будет много кушать то есть серия STM32LХХХ.
**{Николай} На Али сейчас увидел 88ю по 34р в пачке из 100шт.

8. В исходном архиве 3 проекта: 1_0, 1_1, 1_2 -- в чём отличия, и зачем так много версий?
**{Александр} Надо смотреть какую версию шьет Николай. Давно это было уже не помню всех нюансов.
****{Алексей} сравнивал, Николай шъёт 1_2.

9. Анализа ноги с термодатчиком я в коде 1_2 (который взял за основу) не обнаружил. Он там есть?
**{Александр} Это по моему вообще потом убрали, но на первых версиях вроде использовали. А в коде не нашли упоминаний? Я вроде с комментариями писал.
****{Алексей} Вообще ничего в ней. Искал по слову "term" и "терм".

10. Можно ли на плату запаять 88, и залить в него прошивку от 48? Без дополнительных телодвижений. atmega88 бы как раз на хотелки хватило.
**{Александр} Судя по документации цоколевка одна и та же, можете и 168 мегу поставить, плату переразводить не надо.
Ошибки индикации напряжений конца заряда в р. 3AP:показать

**решено.** в 4 прошивке: За 100% теперь берётся 1400 мВ. (см. описание 4 прошивки). (за никель и свинец отвечает одна и та же, "никелевая" константа (предыдущий разработчик сэкономил на таблицах с процентами), расчет для свинца: "5 никеля = 3 свинца", для свинца стало 2.33В).

{Николай} при установке напряжения конца заряда в [ЗАР], последняя цифра всегда 7, если увеличивать напряжение из режима [L3.7] или 4, если начали с [L7.4].
Если начинать с режима [Р12] и дальше уменьшать напряжение, то все нормально, показывается 0 в последнем разряде и изменяется с шагом 0.1В.
**{Алексей} В программе протабулированы напряжения и соответствующий им процент заряда для АА аккумулятора.
1120, //5%
1150, //10%
1180, //20%
1200, //30%
1220, //40%
1240, //50%
1270, //60%
1300, //70%
1330, //80%
1360, //90%
1390. //100%
За 100% берётся 1390 мВ. Есть таблица коэффициентов, на которые умножается эта величина, чтобы получить конечное напряжение зарядки:
3, //L3.7
6, //L7.4
9, //L11
3, //AA3
4, //AA4
6, //AA6
8, //AA8
10, //A10
5, //P6
10 //P12
Например, для 3.7В мы получаем начальное значение 4170 мВ, отображается как 4.17 (с шагом подстройки 0,1В). Отсюда 7ка. По старому стилю -- это 4.1В, т.е. незаметно было.
Соответственно Р12 13900 мВ с тем же шагом => не проявляется.
Можно:
- при установке обнулять десятки мВ
****{Николай} обнулять если будет шаг 0.1В
- сделать шаг 10 мВ и ускоренную установку долгим нажатием
****{Роман} Шаг 10мВ и ускоренная прокрутка, это лучший апдейт будет!
******{Николай} ага, и точность измерителя не более 0.1В
- подправить табличные значения? на какие?
- округлять до 100мВ?
****{Николай} Да, если не делать ускоренную прокрутку.
А, вообще, можно и 50мВ сделать. Хотя это уже точнее, чем гарантирует измеритель, но иногда бывает удобно чуть-чуть добавить напряжение зарядки.
Объективной необходимости нет, но для удовольствия. 50мВ достаточно.
********{Алексей} Значит сделаем 50 мВ и ускоренную прокрутку. Для тестеров шаг 10мВ.
**********{Николай} Да. Спасибо.

****{Николай} А с какого потолка взяты эти таблицы? Почему 1.39В, а не 1.4, например? У меня при зарядке 1.2В акк. полная зарядка была при 1.45В. Причем, это напряжение зависит от температуры, старости аккумулятора, может от производителя.
******{Алексей} Если потолок не Ваш, значит он где-то у Александра. Мне таблицы достались по наследству. Могу лишь предположить, что поскольку шкала используется одновременно для никеля и свинца, то там некие усреднённо-безопасные значения.
********{Николай} Если брались величины из прошивки, то, значит, эти цифры давал я. На самом деле, они немного занижены, чтобы гарантированно не испортить пользователю аккумуляторы, пусть и недозарядив их.
Так что, в небольших пределах их можно менять.
**********{Алексей} У меня были мысли в качестве конечного напряжения зарядки использовать округлённое вниз до кратности шагу перестройки. Но если 1390 дотянуть до 1400 -- автоматически пропадают и некруглые значения при перестройке и необходимость округления.
************{Николай} Сделайте как проще. В небольших пределах пороги можно менять.
****{Николай} ...Тем более, как описано по ссылке выше, сейчас зарядка 1.2В аккумуляторов не гарантируется совсем. Вернее, не гарантируется ограничение тока. (по причине других элементов относительно 5й версии).
******{Алексей} Это тут никак не влияет, в таблице коэффициенты начинаются от 3 (3*1390мВ).

**{Алексей} режим зарядника [FUL] качественно не изменился, но требуется подгонка временных коэффициентов]
****{Роман} Мои опыты показали, что в данной версии ВЦ6 временные коэффициенты надо оставить как в версии 003. Режим реально и удачно заработал. Недозаряд совсем незначительный.
напрашивается программная калибровка по нескольким точкам:показать

{Николай} У каждого экземпляра ВЦ точность измерителя напряжения подгоняется индивидуально и может отличаться на 50 милливольт и более совершенно спокойно. Тем более, что при подстройке у меня шаг на индикаторе 0.1В (100мВ).
Конечно, стараешься подогнать поточнее, но, как уже писал, характеристика измерителя в МК нелинейна и если настроить абсолютно точно, например при 10В, то на 5В он будет занижать показания, а на 15В - завышать. Примерно на те же 50...100мВ.
**{Алексей} Ну прямо напрашивается программная калибровка по нескольким точкам... Но это уже, пойдёт в список пожеланий к прибору с обновлённым контроллером.
Не проводили экспериментов, насколько сильно плавает погрешность от внешних условий? Имеет ли вообще смысл её компенсировать?
****{Николай} Нет, не проводил. Не вижу большого смысла.
****{Роман} Проводил. Мой экземпляр занижает напряжение на 1.25% при 4В, на 1.5% при 8В и 1.6% при 10В. Температура, степень заряженности внутренних акб и наличие/отсутствие внешней зарядки на эти цифры не влияют. (RomaST, здесь вы говорите "занижает", но далее по времени, ваш ВЦ уже "завышает" относительно мультиметра, это ОШИБКА, нужна коррекция)
Имеет смысл изначально точно калибровать, либо вводить индивидуальную програмную коррекцию.
******{Алексей} На измерения может влиять температура микросхемы контроллера и шунтов. Не проверили влияние влажности. Что можно сделать сейчас -- это персонально подправить формулу пересчёта отсчётов АЦП в милливольты. Нелинейность компенсировать пока не выйдет.
происхождение и суть коэффициента 1100 (.100):показать

{Роман}Алексей, вы сможете для моего ВЦ собрать прошивку, в которой напряжение на выходе ВЦ будет отображаться на 1.25% ниже, чем отображается сейчас? Т.е. сейчас ВЦ показывает 5.37В, а мультиметр 5.30В. Хотелось бы добиться максимального схождения. А самое главное, чтоб откорректированные показания использовались в режиме ЗАР, чтоб точнее определять напряжение окончания зарядки. (нужен вариант с шагом 10мВ).
**{Алексей} Сейчас формула для вычисления следующая:
U = (16*Uadc*1100) / 1024;
где Uadc -- 10-битное значение, измеренное АЦП,
16 -- неизменяемая константа (коэффициент аппаратного делителя напряжения).
Эти трогать нельзя.
Остальными двумя можете поиграться:
1100 -- максимальное измеряемое напряжение АЦП, мВ
1024 -- собственно, те самые 10 бит.
Давайте, что там вписать вместо них.
Только учтите, что деление здесь целочисленное. Обычное деление с остатком, как в школе. Остаток теряется.
И все промежуточные результаты вычислений ни при каких условиях не должны выходить за рамки диапазона [0..65535].
****{Роман} А вот так можно?
U = 0.9879*(16*Uadc*1100) / 1024
(эта цифра (0.9879), получена при делении [U на мультиметре] на [U на ВЦ6], или наоборот...).
******Цитата:
константу 0.9879 можно представить в виде 1000/1012=0.9881;
например автор - умножает на 1100 и делит на 1024.
но важно спросить у автора, какую из его цифр подгонять: 1100 или 1024.
********{Алексей} Предпочтительнее, конечно, 1100. Т.к. деление на 1024 можно ускорить, заменив сдвигом на 10 бит.
******Цитата:...подгоняем 1100, это пропорция:
(1.0000- исходный коэффициент автора по-умолчанию)
1.0000 - 1100/1024
0.9879 - х/1024
получаем:
(1100*0.9879/1024)/1.000=х/1024, => х=1100*0.9879, = 1086.69
округляя, проверим:
0.9879*1100/1024=1,061220703125
1.0000*1087/1024=1,0615234375, 0.0003(0273) - это наше отклонение в 4 знаке после запятой.
1087 - наш коэффициент, в меню при настройке цифру 1[100] уменьшим до 1[087].

********{Алексей} Есть идея именно это значение [1100] хранить как калибровочный коэффициент в 2х байтах [0..65535], и позволять его изменение в пределах, ну скажем, [1000..1200], остальные значения считать некорректными и инициализировать значением 1100.
**********{Николай} Да, пожалуй хватит +-10%. Хотя ток измеряется иногда и с большей погрешностью, но это не такой уж и важный параметр.
Пятая прошивка и её калибровки:показать

{Николай} Для надежности можно калибровать [Uin] и токовые.
U и Uас смысла не вижу, т.к. они подгоняются в "железе", которое сбойнуть не может (уже обсуждали). Это для основного варианта. Для желающих, можно дать версию, где калибруются и эти каналы тоже.
**{Алексей} Если пользователь не калибровал соответствующий канал, то с высокой долей вероятности в EEPROM по этому адресу будет лежать значение 65535 (как я понял, на стёртой или не записанной флешке все биты=1. На моём экземпляре, во всяком случае, так.), которое выходит за допустимые пределы, и будет игнорироваться. Следовательно, 5я версия без дополнительных телодвижений будет себя вести как не использующая программные калибровки.
Что же случится, если на флешке окажется какой-то мусор, и 2-байтное число оттуда неким чудом попадёт в разрешённый диапазон +/-10%?
- Для канала [Uac] будут не вполне корректно отображаться проценты. Неудобно, но на работе устройства никак не скажется, т.к. этот канал работает чисто на отображение.
- Для [U ] (он же напряжение зарядки) может быть больше неудобств.
При завышаемых показаниях можем иметь некоторый недозаряд аккумуляторов. Чуть хуже, но ничего не испортится.
Занижаемые критичнее, хотя опять же, при отображаемых 5В будем иметь не более 5.5 -- в принципе почти в пределах допусков, многие устройства нормально прожуют.
Иными словами, проблемы могут возникнуть только с очень капризными по напряжению питания устройствами, при наличии мусора во флешке, при его удачном попадании в установленные рамки (200 допустимых значений из 65536). Всё это должно произойти одновременно. Да, за заниженные показания будут отвечать только половина из тех 200 значений.
Считаю такую вероятность достаточно низкой, чтобы оставить в общей прошивке функцию калибровок штатно.
****{Николай} Если будет измерение занижаться, то это сильно критично потому что это уберет возможность зарядки литиевых аккумуляторов, которые не терпят перезаряда.

Попробуйте погонять 5ку с секундомером на разных экземплярах. За начало отсчёта берётся момент начала зарядки. Это когда отображение с устанавливаемых минут переключается на проценты зарядки. Интересует разброс погрешности. У меня 1 минута отсчиталась идеально точно (с точностью до реакции пальца на кнопке часов. Показания на секундомере 01:00.1).
Непредвиденное стирание EEPROM:показать

{Алексей} Вопрос к знатокам:
Можно ли при прошивании прошивки не стирать содержимое EEPROM с данными?

Хм. Написал прошивку для калибровки. изменил калибровку канала. Сохранил в EEPROM. Шью рабочую прошивку, и получаю девственно чистый EEPROM.
вывод avrdude:
Код:
# avrdude -p m48p -c stk200 -V -U flash:w:./vamp.hex:i
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e920a
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "./vamp.hex"
avrdude: writing flash (3254 bytes):
Writing | ################################################## | 100% 0.84s
avrdude: 3254 bytes of flash written
avrdude: safemode: Fuses OK (E:01, H:DD, L:62)
avrdude done.  Thank you.

Тут avrdude предлагает опцию -D, чтобы флеш не стирать перед записью. Причём в хелпе предупреждают, что это неправильно. Но вроде работает.
Как вариант, можно после калибровки бекапить EEPROM, и восстанавливать после прошивки. Но мне такой костыль не нравится. Жду мнение специалистов.

В частности, чем может грозить запрет на стирание флешки перед записью обновлённой версии прошивки, особенно если новая меньше старой? Если тот "мусор", что останется в конце никак не повлияет на работу новой микропрограммы -- можно для желающих покалиброваться добавить предупреждение, чтоб не стирали.
**{Николай} Жаль, я тут не помошник.
По стиранию, у меня при прошивке стоит галочка "стирать все перед прошивкой". Т.е. определяется программой, через которую идет заливка.
Вспомнился один из приемов повышения надежности ПО, это заполнить всю оставшуюся память после окончания программы командой перехода в начало. Такая защита от зависания, если программный счетчик собьется и мы улетим за "край" программы, то автоматически перебрасываемся в начало.

Порядок калибровки:
1. При переключении каналов, после имени канала выводится [Cbr]-calibration-(калибровка).
2. Кнопка [вверх] включает калибровку данного канала:
(отобразится [AdJ]-adjust-(настройка), потом имя калибруемого канала, далее измеряемая величина).
3. [вверх] -- увеличить значение, [вниз] -- уменьшить.
4. Если несколько секунд не трогать кнопки, увидим вопрос [St?]-set? (нужно ли сохранить?), и подсказку [Y_^].
Если ничего не нажали, через несколько секунд вернемся в настройки п.3.
5. Пока светится [Y_^] (читать как: нажать [вверх] для ответа Yes-Да) -- кнопка [вверх] сохранит значение (отобразится [SEt] -- данные сохраняются);
кнопка [вниз] отменит сделанные настройки, и ничего не сохранит! увидим [Abr]-аbort-прекратить.
6. Если в п.5 выбран любой вариант ответа (т.е. нажата какая-нибудь кнопка) -- выйдем из режима калибровки и вернемся в п.1.

Сброс калибровки канала на значение по умолчанию:
после п.1. (когда отображается [Cbr]):
2a. Кнопка [вниз] сбрасывает калибровку данного канала в "заводское" значение [dEf]-default-поумолчанию.
3a. не трогая кнопки, вернёмся из режима калибровки в п.1.

Калибровочная прошивка: 005с (201612-09).
{Алексей} это специальная обрезанная, калибровочная версия 5й прошивки, без режима зарядки, без отображения "виртуальных" каналов [P ], [Pou], [3AP], заточенная именно на калибровку.
Использовать прибор можно и с ней, но неудобно будет; т.к. меню калибровки "вмешано" в основной режим листания каналов.
Подводный камень при использовании калибровочной прошивки я описал, или см. выше "Непредвиденное стирание EEPROM".
**{Роман} Порядок действий с калибровальной прошивкой:
1) Ставим калибровальную прошивку
2) Калибруем каналы
3) Записываем на комп содержание eeprom
4) Ставим рабочую версию
5) Записываем сохраненный в пункте 3) eeprom на ВЦ
И получаем 5ую версию, с необходимыми калибровками.
****{Алексей} Всё верно.
Если в программаторе есть возможность запретить стирание флешки перед записью, можете попробовать с этим запретом выполнить п.4, и обойтись без п.3, п.5.
О контроллере ATmega48 и его прошивках:показать

Цитата: можно впоследствии написать патчер с "мышинным" интерфесом и выпускать только одну стандартную прошивку; и таким образом унести калибровку на комп - то есть у компа ВЦ, мультиметр, инструкция (что где измерить тестером); все измеряем, вписываем полученные значения в прг-патчер, и получаем нашу индивидуальную прошивку, шьем, радуемся...
**{Алексей} В контроллере используется 2 отдельные флешки:

1. 4Kbytes of in-system self-programmable flash (ATmega48)
Endurance: 75,000 write/erase cycles
Туда пишется прошивка.
Используется файл с расширением .hex

2. 256 Bytes EEPROM (ATmega48)
Endurance: 100,000 write/erase cycles
в неё пишутся настройки, калибровки и прочие редко меняемые данные, которые нужно сохранить при отключении питания. Из неё v5 читает калибровочные коэффициенты.
Используется файл с расширением .eep

Шить их нужно отдельно. Это сделано, чтобы индивидуальные особенности экземпляра не затрагивали код прошивки.
патчер НЕ НУЖЕН! При большом желании можно на компе генерить файл .eep и шить его в EEPROM, не затрагивая прошивку, но программу для генерации пусть пишут желающие.

Формат файла прошивки описан тут:
http://microsin.net/programming/pc/intel-hex-file-format.html
https://ru.wikipedia.org/wiki/Intel_HEX
{Николай} о программной калибровке:показать

Может остановиться и "не ломать зря копья"? Я не вижу в ней необходимости. Поясню:
1. Точность в каналах [U ] и [Uac] подгоняется напаиванием резисторов. И в дальнейшем, мне эту работу всё равно придется делать независимо от того, есть калибровка или нет, т.к. считаю, что "железные" настройки надежнее, чем "программные".
2. Точность измерителя напряжения в МК довольно грубая - если точно откалибруем для 5В, то на 15В многие ВЦ покажут завышение на 0.1В (100мВ) - это много. А мы калибровкой хотим добиваться точности в единицы и десятки мВ. Зачем?
**{Алексей} Надо бы снять характеристики измеренных и реальных значений во всём диапазоне измерения. Интересно посмотреть на них для каждого канала, что из себя представляют. Может быть где-то будет прямая с постоянным смещением, которое можно вычесть.
****{Николай} Во многих экземплярах ВЦ (присутствует) не изменение наклона (характеристики), и не сдвиг нуля, а именно нарушение линейности - т.е. мы можем иметь занижение показаний при 5В и завышение около 15В.
Калибровки же по одной точке нам могут помочь только с коррекцией наклона характеристики АЦП.
У нас уже базовая точность около 1%, и с чем люди будут сравнивать, если у большинства домашних мультиметров точность не сильно выше? Т.е. чтобы калибровать надо иметь хороший вольтметр, которого у людей и нет.
3. Калибровка добавит дополнительных затрат времени, а не уменьшит их. Причем, как написал выше, не давая внятного результата.

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

Что касается, того, где "держать" программу настройки в компе или в МК, то я бы предпочел в МК (типа "все своё ношу с собой"), чтобы для изменений не требовались дополнительные устройства (комп и программатор), которых у людей может и не быть.
**{Алексей} Полностью согласен, но не раньше апгрейда МК, в мегу48 уже не помещается.
****{НИколай} Я могу заложить более мощный МК, но руки до разработки дойдут реально только через несколько месяцев (декабрь 2016).
К тому же, хотелось бы задействовать еще 3 свободных ноги в МК.

Можно делать две прошивки - "базовую" и "альтернативную". Базовую шить в ВЦ всегда, а альтернативу выложить здесь для желающих поразвлекаться.

LaleksUi, Вы правы в том, что стратегически надо все делать на компе. Но это верно, если рассматривать массовое производство ширпотреба. Я же пока не хочу отказываться от идеи минимального программного вмешательства в работу "железа", как более надежного варианта.
Если уж переходить на программу, то перебираться совсем и выкидывать треть "железа".
Пример файла с калибровочными коэффициентами, подробно (для 005):показать

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

Файл в формате "intel hex", в том же, что и прошивка.
005.eep (201612-12).
Формат такой:показать

Код:
struct {
  U32 magic;   // на это пока не обращаем внимания
  U16 coeff[CHAN_NUM];  // тут массив интересующих нас коэффициентов
}
// здесь U32 -- беззнаковое 32-битное значение, 4 байта.
// U16 то же, только 16-битное, 2 байта или 4 16ричных разряда в текстовом файле.

Индексы интересующих параметров в массиве:
Код:
 IND_ICH     0   //old uin
 IND_UIN     1   //old usl
 IND_UAC     3
 IND_U       4
 IND_I       5
Для наглядности, чтобы было видно где менять, в файле все коэффициенты заполнены соответствующим индексом:
элемент №0 0x1000
элемент №1 0x1101 (в файле ищем 0111)
элемент №5 0x1505 (в файле ищем 0515)

Для примера рассмотрим калибровку канала [U ] (измерение напряжения на выходе, он же отвечает за напряжение заряжаемых аккумуляторов).
1) Измеряем реальное напряжение U0 при измеренном прибором U1;
2) вычисляем коэффициент как X = U0 / U1 * 1100 и округляем к ближайшему целому
3) ищем среди индексов нужный канал, в нашем примере IND_U = 4
4) Ищем в файле 4+2*4 = 12й байт (считаем начиная с 0). 12й и 13й будут содержать младшую и старшую часть нашего коэффициента соответственно.
4а) если не поняли предыдущее -- находим в файле символы 0414
5) Допустим, в п.2 у нас получилось 1189. Вооружаемся калькулятором и переводим в 16-ричную систему: 1189 = 0x04A5.
6) Записываем значение в позицию, полученную в п.4, начиная с младшего байта: A504
7) Повторяем с п.1 для остальных каналов, которые нужно откалибровать.
8) Оставшиеся значения в файле-примере желательно заменить на FF, хотя и не обязательно. Это для каналов, калибровка которых не требуется
9) шьём в EEPROM прибора получившийся файл .eep. Естественно, версия 5 (или 6) должна быть уже прошита.
10) радуемся повысившейся (или испорченной, тут уж как сделаем) точности прибора.

Цитата:
контрольную сумму в конце строки как вычислять?
**{Алексей} avrdude вычисляет:
Код:
# avrdude -p m48p -c stk200 -V -U eeprom:w:./vamp_myq1.eep:i
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e920a
avrdude: reading input file "./vamp_myq1.eep"
avrdude: ERROR: checksum mismatch at line 1 of "./vamp_myq1.eep"
avrdude: checksum=0x00, computed checksum=0x0f
avrdude: read from file './vamp_myq1.eep' failed
avrdude: safemode: Fuses OK (E:01, H:DD, L:62)
avrdude done. Thank you.
computed checksum=0x0f
Два раза в секунду ярче вспыхивает одна из 3 цифр:показать

Цитата: ...есть одна особенность, которая выглядит слегка странно, - 2 раза в секунду ярче вспыхивает один из 3 индикаторов (цифр)...
**{Алексей} Меня тоже этот момент немного напрягает. Связано с разным количеством вычислений между отображением разрядов. Это ещё "причёсанный" вариант, почти незаметно. Тут уж компромисс относительно размера программы.
Скрытый текст:показать

главный цикл программы
- вычисление виртуальных вычисляемых каналов, таких как Pou, P
- цикл по каналам АЦП
- - получение калибровки измерителя
- - цикл по количеству измерений для канала
- - - одиночное измерение
- - - отображение очередной++ цифры
Цитата: в режиме настроек цифры каналов горят ярче, чем названия каналов; и нет совсем этого 2х/сек вспыхивания, когда пониженная яркость включена [L.G.H.]; это особенно заметно когда цикл заканчивается и последняя 100 сменяется на проценты заряда акк основного меню, цифры сразу тускнеют.
выходит не все меню подчиняются регулировке яркости, это тоже специально сделано?
**{Алексей} Я бы сказал, что это НЕ сделано из экономии и за ненадобностью. Индикация тесно переплетена с остальной программой, и яркость регулируется выключением индикатора в разных её частях.
В меню настроек отображение реализовано иначе. Используются те же функции, что для отображения [ %] при включении. Эти функции ничего кроме отображения не делают, и при отображении задаваемого времени в режиме [ЗАР] тоже они используются.
матчасть:
http://www.radiokot.ru/start/mcu_fpga/avr/15/
http://we.easyelectronics.ru/Shematech/dinamicheskaya-indikaciya_2.html
гуглить по словосочетанию "динамическая индикация".

Цитата: может можно сделать для индикатора буфер, оверлей, и управлять только яркостью буфера, что бы на всё влияло, и вычислительная нагрузка на сам индикатор прямо влиять перестанет, чтобы избавится от вспыхиваний?
**{Алексей} Может и удастся. В следующей жизни. Завести, например, таймер с прерываниями для индикации. А лучше бы вообще яркостью управлять с ноги контроллера, регулируя ток или напряжение на индикаторе. Мерцание убого выходит. (совсем нет, главное сделать это мерцание равномерно-периодичным, способ вполне годный; забавно выглядит "ночной" индикатор в темноте, цифры "плывут" внутри корпуса, а если потрясти кистью, то отпечатываются "в воздухе", а светодиоды размазываются).

Цитата: этот фъюз, который делит частоту на 8 нашего МК, верно я понимаю - в 8 раз медленнее работает процессор? может убрать его, но организовать именно показывание с нормальной скоростью, а вычисления на полной скорости производить?
**{Алексей} По фьюзам я вообще не в теме.
****Цитата: фьюз это программный (виртуальный) аналог джампера; и есть фьюз который замедляет наш проц в 8 раз, (и в меру моего понимания, это сделано для того, что бы цифры не слишком быстро скакали!) может вернуть процу полную скорость, а экран как-то иначе стабилизировать, (мне как-то неприятно, что наш проц искусственно замедлен), да и вы говорили что вспыхивания из-за порядка вычислений. (см. подробнее о фьюзах: в разделе "программатор..." в п.п.3 "Меня программатор спрашивает про какие-то фьюзы..." ответ Николая).
******{Алексей} ускорим проц -- будет кушать больше электричества, и (насколько я понял) снизится точность АЦП.
А вспыхивания из-за неравномерности вычислений в алгоритме. Решается увеличением программы.
Замеченная нелинейность, статистика:показать

{Алексей} (15дек16) заметил тенденцию:
Канал [Ich] в диапазоне 0,07-1,8А завышает средние показания на 50мА. Линейность нарушается только при токах сравнимых с величиной погрешности.
Канал [I ] вообще нелинейный, показания в разных участках диапазона то завышаются, то занижаются.
{Роман} (15дек16) Мне нужно изменить только параметр U. Т.к. ВЦ показывает бОльшее напряжение, чем есть на самом деле, что ведет к недозаряду аккумуляторов. по достижении 4.2В ВЦ отключит зарядку в режиме ЗАР. Когда реальное напряжение становится 4.15В, вц считет, что оно равно 4.20В. И выключается. Соответственно, получаем недозаряд.
Цитата: (27дек16) время у меня спешит: при зарядке [L7.4] - при установке на 5 мин, выключалась на 4:32 по секундомеру мобильника, на 10 мин - выкл на 8:46, (но я проводил только один раз этот эксперимент).
**