Как стать автором
Обновить
50
0.3
Александр Козлов @alcotel

Инженер-электронщик

Отправить сообщение

Я пользователь, хочу увидеть на ЦАП V/2. Готов положить это число в регистр. Жду от модуля, который называет себя I2S, что он сделает всё красиво.

Понятно также, что разрабы STM32 сэкономили на интеграции функционала DMA внутрь I2S, чтобы не множить сущее.

То, что предлагается для STM32 из коробки задарма - это просто обёртки для того же вкладывания числа в регистр. Кроме изучения библиотек всё равно приходится также читать доку на чип. Не пользователь Вы. Большинство вещей из так называемого "хардваре абстракшын" нихрена не "абстракшын", и часто даже не получается перенести код между разными семействами STM32F0, F1, F4.

В общем, если хотите не задумываясь сделать типа
echo "42" > /dev/i2s1
это другой уровень программной поддержки, мегабайты стороннего кода и вряд-ли бесплатно. Но говорят, тоже бывает. Слышал, даже на Python как-то люди для мк пишут.

Вы взяли аудио-ЦАП. Они гарантированно хорошо воспроизводят звуковые частоты 20Гц-20кГц, но имеют ряд недостатков для других применений. Собственно, за счёт недостатков и получается сделать 16- или более -битный ЦАП таким дешёвым.

  1. Аудио-ЦАП имеет право вообще не пропускать постоянную составляющую сигнала на выход. В звуковом тракте это не нужно, и бывает даже вредно. Но это в описании на конкретный чип надо смотреть. Некоторые DC-составляющую пропускают, некоторые - нет.

  2. Точность выходного напряжения - никакая. У тех аудио-ЦАП и кодеков, с которыми я работал, по описанию повторяемость +-10% даже между двумя стерео-каналами. Для аудио-применений этого достаточно, но для других - не всегда. Тоже можете в описании к вашему чипу проверить.

  3. Это сигма-дельта-ЦАП. Внутренняя структура у него очень простая, напоминает ШИМ. И линейность очень хорошая для аудио. Но чтобы он вообще работал, ему нужна тактовая частота. Причём желательно достаточно чистая, иначе фокуса не получится. И синхронная с данными, а не абы-какая. Потому что на этой частоте работает антиалайзинговый фильтр.

В выбранной Вами СТМке, как я понял, и так есть 2 встроенных ЦАП. Если не нужна большая скорость регулировки напряжения - во всех мк есть ШИМ. Аудио-ЦАП - штука, оптимизированная для конкретной задачи, и натягивание её на другие задачи требует внимательного прочтения описания.

Прошивка осцилла тоже обновляется, косяки исправляются. Там в основе обычный ARM с линуксом, обновляется с флешки. Но на конкретно эту модель производитель забил, и российский представитель мне тоже ничем не помог. Пришлось поискать тот, для которого на 4pda много прошивок выложено.

Закрутить шкалу, естественно, самому можно. Но так-то и график самому нарисовать недолго.

Надеюсь, допилят. Пожелаю авторам удачи, но пока пожалуй пройду мимо.

Существуют такие. Но большой популярности я не заметил. И комиссия у них конская. Проще крипту на карту вывести через интернет-обменник удалённо.

Hidden text

Вот помню ещё, был у меня осциллограф Hantek MSO5202D. У него в принципе довольно глюкавая прошивка была, но безумные китайские программисты сделали переключение шкалы времени с множителями 2, 4, 8, 20, 40, 80... мкс/деление. На 8 я жутко плевался, и от осцилла в итоге избавился.

Для десятичной системы счисления, логично, что удобна сетка с делителями числа 10 - в уме считать проще. В логарифмическом масштабе, бывает, удобно ещё число 3, т.к. примерно равно sqrt(10). Недесятичные данные (дата, время, угол) имеют свои нюансы.

Итого вариантов оказывается не так много, в 99,9% всё уже придумано. Если что-то нужно совсем хитрое, то пользователь уже сам настраивает.

В GNUPlot, например как-то же всё работает. А тут тем более не поделка программиста-самоучки, а

Это 100% коммерческий проект

За то, что люди кодят не подумав, я, например, не готов платить.

2,25 градусов и 10,25 секунд на деление? Да, это очень удобно
2,25 градусов и 10,25 секунд на деление? Да, это очень удобно
75 на деление?
75 на деление?
Точно, 90° и 270° - вообще не существенные цифры для полярных координат.
Точно, 90° и 270° - вообще не существенные цифры для полярных координат.

