AI7 0 May 20 Posted May 20 · Report post On 5/18/2026 at 10:14 PM, girts said: Если к событиям по таймеру подвязан какой то ногодрыг и всё происходит БЕЗ участия ядра, то да. Если это вызывает какой то ногодрыг по прерыванию, то всё это уже становится + неопределенная кучка тактов... Если опять таки мониторятся какие то флаги, то это вообще + трамвайная остановка. Ну вот простая задачка - main у вас на 40 тактов чего то, и в добавок нужно отсчитать ровно 24 такта и передёрнуть P_out = ~P_in. Как сделаете? Что такое “P_out = ~P_in” не знаю, похоже на вывод порта. В новых МК есть коммутатор, который позволяет соединять между собой периферийные устройства. В МК, с которым работаю, есть 8 каналов. Вход одного канала можно присоединить к компаратору таймера, выход – к выводу порта. Тогда при достижении 24 такта на выводе порта сразу появится сигнал. Вход также можно подключить к периферийному устройству, например, USART, SPI, ACP, AC, RTC и другим таймерам. Так что таймер можно запустить и выдать сигнал на порт без участия ядра. Вообще-то я пока коммутатор не использовал, описал, как понял из даташита. On 5/19/2026 at 12:20 AM, artemkad said: Да хоть 20 байт. Выделить место для переменной это вообще не вопрос. Не удобно дальше с ними работать, потому как стандартной многобайтовой арифметики нет, а та что есть, требует тасования уже занятых регистров. Иначе говоря, любая многобайтовая арифметика неудобна, а потому ее стараются не использовать. У меня в языке есть стандартная многобайтная арифметика. Полностью есть операции равно, плюс и минус, сравнение, математические функции пока слабее. Постоянно работаю с многобайтной арифметикой, это просто. Например, а += в, где а – 5-байтная переменная SRAM, в – 3-байтная переменная РОН. Нажал на кнопку компиляции, получил результат, никакой мороки. А с переменными 20 байт разработчик компилятора наверняка получит нервное истощение от тупой однообразной работы. On 5/19/2026 at 12:20 AM, artemkad said: Ни данных ни железа ни состояний ни переходов между состояниями нет, а давайте напишем задачи. Если так можно, то программа простая и там особо нечего в основном цикле писать. Можно взять соседний проект и там основной цикл будет примерно аналогичен. В принципе да, основной цикл получается простой. Он, правда, несколько обрастает. Скажем, подпрограмма опроса датчиков сообщила, что какой-то датчик неисправен. В основном цикле надо выдать на индикатор соответствующее сообщение и перейти на другой цикл. Проекты разные, основные циклы тоже разные. Например, в последней проекте, фактически, в основном цикле одна команда приёма через USART команды от компа, для других проектов не пойдёт. Что за переход между состояниями? Обычно в основном цикле вызов SUB – это переход на выполнение следующей задачи. Quote Share this post Link to post Share on other sites More sharing options...
artemkad 187 May 20 Posted May 20 · Report post 17 минут назад, AI7 сказал: а += в, где а – 5-байтная переменная SRAM, в – 3-байтная переменная РОН. В каких РОН и что станет с тем, что в РОН уже было? 27 минут назад, AI7 сказал: Что за переход между состояниями? По сути это переход между подциклами внутри основного цикла системы. К примеру на примере автомобильной сигналки, она имеет 4 состояния - охрана, режим снятой охраны, сервисный режим, режим программирования настроек. И переходы между ними зависящие от действий или бездействий с брелоками, метками, концевиками автомобиля, кнопкой или клавиатурой. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 364 May 20 Posted May 20 · Report post 41 минуту назад, AI7 сказал: Постоянно работаю с многобайтной арифметикой, это просто. "Постоянно работаете" с ней на AVR? Зачем??? Если ваши "постоянные задачи" требуют многоразрядной арифметики, то очевидно вы направильно выбрали контроллер. Есть-же ARM-ы. В которых всё в ~4 раза проще с многоразрядной арифметикой, чем в 8-битниках. Зачем изобретать деревянный велосипед? 46 минут назад, AI7 сказал: У меня в языке О каком "языке" речь, интересно? Quote Share this post Link to post Share on other sites More sharing options...
AI7 0 May 21 Posted May 21 · Report post On 5/20/2026 at 11:14 AM, artemkad said: В каких РОН и что станет с тем, что в РОН уже было? Любые РОН, кроме r16 и r17. В РОН сохраняются старые значения. r16 и r17 используются в команде для проведения операций. Во всех операциях равно, плюс и минус достаточно пары регистров r16 и r17. В более сложных командах, например, умножение, естественно, используются и другие регистры, надо читать описание команды. Описание легко открыть парой кликов мышкой. Вообще распределение переменных по регистрам – второстепенная задача. Основная – общая структура программы, которая должна быть простой, легко читаемой, чтобы, в частности уйти от таких проблем, какие возникли у ТС. On 5/20/2026 at 11:14 AM, artemkad said: По сути это переход между подциклами внутри основного цикла системы. Фактически, это команды RJMP и JMP перехода на метку, в ассемблере широко используются. On 5/20/2026 at 11:41 AM, jcxz said: "Постоянно работаете" с ней на AVR? Зачем??? Если ваши "постоянные задачи" требуют многоразрядной арифметики, то очевидно вы направильно выбрали контроллер. Есть-же ARM-ы. В которых всё в ~4 раза проще с многоразрядной арифметикой, чем в 8-битниках. Зачем изобретать деревянный велосипед? Особо сложными расчётами не приходилось заниматься. А рядовые вычисления нетрудно сделать и на AVR, поскольку есть встроенные команды и математические функции. А расчёты часто встречаются. Например, даже простой вольтметр – есть умножение. Среднеквадратичный вольтметр, наверно, нужен квадратный корень. Измеритель концентрации, затухание по экспоненте, нужен логарифм. Следящая система – расчёт управляющего сигнала и т.д. У АРМ нет ассемблера, на котором работаю. Последние небольшие Tiny AVR, по совокупности параметров, возможно, одни из лучших в своём классе, хотя про другие МК ничего не знаю. On 5/20/2026 at 11:41 AM, jcxz said: О каком "языке" речь, интересно? Это ассемблер со встроенными элементами ЯВУ. Он пока в разработке и его нет в общем доступе Quote Share this post Link to post Share on other sites More sharing options...
artemkad 187 May 21 Posted May 21 · Report post 17 минут назад, AI7 сказал: Фактически, это команды RJMP и JMP перехода на метку, Нет. Эти команды просто исполняют переход. А осуществляется он по какой-то причине. И обычно эта причина это изменение флагов какого-то регистра состояния системы. Тех самых флагов о которых я говорил в начале. Quote Share this post Link to post Share on other sites More sharing options...
AI7 0 May 26 Posted May 26 · Report post On 5/16/2026 at 3:41 AM, jcxz said: Не так давно делал проект на XMC4700 с тактовой 144МГц где программно генерилась синусоида (на ЦАП) с частотой квантования ~13МГц. А это уже всего: 144/13 = 11 тактов на отсчёт. И код генератора выполнялся в ISR, занимая всего около 50% времени CPU (половина времени оставалась ещё на фоновые задачи и другие ISR). Без асма такое с современными си-компиляторами не сварить. Может быть, проще было поставить аналоговый генератор синуса. При необходимости МК мог бы стабилизировать его частоту с помощью своего кварца. Тогда МК был бы свободным, можно применить простой и дешёвый. Посмотрел в ЧипДипе, XMC4700 стоит около 4000 рублей, рядовой МК существенно дешевле. Для генератора применить какую-нибудь микросхему или схему ГПД от трансивера. Я этим не занимался, это предположение. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 364 May 27 Posted May 27 · Report post 12 часов назад, AI7 сказал: Может быть, проще было поставить аналоговый генератор синуса. При необходимости МК мог бы стабилизировать его частоту с помощью своего кварца. Тогда МК был бы свободным, можно применить простой и дешёвый. Нужна была перестройка частоты синусоиды в диапазоне ~150...300кГц с дискретностью ~1Гц. Каким аналоговым генератором синуса такое можно сделать? И сколько он будет стоить? И каков будет спектр синуса на его выходе? Это для нас было самым важным параметром (а ни как не себестоимость). 12 часов назад, AI7 сказал: Посмотрел в ЧипДипе, XMC4700 стоит около 4000 рублей, рядовой МК существенно дешевле. Сочувствую. У нас XMC4700 в mouser-е = ~9.7 евро. Один только вменяемый "аналоговый генератор" скорее всего будет дороже. Это уж не говоря о том, что непонятно как для него несущую генерить с перестройкой в доли %%? 12 часов назад, AI7 сказал: Для генератора применить какую-нибудь микросхему или схему ГПД от трансивера. Я этим не занимался, это предположение. Ну вот именно. МК + синтезатор + генератор синуса - и себестоимость скорее всего станет больше, чем у одного МК. Уж не говоря о том, что известные мне генераторы синусоид, генерят синус очень грубо, ступенчато. Соответственно - с большим спектральным шумом, а не одной палкой на выходе. А значит - потребовался бы ещё и громоздкий аналоговый фильтр по выходу. В сумме бы получилось решение скорее всего даже в несколько раз дороже. Даже если брать вашу конскую цену МК. PS: И если бы у нас стоял вопрос о себестоимости, взяли бы XMC4500/XMC4502/XMC4504 которые ещё на неск. евро дешевле, при чуть меньшей производительности. А периферию имеют такую же. Quote Share this post Link to post Share on other sites More sharing options...
RabbitRabbit 2 May 27 Posted May 27 · Report post 13 часов назад, AI7 сказал: Может быть, проще было поставить аналоговый генератор синуса. Зачем "аналоговый", когда в продаже есть великий ассортимент DDS генераторов. А хвастаться тем, что 50% времени проц занят входом/выходом из ISR - ну такое себе ;) Quote Share this post Link to post Share on other sites More sharing options...
jcxz 364 May 27 Posted May 27 · Report post 50 минут назад, RabbitRabbit сказал: Зачем "аналоговый", когда в продаже есть великий ассортимент DDS генераторов. Не надо накидывать на вентилятор. Я тоже так могу. Предложите полное решение. Более оптимальное по вашему, чем то что мы сделали. А мы оценим. 50 минут назад, RabbitRabbit сказал: А хвастаться тем, что 50% времени проц занят входом/выходом из ISR - ну такое себе 😉 Что "такое себе"? Вы думаете что "занят на 100%" лучше чем "занят на 50%"? И где именно я "хвастался"? PS: Почему местные советчики думают что мы не оценивали разные пути решения и не сравнивали их? PPS: И да кстати - я ни чьих советов "как делать" не спрашивал. Quote Share this post Link to post Share on other sites More sharing options...
AI7 0 May 28 Posted May 28 · Report post On 5/27/2026 at 9:35 AM, jcxz said: Нужна была перестройка частоты синусоиды в диапазоне ~150...300кГц с дискретностью ~1Гц. Каким аналоговым генератором синуса такое можно сделать? И сколько он будет стоить? И каков будет спектр синуса на его выходе? Это для нас было самым важным параметром (а ни как не себестоимость). Требования к генератору не знал, поэтому вначале своего поста писал «Может быть…». У вас точность частоты вроде как 3,3 ppm, а у обычных кварцев начинается вроде бы с 10 ppm. Кварц поддержит такую точность? Я бы посмотрел в сторону генератора ГПД от трансивера. Перестройка с помощью варикапа, управление от МК. Стабилизация частоты – от кварца МК. Сигнал с генератора подаётся на таймер МК, тот точно измеряет частоту и вырабатывает с помощью ШИМа другого таймера постоянное напряжение, которое подаётся на варикап. Поддержит ли такая схема требуемую точность – вопрос, я такое не делал. Варикап не перекроет весь диапазон, придётся разбивать на поддиапазоны. Плюсы – МК свободен, генератор вырабатывает чистый синус, а у вас «ступенчатый» синус. Детали дешёвые, хотя, скорее всего, здесь основная цена – стоимость разработки. Наверно, нетрудно сделать перестраиваемый узкополосный фильтр на основе такого же контура, как у генератора. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 364 May 28 Posted May 28 · Report post 18 минут назад, AI7 сказал: У вас точность частоты вроде как 3,3 ppm, а у обычных кварцев начинается вроде бы с 10 ppm. Кварц поддержит такую точность? Не помню какая была точность частоты. А при чём тут она? И был не кварц, а генератор. 18 минут назад, AI7 сказал: Я бы посмотрел в сторону генератора ГПД от трансивера. Что это такое? И умеет ли оно вырабатывать чистую синусоиду в диапазоне 150...300кГц? 24 минуты назад, AI7 сказал: Варикап не перекроет весь диапазон, придётся разбивать на поддиапазоны. Плюсы – МК свободен, генератор вырабатывает чистый синус, а у вас «ступенчатый» синус. И зачем все эти сложности? И что толку от "свободости МК"? Оставшихся ~50% времени - за глаза остальным задачам на МК. С большим запасом. Проблем с загрузкой МК там не возникало. Как и с ценой. Зачем это усложнять??? Не понятно... да и не факт, что дешевле будет (что опять же не играло роли в том проекте). "Ступенчатость синуса" была = 13МГц/300кГц = 43 отсчёта на период. За глаза. Смотрели на анализаторе спектра - была одна единственная палка. При минимальном фильтре на выходе. 27 минут назад, AI7 сказал: Детали дешёвые, хотя, скорее всего, здесь основная цена – стоимость разработки. Вот именно. И "более дешёвый МК" ещё более увеличит это время. Так как там и АЦП наверняка будет хуже и SPI - тоже гораздо хуже, чем у XMC4xxx. И основная сложность в том проекта была - в LoRa-драйвере, висевшем на SPI. А никак не в генераторе синусоиды (на который было потрачено минимум времени). И хороший многофункциональный SPI XMC4xxx позволил существенно ускорить разработку. Quote Share this post Link to post Share on other sites More sharing options...
girts 27 May 28 Posted May 28 · Report post 5 hours ago, jcxz said: позволил существенно ускорить разработку. И наверное повторяемость изделия... И простота тестирования всей грядущей партии если изделие не единичное... Ибо всё то, что предлагалось на аналоговом, с обратной связью через 2 таймера, и обратно в аналоговое, имхо только должно внести кучу нелинейности во всём процессе. Quote Share this post Link to post Share on other sites More sharing options...
AI7 0 May 31 Posted May 31 · Report post On 5/28/2026 at 1:25 PM, jcxz said: Что это такое? И умеет ли оно вырабатывать чистую синусоиду в диапазоне 150...300кГц? И зачем все эти сложности? И что толку от "свободости МК"? ГПД – это генератор плавного диапазона трансивера для связи на коротких волнах. К нему предъявляются аналогичные требования. Чистота синусоиды, чтобы не было побочных излучений в эфире. Перестройка частоты в некотором диапазоне и высокая стабильность частоты, чтобы не потерялась связь с узкополосным приёмником. Смотрел схему, простая, на трёх транзисторах. Где-то на форуме читал, что требования к стабильности частоты ГПД вплоть до единиц герц. Для любительского диапазона 160 метров частота около 2 МГц. Сам я никогда не занимался ГПД. Свободный МК – просто писать программу и можно навешивать другие задачи. Часто после эксплуатации появляются пожелания добавить какие-нибудь опции, функции, сервис. Некоторые задачи не допускают, чтобы МК отвлекался. Приходилось связывать МК по SPI, пока не было сложностей, в языке есть встроенные команды посылок аргументов и массива байтов. Правда, с LoR-драйверами не сталкивался, даже не знаю, что это такое. В новых МК AVR появились дополнительные возможности SPI. В старых МК было 2 регистра управления, в новых – 5. Что добавили, пока не разбирался. Quote Share this post Link to post Share on other sites More sharing options...