Самодельный передатчик (часть 2)

EagleB3
Pav_13:

Возможно поэтому я не понял и Вашего примера - зачем нужно 100% микширования одного канала (стика) на другой?

Не важно ни разу. Мы говорим про ее величество Функцию… Она может быть любой, а кодер при любой функции должен работать правильно. Была фраза “машинка должна “выполнять его волю” пока СТИК не упрется” - а серва может управляться более более чем от одного стика. Как быть если один стик уперся, а другой еще нет?

Rакой реально процент микширования приходилось вводить?

Ну ладно, пусть микширование 100% + 50 %. EPA=140%. Первый стик уперся. Второй еще не уперся, но уже влил свои 40%. Серва пришла на EPA. Формально второму стику “до упора” осталось еще 10%. Что должна делать серва?
А можно навыворот. Второй стик уперся и дал свои +50%. Второй доехал до 90%. Он еще не уперся. А машинка типа все.

Если функция будет правильно работать в общем случае - и тогда никто не заморковится ни при каком частном случае. Ни при 100%+120%+100%, ни при 30%+140%-150%. Какой бы стик куда не уперся. При любом EPA.
А если закладываться в “больше ХХ% никому не потребуется” - тогда может реально и весьма неожиданно пострадать тот, кому все же потребуется.

В общем, еще раз мое IMHO: машинку не должно волновать, что в сумме она может получить 185%. Есть две ее EPA, которые задают зону работы машинки. Эта зона соответствует 200 тиков ее стика (как +100 и -100 от середины). Кто примикшировался, сколько примишкировалось - пофиг. Доехала до EPA с участием микшеров - и все. Пусть даже еще 2/3 ее родного стика осталось.
…Причем тики в одну сторону могут быть длиннее, чем тики в другую сторону. Если EPA стоит +140 - 80 (для простоты считаем, что это в точности равно градусам отклонения качалки), то тики в одну сторону это это 1,4 градуса качалки, а в другую - всего 0,8 градуса качалки.

roma9112:

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

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

Допустим , ты летаешь “блинчиком”, и во время такого полета тебе вполне достаточно иметь отклонение руля высоты ±20 градусов. Но вот приходит время повисеть и тебе необходимо на это время увеличить отклонение РВ до +60-50 градусов (заметь, утроить расход в одну сторону и удвасполовинить в другую). Ну так ты программируешь одно положение переключателя DoubleRates на расходы +60-50, а другое на ±20. Щелкнул тумблером - расходы поменялись. А множитель “два” вообще не при чем.

Если у тебя и в двойных, и в одинарных расходах стоят одинаковые настройки (скажем, +100-80), то сколько тумблером не щелкай - ничего не изменится вообще. Уж я то знаю. Я чуть не месяц тумблером щелкал, не понимая почему у меня положение рулей не меняется. 😊

В тутошнем самодельном кодере предусмотрены раздельные переключатели DoubleRates для каждого из каналов (РВ, РН, Элероны). А на заводских аппах попроще - один-единственный “на все”.
И уж, до кучи. На тутошнем кодере есть еще 3 режима пилотирования (Normal/Landing/Pilotage). Для каждого можно назначить расходы (двойные/индивидуальные) отдельно. Итого для одной модели получаем 6 (=3 режима*2 вида расходов) вариантов настройки расходов.

sslobodyan
Pav_13:

машинка не должна останавливаться, если стик, влияющий на нее, еще имеет возможность двигаться!

Это проверяется и настраивается процентами микширования еще на земле. Задача ЕРА - исключить проблемы механики, т.е. не дать качалке либо управляющей поверхности упереться во что-то. Если при проверке на земле вы видите, что стик еще имеет ход, а серва остановилась на ЕРА, то изменяйте проценты микширования.
По-простому - ЕРА это последний ограничитель хода сервы.

Pav_13

Для sslobodyan:

