Imax B1, или тестер максимальной емкости батареек 18650

Блоки питания, преобразователи напряжения, UPS'ы - это здесь :)
Ответить
Модератор
Аватара пользователя
Сообщения: 19061
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Flash.#13, я тут изрядно поработал над твоим исходником, посмотри вложенный файл.
и очень желательно, чтобы ты его попробовал в деле.
во-первых, я применил вот это свое предложение:
Starichok51 писал(а):есть прямой смысл включить вызов rcall delay40mks в подпрограмму write_lcd перед командой ret
во-вторых полностью переделал подпрограмму cal1024.
я там применил сдвиг вправо через перенос.
но ты там перемещал биты на 5 разрядов вправо, а это соответствует делению на 32, то есть, ты вычитал 1/32, а это в 2 раза больше, чем 1/64.
я поставил 6 сдвигов, чтобы поделить на 64.
правда, я так и не понял, зачем тебе нужно вычитать 1/64 от исходного значения...
также полностью оптимизировал кусок подпрограммы, начинающийся меткой schetokoncen.
в-третьих, также в секундомере оптимизировал код - изменил условные переходы.
в итоге сделанной оптимизации из текста ушло более сотни строк (команд).

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

кстати, я смотрел описание на ATmega16 - у нее есть масштабирование АЦП, а тут посмотрел на ATmega8 - у нее нет такого масштабирования.
а поскольку ты ориентируешься в основном на ATmega8, то мои рассуждение об использовании в АЦП масштаба х10 вообще теряют всякий смысл.
Sergey3a23 писал(а): поскольку вы такие знатоки языка ассемблер , можно ли как-то калибровать амперметр а программе ? Не подбором резисторов (это не наш метод), а изменением каких - нибудь циферок в программе?
ну, Flash.#13, судя по исходнику, не такой уж большой знаток (извини, я не в обиду), а у меня опыта в ассемблере значительно больше.
правда, я уже более 10 лет, как забросил МК и уже не собирался к ним возвращаться.
но Flash.#13 своей темой зацепил меня капитально...
но если бы я взялся делать (но не возьмусь - на пенсию не разгонишься в творчестве), я бы делал на сороконожках ATmega16 или ATmega32, где есть полных 4 порта - мало ли, что еще захочется навесить на порты...

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

я, лично, вижу 3 настраиваемых параметра:
1. уставку напряжения (отключения).
2. калибровку измерения тока (что ты и предлагаешь).
3. калибровку измерения напряжения.
полученные значения желательно сохранять в EEPROM, чтобы при снятии питания они не пропадали.

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

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

для настройки уставки отключения можно оставить существующую подпрограмму.
а для коэффициентов тока и напряжения придется еще вводить полноценные подпрограммы умножения и, возможно, деления 16 бит на 16 бит.
например, для коэффициентов тока и напряжения число 32768 будет означать коэффициент 1.
тогда, в пределе, 65535 будет почти 2, а 16384 будет соответствовать 0,5.
но это надо еще тщательно обмозговать...
Flash.#13 писал(а):Вместо "0x32" пишете больше или меньше, как вам надо, и компилируете...
это несерьезно.
а на хрена ты тогда вводил несколько поддипазонов в программу?
что, для каждого поддиапазона заново компилировать программу и прошивать флешь?
goldmen8 писал(а):Циферками проще
же калибровать...
Вложения
Imax2.asm
(19.5 КБ) 220 скачиваний
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

На-ко-ся Вы-ку-си... Повторяю про себя, выкусывая из платы нагрузки сгоревший LM358. Всё работало, так нет, жена с работы пришла, схватила плату, стала качество пайки проверять... Проверила, блин... Вся в синтетике.
Реклама
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

Starichok51 - А Вы какую прошивку переделывали? 100 - вольтовую с операционником, или предыдущую?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

Starichok51 вот это вас торкнуло... Спору нет, мне до вас далеко, однако, вы порезали код, примерно на две сотни строк. Что можно тут сказать? Жестко!

