<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2017-02-11:2798292</id>
  <title>eddy_em</title>
  <subtitle>eddy_em</subtitle>
  <author>
    <name>eddy_em</name>
  </author>
  <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom"/>
  <updated>2025-10-28T09:00:50Z</updated>
  <dw:journal username="eddy_em" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:389739</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/389739.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=389739"/>
    <title>К СКН</title>
    <published>2025-10-28T09:00:50Z</published>
    <updated>2025-10-28T09:00:50Z</updated>
    <category term="всячина"/>
    <category term="бта"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">В прошлой &lt;a href="https://eddy-em.livejournal.com/520725.html"&gt;теме&lt;/a&gt; по поводу СКН БТА натолкнули меня на простейшую мысль решать систему уравнений совместно. &lt;br /&gt;Попробовал: вполне себе решается, и решение даже не очень сильно восприимчиво к шумам. Вот, например, беру реальные данные и добавляю разный шум:&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/389739.html#cutid1"&gt;Результаты&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___2" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/389739.html#cutid2"&gt;И сам скрипт&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___2" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=389739" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:389626</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/389626.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=389626"/>
    <title>Модуль serial-ethernet на основе CH9121</title>
    <published>2025-10-15T17:46:55Z</published>
    <updated>2025-10-15T17:46:55Z</updated>
    <category term="железяки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Купил попробовать (брал на "озоне" за 363 рубля), получил еще на прошлой неделе. Сегодня решил, так сказать, его палочкой потыкать. Подключил к компьютеру через USB-UART на PL2303, воткнул сетевой шнурок…&lt;br /&gt;Поначалу ничего не получалось. Потом глянул в примере к протоколу: ну и шельмы эти китайцы, то, что они обозвали "The format of the command code sent by CH9121" на самом деле - формат отправляемых &lt;b&gt;ему&lt;/b&gt; команд. Т.е. все надо начинать с "0x57 0xab".&lt;br /&gt;Чтобы войти в режим команд, нужно притянуть к нулю ногу CFG. В документации пишут про "софтовый" способ - передачей команды "0x55 0xaa 0x5a", но никакой реакции на это я не получил. Работает лишь подтяжка CFG к нулю.&lt;br /&gt;Протокол - в файле &lt;tt&gt;ch9121_spcc.pdf&lt;/tt&gt;, можно найти в интернете.&lt;br /&gt;По мануалу настроил IP и порт (девайс little-endian, поэтому стоит это помнить при передаче данных вручную через терминал). Однако, ничего не произошло: коннект появился, в конфигурационном режиме на "0x57 0xab 3" вылезает в ответе единичка. Но "прозрачной" передачи данных не происходит. ОК, думаю: а попробую-ка я поменять "destination IP" на IP компьютера и порт - тоже на 2000. И - вуаля! Пошел "прозрачный" обмен данными: все, что пишу в терминале сокета, появляется в терминале порта, и наоборот.&lt;br /&gt;В общем, надеялся я совсем на другое: что к МК через эту штуку можно будет подключаться с любого компьютера и, скажем, или через TCP-сокет напрямую, или через веб-морду с ним взаимодействовать. А вот хрена с два! В протоколе не указано, как получить IP компьютера, который только что подключился. Т.о., получаем тупое p2p соединение. В принципе, конечно, и для этого можно найти применение (все ж удобней готовой инфраструктурой пользоваться, чем тащить витуху на 485 или оптику + покупать преобразователи 232/485 в оптику).&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=389626" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:389239</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/389239.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=389239"/>
    <title>Как же в С не хватает указателя `this`!!!</title>
    <published>2025-10-11T23:01:07Z</published>
    <updated>2025-10-11T23:01:07Z</updated>
    <category term="c"/>
    <category term="рукожопие"/>
    <category term="всячина"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Пока добавлял работу с SI7005, подумал: а ведь датчики AHTxx практически ничем не отличаются (если не заморачиваться, то вообще одним и тем же кодом можно "обслуживать" и AHT1x, и AHT2x), и если у меня их N на шине одинаковых, то будет проблема со статическими переменными в файле → все это нужно вынести в "класс". А как скрыть члены "класса" от пользователя? Объявить typedef на некую структуру, которая будет объявлена "с подробностями" лишь в "private-header". Собственно, даже в glibc такое делают!&lt;br /&gt;Правда, пришлось достаточно "порефакторить". Еще и в "класс" добавить &lt;tt&gt;void*&lt;/tt&gt;, чтобы туда запихивать все нужные калибровки, промежуточные данные и прочее.&lt;br /&gt;Сильно надеюсь, что больше значимых полей (которые нужно будет не нулем проинициализировать) добавлять не придется. Все-таки, с наследованием в С вообще плохо (хотя, можно заморочиться: при "наследовании" от одного "класса" его можно прямо в начало производного подсунуть, а если нескольких - воткнуть union'ы). А вот указателя &lt;tt&gt;this&lt;/tt&gt; вообще нет! Поэтому во все функции "класса" приходится первым аргументом писать ссылку на сам "класс"…&lt;br /&gt;&lt;a href="https://github.com/eddyem/eddys_snippets/tree/master/I2Csensors"&gt;Вот такая дичь&lt;/a&gt; получилась.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=389239" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:389057</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/389057.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=389057"/>
    <title>I2C'шные датчики</title>
    <published>2025-10-10T20:51:15Z</published>
    <updated>2025-10-10T20:51:15Z</updated>
    <category term="всячина"/>
    <category term="железяки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Решил провести сравнительный анализ разных датчиков (прежде всего, измеряющих влажность воздуха). Для начала нужно свести к единообразному интерфейсу все наработки (ну и дописать для тех датчиков, с которыми я еще не работал). Пока три датчика едут с алиэкспресса (оказывается, у меня еще не весь "зоопарк" из более-менее распространенных есть; правда, более дорогие жаба задушила покупать, возможно, когда-нибудь попозже), решил начать с того, что уже есть — подготовить почву, так сказать.&lt;br /&gt;&lt;a href="https://github.com/eddyem/eddys_snippets/tree/master/I2Csensors"&gt;Пока только BMP180&lt;/a&gt;. Зато уже основную 'ООПщину' сделал. Если заменить i2c.c, можно и на микроконтроллере запускать.&lt;br /&gt;Для непосредственного доступа к датчикам по I2C "в обход микроконтроллеров" использую переходник на основе CP2112. Ну, а чтобы в одну шину объединить датчики с одинаковыми адресами (а таких, увы, достаточно много - и нет никаких ног, позволяющих хотя бы один младший бит адреса поменять), использую мультиплексор PCA9548A.&lt;br /&gt;Сначала думал подгрузить кернельный модуль, который вроде как создает 8 "подустройств", но, во-первых, так и не понял, что за параметры нужно передавать в modprobe (как минимум, нужно его адрес указать и устройство, на котором он сидит), а во-вторых, таки проще им рулить напрямую, не плодя файловые дескрипторы (все равно нужно, похоже, закрывать один и открывать другой, чтобы не смешивать разные устройства с одинаковыми адресами в одной шине).&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=389057" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:388759</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/388759.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=388759"/>
    <title>Наблюдения</title>
    <published>2025-10-08T12:03:42Z</published>
    <updated>2025-10-08T12:03:42Z</updated>
    <category term="фото"/>
    <category term="всячина"/>
    <category term="бта"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Сделал вчера немного фотографий.&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/388759.html#cutid1"&gt;Фото&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;P.S. Да, оказывается, в "альбомы" ЖЖ можно поместить фотографии. Но за это я поплатился вменяемым дизайном: пришлось перейти на "новый дизайн". Теперь буду страдать от ублюдского внешнего вида.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=388759" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:388516</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/388516.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=388516"/>
    <title>5 MLX90640 на одном STM32F303</title>
    <published>2025-09-24T20:59:48Z</published>
    <updated>2025-09-24T20:59:48Z</updated>
    <category term="железяки"/>
    <category term="stm32"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Таки &lt;a href="https://github.com/eddyem/stm32samples/tree/master/F3%3AF303/MLX90640multi"&gt;оно у меня заработало&lt;/a&gt;!&lt;br /&gt;Проблему с "остановкой" I2C во время чтения DMA нашел: я сам накосячил в одном месте и просто отключал I2C… Остальное - дальше.&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/388516.html#cutid1"&gt;Read more...&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;Остается еще дописать управление питанием, отсылку по RS-485, да промакетировать. Ну и сэмулировать проблемы на шине или временное отключение какого-либо датчика (пока что они у меня гроздью спаяны, нужно будет обжать их "штекерами" и на беспаечной макетке в кучу собрать). А потом - нарисовать печатную плату и корпус, ну и изготовить… И, конечно, нудная калибровка - чтобы сшить пять картинок воедино.&lt;br /&gt;Ах, забыл: ведь еще нужно добавить BME280 + один-два NTC + управление подогревом.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=388516" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:388127</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/388127.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=388127"/>
    <title>Запилил-таки тест MLX90640 на МК!</title>
    <published>2025-09-11T17:27:23Z</published>
    <updated>2025-09-11T17:27:23Z</updated>
    <category term="stm32"/>
    <category term="железяки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Итак, теперь код заработал &lt;a href="https://github.com/eddyem/stm32samples/tree/master/F3%3AF303/MLX90640test"&gt;и на микроконтроллере STM32F303CBT6&lt;/a&gt;. Тесты занимают достаточно много места во флеше (да там еще и математическую библиотеку линковать пришлось ради sqrtf), так что вот:&lt;br /&gt;&lt;pre&gt;
Memory region         Used Size  Region Size  %age Used
             rom:         30 KB       128 KB     23.44%
             ram:        5616 B        40 KB     13.71%
          ccmram:          0 GB         8 KB      0.00%
&lt;/pre&gt;&lt;br /&gt;Чуть меньше четырех кБ флеша и 1кБ ОЗУ занимает USB. &lt;br /&gt;В принципе, пока что ОЗУ со свистом хватает для пяти датчиков. Еще и на буферы для передачи по USART останется, и на какие-нибудь дополнительные нужды.&lt;br /&gt;Цикл обработки одной "подстраницы" занимает примерно 4.2мс, т.е. целиком обработка страницы уложится в 8.5мс. Одна "подстраница" данных (при том, что там половина - ненужные! Уж не знаю, зачем melexis так нарукожопил…) по I2C на скорости 1МГц передается около 14мс. Следовательно, обработка предыдущей "подстраницы" выполнится быстрей, чем прием следующей (!!!). Вот уж не ожидал… Теперь понятно, как китайцы на экранчике "видосики" рисуют. Самое интересное, что в настройках датчика предельная скорость обновления - 64Гц. Даже если это - для одной "субстраницы", а не полного кадра, период обновления около 16мс выходит - лишь немногим больше времени, за которое это обновление будет выдано в I2C. Интересно, как чип умудряется с такими скоростями справляться.&lt;br /&gt;Нам же все равно нужно максимум раз в 30с картинку обновлять. Ну, забавы для можно, конечно, и 1Гц поставить. Посмотрим, это нужно уже экспериментально выбирать наиболее оптимальный режим.&lt;br /&gt;&lt;br /&gt;Интересно было бы сравнить с быстродействием "родной" библиотечки от melexis. За какое время у них вычисляется полный кадр на том же самом МК?&lt;br /&gt;Я же, глядя в код, подозреваю, что можно еще немного оптимизировать.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=388127" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:387904</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/387904.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=387904"/>
    <title>Осень, однако!</title>
    <published>2025-09-07T13:43:19Z</published>
    <updated>2025-09-07T13:43:19Z</updated>
    <category term="всячина"/>
    <category term="буково"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">В прошлую субботу пошел на разведку: вдруг летние опята уже вылезли. Нет, только в одном месте еле-еле проклевываться начали. А сегодня они уже превратились в монстров-переростков:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;figure&gt;&lt;img src="https://iili.io/KoR6k0l.jpg"&gt;&lt;/figure&gt;&lt;/div&gt;&lt;br /&gt;Ну, невелика беда: летние - дрянь та еще, потому что больно тонкие ножки и мариновать их как-то не очень…&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/387904.html#cutid1"&gt;Еще немного фото&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=387904" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:387664</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/387664.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=387664"/>
    <title>И опять про трапециевидный рамп</title>
    <published>2025-08-06T16:32:47Z</published>
    <updated>2025-08-06T16:32:47Z</updated>
    <category term="всячина"/>
    <category term="математическое моделирование"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Покуда я простые примеры проверял на своей модели, проблем не было. А вот как начал это применять к коррекции положения телескопа в модели, стал получать уйму косяков — в случае, если для перехода в новую позицию нужно было бы остановиться и продолжить движение в противоположном направлении.&lt;br /&gt;Мучил-мучил &lt;s&gt;дикпик&lt;/s&gt; дипсик, но он мне постоянно нерабочие решения выдавал. А когда я в итоге выдал свое рабочее, он его изговнял так, что оно опять не работало (еще и сегфолты откуда-то брались) ☺&lt;br /&gt;В общем, вот код:&lt;br /&gt;&lt;code lang="C"&gt;&lt;pre style="border-left: 4px solid; border-top: 1px dashed; border-bottom: 1px dashed; max-height: 300px; overflow: auto; padding: 5px" title="Code block"&gt;
// inner part of `calc`, could be called recoursively for hard case
static void unlockedcalc(movemodel_t *m, moveparam_t *x, double t){
    // signs
    double sign_a01 = 0., sign_a23 = 0., sign_vset = 0.; // accelerations on stages ACCEL and DECEL, speed on maxspeed stage
    // times
    double dt01 = 0., dt12 = 0., dt23 = 0.;
    // absolute speed at stage 23 (or in that point); absolute max acceleration
    double abs_vset = x-&amp;gt;speed, abs_a = m-&amp;gt;Max.accel;
    // absolute target movement
    double abs_Dx = fabs(x-&amp;gt;coord - m-&amp;gt;curparams.coord);
    if(m-&amp;gt;state == ST_STOP &amp;amp;&amp;amp; abs_Dx &amp;lt; coord_tolerance){
        DBG("Movement too small -&amp;gt; stay at place");
        return;
    }
    // signs of Dx and current speed
    double sign_Dx = (x-&amp;gt;coord &amp;gt; m-&amp;gt;curparams.coord) ? 1. : -1.;
    double v0 = m-&amp;gt;curparams.speed;
    double sign_v0 = v0 &amp;lt; 0. ? -1 : 1., abs_v0 = fabs(v0);
    if(v0 == 0.) sign_v0 = 0.;
    // preliminary calculations (vset and dependent values could be changed)
    dt01 = fabs(abs_v0 - abs_vset) / abs_a;
    double abs_dx23 = abs_vset * abs_vset / 2. / abs_a;
    dt23 = abs_vset / abs_a;
    double abs_dx_stop = abs_v0 * abs_v0 / 2. / abs_a;
    if(sign_Dx * sign_v0 &amp;gt;= 0. &amp;amp;&amp;amp; abs_dx_stop &amp;lt; abs_Dx){ // we shouldn't change speed direction
        if(fabs(abs_dx_stop - abs_Dx) &amp;lt;= coord_tolerance){ // simplest case: just stop
            //DBG("Simplest case: stop");
            dt01 = dt12 = 0.;
            sign_a23 = -sign_v0;
            dt23 = abs_v0 / abs_a;
        }else if(abs_vset &amp;lt; abs_v0){ // move with smaller speed than now: very simple case
            //DBG("Move with smaller speed");
            sign_a01 = sign_a23 = -sign_v0;
            sign_vset = sign_v0;
            double abs_dx01 = abs_v0 * dt01 - abs_a * dt01 * dt01 / 2.;
            double abs_dx12 = abs_Dx - abs_dx01 - abs_dx23;
            dt12 = abs_dx12 / abs_vset;
        }else{// move with larget speed
            //DBG("Move with larger speed");
            double abs_dx01 = abs_v0 * dt01 + abs_a * dt01 * dt01 / 2.;
            if(abs_Dx &amp;lt; abs_dx01 + abs_dx23){ // recalculate target speed and other
                abs_vset = sqrt(abs_a * abs_Dx + abs_v0 * abs_v0 / 2.);
                dt01 = fabs(abs_v0 - abs_vset) / abs_a;
                abs_dx01 = abs_v0 * dt01 + abs_a * dt01 * dt01 / 2.;
                dt23 = abs_vset / abs_a;
                abs_dx23 = abs_vset * abs_vset / 2. / abs_a;
                DBG("Can't reach target speed %g, take %g instead", x-&amp;gt;speed, abs_vset);
            }
            sign_a01 = sign_Dx; // sign_v0 could be ZERO!!!
            sign_a23 = -sign_Dx;
            sign_vset = sign_Dx;
            double abs_dx12 = abs_Dx - abs_dx01 - abs_dx23;
            dt12 = abs_dx12 / abs_vset;
        }
    }else{
        // if we are here, we have the worst case: change speed direction
        DBG("Hardest case: change speed direction");
        // now we should calculate coordinate at which model stops and biuld new trapezium from that point
        double x0 = m-&amp;gt;curparams.coord, v0 = m-&amp;gt;curparams.speed;
        double xstop = x0 + sign_v0 * abs_dx_stop, tstop = t + abs_v0 / abs_a;
        m-&amp;gt;state = ST_STOP;
        m-&amp;gt;curparams.accel = 0.; m-&amp;gt;curparams.coord = xstop; m-&amp;gt;curparams.speed = 0.;
        unlockedcalc(m, x, tstop); // calculate new ramp
        // and change started conditions
        m-&amp;gt;curparams.coord = x0; m-&amp;gt;curparams.speed = v0;
        m-&amp;gt;Times[STAGE_ACCEL] = t;
        m-&amp;gt;Params[STAGE_ACCEL].coord = x0;
        m-&amp;gt;Params[STAGE_ACCEL].speed = v0;
        DBG("NOW t[0]=%g, X[0]=%g, V[0]=%g", t, x0, v0);
        return;
    }
    m-&amp;gt;state = ST_MOVE;
    m-&amp;gt;movingstage = STAGE_ACCEL;
    // some knot parameters
    double a01 = sign_a01 * abs_a, a23 = sign_a23 * abs_a;
    double v1, v2, x0, x1, x2;
    v2 = v1 = sign_vset * abs_vset;
    x0 = m-&amp;gt;curparams.coord;
    x1 = x0 + v0 * dt01 + a01 * dt01 * dt01 / 2.;
    x2 = x1 + v1 * dt12;
    // fill knot parameters
    moveparam_t *p = &amp;amp;m-&amp;gt;Params[STAGE_ACCEL]; // 0-1 - change started speed
    p-&amp;gt;accel = a01;
    p-&amp;gt;speed = m-&amp;gt;curparams.speed;
    p-&amp;gt;coord = x0;
    m-&amp;gt;Times[STAGE_ACCEL] = t;
    p = &amp;amp;m-&amp;gt;Params[STAGE_MAXSPEED]; // 1-2 - constant speed
    p-&amp;gt;accel = 0.;
    p-&amp;gt;speed = v1;
    p-&amp;gt;coord = x1;
    m-&amp;gt;Times[STAGE_MAXSPEED] = m-&amp;gt;Times[STAGE_ACCEL] + dt01;
    p = &amp;amp;m-&amp;gt;Params[STAGE_DECEL]; // 2-3 - decrease speed
    p-&amp;gt;accel = a23;
    p-&amp;gt;speed = v2;
    p-&amp;gt;coord = x2;
    m-&amp;gt;Times[STAGE_DECEL] = m-&amp;gt;Times[STAGE_MAXSPEED] + dt12;
    p = &amp;amp;m-&amp;gt;Params[STAGE_STOPPED]; // 3 - stop at target
    p-&amp;gt;accel = p-&amp;gt;speed = 0.;
    p-&amp;gt;coord = x-&amp;gt;coord;
    m-&amp;gt;Times[STAGE_STOPPED] = m-&amp;gt;Times[STAGE_DECEL] + dt23;
}

/**
 * @brief calc - moving calculation
 * @param x - using max speed (&amp;gt;0!!!) and coordinate
 * @param t - current time value
 * @return FALSE if can't move with given parameters
 */
static int calc(movemodel_t *m, moveparam_t *x, double t) {
    //DBG("target coord/speed: %g/%g; current: %g/%g", x-&amp;gt;coord, x-&amp;gt;speed, m-&amp;gt;curparams.coord, m-&amp;gt;curparams.speed);
    if (!x || !m) return FALSE;
    pthread_mutex_lock(&amp;amp;m-&amp;gt;mutex);
    int ret = FALSE;
    // Validate input parameters
    if(x-&amp;gt;coord &amp;lt; m-&amp;gt;Min.coord || x-&amp;gt;coord &amp;gt; m-&amp;gt;Max.coord){
        DBG("Wrong coordinate [%g, %g]", m-&amp;gt;Min.coord, m-&amp;gt;Max.coord);
        goto ret;
    }
    if(x-&amp;gt;speed &amp;lt; m-&amp;gt;Min.speed || x-&amp;gt;speed &amp;gt; m-&amp;gt;Max.speed){
        DBG("Wrong speed [%g, %g]", m-&amp;gt;Min.speed, m-&amp;gt;Max.speed);
        goto ret;
    }
    ret = TRUE; // now there's no chanses to make error
    unlockedcalc(m, x, t);
    // Debug output
    /*for(int i = 0; i &amp;lt; STAGE_AMOUNT; i++){
        DBG("Stage %d: t=%.6f, coord=%.6f, speed=%.6f, accel=%.6f",
            i, m-&amp;gt;Times[i], m-&amp;gt;Params[i].coord, m-&amp;gt;Params[i].speed, m-&amp;gt;Params[i].accel);
    }*/
ret:
    pthread_mutex_unlock(&amp;amp;m-&amp;gt;mutex);
    return ret;
}
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Решил написать с нуля, а не пытаться исправить старый код. Исписал формулами сегодня с десяток листов бумаги на работе, обкатывая каждый вариант. Вариант с трапецией с нулевой скорости и ненулевой по формулам — одно и то же, поэтому эти варианты не разделял, а выделил в вариант "продолжи движение с бóльшей скоростью". Из "нормальных" еще есть вариант "тормози с текущей скорости" (но его вероятность околонулевая) и "продолжи движение с меньшей скоростью". Разница с первым вариантом только в знаке ускорения в начале движения и ненужности проверять, нет ли вариантов, что указанная скорость недостижима.&lt;br /&gt;Ну и остается самый убогий вариант: тормознуть и продолжить. И тут меня осенило: ведь после останова мы движемся по полноценной трапеции или треугольнику. А почему бы не запустить функцию рекурсивно, начав с точки останова, а потом "подрихтовать" начальный этап? И, действительно, получилось!&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=387664" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:387338</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/387338.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=387338"/>
    <title>Вычисляем скорость наименьшими квадратами / Least square speed calculations</title>
    <published>2025-07-31T08:50:39Z</published>
    <updated>2025-07-31T08:50:39Z</updated>
    <category term="роботелескоп"/>
    <category term="всячина"/>
    <category term="математическое моделирование"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Все вожусь с СУ астросибовскими монтировками. Сначала вычислял скорость 1 раз в промежуток времени тупо как отношение разности координат к разности времен. Получалось очень шумно и ступенчато. Сейчас запилил "плавающее" вычисление наименьшими квадратами. Значительно красивше вышло. И по "болтанке" скорости на интервале, где она должна быть постоянна, сразу понял, что я неправильно настроил ПИД-регулятор sidservo (то ли I, то ли P задрал выше, чем нужно).&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/387338.html#cutid1"&gt;Код&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=387338" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:387119</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/387119.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=387119"/>
    <title>ПИД - продолжение</title>
    <published>2025-07-30T08:32:43Z</published>
    <updated>2025-07-30T08:32:43Z</updated>
    <category term="всячина"/>
    <category term="роботелескоп"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Идея сделать 2 разных набора коэффициентов (для "координатно-ориентированной" и "скоростно-ориентированной" частей траектории) оказалась очень даже к месту. В первом случае I нам почти не нужен (т.к. только будет затягивать выход в следующее состояние), а во втором достаточно приличный по величине P (чтобы "успевать", если быстро меняется траектория) и небольшие D/I (чтобы осцилляций избежать). Фактически, на маленьких скоростях (что обычно и есть) эмуляция себя показала отлично даже с сильным шумом (до 1 условной угловой секунды).&lt;br /&gt;Теперь остается "всего ничего": добавить модель движения в нижний уровень СУ, да вогнать ПИД. И написать обертки подо все это, чтобы можно было тесты гонять. А там уж Тимур вернется, и пусть свой верхний уровень подключает, чтобы у нас и СКН были, и все эти расчеты положения объектов, запретных зон и т.д., и т.п.&lt;br /&gt;Вчера сверял реальные графики движения телескопа и модельные: "тютелька в тютельку", разве что по какой-то причине движение телескоп стартует лишь через ~0.25с после получения команды. Нужно будет в модели это учесть, если не удастся понять причину задержки. Хоть там и убогий 8-битный МК используется, но я сильно сомневаюсь, что даже этот 8051 так долго будет рассчитывать новую траекторию при получении команды. Зато, к счастью, движение происходит таки по трапециевидному рампу (ну или "углы" немного сглаживают, но на общей картине это не заметно).&lt;br /&gt;&lt;br /&gt;На этой неделе ребята обещали закончить с осушителями в куполах 4/5, так что нужно будет туда по-быстренькому сеть организовать, да перенести компьютер с 3 телескопа. Как я уже писал, тестовые запуски 4/5 показали в процессе движения достаточно малые шумы, на уровне долей секунды. А вот третий по склонению болтается с размахом секунд в 15, когда его двигаешь по часовому углу на максимальной скорости! Пока что бороться с проблемами механики не хочется.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=387119" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:386828</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/386828.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=386828"/>
    <title>ПИД</title>
    <published>2025-07-29T08:44:00Z</published>
    <updated>2025-07-29T08:44:00Z</updated>
    <category term="всячина"/>
    <category term="роботелескоп"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Все-таки дошло до меня, почему дипсик так упорно тыкал в меня "классическим" ПИД, где вычисляется именно скорость движения в следующем цикле, а не поправка. Ведь фактически "воздействие", вычисленное по формуле ПИД, дает величину смещения, которое нужно пройти за следующий цикл. Соответственно, скорость на этом этапе должна быть равна отношению "воздействия" к длительности цикла, dt.&lt;br /&gt;А вот на мелких отклонениях, когда идем уже "ноздря в ноздрю", такой расчет приведет к осцилляциям. Поэтому нужно брать какую-то небольшую часть отношения "воздействия" к dt и суммировать с текущей скоростью. Вот такая ошибка получается после выхода на режим сопровождения (ошибка &amp;lt; 0.1 условной единицы). Шум в пределах ±0.02 имитирует дребезг младших разрядов энкодера. Скачок на t=30 - тоже имитация реального скачка (например, от порыва). В промежутке t=20÷30 координата постоянна, далее опять возвращается к движению по синусоиде.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;figure&gt;&lt;a href="https://freeimage.host/ru"&gt;&lt;img src="https://iili.io/F8WeKqg.jpg" alt="F8WeKqg.jpg" border="0"&gt;&lt;/a&gt;&lt;figcaption&gt;Ну не красота ли?&lt;/figcaption&gt;&lt;/figure&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/386828.html#cutid1"&gt;Read more...&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=386828" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:386643</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/386643.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=386643"/>
    <title>"Модбасятина"</title>
    <published>2025-07-17T14:14:28Z</published>
    <updated>2025-07-17T14:14:28Z</updated>
    <category term="всячина"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Добавил в &lt;a href="https://github.com/eddyem/eddys_snippets/tree/master/modbus_params"&gt;утилиту&lt;/a&gt; для работы с модбас-устройствами "по словарю" еще и "псевдонимы". Позволяет вместо того, чтобы вспоминать, как там запустить мотор или сбросить ошибку, просто дать команду "cw/ccw/clearerr"… Параметров пока негусто:&lt;br /&gt;&lt;code lang="C"&gt;&lt;pre style="border-left: 4px solid; border-top: 1px dashed; border-bottom: 1px dashed; max-height: 300px; overflow: auto; padding: 5px" title="Code block"&gt;
  -D, --dictionary=arg   file with dictionary (format: code register value writeable)
  -N, --node=arg         node "IP", or path (could be "\0path" for anonymous UNIX-socket)
  -O, --outdic=arg       output dictionary for full device dump by input dictionary registers
  -R, --readc            registers (by keycodes, checked by dictionary) to read; multiply parameter
  -U, --unixsock         UNIX socket instead of INET
  -W, --writec           write new value to register by keycode (format: keycode=val); multiply parameter
  -a, --alias=arg        file with aliases in format 'name : command to run'
  -b, --baudrate=arg     modbus baudrate (default: 9600)
  -d, --device=arg       modbus device (default: /dev/ttyUSB0)
  -h, --help             show this help
  -k, --dumpkey          dump entry with this keycode; multiply parameter
  -o, --outfile=arg      file with parameter's dump
  -r, --readr            registers (by address) to read; multiply parameter
  -s, --slave=arg        slave ID (default: 1)
  -t, --dumptime=arg     dumping time interval (seconds, default: 0.1)
  -v, --verbose          verbose level (each -v adds 1)
  -w, --writer           write new value to register (format: reg=val); multiply parameter
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;Я не утруждал себя отдельным флагом "-S" для запуска сервера, как в некоторых других: клиента все равно нет, а уж если указан "node", то значит сервер. "Псевдонимы" только в серверном режиме работают. А в standalone-режиме можно писать в любые регистры без проверки (мало ли: вдруг не было в "словаре" этого предусмотрено).&lt;br /&gt;Дамп можно запускать в новые файлы (в этом случае автоматом закрывается старый). &lt;br /&gt;У самого сервера, помимо команд вида "alias" или "register [= value]", есть и команды:&lt;br /&gt;&lt;pre&gt; clodump: stop dump and close current dump file
newdump: open new dump file or get name of current
list: list all dictionary (as getter) or given register (as setter: by codename or value)
alias: list all of aliases (as getter) or with given name (by setter)&lt;/pre&gt;&lt;br /&gt;Если сюда еще и добавить работу с "read/write coil[s]", отпадет необходимость запускать терминал для тестирования какой-нибудь новой убогой релюшки со своим убогим протоколом...&lt;br /&gt;&lt;br /&gt;Как ни презираю я модбас, все-таки пришлось с этой дрянью поработать (и даже местами на своих железках реализовать).&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=386643" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:386499</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/386499.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=386499"/>
    <title>Железяки и не только…</title>
    <published>2025-07-15T17:57:56Z</published>
    <updated>2025-07-15T17:57:56Z</updated>
    <category term="железяки"/>
    <category term="роботелескоп"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Что-то за последние пару недель с работой почти не продвинулся: сначала практически неделю были студенты питерского политеха: экскурсия, да 14 пар занятий. Понемногу вернулся к работе с новыми приводами БТА, ну и занимался "Астро-М". Система управления оставшимися тремя телескопами в состоянии "конь немного повялялся", хотя должны были уже к концу июня начать двигать телескопом.&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/386499.html#cutid1"&gt;tl;dr&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___2" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/386499.html#cutid2"&gt;БТА без зеркала&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___2" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=386499" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:386280</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/386280.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=386280"/>
    <title>Новый контроллер энкодеров</title>
    <published>2025-06-04T05:51:12Z</published>
    <updated>2025-06-04T05:51:12Z</updated>
    <category term="железяки"/>
    <category term="роботелескоп"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Я про него &lt;a href="https://eddy-em.livejournal.com/504926.html"&gt;писал уже&lt;/a&gt;, а намедни платы получил. 2.5 часа ушло, чтобы запаять на двух платах комплектуху. Еще минут 15 отмывал с кисточкой (пока нормальной УЗ-ванны нет, по-человечески вымыть не получается). Вот, что вышло:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;figure&gt;&lt;a href="https://freeimage.host/ru"&gt;&lt;img src="https://iili.io/FJp6TjR.jpg" alt="FJp6TjR.jpg" border="0"&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/386280.html#cutid1"&gt;Дальше&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=386280" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:386036</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/386036.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=386036"/>
    <title>Modbus-релюшка</title>
    <published>2025-05-23T05:46:24Z</published>
    <updated>2025-05-23T05:46:24Z</updated>
    <category term="железяки"/>
    <category term="роботелескоп"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">На основе таких релюшек хочу организовать управление питанием на комплексе "Астро-М":&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;figure&gt;&lt;a href="https://freeimage.host/i/3ZskaPS"&gt;&lt;img src="https://iili.io/3ZskaPS.md.jpg" alt="3ZskaPS.md.jpg" border="0"&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;&lt;br /&gt;(подключая реле к питанию, не понял, зачем я заказал пятивольтовое, если все источники питания заказывал на 12В)&lt;br /&gt;Написал вчера &lt;a href="https://github.com/eddyem/eddys_snippets/tree/master/modbus_relay"&gt;простейшую утилиту&lt;/a&gt; для работы с реле: получение значений дискретных входов и состояния реле, управление реле, смена идентификатора.&lt;br /&gt;Использовал библиотеку &lt;a href="https://libmodbus.org/"&gt;libmodbus&lt;/a&gt;. Честно говоря, она мне не понравилась: совершенно нелогичные названия функций и очень много ненужного функционала. Похоже, надо в свою "библиотеку сниппетов" еще и работу с модбасом добавить. Там кода-то от силы страницы на 2 на все, про все! &lt;a href="https://github.com/eddyem/stm32samples/blob/master/F1%3AF103/FX3U/modbusrtu.c"&gt;Вот здесь&lt;/a&gt; я уже чем-то подобным занимался (только на МК, поэтому больше половины кода - работа с регистрами и т.п.).&lt;br /&gt;&lt;br /&gt;На злополучном шлагбауме, на управление которым я пару "малинок" прикрутил, опять после отключения электричества отмерла флешка (точней, после fsck никаких проблем нет вроде, но во время загрузки возникают какие-то дикие маты на невозможность создания fstab, хотя зачем его создавать, если он фиксированный?). Решил, что хватит уже насиловать одноплатники без ИБП, поэтому на сервере подниму простейший демон и нарисую (попробую сначала, что мне ИИ предложит) простейшую веб-морду с огромными кнопками "Open", "Close" и "Stop". Нехай охранник через браузер открывает/закрывает. В качестве "защиты" можно сделать простейшую авторизацию в Nginx, но т.к. от нее толку полный 0 на http, то пусть будет вообще "голой жопой наружу": авось, ушлые студенты не прознают, что можно таким образом шлагбаум "взломать" ☺&lt;br /&gt;&lt;br /&gt;А на "Астро-М" нужно, помимо системы управления оставшимися тремя телескопами, заново писать демоны метео и "супердемона", который будет выдавать метеоданные со всех источников (2 локальные метеостанции, метеостанция БТА, датчик осадков и датчик грозы), да пасти датчик грозы: чуть ближе 5км, чтобы отправлял всем сообщения "Emerge closing", а как компы поотключаются, отключал питание — сначала всего (кроме самих реле), что после каждого ИБП висит, а потом — во вводном щите все питание, исходящее "наружу". Командами ИБП в данном случае нагрузку отключать нельзя: как ее после окончания грозы включать? А так - коль уж компьютер на "купольном" ИБП около двух суток может работать, то релюшке и конвертеру RS-485 в оптику и обратно питания надолго хватит (думаю, там саморазряд аккумуляторов значительно выше).&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=386036" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:385741</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/385741.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=385741"/>
    <title>Графики с новым контроллером энкодеров</title>
    <published>2025-04-08T20:06:38Z</published>
    <updated>2025-04-08T20:06:38Z</updated>
    <category term="роботелескоп"/>
    <category term="железяки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Добавил опрос нового контроллера (о котором недавно писал) в нижний уровень СУ телескопом. Теперь видно, что, как минимум, у контроллера не настроен ПИД-регулятор. Ну и болтается все нещадно, пока едет. Есть у меня подозрения, что если даже удастся добиться точностных характеристик сопровождения, из-за вибрации монтировки звезды будут кругляшами (а то и "ромбиками") в 3-4''…&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/385741.html#cutid1"&gt;Графики&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=385741" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:385298</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/385298.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=385298"/>
    <title>И еще одна железяка…</title>
    <published>2025-04-04T18:20:57Z</published>
    <updated>2025-04-04T18:20:57Z</updated>
    <category term="stm32"/>
    <category term="роботелескоп"/>
    <category term="железяки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Редко так бывает, чтобы сначала код написал, а потом нарисовал плату, но сейчас почти так. Почти — потому как я все же решил еще добавить USART для возможности прямого подключения к контроллеру SidServo (пусть будет эдакая универсальная плата). Заодно можно будет проверить: действительно ли нужно слать туда данные не больше 20 раз в секунду, или можно почаще.&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/385298.html#cutid1"&gt;Картинки&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;Теперь можно обратно вернуться к завершению разработки СУ монтировкой. Две недели уже прошло с последнего коммита… Там, правда, еще и БТА, но, как обычно: "мелкие" — по вечерам, "большие" — днем.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=385298" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:385097</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/385097.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=385097"/>
    <title>А дипсик немного исправляется…</title>
    <published>2025-04-02T19:21:51Z</published>
    <updated>2025-04-02T19:22:59Z</updated>
    <category term="роботелескоп"/>
    <category term="stm32"/>
    <category term="железяки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">На прошлой неделе я на макетке спаял модуль для снятия данных с 26-разрядных абсолютных угловых энкодеров по протоколу BISS-C. Отладил в четверг вечером код, чтобы уж точно оба SPI работали (поначалу не мог понять, что за дичь со вторым SPI, но тут заметил, что я оставил от USB-шаблона работу с USART1, который тот же самый канал DMA использует, что и SPI2); в пятницу установил этот блок (но, судя по всему, опять оторвал один из тонких проводков от энкодера; как только кончатся эти долбаные дожди, надо будет смотаться и перепаять все нормально, чтобы уж точно не рвалось). Напомню, что решение напрямую в USB считывать показания датчиков возникло из-за того, что родная астросибовская "коробочка" читает лишь каждые 50мс, а мне минимум 100 раз в секунду надо (а, может, и тысячу — это уж как покажут эксперименты после соединения всего воедино). &lt;br /&gt;В понедельник честно воспользовался выходным, а вчера и сегодня дорабатывал &lt;a href="https://github.com/eddyem/stm32samples/tree/master/F1%3AF103/BISS_C_encoders"&gt;прошивку&lt;/a&gt; для работы с энкодерами.&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/385097.html#cutid1"&gt;Дальше&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;Завтра еще подумаю, что нужно, чтобы "добить" код до хотя бы пре-релиза, а потом сяду очередную плату нарисовать. Многоканальный (7 каналов) преобразователь USB-serial с гальваноразвязками на каждый канал уже нарисовал, теперь надо вот это сделать (тоже с гальваноразвязками на энкодеры, чтобы не спалить их в случае чего). Ну и останется еще нарисовать платку для работы с ИК-датчиками (простой преобразователь I2C в RS-485 с развязкой) и датчиками грозы (там развязка не нужна, взял бы "стандартный" преобразователь I2C-USB, но в случае зависания датчика надо сбрасывать питание; удобней это по протоколу делать, а не отрубая USB — тем паче, не у всех компьютеров питание USB можно отключить).&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=385097" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:384810</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/384810.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=384810"/>
    <title>Решение проблемы с сетью.</title>
    <published>2025-04-02T17:18:06Z</published>
    <updated>2025-04-02T17:18:06Z</updated>
    <category term="linux"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Как оказалось, есть такие непонятные вещи, как MTU и MSS, о которых я впервые узнал как раз намедни (когда увидел, что этот самый MTU у ppp на 8 байт меньше, чем у остальных). &lt;br /&gt;И почему я сразу не наткнулся на &lt;a href="https://wiki.gentoo.org/wiki/Home_router/ru"&gt;эту замечательную статью&lt;/a&gt; в генту-вики? Там как раз описываются все вещи, необходимые для организации домашнего маршрутизатора. &lt;br /&gt;Проблема синхронизации размеров MSS с MTU решается одной строчкой:&lt;br /&gt;&lt;pre&gt;iptables -A FORWARD -t mangle  -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu&lt;/pre&gt;&lt;br /&gt;Ну и т.к. в дефолтном ядре кальки все, что только можно, запихнули в модули, нужно добавить в &lt;tt&gt;/etc/modules-load.d/net.conf&lt;/tt&gt; автозагрузку модуля &lt;tt&gt;xt_tcpmss&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;Вот почему все так сложно?&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=384810" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:384705</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/384705.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=384705"/>
    <title>Что ж я про бубен-то забыл?</title>
    <published>2025-03-23T19:57:35Z</published>
    <updated>2025-03-23T19:57:35Z</updated>
    <category term="linux"/>
    <category term="всячина"/>
    <category term="железяки"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">А ведь лежит себе в ящике: купил когда-то, чтобы разукрасить и на стенку на работе повесить, да так и не дошли руки ☺&lt;br /&gt;Преамбула: еще с месяц назад на фоне падения курса зеленой туалетной бумаги я задался вопросом, что бы такое прикупить на алике. Ну и решил себе файлопомойку поменять. Пришло все достаточно быстро, но вот преобразователь питания с 12В на материнку оказался мертвым (увы, единственная материнка, что я нашел, оказалась на каком-то адски мощном процессоре, потребляющем аж 8Вт, из-за чего там даже вентилятор есть; ну и вместо обычного питания 12В, как на всех мини-материнках "микрокомпьютеров", там полноценный ATX-разъем еще и с допом на 4 контакта). Поэтому заказал новый на озоне, он достаточно быстро пришел (но т.к. ездим мы в Зелик раз в неделю - по пятницам или субботам, то только в эту пятницу забрал). По всяким тестам и характеристикам сделаю отдельную публикацию, если не лень будет (там уж больно долгий tl;dr получится), а пока — просто про то, как сегодня страдал (подробности конфигураций тоже потом выложу, наверное).&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/384705.html#cutid1"&gt;Дальше&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=384705" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:384434</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/384434.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=384434"/>
    <title>В kicad 9 полно новых улучшений!</title>
    <published>2025-03-20T06:19:30Z</published>
    <updated>2025-03-20T06:19:30Z</updated>
    <category term="kicad"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Кое-какие полезные вещи, которые раньше были доступны только из плагинов и то работали, то нет, теперь вынесены в основной функционал кикада. Вот, как на картинке, например: для трех одинаковых листов нарисовал размещение, провел дорожки, а потом щелк-щелк, и три одинаковых позиции готовы! &lt;br /&gt;Экспорт и импорт теперь более широкий. С  теми же иерархическими листами удобней работать стало. У элементов появились альтернативные пины (в принципе, это было уже в поздних восьмых версиях): у того же МК щелкаешь по ноге, и выбираешь, что отобразится (и потом не получаешь, внезапно, что перепутал USB_DP и USB_DM — их уже явно видно). Более гибкая проверка правил (все равно ругается на невыровненные по сетке элементы, но теперь это хоть отключить можно). И т.д., и т.п.&lt;br /&gt;В генте пока нет, поэтому поставил из git, как появится в репах, снесу из git'а и опять буду пользоваться stable.&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/384434.html#cutid1"&gt;Большой скриншот&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=384434" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:384240</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/384240.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=384240"/>
    <title>Как вам такое соседство?</title>
    <published>2025-03-07T07:56:54Z</published>
    <updated>2025-03-07T07:56:54Z</updated>
    <category term="всячина"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Есть у нас в Черкесске "центр дополнительного образования" (или как-то так). И вот, несколько лет назад загорелись они пару телескопов установить. Естественно, им было предложено поставить телескопы у нас — рядом с нашим комплексом "Астро-М". Однако, ребята решили "пойти своим путем" и установить их прямо в Черкесске…&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/384240.html#cutid1"&gt;фотки&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;Основной проблемой является то, что у них нет человека, который бы телескопами на постоянной основе занимался. Я приехал туда (уже второй раз, и за 3 или 4 года ничего не изменилось), написал, что еще приобрести. Объяснил, что нужно подключить второй телескоп к питанию и тоже обязательно осушитель воздуха поставить. Ну и, естественно, восстановить информационную сеть (как я понял, кабель когда-то прокладывали, но потом оборвали где-то в подвале).&lt;br /&gt;&lt;br /&gt;Интересно: неужели в таком большом Черкесске нет ни одного астронома-любителя, кто мог бы следить за этими телескопами и иногда детям Луну/планеты показывать (понятно, что больше ни для чего другого эти телескопы не пригодны с таким-то местоположением)?&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=384240" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:383832</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/383832.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=383832"/>
    <title>Power bank Hoko J102</title>
    <published>2025-02-22T17:17:35Z</published>
    <updated>2025-02-22T17:17:35Z</updated>
    <category term="железяки"/>
    <category term="всячина"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">У мелкой сегодня день рождения — теперь она уже официально может на переднем сиденьи ездить (но, учитывая то, что она и два года назад отнюдь не как 10-летка выглядела, спокойно уже тогда ездила, если мамы в машине нет).&lt;br /&gt;Ну, а в качестве "подарка-сюрприза" (т.к. основные подарки она заранее заказала) купил ей на "озоне" упомянутый аккумулятор. Понятно, что с 10А·ч там наврали (т.е. почти — всегда нужно делать скидку на китайские товары: у них и Вольты китайские, и Амперы, и Ватты, и иногда даже время). Фактическая емкость чуть меньше семи А·ч (что уже поражает, обычно нужно на 3 делить, чтобы реальное значение получить), остальное — под катом.&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/383832.html#cutid1"&gt;Картинки-графики&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;P.S. Совершенно непонятно, зачем на аккумуляторе гнездо microUSB, где написано "IN". Заряжать эти 6 с небольшим А·ч через это недоразумение — часов 14!!!&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=383832" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2017-02-11:2798292:383509</id>
    <link rel="alternate" type="text/html" href="https://eddy-em.dreamwidth.org/383509.html"/>
    <link rel="self" type="text/xml" href="https://eddy-em.dreamwidth.org/data/atom/?itemid=383509"/>
    <title>"Контроллер монтировок" Sidereal Servo II</title>
    <published>2025-02-17T19:08:53Z</published>
    <updated>2025-02-17T19:08:53Z</updated>
    <category term="железяки"/>
    <category term="рукожопие"/>
    <category term="негодую"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Потихоньку пишется система управления оставшимися тремя телескопами — уже чисто астросибовскими (т.е. и телескоп, и купол, и монтировка - "Астросиб"). Я уже писал, что там используется какой-то любительский контроллер от sidereal servo, и что там были проблемы с недетерминированностью получения координат осей по энкодерам через контроллер (контроллер эту информацию вообще никак не использует, являясь лишь посредником).&lt;br /&gt;По мере написания библиотеки нижнего уровня, пишу и разные вспомогательные утилиты-тесты, использующие ее функции.&lt;br /&gt;&lt;span class="cut-wrapper"&gt;&lt;span style="display: none;" id="span-cuttag___1" class="cuttag"&gt;&lt;/span&gt;&lt;b class="cut-open"&gt;(&amp;nbsp;&lt;/b&gt;&lt;b class="cut-text"&gt;&lt;a href="https://eddy-em.dreamwidth.org/383509.html#cutid1"&gt;Картинки&lt;/a&gt;&lt;/b&gt;&lt;b class="cut-close"&gt;&amp;nbsp;)&lt;/b&gt;&lt;/span&gt;&lt;div style="display: none;" id="div-cuttag___1" aria-live="assertive"&gt;&lt;/div&gt;&lt;br /&gt;Я уже писал, что производитель контроллера предлагает какое-то "маздай-онли" ПО. Честно говоря, видя такую дичь, я вообще не понимаю, как можно гарантировать хотя бы пятиминутные экспозиции на телескопах, пользующихся этим контроллером, при помощи этого ПО. Даже если очень аккуратно настроить ПИД-регулятор. Интересно бы пораспрашивать тех, кто пользуется "из коробки". &lt;br /&gt;Начальство даже предлагало на одном из телескопе попробовать "ПО от производителя", на что я ответил, что это уже совсем без меня. У меня на маздай такая же непереносимость, как на змеюку. Я уж молчу о том, что автоматизировать (а уж тем паче - роботизировать - такой телескоп будет просто невозможно).&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=eddy_em&amp;ditemid=383509" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