Немного не понял, зачем Вы мне все это объясняли? Рассказанное Вами очевидно, а речь ведется о проблеме “с точность до наоборот” 😉
Вы ведь предлагаете ограничивать ход машинки на ПОЛНЫЙ ход стика! Что вполне разумно и повышает точность управления… Здесь же обсуждается ситуация сознательного “загрубления” стиков - ибо, если ПРОГРАММНО ограничить ход машинки, когда ход стика еще не исчерпан, то это будет равносильно уменьшению разрядности АЦП и ухудшению точности управления… И каким бы “величеством” ни была та “Функция”, которая так поступает - мне кажется, она не права 😁!

DD

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

msv

По-простому - ЕРА это последний ограничитель хода сервы.

Собсвенно в анотации к 1.8 я так и объяснял смысл EPA заложенный в этой версии, сделав разделение настроек на логический и физический уровень. Но уже на этапе реализации этой функции, задумывался, что если сделать EPA просто ограничителем, при конструировании микшера пользователю необходимо учитывать и допустимый ход, определяемый EPA. Т.е например, если я хочу сделать элевоны без ограничений, то при EPA<100 процентов нужно микшер ставить не 60+60 а меньше. По хорошему (и по изначальной задумке) конструируя логический канал, пользователь не должен задумываться, какой EPA он в конце-концов поставит, а значит EPA должен не просто обрезать, а масштабировать функцию на своем интервале. Проблема в том, что для этого надо знать значения конечных точек функции и ноля. Тупо обсчитывать для каждого фрейма вместо одного- три значения функции, может производительности не хватить. Делать это только после выбора модели, испугался что не будут учтены триммера, переключения режимов полета и может еще чего… Короче поленился и сделал на первое время просто резалку… 😃

если ПРОГРАММНО ограничить ход машинки, когда ход стика еще не исчерпан, то это будет равносильно уменьшению разрядности АЦП и ухудшению точности управления…

Ээээ… Ограничивать ход машинки без микширования, похоже нужно только мне. Давайте говорить все-таки о микшировании. Хуже что при программном (EPA<100) ограничении возможности машинки (точность, мощность) будут недоиспользованы… Это долго был мой аргумент в личке j нецелесообразности в принципе и вредности этой фичи… 😃

EagleB3

КМК, для стика своего канала и ТОЛЬКО для стика своего канала установленные границы EPA именно должны задавать масштабирование. Грех, поставив EPA +30-20 (на длинной качалке, например) получить мизерный рабочий угол хода джойстика.

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

Pav_13

Попробую “растечься мыслью” 😃:

  • установка EPA (конечная точка) должна ограничивать ход сервы при ПОЛНОМ ходе стика в зависимости от механики управляемой плоскости (дальше нельзя механически) или требуемого угла отклонения - расходов (дальше не справимся с управлением 😛). Зависимость хода машинки от хода стика этого канала назовем “Функция 1” (Ф1). Эта функция будет главной для данного канала и EPA устанавливаются именно по ней .
  • если возникает необходимость наложить на Ф1 функцию другого стика (Ф2), то это надо сделать так, чтобы Ф1+Ф2=EPA. Отсюда Ф2=EPA-Ф1. То есть - насколько мы увеличили влияние другого стика на управляемый канал, настолько мы должны уменьшить влияние “родного” стика. “Точкой сходимости” этих функций должна всегда оставаться “конечная точка” для этого канала.

При таком раскладе может возникнуть ситуация, когда стик “уперся” а машинка не дошла до EPA и довести ее туда можно только другим (замикшированным) стиком… Такую ситуацию, мне кажется, можно считать нормальной…
Из приведенной мной “формулы” также видно, что микширование в 100% не имеет смысла, ибо просто заменяет основной для этого канала орган управления…
Ситуацию, при которой хотя бы один из рассмотренных выше стиков еще не дошел “до упора”, а машинка уже оставновилась (хотя ей ничего не мешает механически и приемлемых расходов она еще не достигла) я представить не могу… Точнее, не могу понять, зачем такое может понадобиться? 😊

EagleB3