В оптимизированном schetokonce передвинул одну строчку:

Код: Выделить всё

;== добавим в конце "mАh ==
cpi R19, 1		;1
brne no_mAh		;перейти если не равно
ldi R18, 0x6d	;"m"
no_mAh:
rcall write_lcd	;установка, (эту нужно выше)
ldi R18, 0x41	;"A"
rcall write_lcd	;установка
Идея интересная с "сованием точки" вместо моих "четырех кусков". cal1024 нужен для десятичной математики, АЦП меряет до 1023, а нам удобнее 1000, но там была неправильная надпись, 1023-(1023/64)=1007, а 1023-(1023/32)=991, учитывая то что у вольтметра три разряда, 99.9В, выбрал второй вариант, а вот надпись не изменил :facepalm: И о математике, хоть ваш вариант cal1024 боле красив, но "пять" сдвигов по "четыре" займут 20мкс, когда у меня "рельсовый" вариант занимает 10мкс, и объем 7 против 10 строк :cry:
О кнопках, еще пару лет назад подсел на контрольные биты, почти везде их использую, очень удобно. Да в сработке будет как бы "две кнопки", но приоритет у "меньше", подпрограмма обработки контрольного бита кнопки, его же и чистит, треск и ложняк не пройдут. С другой стороны ничего не мешает, в том же коде, дописать обработку нескольких зажатых вместе :)))
По поводу опечаток и ошибок, компилятор меня особо не ругал, за "грамматику", и у меня в подписе стоит "Киев", русский язык у нас отменили еще во втором классе средней школы, так что сори, что пишу с ошибками в комментариях к своему коду! Коррекция это больная тема, в версии 100В она и ненужна, там это осуществимо с аналоговыми подстройками, но с 5В вариантом точность амперметра привязана к шунтирующему резистору 0.1 Ом. Вот ее то возможно и придется подстраивать "программно". И вы правы, удобно будет настроить напряжение отсечки и сохранить его, тем более что у 100В версии с конца в конец далеко листать. Вот только у меги8 "флешка" плохо работает "в принципе", ее придется раз пять дублировать, и то она будет стираться, практика покажет. А вот показ напряжения подстраивать смысла нет, у 5В версии АЦП работает от прямого напряжения питания, и он как бы всегда правильно показывает. Хотел уделить больше внимания зарядке(а она еще даже не начата), остальной код терпимо работает. Все проекты делаю на меге8, она довольно доступна, места не много занимает, и многие вещи нормально умещаются даже на тиньки, с 5'ю свободными выводами :shock:
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 19061
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Sergey3a23 писал(а):А Вы какую прошивку переделывали?
простую, Imax.asm переделывал.

В оптимизированном schetokonce я допустил ошибку - не в том месте вписал метку no_mAh:. должно быть так:

Код: Выделить всё

;== добавим в конце "mАh ==
cpi R19, 1		;1
brne no_mAh		;перейти если не равно
ldi R18, 0x6d	;"m"
rcall write_lcd	;установка
no_mAh:
ldi R18, 0x41	;"A"
rcall write_lcd	;установка
ldi R18, 0x68	;"h"
rcall write_lcd	;установка
ret				;вывод окончен, возврат в программу
нужно было сначала сделать запись буквы "m", а я воткнул метку перед записью буквы.
а с моей сделанной ошибкой пройдет повторная запись предыдущего загруженного символа.
Flash.#13 писал(а):cal1024 нужен для десятичной математики
сдвиг дает целочисленное деление. поэтому 1023 / 64 = 15, а 1023 / 32 = 31.
соответственно, 1023-(1023/64)=1008, а 1023-(1023/32)=992.
то есть, отклонения от 1000 абсолютно симметричны - плюс 8 и минус 8.
еще раз повторяю: у тебя было сделан сдвиг на ПЯТЬ битов. то есть, ты делил на 32, вместо деления на 64.
а я записал

Код: Выделить всё

