? ?
flag

eddy_em


Емельянов Эдуард Владимирович


[sticky post]Содержание
Костерок
eddy_em
Здесь - краткое содержание моего графоманстваCollapse )

promo eddy_em february 18, 09:43 4
Buy for 10 tokens
По-отдельности все четыре в своей "мультиплате" проверил. Т.к. использовал преобразователь 485+232 на CH340, быстрей 2Мбод проверить не вышло, нужно на pl2303 искать, или, что проще — два интерфейса между собой соединить. А мне вчера дипсик как раз почти и сказал, что ошибка у меня в ДНК, когда я…

Переходим на BiP?
flag
eddy_em
Что-то последнее время не только "ватсап", но и "телега" захирела. BiP вроде еще не блокируют.
Жаль, нет никакого вменяемого мессенджера, который точно не будут блокировать в ближайшие времена. А то до маразма доходит: в четверг, когда ехал в станицу, сфотграфировал экран телефона жены, чтобы ее посылку из "озона" забрать. До этого она мне картинку пересылала по мылу.
Это еще, благо, в Зелике не отключают 4G, как в городах. Было дело в прошлом году: кресло себе компьютерное хотел в Черкесске купить (в итоге купил в Зелике), так магазины в офлайновом "2ГИС" искал. И ездил по офлайновой же карте оттуда, т.к. помимо 4G отключили и GPS…
Щикардосное у нас будущее: опять вспоминаем про СМС и бумажные карты. И если раньше наибольшей популярностью пользовались тарифы ОПСОСов с безлимитным интернетом, теперь — с кучей СМС в комплекте…

Комоедица!
flag
eddy_em
Она же — масленица!
Поздравляю всех с началом весны!
Увы,блины жена жарить не захотела, но шашлык сегодня таки сварганили (тем паче, республиканский выходной по поводу бессмысленного выдуманного праздника, зато он совпал с реальным).
ФотоCollapse )

Переходник USB-CAN-GPIO
flag
eddy_em
Закончил русскоязычный вариант по мотивам сгенерированного дипсиком. Нашел там еще несколько кусков его отсебятины (он придумал функционал, которого в реальной железке нет: вот же молодец! Развивается ИИ!..).
Вот так сейчас железяка выглядит:
IMG_20260319_182839.jpg

I2C'шный АЦП прилепил, чтобы I2C тестировать, а SPI тестировал простой петлей MISO-MOSI. Аналогично до этого USART протестировал.
Документацию прикладываю "as is", то бишь не нормальным человеческим языком, а тупой сухой официальщиной.
ДокументацЫяCollapse )
На CAN лень было переводить, все равно там немного, да и когда-то я, кажется (надеюсь), в ЖЖшке про это писал.

Фух!
flag
eddy_em
Вроде, добил все желаемые функции на "бывшем" переходнике CAN-USB. И если оригинал влезал в 11.5кБ, то теперь в release-сборке аж почти 30.5кБ! Это — моя первая железяка на STM32 (да еще и на "несчастном" Cortex-M0!), чья прошивка занимает такой адов объем флеша (есть еще некоторые большие, но там за счет шрифтов объем увеличен).
Код на гитхабе.
И да, я настолько оборзел, что попросил дипсик сгенерировать мне документацию. Осталось лишь ее вычитать и немного подправить (а то его местами "заносило", и он выдумывал несуществующий функционал, несмотря на то, что код у него под носом).

Подробней, наверное, напишу когда-нибудь попозже, если не забуду. Ну как напишу: переведу документацию на русский ☺