Думаю, это потому, что вы привыкли работать всегда в максимальных ходах машинки и регулировать максимально возможное отклонение рулевой поверхности длинами качалки и кабанчика, устанавливая DoubleRates не более 100% и одинарные расходы меньше 100%

Ответьте (самому себе?) на вопрос: что такое EPA=140% и зачем оно надо?

Pav_13
msv:

…при программном (EPA<100) ограничении возможности машинки (точность, мощность) будут недоиспользованы…

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

EagleB3:

…что такое EPA=140% и зачем оно надо?

Вы правильно про меня, как оказалось, думаете 😁

Но на ваш вопрос, даже самому себе ответить не могу 😊
А зачем нужны EPA=140%?!

sslobodyan
Pav_13:

если ПРОГРАММНО ограничить ход машинки, когда ход стика еще не исчерпан, то это будет равносильно уменьшению разрядности АЦП и ухудшению точности управления… И каким бы “величеством” ни была та “Функция”, которая так поступает - мне кажется, она не права 😁!

А мне кажется, что Вы хотите к двойным расходам добавить тройные 😃
Именно двойные расходы “растягивают” или “сжимают” полный диапазон хода стика на определенную длину управляющего импульса. А ЕРА - только отрезает.

EagleB3

Я честно отвечу - НЕ ЗНАЮ!
Но я ими пользуюсь со спокойной душой.

Я догадываюсь зачем они нужны (хотя это догадки, я могу и ошибаться). Это некоторый разумный запас, который закладывается под “добавку” от вмикшированных каналов. То есть я стик упер, а вмикшированный канал мне еще добавляет отклонение - и рулю есть куда отклониться. И после этого никто не парится - будет сюда вмикширвано еще 3 канала, но по 12 градусов, или всего 2, но по 22. Скока есть - стока есть. Больше 140 не будет, хоть умри, потому что лишнее просто будет обрезано.

Да, я могу поставить EPA=140%. Я стик на 100% задавил - руль встал в 140. Вмикшированный канал добавляет - а отклониться уже некуда.
Но я могу сказать - “и хрен с ним”! Особенно если я на этом канале не пользуюсь микшированием. И даже если пользуюсь, я могу сказать то же самое.
Это мое дело - знать, что у меня ограничение может наступить раньше, чем дойдут до 100% все участвующие каналы. Я хозяин, мне - решать. Дело аппы - дать возможность не париться, что машинка сгорит, упершись во что-то рулем или тягой.

Точно так же и с расходами 120%.

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

Допустим, я поставил EPA 20% (для наглядности = 5 градусов).
Я не потерял точность! Допустим, что измерительные цепи имеют точность абсолютную, тогда точность - это разрядность. Пусть она 10 бит на 100%, тогда с небольшой оговоркой имеем 10 тиков на процент.
На сколько процентов я отклонил руль - не важно. 10 тиков на процент. Если точности хватает летать и не падать с 20% отклонением стика (и, соответственно, отклонением рулей на 20%=5 градусов) при EPA 100%, то ее и подавно хватит при отклонении стика на 100% и отклонении рулей на те же 5 градусов (раз EPA установлен на 20%). Почему “подавно”? Потому, что улучшилась точность работы Вашей руки - увеличился ход джойстика. А точность РМ осталась 10 тиков на процент - не хуже и не лучше.

Теперь, допустим, что вы не изменяли EPA, а впятеро сократили длину качалки.
Мощность стала больше? В общем да, но мощность ограничивается усилием, а усилие ограничено прочностью зуба на РМ. Если Вам хватало усилия на длинной качалке, то зачем Вам надо еще больше? Не надо… Итого выигрыш есть, но совершенно не принципиальный.
Точность работы Вашей руки изменилась? Нет! 100% стика по-прежнему транслируюся в 5 градусов отклонения руля.
Точность отработки РМ стала больше? Да! Теперь Вы имеете 50 тиков на градус. А оно Вам надо? 10 тиков на градус -> 1 тик = 6 минут, 50 тиков на градус -> 1 тик=1минута. Для Вас это существенное различие?! Прикиньте разницу отклонения кромки руля при ширине руля, ну пусть 15 см.