Очень уё.. удобный и логичный авто-выбор шкалы. Моск из глаз совсем не вытекает, и нет желания отрывать руки за такое.

Не только у Вас такое видел, кстати. Labview, например, таким же автоскейлом страдает. Видимо, в мире, где космические корабли бороздят просторы, и нейросети пишут код, это какая-то безумно сложная задача - расставить на линейке удобные цифры.

sarcasm=off

Интересно, может это как-то связано с разборкой дисков по этому сценарию?)

https://habr.com/ru/news/807611/

Интересный штук. Для негромкой озвучки рабочего места прям в самый раз.

Кстати, раз уж за USB взялись, можно же не передавать аналоговый сигнал по отдельному проводу, а USBшный аудио-кодек тоже в шкатулку положить. С али что нибудь, или начинка от дохлых USB-наушников.

Дешманские USB-наушники за 100₽ ведь г-но не потому, что кодек такой. А потому, что механика и акустика там упрощённые - резонансы, адская нелинейность, надёжность. Вполне честные 16-битные кодеки китайцы-то давно научились делать нормально.

-- Чем занята?
-- Смотрю, как деревья растут лампы в усилке нарабатывают на отказ.
-- Всё суетишься? (c)

напряжение самоиндукции на ней отправит ток именно через защитный диод на порту микроконтроллера

Сразу после выключения все токи через транзистор сохраняются. Поэтому он остаётся таким же открытым и ненасыщенным, пока ток катушки не рассосётся.

Почти весь ток катушки в этой схеме отправится также через эмиттер в коллектор. Главное, чтобы транзистор проглотил пиковую мощность - на нём теперь будет падать не 0,6 В, а 5+0,6+0,6. Но не долго.

А через базу в защитный диод мк пойдёт ток, уменьшенный на его коэфф. усиления. Если катушка реле запасла ток 70 мА, то в мк пойдёт всего 0,5 мА. Я думаю, вполне допустимо.

Моветон - такой себе аргумент. Что не запрещено даташитом, принципами самой КМОП-технологии, или хотя-бы удобством переносимости - то разрешено.

Тут не законодательство РФ работает, а законы физики. Которые за взятку нарушать не получается. Извиняюсь - лирическое отступление было)

Пускать небольшой ток через защитные диоды, если они есть - вполне штатный режим работы для КМОП. Исключения в КМОПе - аналоговые мультиплексоры типа 74HC4051..53, или входы АЦП мк. Сгорать не сгорают, но начинается джопа с соседними аналоговыми сигналами - открываются паразитные BJT, и все аналоговые сигналы соединяются. Это на пальцах, но подробности пока сам не расковыривал.

Кстати, мк тут без АЦП. Для полноценной имитации стиралки не хватает подогрева воды и единственного и неповторимого аналогового NTC-термодатчика в 10 кОм)

Мне одному кажется, что в этот раз китайцы перебдели? Обычно наоборот, не доливают)

R38 и R40 лишние, т.к. эта подтяжка уже есть в самом мк. А даже если подтяжки и нет, всё равно ток базы почти нулевой будет. И если транзистор его усилит в 200 раз, реле не сработают. Если транзисторы стоят рядом с мк, особой чувствительности к помехам не ожидается.

R39 и R41 тоже не нужны, т.к. ток базы в схеме с ОК и так будет ровно таким, как надо. А именно = ток реле / коэфф. усиления транзистора.

И диоды D5 и D6 в схеме с ОК вообще-то тоже лишние. Когда реле выключаются, на базах что-то в районе VCC. Запасённый в катушке ток откроет транзисторы, и они сами ограничат выброс напряжения.

Эх, вот в наше время...)

Думаете, 48 лет назад люди не делали проходное у.г., как сейчас? Делали, просто оно сломалось и забылось.

Думаете, что из современных разработок вообще ничего не проживёт 48 лет? А откуда вы знаете? Вон даже сама Intel не особо верила в успех однокристальных микропроцессоров. А как всё в итоге повернулось)

"Ошибка выжившего" - это называется.

Под тестерами псевдослучайных последовательностей (ПСП) вы имеете в виду модули, каждый из ктр настроен на приём своей последовательности? Опишите, пожалуйста, подробнее.