ldi R16, 6		;Поделить на 64
сделать 6 сдвигов для деления на 64.
а 6 сдвигов тогда займут 24 мкс, но какое это тебе имеет значение, когда программа у тебя выполняется и так весьма быстро?
а чтобы вообще не заниматься подобной коррекцией, достаточно питание установить ровно 5,12 Вольта. тогда одна дискрета будет ровно 50 мВ.
а еще лучше - применять внутреннюю опору 2,56 Вольта. тогда и дискретность измерений будет в 2 раза лучше и составит 25 мВ/дел.
а теперь посмотрим на твою коррекцию результата измерений реально.
при токе 1 Ампер на датчике в 0,1 Ома имеем напряжение 100 мВ. а это всего 20 дискрет.
что ты от них отнимешь такой коррекцией? а ничего не отнимешь, так как 1/64 - это НОЛЬ.
коррекция начнет "работать", когда число дискрет будет не менее 64, а это 64 * 0,05 Вольта = 3,2 Вольта.
то есть, для порога в 2,7 Вольта уже никакой "десятичной" коррекции просто не будет. и уж тем более, для порога 0,8 Вольта, который ты тоже можешь задавать...

а вообще, устройства реального времени делаются совершенно иначе.
организуется с помощью прерывания программный цикл фиксированной длительности.
программа в этом цикле проходит от метки "start" до метки "end" всего ОДИН раз.
а около метки "конец" она "крутится", ожидая конца программного цикла таким образом:
end:
rimp end
а в прерывании, когда определен конец цикла, управление передается на адрес метки "start", и программа начинает все свои вычисления заново.
время, отсчитываемое прерыванием, делается в несколько раз меньше программного цикла. например, в 16 раз.
конец цикла наступит, когда мы насчитаем 16 прерываний.
тогда мы можем в каждом прерывании запускать АЦП и суммировать результат измерения 16 раз. сумма усреднит разброс результатов измерений и даст эквивалентное увеличение разрядность АЦП на 4 бита. правда, точность при этом не возрастет в 16 раз, но не менее 2 раз (на 0,5 исходной дискреты) можно ожидать.
например, если было 5 раз 10 дискрет и 11 раз 11 дискрет, то среднее значение составит (5 * 10 + 11 * 11) / 16 = 10,6875. и можно предполагать, что ток будет (50 мА/дел) * (10,6875 дел) примерно 534 мА.
одновременно решается проблема с дребезгом кнопок.
если за 16 прерываний мы "увидели" кнопку, например, 10 раз, то ставим флаг ее нажатия. в противном случае (менее 10 раз) игнорируем найденное состояние кнопки.

да, правильное построение программы увеличит длину кода и время выполнения программы.
у тебя хоть и примитивная, не построенная по правилам, программа, о она все равно привязана к таймеру.
вот ты говорил, что программа проходит примерно за 2 мс, но она все равно топчется по кругу, ожидая наступления события таймера и проверяя считчики, считающие по 0,25 секунды.
так у тебя огромнейший запас по времени (2 мс по сравнению с 250 мс), и программу можно еще значительно усложнять и приводить к общепринятым правилам построения устройств реального времени...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