Ни когда не надо бороться за абстрактную точность! И за мощность, и за скорость. Попадос может получиться ОЧЕНЬ КРУПНЫЙ.
Точность, мощность, скорость и много чего еще должны быть не офигенными, а ДОСТАТОЧНЫМИ. Если они достаточны, то бороться за “еще большую лучшесть” и “более качественное качество” - труд бессмысленный.

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

Pav_13

Завидую Вашей усидчивости при написании стольких букФФ… 😁!

Я нарисовался в этой теме только из-за одного высказанного здесь утверждения, что “ручка продолжает двигаться, а машинка уже стоит - это нормально…” (имелось в виду, что машинке ничто не мешает двигаться, кроме программы передатчика), поскольку не согласен, что так должно быть…
Я мало чего понимаю в тех “процентах”, которые присутствуют в меню RC-передатчиков и которыми Вы так лихо оперируете 😊… Сильно подозреваю, что это совсем не те проценты, которым меня учили в школе… Скорее всего - это совсем не проценты 😉
Поэтому попробую еще раз пояснить свое понимание поведения машинок и стиков (без “процентов” 😌):

  • сколько бы каналов управления не было замикшировано на ОДНУ многострадальную машинку, она не долна останавливаться, пока ВСЕ органы управления, на нее влияющие, не “упрутся”! Разумеется, хозяин этой машинки должен позаботиться о том, чтобы она не сломала себя или модель, установив для нее “крайние точки”!
    Если же машинка отказывается подчиняться еще не достигшим “упора” органам управления (разумеется тем, которым обязана подчиняться) - то имеет место ошибка в программе…
    ИМХО!
msv

Ух как много написано…

для стика своего канала и ТОЛЬКО для стика своего канала установленные границы EPA именно должны задавать масштабирование.

У этого кодера нет для канала “своего” стика, есть только дефолтовые настройки микшера. Это концептуально, имхо идеологически верно и пересмотру не подлежит.

Отсюда Ф2=EPA-Ф1.

Поверьте, есть смысл иметь для разных режимов полетов микшеры 50+50 и 100+100. Для вашей концепции они не будут отличаться. Даже мне, с небольшим опытом пилотированием, это весьма пригождается. Как приятно врубить режим “пилотаж”- 100+100 и крутануть на вертикали бочку “пропеллером”. И Вы хотите меня лишить этой радости? 😃 При этом я конечно понимаю, что одновременно мак крен и мак тангаж при такой настройке сделать не получится…

Точность, мощность, скорость и много чего еще должны быть не офигенными, а ДОСТАТОЧНЫМИ.

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

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

в моем представлении нужно инвертировать.

Если же машинка отказывается подчиняться еще не достигшим “упора” органам управления (разумеется тем, которым обязана подчиняться) - то имеет место ошибка в программе…

Если Ваша задача недопустить ограничения, а оно есть, то имеет место неверно сконструированный канал…

EagleB3
msv:

Вот уж точно согласен, если добавить- при выборе сервы.

Я тебя уверяю - ВСЕГО, ЧЕГО УГОДНО!
Это основополагающий принцип при построении любых комплексов.

Да вот хоть такой пример: я просто меняю настройки копиллятора CVAVR в программе для работы с энкодером AS5043 и компилирую программу. Для настроек printf типа “int,width” результат “Program size: 1419 words (2838 bytes), 34,6% of FLASH”, а для настроек “float,width,precision” уже “Program size: 3135 words (6270 bytes), 76,5% of FLASH”. Я не поменял ни одной буквы в тексте программы, а от меня уже хотят в два раза больше ресурсов. Я на ровном месте попадаю при прочих равных на вдвое более мощный камень. За желание выводить числа с плавающей точкой. У меня вообще нет таких чисел. Не нужны. Зачем вводить избыточность?