Да, как раз через те самые LFSR. Схема скремблер-дескремблер. Если на вход скремблера подать "1", то при отсутствии ошибок на выходе дескремблера тоже будет "1".

"Полином", который задаёт схему скремблирования - это просто побитовое представление мест в LFSR, где установлен XOR. Поэтому модуль со своим полиномом генерится автоматически в коде, без использования сторонних программ.

Оставалось только сделать список "хороших" полиномов. И в электронной таблице сгенерить текстовый файл распиновки. Это всё автоматизируется.

Под видео должна быть надпись: "Инженерам - не смотреть. Может задеть за живое, внезапные вреды, остерегайтесь детей")

Студенческий деСтрой-отряд, мля)

Способ с UART на каждом выводе вполне можно использовать для определения распиновки.

На самом деле идея очень крута. Компилируется это всё за секунды, и не нужно специализированное оборудование за $∞ для тестов. Спасибо, буду пользовать.

У меня один раз была похожая задачка - собрать тест для многопроводного кабеля между двумя платами с ПЛИС. Я тогда нагенерил PRBS и тестеров к ним. Про UART не догадался, хотя в загашнике уже имелось всё необходимое.

Я больше вот про что:
Ну как-бы изначально цель работы-то была - выяснить распиновку. А с текущим кодом выходит, что группы из 2-4 ног выдают наружу одинаковые паттерны. Цель-то в итоге достигнута?

//с каждым тактом

//Записываем начальное значение регистра

Других значений в uart_data не записывается. Сброса нет, начального значения сигнала uart_data хотя-бы для симулятора - тоже нет. И компилятор такой думает: "А нахера он это сделал? Что он имел в виду? А он ещё и варнинги игнорирует? Тогда пох, сделаю сигнал константой, имею право!".

Нет там регистра, короче. Был бы - появился бы в списке занятых ресурсов в Total registers. А сейчас там чётко:
256 шт. cycled_uart_transmitter.Tx +
8 шт. clk_div_250.count +
4 шт. cycled_uart_transmitter.i +
1 шт. clk_div_250.clk_out = 269

Баланс сошёлся прямо по-бухгалтерски)

А вот число 170 = 0b1010_1010 терминал принимает неправильно.

А откуда уверенность, что именно осцилл принял правильно, а не терминал?)

Осцилл и UART-приёмник просто не понимают, где именно старт- и стоп- биты, поэтому ставят их рандомно. Тот же паттерн 0.01010101.1 любой приёмник имеет право принять с циклическим сдвигом:
001010101100101010110010101011 или
001010101100101010110010101011 или
001010101100101010110010101011 или
001010101100101010110010101011, и это всё разные цифры. Короче:

Давайте делать паузы в словах... (с)

И не надо мутить воду:

Можно попробовать реализовать UART как кольцевой регистр сдвига

Tx <= uart_data[i]; //отправили 1 бит данных

То, что в коде записано, это селектором называется. Или мультиплексором.

Полноценны UARTовский регистр сдвига в этой задаче занял бы намного больше ресурсов ПЛИС. А так выходит, что каждому паттерну достаточно храниться в одной LUT. Метод весьма хорош.

Я пользуюсь этими:
https://aliexpress.ru/item/1005004971890033.html
https://www.avito.ru/moskva/zapchasti_i_aksessuary/can_usb_interfeys_analog_can_hacker_cantact_2236305908
Первый - с гальванической изоляцией. Оба в линуксе из-коробки определяются, как сетевые интерфейсы. С python-can и can-utils дружат, но надо ставить версии после 2022 года.
На приём работают отлично. А вот на передачу, если в сети никого живого нет, появляется нюанс.
Ещё вот такой взял, с другим логическим интерфейсом:
https://aliexpress.ru/item/1005002828512259.html
но пока руки не дошли испробовать.

из ленточного аморфного железа российского производства

А можно узнать, что это, и где купить?

В живых устройствах встречал только ферриты. Но в статьях разработчиков ленточные тоже видел в ККМ. Там частоты, вроде, пониже, чем в DCDC, но ток подмагничивания большой.

Информация

В рейтинге
2 211-й
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Embedded Software Engineer, Разработчик электроники
Lead
От 280 000 ₽
Electronics Development
Development of printed circuit board
FPGA
Programming microcontrollers
Sound processing