Сдвиг по cal1024 больше нужен для вольтметра чем амперметру, и он начинает хоть как-то проявляться только на тех величинах когда он нужен, примерно с 3В, или 30А. Вы сделали его сдвигом по "общепринятым правилам", но еще семь страницы "прошивок" назад мне сразу не понравилось пихать цикл там, это преимущества, именно в том месте, не дает. Это больше вопрос о каллиграфии, но у меня ее нет)) Организовать точные 5.12В намного сложнее, чем сделать коррекцию, и повторюсь, подпись была 1/64, но код был 1/32, просто ранее не исправил саму подпись. И это было сделано намеренно, чтобы загнать максимальный результат в 99.9В, и сэкономить один разряд вольтметра. О внутренней опоре, у меги8 AVCC жестко соединен с питанием внутри кристалла, в связи с чем МК не может подсоединить внутренний источник самостоятельно, и даже другие версии МК грешат его корявостью. Остается только делать внешний источник на AVCC, но это неоправданное усложнение. Поэтому рекомендую мерить АКБ токами "по больше", 1А и далее, и все будет хорошо.
О доработке кода в 16Гц, первое это АЦП достаточно медленно меряет, 640мкс только сами замеры, хотя с кодом, в 1-2мс все вложится. Но не уверен, что это что-то даст, с дробями раньше не работал, да и выводить их некуда, расчет мАч только уменьшит число, сегментов на ЖК не хватит, только зря код загромоздим. Сами токи не так сильно скачут, АКБ разряжаются довольно плавно. А вот с кнопками все не так просто, кратковременное нажатие с "дребезгом", может не всегда быть "поймано" счетчиками, сработавшими раз в сколько-то там. Здесь нужно учитывать и момент отпускания, и его дребезг. Ну и кнопку нужно пускать на обработку несколько раз в секунду, срабатывание один раз за секунду это довольно медленно. Но и делать более четырех трудно, ЖК1602 очень инертен, и отображение даже четырех чисел в секунду начинает смазываться, и бликать в глазах. Имеем такую штуку, вывод результатов по току не более 1 раз в секунду, обработка кнопок любая, но реакция на ЖК не более двух раз в секунду, вот и думайте как лучше...
Последний раз редактировалось Flash.#13 Сб фев 20, 2016 11:54:37, всего редактировалось 1 раз.
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Реклама
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

Flash.#13 писал(а): [/code]
Вместо "0x32" пишете больше или меньше, как вам надо, и компилируете...
Починил стабилизатор тока (причину так и не нашёл), провожу испытания... Работает.. Вся связка ( тестер батарей + стабилизатор тока) потребляет 25 мА, без подсветки дисплея 5 мА. разница в вольтметрах- сотые доли Вольт, вполне замечательно.
А вот по току - занижает показания от контрольного амперметра - примерно 100 мА - причём неважно - ток с батареи 300 мА, или 1А
Посему хочу уточнить - когда буду менять константу 0х32, как будут меняться показания? например, если занесу в регистр R16 цифру 0х33, то показания вырастут на 50 мА, правильно? Шаг же - если я правильно Вас понял, 50 мА?
Вложения
P1020717_1_cr.jpg
(244.07 КБ) 697 скачиваний
Последний раз редактировалось Sergey3a23 Сб фев 20, 2016 11:58:17, всего редактировалось 1 раз.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

Да все верно*(ну вообще там цифра будет плыть на 1мА, но суть та же), только Starichok51 уже меня натолкнул (запинал) на мысль, что нужно сделать "удобную" настройку, "кнопочкой", где все можно будет подправить с меню и сохранить в EEPROM. Так что ждите прошивку...
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

Flash.#13 писал(а):Да все верно, только Starichok51 уже меня натолкнул (запинал) на мысль, что нужно сделать "удобную" настройку
Ну что ж, прекрасно... Ваше замечательное изделие - станет ещё лучше.. Пора мне разъём ISP в плату вставлять. Чтобы проц не дёргать всё время.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 354
Зарегистрирован: Чт июл 24, 2014 23:09:23
Откуда: Киев

Сообщение hosturik »