Не нужна 14-ти канальная аппа тому, кто летает на тренере, не имеющем даже РН. Но, может быть она просто необходима, если человек без такой аппы чувствует себя несчастным вплоть до суицида…
Потому, что это тоже комплекс: “модель+аппа+человек”…
Мы можем подарить ему 12-ти канальную аппу, и какую-нибудь модельку от <имярек> за $20000, а он все равно в петлю полезет - двух каналов не хватило…

Denn

“то имеет место неверно сконструированный канал…” - абсолютно согласен!

Pav_13

Не буду “спорить о вкусе ананасов с теми, кто их ел!”(с)…

Придется все же собрать этот кодер, чтобы говорить с присутствующими на одном языке, а пока, чувствую, мне не удается правильно изложить свое ИМХО… Ну да, фиг с ним…

Крайнее уточнение:

Это цитата из меня 😉:
“Если же машинка отказывается подчиняться еще не достигшим “упора” органам управления (разумеется тем, которым обязана подчиняться) - то имеет место ошибка в программе…”

Это ответ на нее от автора программы:

msv:

Если Ваша задача недопустить ограничения, а оно есть, то имеет место неверно сконструированный канал…

Это полное согласие с автором программы от участника форума:

Denn:

“то имеет место неверно сконструированный канал…” - абсолютно согласен!

Но фраза именно этого участника и ввергла меня в дискуссию:

Denn:

А то, что ручка продолжает двигаться, а машинка уже стоит - это нормально, не беспокойтесь!

Поэтому вопрос к Denn (и я удаляюсь паять кодер):

Так все же, тот факт, “что ручка продолжает двигаться, а машинка уже стоит” - это нормально или “имеет место неверно сконструированный канал”?!

P.S. Ничего личного!

EagleB3

Ты, главное, сам ни на кого не обижайся…

Я вот тут повыступал - так и понял, что не было (и нету?!) вовнутри меня однозначного понимания логики масшатбирования по EPA. 😊
То мне кажется, что масштабирование должно быть по всему диапазону от одной EPA до другой, то вот вроде как должен быть все же запас по краям для триммирования и микширования. Но не за пределы EPA, это точно!

Может быть так: EPА поставили, внутрь диапазона процентов так по 20 от края отступили, и по этим пределам отмасштабировались? А?

…Авось сообразим сообща, как оно следует быть.

P.S. Ну так не зря выступал. По крайней мере мне самому стало немножко яснее… 😁
P.P.S. Надо будет сделать шкалу, стрелочку длинную на РМ-ку повесить и поисследовать как на моей “Футабе” дело обстоит.

msv

Так все же, тот факт, “что ручка продолжает двигаться, а машинка уже стоит” - это нормально или “имеет место неверно сконструированный канал”?!

У Denn нет противоречия, он только недостаточно точно процитировал мою фразу, обрезав - “Если Ваша задача недопустить ограничения, а оно есть,…”. Все зависит от того, что Вы хотите получить. Посмотрите на диаграмму обработки сигналов, сколько звеньев там участвует в определении конечных точек… Не забудте, что есть еще три режима полета не показанных на диаграмме. Если программа возьмется умничать и менять расходы по своей логике, вряд ли это будет для пользователя удобно и даже предсказуемо… На всякий случай уточню, программу пишет программист, канал конструирует пользователь. Поэтому на Ваше “программист- дурак!”, ответил “кто как обзывается, тот сам так называется!”. 😃

Я тебя уверяю - ВСЕГО, ЧЕГО УГОДНО!
Это основополагающий принцип при построении любых комплексов.

