- Хочу задать здесь вопрос по теме написания программного ядра
(основной программы с нуля и пользовательской подгружаемой)
специализированного промышленного контроллера. Хочу услышать
советы, ваше мнение по данному вопросу: Имеется пром. контроллер
выполненный на STM32F407, также имеются дискретные порты
ввода/вывода (включая инкрементальные), аналоговые вводы/выводы
(токовые, напряжения), MODBUS RTU/TCP - Как лучше написать
пользовательскую программу управления объектом Make_Pic(268 знак., 26.03.2024 08:28, MCU, полностью)
- Если тема актуальна ... У меня всегда интеллект управляет
контроллером СНАРУЖИ по интерфейсу без требования к реалтайму (он
то и реализован в контроллерах). Например, ПИД регулятор есть,
уставка приходит с наружи. Мотор стартует по команде, а
останавливается по локальным условиям. Пользовательская программа
на бэйсикоподобном скрипте, в простых системах на C c X-macro. В
принципе, отладив логику на PC, можно потом положить внутрь. - VLLV(26.01.2025 21:00)
- Составьте бизнес план вашего контроллера/линейки:сферу применения,
необходимый функционал, конкуренты, объемы продаж, себестоимость,
расходы на написание ПО, поддержку только без прикрас. Причем все
это при возможных изменениях в будущем. Может вмешаться политика,
снимут санкции в ближайшие пару лет, сможете конкурировать? Чем
длиннее вывод на рынок, тем больше рисков. Насчёт ПО, к мэковским
языкам вероятно добавится язык использования нейросетей и
тестирования ими же. jlm(186 знак., 22.01.2025 07:44)
- Следование стандартам как-то более полезно чем написание
самопальной системы ни с чем не совместимой. Поэтому либо порт
языков ПЛК МЭК для промышленных применений либо порт ардуины для
самодельных красноглазов, а еще лучше и то и другое. - Boвa(22.01.2025 05:53)
- Порты и периферия отдельными модулями ? - Aleksey_75(21.01.2025 12:30)
- Вот лично мне совершенно не нравится то, что пихают юзеру в
качестве "ЯП для ПЛК". Поэтому под китайские клоны "ПЛК" FX3U я
просто написал свою сишную прошивку. Нет ничего удобней, чем писать
программу на языке программирования, а не мышкой дрочить! - Eddy_Em(21.01.2025 09:47)
- ... сишную прошивку, тобишь свое ядро на базе сишного говнокода от
китайцев аля митсубиСИ? - Make_Pic(25.01.2025 11:22)
- Ты совершенно прав. Но роль FBD не в обеспечении удобства, а в
....защите инвестиций. Путем снижения порога вхождения и
принципиальной невозможности писать сложно. Cкpипaч(355 знак., 21.01.2025 10:53)
- +1. У нас на НПЗ девочки за 40 в графической оболочке лепили
программы для ПЛК из кубиков чуть не быстрее, чем в тетрис и лайнс
рубились. Заставить их изучить сишник и растолковать как им
пользоваться я ваще не представляю. Про слесарей, обслуживающих все
это добро и тем более. А картинку им показал и им все понятно. Чота
им разъяснять по вороху распечаток пусть юные энтузиасты, считающие
себя круче других, пробуют. - Codavr(21.01.2025 22:28 - 22:31)
- Если речь об уиитазном бачке то поверю. А если речь упаковочной
линии со 100 состояний на десятке вложенных автоматов... - IBAH(21.01.2025 22:29)
- Что-то мне подсказывает, что писать автоматы на специально
предназначенном для этого языке SFC проще чем на Си - AlexG(22.01.2025 04:47)
- Комплекс каткрекинга тебе о чем то говорит? С момента постройки в
1960м весь завод был на пневматике. Во второй половине 80х начали
переходить на ПЛК. Все осуществлялось силами КИП. К концу 90х все
работало на ПЛК. Заводик имел проектную мощность пререработки 16
млн.тонн нефти. Codavr(1 знак., 21.01.2025 22:58, ссылка)
- Я же и говорю - система диспечерезации. Вся автоматика на уровне
унитаза. Любой кирпичный завод на порядок сложнее. IBAH(1 знак., 21.01.2025 23:03, youtube)
- Может поэтому тебя и не приглашают автоматизировать НПЗ. Ты
попробуй, там бабло такое крутится, что тебе и не снилось. Там
одного парафина производится на сто лет работы твоих свечных
заводиков хватит. Коплекс гидрокрекинга еще в начале 90х собирались
строить, завод Славнефти предали и денех сразу не стало. Сейчас уже
построили, в несколько сотен гринолямов под ключ со всеми ПЛК и
алгоритмами. Тыщу проблем сразу сняли. Может и ты на что сгодишься. - Codavr(21.01.2025 23:29)
- Как говорит Скрипач, тебе виднее. Я знаю только одно, что любая
работа проста и легка, пока ее делаешь не ты. А заставь тебя
получить 76 й бензин смешав 5-7 разных от прямогонки и ректификата
до алкилата и каткрекинга на потоке прямо в трубе и попасть в гост,
вот тут ты и будешь репу чесать. Пиндосы закупают нефть в России
из-за того что наложили санкции на Венесуэлу, не патамушта в мире
заебатойнефти слишком мало, и не патамушта российская сильно
дешевле, а патамушта Codavr(190 знак., 21.01.2025 23:21)
- Ни разу в жизни не сталкивался со столь сложными алгоритмами (100
состояний, вложенные автоматы). В реальной жизни их обычно
разбивают на более простые. - Cкpипaч(21.01.2025 22:38)
- Ты совершенно неправ. FBD ( а лучше LD) позволяет легко
обрабатывать исключительные ситуации (отказ оборудования), причем
не программой, а пользователем. У наладчиков даже есть такой термин
"Цепь не собирается". Программисту не утруждает себя обработкой
отказа 100500 датчиков и исполнительных механизмов, это за него
сделает наладчик. В результате программа значительно дешевле и
наладчик при деле. - IBAH(21.01.2025 22:25)
- FBD тоже позволяет вставить таймер, кто-то из знакомых вроде
практиковал. AlexG(1 знак., 21.01.2025 16:30, картинка)
- в шахматах это называется "защита печника" LordN(36 знак., 21.01.2025 12:59)
- если делаешь какой-то взрослый недешевый пром ПЛК, то
предусматривай сразу возможность загрузки юзер-проекта на ПЛК с
флешки, без участия компа. плюс копипаст проекта на другие LordN(270 знак., 21.01.2025 07:48)
- Думаю, что в качестве примера стоит посмотреть на Сrossrw
FBD-runtime и XOD AlexG(2 знак., 27.03.2024 19:15, ссылка, ссылка)
- Наверное мне сейчас сразу прилетит за Arduino..., но можно делать
подобное в FlProg . arisov77(135 знак., 26.03.2024 16:28, ссылка, ссылка)
- Я свой метод уже упоминал. Надо изучить язык ST(FBD) и писать на Си
пользуясь той же парадигмой. Например, вот так я вызываю регулятор в главном цикле IBAH(1303 знак., 26.03.2024 14:37, ссылка)
- OpenPLC Можешь поискать это слово по caxapa, тут на него
наталкивались. Это готовый редактор IEC 61131-3 языков. Правда есть
один большой жирный минус. Выходной результат IEC языков ты
получаешь только в виде ARM бинари, которую можешь вызывать из
своего кода. Сишного кода нет. - RxTx(26.03.2024 12:37)
- Есть такой проект - YAPLC. Там товарищи реализовали ПЛК (с
привлечением Beremiz), но не суть. Они там сделали ядро (BSP,
реализующее системные функции и связь с железом) с которым
пользовательский код, синтезированный Beremiz
(IEC->промежуточное описание->код на С->gcc),
общается через ABI. Собственно пользовательский код можно написать
и на голом С, без извращений. Вполне у них можно подсмотреть
реализацию. Chum_A(1 знак., 26.03.2024 09:24, ссылка)
- Первое над чем подумать, как будет внутри устроена пользовательская
программа. Будет ли это конечный автомат? Будет ли у пользователя
мультизадачность? Насколько это будет черезжопно, чисто на уровне
текста? А то видел я контроллеры "на Си", в которых задержку
предлагали блокирующим sleep() делать. Cкpипaч(576 знак., 26.03.2024 09:14)
- Если нативный Си, то нужно слепить небольшой ABI для связи
ядро<->подгружаемый модуль. Таблица указателей на функции
или что-то в этом духе. Есть ещё вариант q3vm, там тоже Си, но
компилируется в байткод, который потом интерпретируется. - SciFi(26.03.2024 08:37)
- Подскажите проверенный на практике JSON для микроконтроллеров, для
обмена по сети. Маленький, быстрый, качественный. - EmbedProg(11.07.2025 15:16,
, MCU, полностью)
- Знатоки LWIP, подскажите. CaйpycCмит(956 знак., 11.07.2025 14:59,
, MCU, полностью)
- Подскажите как "красиво" загружать и хранить в памяти в
микроконтроллера различные конфигурации (константы, значения
переменных, условий переходов и т.д.)? Желательно с примерами кода. - Make_Pic(27.03.2024 09:13, MCU, полностью)
- Чего-то вы тут реляционную БД уже насоветуете... Красота в
простоте! Как делаю я... IBAH(818 знак., 11.07.2025 15:29)
- Самая красивая и полная сериализация это JSON. dumb_and_dumber(600 знак., 11.07.2025 12:43,
)
- Ихмо первый вопрос: Что за микроконтроллер? Мне всегда было
интересно: почему из этой самой необходимой информации всегда
делается великая тайна? Второй вопрос - ответственность устройства,
что будет если настройки будут утеряны. Третий вопрос. Это серийное
устройство? Какова будет статистика, каков объем серии? Четвертый
вопрос - условия работы устройства. Пятый вопрос - это
само-сохранение у девайса или к параметрам есть внешний доступ?
Шестой вопрос - количество RxTx(44 знак., 27.03.2024 15:48)
- Мне эта тема очень близка, я как раз перерабатываю БД настроек.
"Красиво" понятие очень неопределенное. Можно долго с гармошкой
вприсядку рассказывать о красоте и ни о чем... Что означает
"красиво"? RxTx(51 знак., 27.03.2024 15:43)
- Решение очень сильно зависит от структуры данных. Если это единый
массив, который будет записываться только целиком, это одно
решение. Если это 100500 отдельных параметров, каждый из которых
может меняться отдельно, будет другое решение. Если комбинация, то
третье решение. Еще решение зависит от готовности к потере данных,
т.е. допустимо ли потерять настройки (выключение питания при
перезаписи и т.п. сбои), или такое не допустимо. - AlexBi(27.03.2024 10:22)
- Красота в глазах смотрящего. Так-то можно сказать, что "красиво" -
это как в настоящих компьютерах, то есть файловая система. - SciFi(27.03.2024 09:26)
- А в чем: EEPROM или Flash? Eddy_Em(808 знак., 27.03.2024 09:18, ссылка)
- У вашего метода есть особенность, если вдруг при стирании
произойдет какой-то сбой/сброс, все данные будут утеряны, т.к. нет
второго блока во флеше, который бы хранил данные в таком случае.
Надо быть готовым к такому повороту. - AlexBi(27.03.2024 12:31)
- Во flash - Make_Pic(27.03.2024 09:25)
- У меня знакомый, в достаточной мере живёт тем, что обновляет
прошивки телевизорам, когда те записывают настройки "громкость" или
"каналь" во флэшь и "происходит чота страшное". Ему приносят кирпич
и деньги. Получают телек. Что за промблемма поставиь внешнюю
ЕЕПРОМ? Они щас копейки. - mse homjak(27.03.2024 12:42)
- Если кривые ручки запороли флешу, они и с еепромой справятся. - SciFi(27.03.2024 12:44)
- Да, но с ЕЕПРОМ не получится кирпича из поделия. - mse homjak(27.03.2024 12:46)
- Запросто. Звукашки Vibra16 ISA PnP и сетевушки Realtek PCI сразу
вспоминаются. Первые при слете ставили раком комп, вторые меняли
Vendor/DeviceID и теряли драйвера. Да и мониторов было несколько
семейств (не помню уже кто, ViewSonic вроде). - LightElf(27.03.2024 15:04)
- Не, я не против. Можно написать хуйню любой степени лютости,
которая поставит раком всё, до чего дотянеца и безо всякой ЕЕПРОМ.
Просто, если у нас есть код записи во флэшь, он, чисто
теоретически, можэт выполниться нештатно: не в то время и/или не в
то место. А если нет, то нет. Данные в ЕЕПРОМ, можно, хотя-бы,
выставить по умолчанию, если чексумм не сошолся или ещо чего. Когда
затёрт сегмент флэши, ловить нечего. - mse homjak(27.03.2024 17:59)
- Вы недооцениваете потенциал кривых ручек :-) - SciFi(27.03.2024 12:51)
- Тогда мой код подойдет. Еще надо в ld-скрипте пометить первую же
свободную секцию с выравниванием на размер блока - чтобы всю
свободную флеш-память можно было под хранилище организовать. Eddy_Em(389 знак., 27.03.2024 09:56)
- эмулятор EEPROM abivan(1 знак., 27.03.2024 09:33, картинка)
- Поясните где дырка в коде, почему компилятор так себя ведёт (Keil
6)... POV(719 знак., 03.07.2025 22:47, MCU, полностью)
- если таймер0 не используется в системе и tasks[0].timer не
проинициализирован, то сразу же будет выходить с NULL на выходе Oman(107 знак., 06.07.2025 10:33)
- Причем тут таймер0? - POV(06.07.2025 17:51)
- Поставь continue вместо первого return NULL и проверь, прав ли я. В
чем сложность? Oman(61 знак., 06.07.2025 19:19)
- ну вот... POV(182 знак., 06.07.2025 20:19, картинка, картинка)
- может после проверки if(!t) ничего по этому указателю в обработчике
больше не делается? - Vit(06.07.2025 21:35)
- "при статик работает".. значит - делается - POV(06.07.2025 21:38)
- получается массив пакованных структур - Vit(06.07.2025 21:46)
- не, всё там норм. никакой упаковки POV(1 знак., 06.07.2025 21:49, картинка)
- Коль структура так упорно применяется без выравнивания, то может
стоит попробовать временно вместо uint8_t num применить int num? - reZident(06.07.2025 23:03)
- мне тоже uint8_t по середине структуры не нравится, либо ее в
uint32_t либо в самый конец структуры. - Oman(07.07.2025 10:25)
- Стопе! Это вообще не в ту степь! Проблема не в данных, а в
вовзращаемом указателе. Пофиг что в массиве хранится. - POV(06.07.2025 23:05)
- Покажите уже ассемблер, выдаваемый компилятором, особенно начало
TMR2_GLOBAL_IRQHandler, так будет понятнее - AlexBi(07.07.2025 08:44)
- Кстати, меня несколько напрягают умолчания в if, где логическая операция отрицания (!) применяется к переменной, имеющей тип указателя. Я не настолько знаю язык, чтобы спрогнозировать, а не заменит ли
компилятор обращение к переменной указателя со значением NULL на
обращение к какой-то "левой" переменной, имеющей такое же значение
NULL? Вам ведь уже предлагали расписать эту операцию явным образом,
без умолчаний по автоматическому преобразованию типов данных. - reZident(06.07.2025 23:48)
- Доступ к элеентам разной размерности в невыровненной структуре
может приносить чудные чудеса. Например, запись в байтовую num при
нативной 32-разрядной системе портить 2-3 байта соседних
элементов-указателей. - reZident(06.07.2025 23:11)
- для начала можно в map-файле поискать адрес массива для каждого
случая - Vit(06.07.2025 23:11)
- а можно в занулении массива поставить просто нолик? - Vit(06.07.2025 22:00)
- Пойдем простым логическим путем, с отделением мух и котлет. il-2(568 знак., 06.07.2025 06:57)
- Еще бы знать, где этот tasks определен и зачем его искать в цикле
постоянно никнeйм(274 знак., 04.07.2025 16:13,
)
- Должно работать. Попробуйте: а) разделить объявление переменной
timer_task_t *t и присвоение; б) убрать static из timer_task_t*
get_tmr(uint8_t num) - 3m(04.07.2025 15:36)
- Возможно это тот случай, когда имеет смысл посмотреть ассемблер,
т.е. что там компилятор сделал. В первую очередь посмотреть начало
TMR2_GLOBAL_IRQHandler Можно его увидеть? - AlexBi(04.07.2025 08:26)
- похоже запись в tasks[i].timer только в этом же обработчике. а при
нуле в на входе и делать нихрена не нужно - Vit(04.07.2025 00:55)
- Я понимаю, что NULL это по сути 0, но всё равно не нравится условие
if (!t). Лучше писать if (t != NULL). Также надо проверить размер
стека в стартапе, вдруг реально не хватает, тем более, что static
помогает. - FDA(03.07.2025 23:39)
- Когда переменная объявлена static , то память под нее выделяется в
сегменте .data . qwerty__(132 знак., 03.07.2025 23:02,
)
- Я конечно не программист, но у меня вызвает сомнения вот такая
конструкция sizeof(tasks)/sizeof(tasks[0]) . Возможно результат
целочисленного деления равен нулю и поэтому функция всегда
возращает NULL. Компилятор просчитывает этот момент и не видит
необходимости вставлять вызов функции в обработчик прерывания. - reZident(03.07.2025 22:58)
- Вот тут как-то так получилось. В кубе обнаружил, что ежели вход
аналоговый, то на него можно посадить и АЦП и компаратор
одновременно. Это логично. А в референсе мануале про это не нашёл
ничего. Аглицкого не знаю, перевожу со словарём. Может пропустил
чего? Хочется какого-то подтверждения, чтобы прямо словами. - Бapбoc(27.06.2025 23:59, MCU, полностью)
- Вот тута прямо пишут, что можно одну ногу подключить и к ADC и к
компаратору. Но предупреждают, что зарядка емкости УВХ может
вызвать срань на выходе компаратора. LightElf(853 знак., 30.06.2025 19:31, ссылка, ссылка)
- не пригодится? Ralex(1 знак., 30.06.2025 12:26, картинка)
- Правильно будет не "в кубе", а "на Кубе", потому что остров. - SciFi(28.06.2025 09:59)
- В рефмануале специально на этот случай :)) картинки есть. По ним
видно что аналоговые сигналы приходят прямиком на ногу, более того,
после триггера Шмитта на входе тоже никаких переключателей нет.
Поэтому этот цифровой сигнал в любом режиме можно прочитать через
регистр IDR, а также, выбрав альт. функцию, подать на вход одного
из периферийных устройств. - ЫЫyкпy(28.06.2025 06:26)
- Не по теме МК... POV(141 знак., 21.07.2005 13:20,
, MCU, полностью)
- Помню такое. Инклинометром кличут. Когда у меня висело мое резюме
на hh.ru, ко мне звонил один ненормальный из "тех" - кто осваивает
актуальные темы. В тот год в связи с разгерметизацией емкости на
нефтебазе (не помню - где это было) актуальной была тема контроля
за этими емкостями. ТЗ, с которым мне любезно дали ознакомиться
явно писал сумасшедший. Предполагалось обвешивать стенки емкости
инклинометрами с точностью 0.1!!! градуса. Без всяких проводов,
ессно. Не помню точно il-2(140 знак., 08.05.2025 14:59)
- Красну ягоду рвали вместе... А чегой-то все как космополиты
безродные раскрашены? - Kpoк(07.05.2025 23:07)
- Ответ: Акселерометр скорее всего подойдет, например, MMA1260D, MMA1270D Freescale(94 знак., 22.07.2005 15:53,
)
- Вот заврался - я ошибся с рассчетом, погрешность нужна 1,5 градуса, а не 0,1. - POV(22.07.2005 09:34,
)
- я так понял нужен электронный гироскоп? LordN(151 знак., 21.07.2005 23:34,
)
- Это вполне стандартные изделия --> - AVR(21.07.2005 21:44,
, ссылка)
- несколько контактных трубок со ртутью под известным углом ... - nestandart(21.07.2005 16:17,
)
- Можно приспособить encoder 12-bit - Vit(21.07.2005 16:08,
, ссылка)
- а если железный грузик на "нитке" над катушкой, или светодиод(зеркальце) над матрицей (например из опт. мыши)? yes(69 знак., 21.07.2005 15:15,
)
- Может, 3х-осевой акселерометр подойдет? У АД он в пререлизе - Алексей Мусин(21.07.2005 15:04,
, ссылка)
- Полупроводниковый датчик давления направить "вверх" и залить в капилляр воды или ртути. - General(21.07.2005 13:31,
)
- Попал я как кур во щи. Есть платка. Стоял там stm32f103. Я впаял
apm32f103c8. Если прошить - все работает. Скинул питание, подал -
не запускается. Запускается, только если палец приложить в районе
кварца и пинцетом ресет коротнуть. Снова работает до скидывания
питания. Думал кварц и обвязка. Менял - не помогло. Более того -
запустил от внутреннего. Вся картина точно такая-же. Питание,
палец, ресет. Говорят, если впаять стм - все равботает. В общем
чертовщина. Питание на vesago(135 знак., 18.06.2025 09:20, MCU, полностью)
- Посоветуйте библиотеку для генерации звуков на embedded linux
платформе(Allwinner T113-S3). Купился было по красивому описанию на
soundpipe, но документирован крайне скудно, примеры есть, но
полного представления о том, что и как, тоже не дают. Пытался от
deepseek получить вменяемую подсказку, но увы .. - Rainman62(14.06.2025 11:19, MCU, полностью)
- Подскажите, можно ли используя порт ввода на STM32 чисто аппаратно
защелкнуть одиночный импульс и после перезагрузки прочитать, что
был импульс? - Make_Pic(10.06.2025 08:28, MCU, полностью)
- А если такой вариант: при срабатывании WDT вызывается прерывание,
обработчик которого записывает событие и потом вызывает программный
сброс? - Make_Pic(12.06.2025 08:18)
- А какова для тебя приоритетность причин перезапуска? Например, 1)
авария питания, 2) авария внешней периферии/аппаратуры, 3)
зависание программы. В принципе во всех трех случаях можно делать
перезапуск устройства, выключая его питание. У нас именно так
работает внешняя схема WDT - выключает питание всего устройства на
время, достаточное для разряда всех конденсаторов во вторичном
питании. А м/с супервизора, формирующая сигнал RESET нужна в
основном лишь, чтобы reZident(173 знак., 10.06.2025 15:31)
- Вроде бы на некоторых stm32 есть регистры BKP, которые не
сбрасываются. Можно зарядить DMA, чтобы по импульсу туда что-то
записывало. - SciFi(10.06.2025 08:32)
- Кому-нибудь попадалась документация на чип Mstar MSB2122? Реально
для него написать свою прошивку? - AlexG(04.06.2025 06:04, MCU)
- Вопрос по CH32V003. reZident(509 знак., 28.02.2025 20:35, MCU, полностью)
- хорошая вещ, я на нем сделал несколько проектировщиков. написал
компоненты klen(661 знак., 01.03.2025 16:51)
- ср32v003 10р штука.... штеуд бъется в предсмертных конвульсиях, так
скоро дело дойдет до Куртки и Лизочки klen(1 знак., 03.03.2025 13:29, ссылка)
- серия - ch32x035 интересная, ядро даже лучше чем v203 но 48МГц и
только HSI, память почти у всех 62K/20K, уже платка пришла, чипы
идут, есть - qsop28 - Zikon(01.03.2025 18:19)
- таки да! забыл сказать, думаю важно стратегически - серия 003
состоит из одной микросхемы 003, ядро V2A - не имеет умножителя
(rv32ec), это важно, серия 00x (002,004,005,007 007M)- работа над
ошибками, ядро V2С добавили умножитель (rv32emc) и добавили озу минимум в 2 раза. сейчас не рекомендую 003. я бы
лучше 00X принял если изделие не мега-гига-турбо-серийное что бы
30р копеек сэкономить, разработка и переделывание дороже. klen(372 знак., 03.03.2025 13:31, ссылка, картинка)
- Вот здесь программки есть которыми пользуюсь и доки только
разбираемся, на github-е очень много разных шаблонов можно найти.
Многие используют PlatformIO для VSCode Программатор WCH-LinkE
програмка к нему тоже есть и через MRS можно Zikon(7 знак., 01.03.2025 08:19, ссылка)
- В своё время была делема о двух кнопках на минималках, победил
энкодер с "кнопкой" . О чём не жалею, удобно. - enc(28.02.2025 21:08)
- Для загрузки ПО достаточно одного вывода, он там типа SWDIO, и
землю. См. CH32V003nano. Nikolay_Po(281 знак., 28.02.2025 20:53, ссылка)
- WCH-LinkE, 1 провод - Single Wire Debug. - Гyдвин(28.02.2025 20:51)
- У CH32V003 отладка и загрузка ПО по одному проводу идет что ли? О.о reZident(2 знак., 28.02.2025 20:48, ссылка, картинка)
- Ну да. Кроме земли, больше ничего и не надо, если у чипа своё
питание есть. - Nikolay_Po(28.02.2025 20:54)
- Угу. Мне чтобы в схеме (в готовом устройстве) потом ПО грузить. - reZident(28.02.2025 21:03)
- Там в 003 у затейников китайцев чудесатые чудеса встречаются. Есть
загрузчик, но в малоногих чипах нет ноги для активизации - надо
вызывать из своего кода. Есть SPI, но отсутствует нога СLC ;) Если
чО - пытал 8-лапые 003. Ну и таой же "достойный" прародитель
периферии - STM32, етить... - Гyдвин(28.02.2025 21:29)
- АЦП у них можно применять? Мне один НЧ сигнал оцифровать нужно.
Типа аналогового компаратора с установленными пользователем порогом
и временем реагирования на срабатывание. - reZident(28.02.2025 21:33)
- вот один из вариантов использования ch32v003 пример как раз с АЦП Zikon(7 знак., 01.03.2025 08:10, ссылка)
- Меня устроил. Во, даже "техдокументация" осталась ;) Замерял
напряжение свинцового аккумулятора и оценивал сопротивление
контакта перед подачей сварного импульса (чтобы не было бабаха с
искрами). Выставил кнопкой минимальную длину импульса, убедился,
что многоцветный LED это подтверждает, оценил надежность контакта
электрода, бибикнул и после паузы....... TC4422 питал, кстати,/
специализированной повышайкой 16В, стабилизатор 5В с развязкой
диодом и буферной емкостью. Гyдвин(440 знак., 28.02.2025 22:23, картинка)
- Всем добрый день. Понимаю, что вопрос возможно покажется
расплывчатый, но всё же попытаю удачу. Программирую контроллер
C167, он опрашивает датчик скорости и посылает значения во внешний
контроллер по CAN по удалённому запросу. Вращения идёт +- с
одинаковой скоростью, но когда смотрю график считанной скорости, то
в "ускорении"(первой разности), которое должно быть постоянна и
равно примерно 0, вижу выбросы, который появляются с частотой can
запроса. Пытался менять приоритеты Lem(981 знак., 05.05.2025 03:36, MCU, полностью)
- И? Ни одна версия не прокатила? Проект закрыт? Передан другому? ;) - VLLV(13.05.2025 09:39)
- А, нет. Извините. Параллельно просто ещё другими вещами занимаюсь.
А так документацию смотрю, что можно сделать с атомарностью.
Пытаюсь понять, как применять макрос _atomic_. Вроде не написано,
что есть какие-то ограничения, а работает только для присваивания и
сложения. Если попытаться обернуть более сложную процедуру, то
выдаёт ошибку. А так пока больше идей нет. Ещё смотрю про настройку
CAN. Я гуглил похожую проблемы, большинство вариантов про другие
контроллеры конечно, Lem(164 знак., 14.05.2025 20:37)
- Зачет не получен, студент примеряет сапоги :) - Cкpипaч(13.05.2025 11:56)
- Нужно считать ускорение на стороне контроллера и передавать в том
же сообщении CAN. Тогда тайминг доставки сообщения не будет влиять. - VLLV_(05.05.2025 21:21,
)
- Спасибо за ответ. Прошу прощение, что внёс путаницу и тем самым
просто зря потратил ваше время. Я на ускорение смотрю, так как на
нём хорошо видны выбросы. А так внешний контроллер у меня именно
что скорость запрашивает - Lem(05.05.2025 21:47)
- А ускорение где смотрите? На внешнем контроллере? Ну так и
передавайте ему ускорение, вычисленное в самом вашем МК по чистым
данным. Nikolay_Po(477 знак., 05.05.2025 21:54)
- Нет. Я беру данные из can сообщения на выходе моего контроллера. С
внешнего контроллера идёт кабель(кабель для can, раскиданных на
контакты db9), со стороны моего контроллера идёт ответная часть. Я
просто спаял разветвитель, чтобы контроллеры могли общаться и при
этом я мог бы с компа смотреть, что кому шлёт. Я просто через прогу
на компе смотрю, что шлёт мой контроллер во внешний, записываю эти
данные, матлаб скриптом переводу в "нормальные" данные и смотрю
первую Lem(238 знак., 06.05.2025 10:31)
- таймстеп события в сообщение добавить и не сношать мозг ) - Aleksey_75(06.05.2025 20:25)
- На время обновления данных кодом АЦП, вы защитили записываемые
данные от чтения в момент обновления? Nikolay_Po(248 знак., 06.05.2025 20:17)
- Нет, не защитил. Я чего то даже если честно не очень понял про что
речь. Разве такие конфликты не должны за счёт разных приоритетов
решаться? - Lem(07.05.2025 13:12)
- афтар чегото не договаривает! слабо представляю для каких целей АЦП
для тахосигнала - Aleksey_75(06.05.2025 20:28)
- Ну... Датчик выдает напряжение, непрерывное. Мне нужно его МК
обрабатывать, а для этого оцифровать. Извините если не очень
понятно говорю, просто боюсь сказать лишнюю информацию, которая
наоборот всех запутает... Как с ускорением получилось, на которое я
смотрю просто потому что по нему удобно идентифицировать выбросы - Lem(07.05.2025 02:07)
- вы сами сказали - тахогенератор... т.е. импульсы... побуду немножко
"провидцем" всетаки вы считаете RMS! когда пересечения нуля
выпадает на выборку, за счет "кривизны" ацп вы получите выбросы... - Aleksey_75(09.05.2025 18:23)
- Честно, мне стыдно, но я всё равно немного не понимаю про RMS и
импульсы... Возможно вы и правы, я до конца не вдавался в работу
датчика, я, скажет так, говорю, что вижу... Но наверное всё таки
это не самое важное. Насчёт пересечения нуля - тут то и проблема, у
меня скорость не пересекает ноль + как я говорил в других ответах,
значение с ацп - нормальное без выбросов - Lem(12.05.2025 00:25)
- Э-э-м... РМС, оно, каг-бы, должно интегрировать. Единичное значение
мало на что влияет. - mse homjak(09.05.2025 19:42)
- Ну так вы проверили, какие значения АЦП сохраняются в локальный
массив, в самом МК, во время работы CAN? Вам нужно выяснить,
действительно ли АЦП даёт другой результат при работе CAN? Nikolay_Po(318 знак., 07.05.2025 17:43)
- Да, проверял. Нет, с АЦП всё нормально, то есть идёт отправка по
запросу или по таймеру значения с АЦП - нормальные. А вот на выходе
контроллера, если брать значения именно из CAN сообщения, то там
появляются выбросы. Про % сложно сказать, так как смотрю
относительно нуля (ускорение), там большая часть значение примерно
0(так как в реальности там вращение с постоянной скоростью) с
небольшим шумом и периодические выбросы(которые и являются
проблемой) высотой +- 0,4 гр/с^2. Lem(329 знак., 07.05.2025 22:28)
- Ну так очень похоже на нарушение атомарности доступа. - Nikolay_Po(08.05.2025 08:18)
- Похоже на всех зверей, кроме зайца. Можно только гадать. Автор
перебдел и информации недостаточно. - VLLV_(08.05.2025 12:32,
)
- Извините, в чём я перебдел? Я вроде никакой информации не скрываю.
Говорю всё, что знаю или что могу быстро узнать. - Lem(08.05.2025 14:40)
- Можете быстро узнать, что 1)измененные значения и 2)отправленные
значения 3)полученные значения совпадают? Если да - то в чем
проблема? Если нет - то на каком этапе происходит искажение? - VLLV(08.05.2025 15:38)
- Я же вроде писал... Правда в ответе кому то другому. Понимаю, что
это большую путаницу создаёт. Я в одних и тех же условиях смотрю
данные: скорость чисто с МК(просто считанное значение с АЦП и
сохранённое в переменную) и данные которые МК шлёт наружу в ответ
на запрос(я прям от кабеля по которому мой и внешний МК общаются
сделал отвод и с компа смотрю всю линию). В данных, которые просто
с МК все нормально, сбоев нет. Если мой МК шлёт наружу данные
просто по таймеру, то в Lem(156 знак., 08.05.2025 18:05)
- Может, я плохо спрашиваю, или у вас катастрофически нет опыта
отладки. Еще раз, МК получил запрос. Что он делает дальше?
Запускает АЦП или берет последнее значение АЦП, которое постоянно
измеряется в цикле? Если всегда в ответ на запрос отдавать наружу
одну и ту же константу, она принимается верно? Если скорость не
измеряется постоянно, можно сделать, чтобы было так, и класть в
циклический буфер измеренные значения, чтобы посмотреть данные в
буфере в режиме отладки и VLLV(623 знак., 08.05.2025 19:15)
- А та, что есть - например, абсолютное значение ускорения - не
нужна. Если данные передаются в целочисленном виде, в чем его
смысл? - VLLV(08.05.2025 12:37)
- Давайте идти по шагам. Как Вы считаете ускорение? Разницу скоростей
соседних отсчетов делите на что? - VLLV_(06.05.2025 19:28,
)
- Сохрани несколько замеров датчика скорости в массив в памяти МК без
всяких кэнов. И посмотри что там, для начала. - Nikolay_Po(05.05.2025 11:31)
- Могу как телепат со стажем сказать, что суть проблемы осталась за
рамками озвученной информации. Ни МК, ни таинственный PEC к ней не
имеют отношение. Выражение "МК опрашивает датчик скорости" не
раскрыто. Фраза "использовать PEC, чтобы ещё меньше задействовать
такты МК" как бы намекает, что все плохо. Ждемс дополнительную
информацию. - il-2(05.05.2025 08:14)
- T736 Allwinner кто то имеет какую либо информацию? - caмyм(25.05.2025 13:54,
, MCU, полностью)
- Пытаюсь победить W5500 в режиме UDP. Как выяснилось эта падла
складывает заголовки UDPпакета вместе с данными. И при чтении в
несколько приемов возникают проблемы. Поможет ли мне функция от
производителя int32_t recvfrom(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t
*port). Умеет ли она отделять зерна от плевел? То есть, если
принято два пакета сольет ли она их в один. - IBAH(19.05.2025 15:44, MCU, полностью)