И на пятом телескопе пускатель установил…
flag
eddy_em
Теперь все пять имеют возможность дистанционного аварийного отключения питания. Остается за малым: заменить некоторые автоматы (а то сейчас хреново как-то: 60А на вход телескопа, 40А на вход инвертора, 40А с выхода, 25А - а местами и 40А - на частотники и розетки; а надо по ниспадающей, да и выше 16А на розетки не нужно), подключить концевики от куполов на цифровые входы блоков реле (чтобы дистанционно статус купола узнавать, даже если компьютер загнулся), да установить блок на 8 реле в щитовой (чтобы отключать подвод электричества к башням). Уже смонтировав блоки на 2 реле подумал, что стоило бы вместо них ставить блоки на четыре: тогда можно было бы и купола дистанционно закрывать (у системы управления куполами есть вход "датчик дождя": релюшкой можно было бы его коротить, чтобы закрывался). Все еще подумываю о том, что стоит разработать свою систему управления куполами - правильную.
ФотографииCollapse )
А до обеда сегодня разбирался, чего это у меня некоторые релюшки не работают. Выяснил: оказывается, китайские "драйверы 485" какие-то совсем уж убогие! В основном корпусе у меня из обычной витухи (которая "обмедненный алюминий") тянется линия метров на 30. По концам линии поставил терминаторы на 120 Ом. Метров за пять от одного конца (на самом конце - реле питания первого купола) - преобразователь USB-485 с гальваноизоляцией, дальше линия идет в шкаф в серверной, там стоят три оптических преобразователя (чтобы передавать 485 в башни 2 и 3, а также на купол 4). Потом еще метров 7-10 витухи, заканчивающейся в электрощите (где будет стоять блок на 8 реле). Зашел с лопаты на управляющий компьютер, запустил в бесконечном цикле опрос реле на 2 телескопе (через оптику). Пощупал на одном конце (в щитовой): USB-485 с управляющего дает размах ±3В от нуля, ответка от "оптики" в "плюс" едва пробивается на 1В, в "минус" чуть больше, чем на два вольта! Пощупал с другого конца - примерно та же картинка. Вот и не откликались некоторые реле: слишком уж размах маленький. Отключил с одного конца терминатор: уже получшело, но не сильно. Отключил и второй, лишь тогда размах от "оптики" наконец-то стал симметричным, но все равно лишь ±3В, зато размах от USB-485 стал уже почти ±5В. И где нужные -7…+12В?
Везде китайцы обмануть стараются… Что ж за дрянь, интересно, они туда засунули, что она не может вытянуть стандартные уровни при подключенных терминаторах?
Благо, скорость всего лишь 9600, т.е. длина волны аж 30км, да и звона на осциллографе не видно.

И ШИМ добавил…
flag
eddy_em
От дипсика уже толку не было, сам вчера начал, сегодня добил. Заодно "пришлось вспомнить", что у STM32 некоторые таймеры предназначены для управления моторами, поэтому у них есть регистр BDTR, в котором нужно выставлять флаг MOE, чтобы ШИМ пошел (этот флаг автоматом сбрасывается по нужному уровню сигнала на концевике - разрешающем входе). А у некоторых таймеров этого регистра нет, но "на всякий случай" и ради унификации можно всем выставить.
Бинарник уже под 26кБ в release-сборке. Эдак, при добавлении SPI и I2C на хранение конфигурации флеша в STM32F042C6T6 вообще не останется… Ну, посмотрим.
Пока тыкал осциллографом поочередно во все пины с ШИМом, обратил внимание на "странные" контакты на плате: "PA4" и "PB12..PB14", которых на моих домашних не было. Похоже, когда на работе кончились печатные платы для переходника, я решил развести "по-новой", добавив еще больше свободных пинов (а что: место-то есть!). Но почему-то новую модификацию не слил на гитхаб. ХЗ, где она там валяется, искать надо… Понемногу приручаю себя не ждать пятницы или "почти готового релиза" для пуша, а делать пуш каждый вечер (или каждое прерывание на "неотложную работу"). А то ведь как получается: висит себе qtcreator с текущим проектом, пуш я на пятницу отложил, тут "неотложная хрень" появляется, в итоге этот qtcreator закрываю и "забыл/забил/запил", что коммитов-то с пушами не было!
Что до этой железяки, то как мне надоест, либо когда кончится флеш на F042C6 (сейчас-то отлаживаю на F072C8, там до 64кБ можно разогнаться), либо как "внезапно" придется к другой разработке перейти, надеюсь, не забуду помимо окончательного коммита еще и какую-никакую документацию в Readme.md написать. Ну и здесь выложить описание протокола: если ЖЖшка не канет в /dev/null, я порой именно отсюда дергаю "документацию" на очень подзабытые вещи. А еще ЖЖшка мне сильно помогает в конце года: собираю в одну кучу публикации по теме работы за весь год, перевожу с "русского матерного" на русский, да в латехе оформляю отчет. Мои годовые отчеты можно почитать у меня в "рисëчгейте".