В абстарктном смысле - конечно! Речь о выборе путей и методов решения проблемы. Утрировано- Вы предлагаете поставить 10кг-вую высокопрецензионную серву и ограничить ее ход до 10%. Я намекаю что ту же точность и усилие можно получить от ширпотребовской 1кг-вой всего лишь правильно оценив длину плеч качалки и кабанчика.
ЗЫ Для меня полемика тоже оказалась полезной. Как в анекдоте- “объяснил раз, объяснил два… Сам уже понял…”. А какого фига для масштабирования внутри EPA мне нужно было конечные точки функции??.. Можно обрезать значения перед EPA до фиксированных ±120%, (напомню ±100% полный ход стика, ±120% соответствует границам допустимой ширины канального импульса), как и было до введения EPA, и затем масштабировать значение по EPA, считая крайними точками функции именно допустимую ширину канального импульса. Вроде бы все логично- EPA однозначно определяет крайние углы отклонения и нет обратной зависимости EPA->начало ограничения.

avisenja

Всем привет!

Народ! Сильно не давите на программера! Разработку то наверное имеете на халяву, что он смог от своих щедрот ВАМ подарить, оторвав от семьи, то и получаете. Либо пишите прогу сами, через пол года как минимум, может и получиться что-то и у вас.

А вот с ограничением свободы рульки это зря, когда сигнал будет слабым, а дешифратор в приемнике дешмански-простецкий - то броски могут быть за пределы желаемого, и пульт тут СОВСЕМ не помошник, золомаете радёмую, лучше в разрыв преобразователь расхода с ограничителем воткнуть (простая игрушка на одном smd PIC-e, или циф рульку, а мовсем даром ->но с гарантией, это с тягой лишние минут десять повозиться .

И нервы, и сервы в по_ряд_ке !!!

Отчасти сам задумываюсь, функция ЭКСПАНДЕРА в наворотах пультов – СПОРНАЯ!

Физику процесса - сигнал / шум / ошибка - не рассматриваю, *серенькое* напрягайте сами.

msv

Да никто меня тут не обижает… 😃 Вы же понимаете хорошая постановка задачи - это 80% программы… А остальное- кодирование, документирование, сопровождение итп… это уже так… по мелочи… ремесло… Вот в постановке то народ и помогает активно, за что я, конечно, благодарен…

Pav_13
msv:

Поэтому на Ваше “программист- дурак!”

Ну, если Вы так трактуете мое " - то имеет место ошибка в программе…", то…
неудивительно, что мы говорим на разных языках…

msv:

“кто как обзывается, тот сам так называется!”.

Учитывая, что я никого не обзывал (достаточно воспитан), то пока буду себя считать достаточно умным для участия в подобных дискуссиях… Признаю себя “ошибающимся писателем разных программулек” 😉… Это действительно так - у меня есть небольшой опыт сочинения программ как для микроконтроллеров (PIC, asm), так и под Винду (BorlandC++Builder)… И всегда испытывал трудности с математикой из-за весьма слабых познаний в оной… И всегда в моих программах были ошибки, и никогда мне не приходило в голову обижаться, если мне на них указывали, напротив - просил пользователей внимательнее тестировать программу и сообщать мне о глюках и недоработках…

Пожалуй, сделаю еще попытку пояснить, почему считаю неприемлемой ситуацию, когда “ручка продолжает двигаться, а машинка уже стоит”… Попробую на примере… Думаю, большинство из присутствующих сидели за рулем автомобиля… Представьте теперь, что один оборот рулевого колеса поворачивает колеса, а второй оборот уже не влияет на их положение 😮… Причем, колес не видно, и о том моменте, когда они начинают реагировать на руль можно только догадываться… Представили? Вы будете ездить на таком авто? Я - нет! Хотя приспособиться можно, но не лучше ли починить рулевое?😉
Так и в случае с кодером… если при его настройке возникает такая ситуация и причиной тому недоработка в программе - программу надо попытаться исправить…
Если причиной тому неправильное “конструирование канала” пользователем - надо объяснить пользователю, как сконструировать канал правильно, а не говорить “…это нормально, не беспокойтесь!”…

Вот и все!

P.S. Если бы мои познания в арифметике позволяли, то я бы конкретно написал, как надо сделать, но… увы 😊!
P.P.S. По прежнему - ничего личного! И в мыслях нет кого-то обидеть, а, тем паче - обозвать 😛!
Да и сам - не “красна девица”! Надеюсь на взаимопонимание!