Воспроизведение бинарного файла

andrey3824
Offline
Зарегистрирован: 17.03.2020

Привет, народ!
Христос воскрес!
Как-то была нужда отправить на цифровой выход пачку импульсов в микросекундном диапазоне (единицы, десятки микросекунд). Пачка небольшая, собрал в коде с использованием прямого доступа к портам. Всё получилось, немного здесь помогли.
Теперь нужно отправить на цифровой вывод пачку импульсов значительно длиннее.
Есть бинарник с записанными последовательностями, его можно на SD записать. В бинарнике всё просто, лог. 1 - это допустим 03 (или 01), а лог. 0 - это 02 (или 00). Может есть какие-то библиотеки, с которыми можно этот файл воспроизвести на цифровом выводе ардуино?
Пробовал погуглить по этой теме, не мог сообразить как правильно обозвать то, что мне нужно.

andrey3824
Offline
Зарегистрирован: 17.03.2020

Бинарник такого вида. Данные снимались анализатором на 12 МГц, на каждый байт (или бит) время примерно 83.3ns.
Самый короткий импульс получается где-то 2666ns, это 32 выборки по 83.3ns. Нет возможности снять данные с частотой дискретизации в 16 МГц, возможно тогда было бы проще для ардуино. Может я ошибаюсь. Подскажите как можно это организовать или где поискать.

Green
Offline
Зарегистрирован: 01.10.2015

Не понятно. Вот эти 03 - эти длительность, которую нужно множить на 83,3 нс? И это хочется воспроизвести?

andrey3824
Offline
Зарегистрирован: 17.03.2020

03 это логическая единица в данном случае, а 02 - это логический ноль.
Это не длительность. Я выше отметил, что каждый байт (03 или 02) именно в этом файле
это одна выборка логического анализатора длительностью 83.3ns. 32 выборки - это примерно 2666ns.
Это самый короткий импульс, который там есть. 

andrey3824
Offline
Зарегистрирован: 17.03.2020

То, что выше это примерно вся пачка. Ниже это развернутая часть одного участка.

andrey3824
Offline
Зарегистрирован: 17.03.2020

Левый импульс на нижнем скрине это минимальный, равный примерно 2666ns.
В первом посте скрин с редактора, в котором представлена часть файла. 
Лог. 1 - это 03, лог. 0 - 02. Сверху вниз байтов 02 есть 32. Это нулевой импульс (или пауза)
длительностью 2666ns. Вся пачка (верхний скрин 4 поста) занимает примерно 112ms. 
Вот его нужно воспроизвести. Как бы проиграть с SD. 
 

b707
Offline
Зарегистрирован: 26.05.2017

Для начала перевести все 03 и 02 в бит по нужному пину и 0.

А потом определится с длительностью. 83нс на ардуине 16мгц не воспроизвести никак, ибо сигнал должен быть кратен 62нс. И ничего близкого к 62нс тоже не вывести, хорошо если раз в 10 медленнее выйдет. Хотите длину лог единицы 83нс - берите стм32

andrey3824
Offline
Зарегистрирован: 17.03.2020

А можно так сделать? Считать количество битов, умножать на 83.3, а потом делить на 62.5?
160/83.3=13328ns
13328/62.5=~213 тактов 

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824 пишет:

А можно так сделать? Считать количество битов, умножать на 83.3, а потом делить на 62.5?

я не против, делайте

Весь вопрос вовсе не в вычислении интервала, а в том как вы его на пин выведете...

Upper
Offline
Зарегистрирован: 23.06.2020

Если есть возможность увеличить шаг (скорее всего она есть), то станет намного проще.

Например если мин длительность импульса = 2666 нс, проверьте, можно ли использовать это значение как шаг интервала.

Если можно, то для 112 мс и шаге 2666 нс получится 42011 интервалов, и если в один байт записывать 8 значений, то потребуется 5251 байт. А это уже может поместиться в память программ, в случае если данные надо записать один раз и больше не менять.

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824 - в качестве примера отправки советую посмотреть библиотеку IRRemote, там задача очень схожая - отправить на пин цепочку нулей и единиц с заданными таймингами

andrey3824
Offline
Зарегистрирован: 17.03.2020

Спасибо, посмотрю.

rkit
Offline
Зарегистрирован: 23.11.2016

Я бы посоветовал не страдать и не пытаться воспроизводить из файла очевидный как день тактовый сигнал.

andrey3824
Offline
Зарегистрирован: 17.03.2020

rkit пишет:

Я бы посоветовал не страдать и не пытаться воспроизводить из файла очевидный как день тактовый сигнал.

Что в нем очевидного?
На тактовый совсем не похоже, что-то вы путаете..

andrey3824
Offline
Зарегистрирован: 17.03.2020

b707
Offline
Зарегистрирован: 26.05.2017

вы что мастерите-то?

Может вместо идеи воспроизведения записанной последовательности проще будет сгенерить сигнал заново программно?

andrey3824
Offline
Зарегистрирован: 17.03.2020

b707 пишет:

вы что мастерите-то?

Может вместо идеи воспроизведения записанной последовательности проще будет сгенерить сигнал заново программно?