Flash.#13 писал(а): Вместо "0x32" пишете больше или меньше, как вам надо, и компилируете...
Скажите а можно вместо того чтобы каждый раз компилировать, вычислить что изменяется в hex файле при изменении этого параметра и менять с помощью hex редактора?
Модератор
Аватара пользователя
Сообщения: 19061
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Flash.#13 писал(а):Организовать точные 5.12В
вот у тебя сейчас опора привязана к питанию. а разве точные 5 Вольт питания легче сделать, чем 5,12?
Flash.#13 писал(а):подпись была 1/64, но код был 1/32
а чего же ты сразу это не сказал? и то мне пришлось опять эту тему про 1/32-1/64.
Flash.#13 писал(а):И это было сделано намеренно, чтобы загнать максимальный результат в 99.9В, и сэкономить один разряд вольтметра.
теперь понятно, почему выбрана 1/32.
ну, про 16 - это был отвлеченный пример.
в твоем случае 16 никак не подходит, в твоем случае удобно суммировать 5 замеров. тогда сумма прямо даст число с дискретностью 1 мВ (10 мА по току), и тогда не потребуется подпрограмма умножения на 50 (уже будет умножено на 5, а лишний ноль справа - он и так сейчас лишний).
и дробей никаких не будет.
и 10-битный результат сложить 5 раз - он за 2 байта никогда не вылезет.
кстати, вопрос: а каким образом на одном из фото на первой странице я вижу показание I=1228mA?
если у тебя дискретность по 50 мА, то откуда взялись последние цифры (28)?

я работал с приборами, имеющими цикл 0,32 сек. за время цикла каждая кнопка опрашивалась 16 раз. то есть, кнопка опрашивалась один раз за 20 мс. и всё прекрасно ловилось счетчиками.
а дребезг гасился таким способом:
Starichok51 писал(а):если за 16 прерываний мы "увидели" кнопку, например, 10 раз, то ставим флаг ее нажатия. в противном случае (менее 10 раз) игнорируем найденное состояние кнопки.
не может быть такого дребезга, который бы длился более 0,2 сек.
а вот обработка кнопки делалась один раз в цикле, то есть 1 раз за 0,32 сек.
у приборов было 4 кнопки, но программа могла обрабатывать до 8 кнопок.

если мы сделаем прерывания по 0,2 сек, а программный цикл сделаем в 1 сек, то получится 5 измерений АЦП, которые мы будем суммировать.
кнопки обрабатываться будут тоже 1 раз в секунду, и индикатор на нажатие кнопки будет обновляться (одно число - 4 цифры) тоже 1 раз в секунду. правда, тогда придется долго ждать, пока установим требуемое значение...
Flash.#13 писал(а):Так что ждите прошивку...
а сам справишься?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

Starichok51 писал(а):
Flash.#13 писал(а):подпись была 1/64, но код был 1/32
а чего же ты сразу это не сказал? и то мне пришлось опять эту тему про 1/32-1/64.
Сказал, еще вчера:
Flash.#13 Сб фев 20, 2016 00:42:34 писал(а):1023-(1023/64)=1007, а 1023-(1023/32)=991, учитывая то что у вольтметра три разряда, 99.9В, выбрал второй вариант, а вот надпись не изменил :facepalm:
О точных 5В: LM7805, или USB. А как 5.12В? А вот делать пять сумм за секунду вместо умножения, это отличная идея, пожалуй так и сделаю, даже математика упростится. Кнопки всегда можно подвязать асинхронно, либо сделать 10Гц, каждые "два" замер, и "пять" вывод кнопки.
Starichok51 писал(а):кстати, вопрос: а каким образом на одном из фото на первой странице я вижу показание I=1228mA?
если у тебя дискретность по 50 мА, то откуда взялись последние цифры (28)?
К сожалению ответить не смогу, сам толком не знаю :facepalm: Ловил эти 28мА, суть следующая, в регистрах число правильное, дальше по коду оно так же верно, но выводится на ЖК не корректно. Несколько дней искал, что является причиной некорректного срабатывания счета. Затем несколько раз переделывал кусок кода вывода ЖК, стало реже, но не пропало, все что лезет в голову, это SREG при записи ЖК, но на общем результате это не сказывалось, и забил...
Starichok51 писал(а):а сам справишься?
Ну сюда же доплыл.
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Модератор
Аватара пользователя
Сообщения: 19061
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