Таки USART ОК
flag
eddy_em
Код.
Что-то дипсик, похоже, уперся в ограничения, и все больше и больше "гонит пургу". Но нет-нет, да простенькие задания выполняет. Хотя и там приходится редактировать (но всяко быстрей выходит, чем самому эти тонны простейшего кода писать).
В общем, если дипсик рассматривать как "тупого, но упорного джуна", то сойдет. Попросил его "глобально" подумать и добавить мне ШИМ, он накидал какого-то сырого кода в поток "глубоких размышлений", но в ответе лаконично слился. Ладно, не впервой, сам сегодня вечером сделаю. Зато он мне достаточно быстро помог с "HEX+TEXT" режимом ввода (пригодится еще, если добавлю I2C и SPI), мне пришлось подправить лишь процентов 10 из того, что он нагенерировал, плюс используемую им мою static inline функцию сделать не static inline, да и добавить туда проверку входных аргументов (до этого она использовалась внутри `getnum`, так что, считалось, что проверять входящие аргументы не нужно).
Правда, не проверял еще USART2, но там уже все достаточно просто, если не "заведется" сразу. Замкнул PA9 и PA10, проверяю USART1 на "петле".
Для SPI и I2C нужно будет уже проводочки подпаять и что-нибудь реальное подключить. С I2C проблем нет: огромный ворох датчиков лежит, а вот SPI — штука не такая уж и популярная…
Но пока начну с внедрения ШИМ. Тут хоть можно просто осциллографом ткнуть, хотя, таки проводочки подпаять удобней будет…
Главное — за пределы 30кБ флеша не выйти, чтобы осталось еще место для конфигурации: EEPROM'а то в STM32F нет. Но полученный код потом при необхдимости можно будет и на что-нибудь более жирное внедрить, чтобы получить эдакий "кошерный ПЛК", для настройки которого вообще ничего не нужно. Уж жутко бесят меня эти "ПЛК для дебилов" с их уродским проприетарным (еще и маздай-онли) недоЯПом (а то и вовсе "мышкодрочным интерфейсом").
Вообще, правильный ПЛК - такой, где тебе выдали исходники, и ты сам на сях или крестах можешь дописать логику, которая тебе нужна. Но никак не то, что называют "ПЛК" в мире, где быть безмозглым считается стандартом!

GPIO'шка, дальше…
flag
eddy_em
Итак, чтобы таки иметь возможность отладки, мне понадобилось на этой "CAN-USB-GPIO" плате заиметь более жирный МК. Благо, на работе попалась такая же плата с STM32F072C8T6. Посидел сегодня вечером, и таки почти завел USART. Почти — потому как что-то у меня там в функции приема неладно: подвисает, зараза, на больших последовательностях данных. Ничего, разберусь.
ИИ весь вечер нещадно тупил и нес пургу, так что, вместо того, чтобы тратить время и намекать ему, что мне нужно (а то он вообще попутал местами каналы DMA для Rx/Tx при ремапе), написал все сам. Погонял gdb, нашел кучу ашыпок и очепяток. То тактирование включить забуду (того же SYSCFG, скажем, чтобы ремап каналов DMA USART1 сделать на те же ch4/ch5, что и у USART2: я допустил использование любого из них, но не одновременно), то volatile поставить (блин, минут 15 отлавливал этот баг, пока не заметил, что у меня флаг без этого слова объявлен), то понавтыкал вчера тупых заглушек, а сегодня решил, что там уже полноценный функционал должен был работать…
Заметил, что после полуночи кодится хорошо, но повышается количество косяков. А вычитывать свой код на предмет ошибок так вообще бесполезно в это время: "глаз замыливается".