Думаю, что это не так просто.
Для программной генерации практически нет данных.

andrey3824
Offline
Зарегистрирован: 17.03.2020

Это данные с M21S

andrey3824
Offline
Зарегистрирован: 17.03.2020

Скрин с 14 поста не оттуда.

svm
Offline
Зарегистрирован: 06.11.2016

b707 пишет:
Для начала перевести все 03 и 02 в бит по нужному пину и 0. А потом определится с длительностью. 83нс на ардуине 16мгц не воспроизвести никак, ибо сигнал должен быть кратен 62нс. И ничего близкого к 62нс тоже не вывести, хорошо если раз в 10 медленнее выйдет. Хотите длину лог единицы 83нс - берите стм32

А если кварц поменять?

andrey3824
Offline
Зарегистрирован: 17.03.2020

svm пишет:

b707 пишет:
Для начала перевести все 03 и 02 в бит по нужному пину и 0. А потом определится с длительностью. 83нс на ардуине 16мгц не воспроизвести никак, ибо сигнал должен быть кратен 62нс. И ничего близкого к 62нс тоже не вывести, хорошо если раз в 10 медленнее выйдет. Хотите длину лог единицы 83нс - берите стм32

А если кварц поменять?

Была такая мысль.
Если кварц поменять с 16 на 12, связь с USB потеряется?
У меня UNO, по USB стоит 16U2.

andrey3824
Offline
Зарегистрирован: 17.03.2020

Снял данные на 8МГц. На каждый байт 125ns, два такта.
 

andrey3824
Offline
Зарегистрирован: 17.03.2020

Примерно посчитал, 930КБ. Даже в мегу не влезет, как правильно залить тоже не накопал.
Меньшую частоту дискретизации уже нельзя ставить.
Вариант, на SD записать, а оттуда читать. 
По SD нужные примеры не нашел. 

По IRRemote сложновато для меня, попробую в библиотеках полазить.

Upper
Offline
Зарегистрирован: 23.06.2020

andrey3824 пишет:

Меньшую частоту дискретизации уже нельзя ставить.

как вы это проверили?

Может быть вы правы, а я не прав, но мне кажется, что если минимальная длительность импульса 2666, то и требуемая частота дискретизации ПРИ ВЫВОДЕ примерно такая же.

Дим-мычъ
Offline
Зарегистрирован: 20.03.2021

Если заморочится, можно байты параллельно кидать на вторую ардуину уже 12мгц а с неё на сдвиговый регистр используя CKOUT

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

andrey3824, да это неслыханное расточительcтво хранить такие длинные цепочки повторяющихся данных. Достаточно записывать кол-во единиц и кол-во нолей. От этого бинарника небось сотня байт останется.  Под STM есть дата-кэпчуры, -программа как магнитофон может захватить поток данных, сохранить, и потом воспроизвести. Тут вообще ничего изобретать не надо.

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824 пишет:

Снял данные на 8МГц. На каждый байт 125ns, два такта.
 

22 раза байт 0х03 - можно заменить одним битом "1", итого файл станет в 22*8  = 176 раз меньше, то есть вместо 930к  будет всего примерно 5300 байт... даже в Нано влезет

andrey3824
Offline
Зарегистрирован: 17.03.2020

Upper пишет:

andrey3824 пишет:

Меньшую частоту дискретизации уже нельзя ставить.

как вы это проверили?

Может быть вы правы, а я не прав, но мне кажется, что если минимальная длительность импульса 2666, то и требуемая частота дискретизации ПРИ ВЫВОДЕ примерно такая же.

Пробовал, ряд ломается.

andrey3824
Offline
Зарегистрирован: 17.03.2020

dimax пишет:

andrey3824, да это неслыханное расточительcтво хранить такие длинные цепочки повторяющихся данных. Достаточно записывать кол-во единиц и кол-во нолей. От этого бинарника небось сотня байт останется.  Под STM есть дата-кэпчуры, -программа как магнитофон может захватить поток данных, сохранить, и потом воспроизвести. Тут вообще ничего изобретать не надо.

Я на сайте ардуино, STM здесь не трогаю. 
Возможно, нужно в ту сторону и двигаться.

andrey3824
Offline
Зарегистрирован: 17.03.2020

Дим-мычъ пишет:

Если заморочится, можно байты параллельно кидать на вторую ардуину уже 12мгц а с неё на сдвиговый регистр используя CKOUT

 

Железо внешнее не додумался прикрутить, нужно рассмотреть. 
Спасибо.

andrey3824
Offline
Зарегистрирован: 17.03.2020

b707 пишет:

andrey3824 пишет:

Снял данные на 8МГц. На каждый байт 125ns, два такта.
 

22 раза байт 0х03 - можно заменить одним битом "1", итого файл станет в 22*8  = 176 раз меньше, то есть вместо 930к  будет всего примерно 5300 байт... даже в Нано влезет


Это в первую очередь в голову пришло.
Я понимаю, что во много сократит, но как сделать, я сам не допилю.
Мож примеры какие есть?..
Возможно, в каком-нибудь редакторе такое есть.

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824 пишет:

Пробовал, ряд ломается.

значит надо подобрать такой делитель, чтоб не ломался.

Но в любом случае кодировать ОДИН ИМПУЛЬС 22-мя одинаковыми байтами - это бред. В конце концов можно же писать первый байт и число повторов - и уже будет в 10 раз меньше. чем сейчас.

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824 пишет:

Я понимаю, что во много сократит, но как сделать, я сам не допилю.
Мож примеры какие есть?..

а вы попробуйте сами "пример" написать.... будут вопросы - поможем

andrey3824
Offline
Зарегистрирован: 17.03.2020

andrey3824 пишет:

Upper пишет:

andrey3824 пишет:

Меньшую частоту дискретизации уже нельзя ставить.

как вы это проверили?

Может быть вы правы, а я не прав, но мне кажется, что если минимальная длительность импульса 2666, то и требуемая частота дискретизации ПРИ ВЫВОДЕ примерно такая же.

Пробовал, ряд ломается.

Если правильно понимаю (по какому-то закону) частота дискретизации должна быть выше в 2 раза.
Это чтобы вообще импульс зарегистрировать. Чтобы записать импульс "правильной" длительности, 
частота дискретизации должна быть выше.

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824 пишет:

Чтобы записать импульс "правильной" длительности, частота дискретизации должна быть выше.

в любом протоколе есть допуск на длины импульсов, в рамках этого допуска эти длины можно считывать и воспроизводить не абсолютно точно, на работоспособность это не влияет

andrey3824
Offline
Зарегистрирован: 17.03.2020

b707 пишет:

andrey3824 пишет:

а вы попробуйте сами "пример" написать.... будут вопросы - поможем

Пошел копать, спасибо отозвавшимся.

andrey3824
Offline
Зарегистрирован: 17.03.2020

b707 пишет:

andrey3824 пишет:

Чтобы записать импульс "правильной" длительности, частота дискретизации должна быть выше.

в любом протоколе есть допуск на длины импульсов, в рамках этого допуска эти длины можно считывать и воспроизводить не абсолютно точно, на работоспособность это не влияет

Понимаю, но специально не проверял.

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824, так все-таки что за протокол вы пытаетесь перехватить и воспроизвести? О нем хоть что-то известно?

andrey3824
Offline
Зарегистрирован: 17.03.2020

Это запросы на плату майнера  M21S. Я выше написал.
Куча предустановок в каждый чип. После чего чипы по-порядку отвечают.
Если послать самый последний запрос, который идёт после заметной паузы, 
то приходит ответ от всех чипов. Ответы абсолютно одинаковые.
Но когда сначала на плату идет та большая пачка с какими-то предустановками, 
то ответы уже разные. Кроме того, ответить при этом могут не все чипы или ответы могут отличаться 
от "нормальных". 
Кое-что я передал с ардуины, это работает. То есть тайминги подходят.
 

andrey3824
Offline
Зарегистрирован: 17.03.2020

Один человек мне объяснял, что нужно в линуксе это всё разобрать и станет понятнее.
Но это еще один темный лес. А у меня задача просто передать нули и единицы из файла во внешний мир.
Данные ответа пока также буду анализатором считывать. Программка для ответов уже есть.

b707
Offline
Зарегистрирован: 26.05.2017

ну понятно :)

Для майнеров ценник * 10

andrey3824
Offline
Зарегистрирован: 17.03.2020

b707 пишет:

ну понятно :)

Для майнеров ценник * 10

Я не майнер)).

Green
Offline
Зарегистрирован: 01.10.2015

andrey3824 пишет:

Это запросы на плату майнера  M21S.

Ну а цель то какая?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

andrey3824 пишет:

Это запросы на плату майнера  M21S.

Ну а цель то какая?

видимо ремонт  ASICов )))

andrey3824
Offline
Зарегистрирован: 17.03.2020

Тестер видит плату полноценной.
Просто тестер не всё умеет.
Цель - вычислить чип, который не отвечает на задание с предустановками.

andrey3824
Offline
Зарегистрирован: 17.03.2020

ua6em пишет:

Green пишет:

andrey3824 пишет:

Это запросы на плату майнера  M21S.

Ну а цель то какая?

видимо ремонт  ASICов )))

Да))

 

andrey3824
Offline
Зарегистрирован: 17.03.2020

Кто-нибудь возьмётся закодить подходящую железку?
Не бесплатно, конечно.

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824 пишет:

Кто-нибудь возьмётся закодить подходящую железку?
Не бесплатно, конечно.

на СТМ могу, но...

b707 пишет:

Для майнеров ценник * 10

:)))))))))))))

andrey3824
Offline
Зарегистрирован: 17.03.2020

Это в долларах?))

b707
Offline
Зарегистрирован: 26.05.2017

andrey3824 пишет:

Это в долларах?))

Андрей, задача в чем? только воспроизводить сигнал из вашего файла? Или захватывать тоже надо?

 

andrey3824
Offline
Зарегистрирован: 17.03.2020

Для начала мне нужно только воспроизвести.
Подготовить файл я сам смогу, записав тем же анализатором.