ладно, попробуй сам, а там посмотрим, что получится.
во всяком случае для тебя это будет полезно решить задачу самостоятельно.
и еще у меня одна большая просьба. я уже несколько раз говорил про таймер1. с ним можно точно получить прерывание 0,2 сек (предделитель 64 и регистры 3125).
сделай, пожалуйста прерывание на таймере1 вместо таймера2. а то мне пока еще сложно разобраться со всеми регистрами, где что выставить...
сейчас ты считаешь 4 раза по 0,25 сек, а будешь считать 5 раз по 0,2 сек.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

Flash.#13 писал(а):Да все верно*(ну вообще там цифра будет плыть на 1мА
Невнимательно прочитал. Изменил (дрожащими потными ручонками) цифру на 0x34 Теперь при 0,5А показывает 0,41А Значит, надо вписать 3С, я так понимаю? Это же- 16-ричная система?

Доб.. через 10 мин.
Вписал 3C При 0,5А - показывает 0,48 Ну вот, почти уже хорошо. Надо вписать 3D или 3E. Совсем будет хорошо. Через час продолжу свои изыски..
Дольше вспоминал, как код перекомпилировать. Но, вспомнил, разобрался...
А для особых понтов можно вписать 0b111101 Типа я - программист ))
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

hosturik писал(а):
Скажите а можно вместо того чтобы каждый раз компилировать, вычислить что изменяется в hex файле при изменении этого параметра и менять с помощью hex редактора?
Открыл Hex - редактором файл прошивки - там ужас! Набор каких-то цифр, я так подозреваю, случайных. - (шутка). Если хочешь, завтра выложу тебе два файла - до переделки, и после.. Но- ищи сам.
Автор, Вы не против? Всё-таки, Ваша интеллектуальная собственность...
В листинге программы же - гораздо проще. Компилируется за доли секунд..
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

Starichok51 писал(а): вот у тебя сейчас опора привязана к питанию. а разве точные 5 Вольт питания легче сделать, чем 5,12?
Только что мне открылась страшная правда... Это значит, что , если я подаю питание на схему " примерно 5 Вольт" - то ни о какой точности не может быть и речи? - БП регулируемый, ручкой напряжение выставляю... Надо стабилизировать?
Или , другими словами, калибровать можно напряжением питания?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

Сообщение Flash.#13 »

Sergey3a23 писал(а):Автор, Вы не против? Всё-таки, Ваша интеллектуальная собственность...
А накой тогда выкладывал сюда все это? Чтобы оно пылью припадало на полочке? Информация не может быть собственностью! Хоть мы и понапридумывали законов, но это глупость.
Sergey3a23 писал(а):калибровать можно напряжением питания?
Все расчеты стоят для 5В, ориентируйтесь по вольтметру, на сколько он врет, настолько и все остальное. От 0.1-0.2В ничего особо не поменяется.
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

hosturik
Ну, поскольку Автор разрешил, выкладываю...
один файл - с цифрой 32 (16-ричная система, напоминаю)
Второй файл - с цифрой 3A
Ищите разницу, если охота...
Вложения
Imax_0x3A.hex
(3.81 КБ) 394 скачивания
Imax_0x32.hex
(3.81 КБ) 381 скачивание
Модератор
Аватара пользователя
Сообщения: 19061
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Sergey3a23 писал(а):если я подаю питание на схему " примерно 5 Вольт" - то ни о какой точности не может быть и речи?
совершенно верно, ни о какой точности не может быть и речи.
поскольку в программе для опоры используется напряжение питания, то питание нужно не просто стабилизировать, а стабилизировать строго на уровне 5 Вольт.
вообще-то в программе источником опоры задан вход ADCC, но по всей видимости этот вход снаружи соеденен с питанием.

совершенно верно, калибровать можно напряжением питания.
но этим ты можешь откалибровать только один канал АЦП, например, ток. а по напряжению тогда будет врать неимоверно...