Сегодня (упс, уже вчера) получил на "озоне" парочку STM32L051 (купил их и пару STM32L431 на пробу, авось, созрею что-нибудь батареечное сделать). Заплатил за обоих 330 рублей (сейчас, кстати, они лежат по 130 за штучку), а 431 обошлись мне в 256р (скидка 30%, если брать больше одного; подозрительная, конечно, цена - как получу, проверю).
Удивила упаковка: мне обычно так хорошо запаковывали, когда десятками брал. А тут - парочку засунули в пластиковую коробочку, утрамбовав поролоном. Коробочку - в антистатический пакет, а тот - уже в обычный алишный пакетик. Проверил на свей "вундервафле": говорит, что STM32; Unique ID различается в младшем байте (по маркировке - тоже из одной партии). Раз россыпью, то, видимо, из паллет доставали (и, скорей всего, как обычно - отбраковку с производства).

Ящичек…
flag
eddy_em
Сегодня ставил пускатель в четвертом куполе. Т.к. там все еще мертвый инвертор, соответственно, ничего не запитано (разве что свич напрямую из розетки), да и тянуть кабель на второй этаж не нужно (т.к. его нет), думал, за полдня управлюсь. А вот и нет: опять провозился весь рабочий день.
Очень лень было сверлить короб, поэтому умудрился просунуть еще одно оптоволокно плюс витуху (одна пара на 485, а по оставшимся трем 12В питания оптического конвертера пустил) в гермоввод "сетевого" оптоволокна.
IMG_20260312_143640.jpg

Когда я этот короб монтировал, немножко "не угадал" с расстоянием между полками, где он сейчас стоит. Поэтому пришлось ставить его вверх ногами:
IMG_20260312_143812.jpg

Почему-то после включения релюшка не сработала, надо будет в следующий раз осциллографом потыкать и ноутбук взять, чтобы на месте можно было через USB-485 попробовать погонять.
Остается еще пятый купол + мелочевка (в некоторых щитках заменить автоматы ввода на инвертор с 16-25А на 40 или, еще лучше — 63А, чтобы отключался автомат нагрузки с КЗ, а не вводный; ну и нужно во всех куполах от концевика купола проводки на вход модуля реле подключить, чтобы была возможность понимать, закрыт купол или нет).

P.S. Недавно писал, как я скрестил ужа с ежом C++ и C под STM32. Вчера продолжал, правда, начал лишь около 21 вечера — мотался на гору. Забацал настройку USART + отправку/прием сообщений (по ногам там можно и USART1, и USART2 использовать, но я решил, что жирно будет 2 одновременно, поэтому ноги можно выбрать любые, но лишь для одного; а там уже "оно само"). Уже ближе к полуночи попросил дипсик мне накалякать по-быстрому внедрение. Он какую-то фигню предложил; пришлось подправлять техзадание. Ответ скинул в файл, возможно, сегодня посмотрю и попробую.
Правда, впервые в жизни наткнулся на то, что, оказывается, флеша может быть мало! Т.е. сам код у меня уже около 20кБ занимает, но в режиме отладки вылезает за пределы 32кБ. Надо поискать, может в каком-нибудь из переходников я вместо STM32F042C6T6 впаял STM32F072C8T6 — тогда и на дебаг места с лихвой хватит. А то ведь еще в планах SPI, I2C и PWM. И хочется эту дичь портировать на какой-нибудь еще МК: сделать эдакий "недоПЛК".