Flash.#13, для калибровки нужно делить на 1024, а ты делишь на 1023.
5 Вольт опоры - это 1024 единицы счета, просто АЦП не в состоянии насчитать 1024.
проведем вот такие расчеты.
1023 единиц соответствуют 5 * 1023 / 1024 = примерно 4,995 Вольта.
1 единица счета равна 5000 / 1024 = примерно 4,883 мВ.
ты хочешь сделать так, чтобы 1000 единиц соответствовало ровно 5 Вольтам, а 1 единица была равна, соответственно, 5 мВ.
это соответствует умножению на коэффициент 1000 / 1024 = 0,9765625.
в идеале, тебе нужно вычесть 24 / 1024 = 0,0234375 исходной величины, или округленно 1/43.
сейчас, пока программа не претерпела кардинальных изменений, подпрограмму коррекции (сдвига и вычитания) можно убрать вообще.
а в подпрограмме умножения учесть коэффициент коррекции, то есть, умножать не на 50, а на 50 * 0,9765625 = 48,828125, или округленно на 49.
тогда таким умножением ты скорректируешь ЛЮБОЙ результат измерения.
а в настоящее время, как я уже говорил, маленькие числа сдвигом скорректировать НЕВОЗМОЖНО, так как результат сдвига дает чистый ноль для вычитания.
Flash.#13 писал(а):Ну и кнопку нужно пускать на обработку несколько раз в секунду, срабатывание один раз за секунду это довольно медленно.
совершенно верно, 1 раз в секунду обрабатывать кнопку - катастрофически медленно.
а если обрабатывать каждые 0,2 секунды, то это будет уже слишком быстро - ты просто будешь не успевать вовремя отпустить кнопку.
даже при цикле 0,32 сек (в тех приборах, с которыми я работал), первое время я тоже постоянно опаздывал. и только потом набрался опыта - реакции на работу с кнопками.
поэтому мне видится более приемлемым сделать обработку кнопок 1 раз в 0,5 сек.
тогда прерывание следует сделать по 0,1 сек (у таймера1 предделитель 8 и регистры 12500) а программный цикл сделать 0,5 сек.
только в этом случае мы сможем суммировать 5 измерений АЦП.
Flash.#13 писал(а):АЦП достаточно медленно меряет, 640мкс только сами замеры
у тебя сейчас два замера (по одному на ток и на напряжение) - лишние. я их пока не убрал.
там у тебя после отработки задержек по второму разу стоит команда
sbi ADCSRA,6
но после нее уже не стоит вызовов задержек, то есть, ты не ждешь окончание второго замера, и сразу же обрабатываешь первый замер. а результаты вторых замеров просто пропадают зря...
таким образом, реально на измерение тока и напряжения затрачивается всего примерно 320 мкс.

и тут я вспомнил, что из прерывания нельзя вызвать другое прерывание...
поэтому описанный выше план подлежит изменению.
нельзя из прерывания по таймеру, не выходя из прерывания, запустить еще два измерения по АЦП и сделать обработку их прерываний.
поэтому программный цикл придется сделать сразу по каждому прерыванию таймера, то есть, по 0,1 сек.
а уже по регистру-счетчику отсчитывать по 5 программных циклов для сложения пяти результатов измерений каждого АЦП.
замечание: после обработки измерения следует регистры (память) сумматора обнулить для подготовки накопления новой суммы из пяти измерений.
и также по каждому пятому циклу обрабатывать кнопки.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср сен 12, 2012 19:05:02

Сообщение Sergey3a23 »

Starichok51 писал(а):
совершенно верно, калибровать можно напряжением питания.
но этим ты можешь откалибровать только один канал АЦП, например, ток. а по напряжению тогда будет врать неимоверно...
Ну так - решение, как бы, простое... Напряжением питания - калибрую вольтметр, а регистром R16 - амперметр... и будет - как в аптеке?
В голову пришла гениальная (шизофреничная) мысль... Почему - по радио передают Сигналы Точного Времени, а Сигналы Точного Напряжения - не передают? :))
Заказывать же высокоточный источник опорного напряжения из Китая (700 руб) - дороговато для безработного...
Говорят, в микросхеме TL494 - есть высокоточный вывод напряжения на одной из лапок? TL494 - у меня есть...
Ответить

Вернуться в «Питание»