1

Тема: Отправка произвольного набора команд (1-задержка-0) через порт вывода

Есть последовательность нолей и едениц, между которыми промежутки времени (в мс) не подчиняются периодичности - т.е. произвольные.
По сути это запись произвольного сигнала с другого блока в авто. Ее надо воспроизвести - можно ли сделать это с помощью одной из плат Canny - например Canny 5 nano. Поиском не нашел - буду благодарен ссылке на диаграмму в которой реализован подобный подход для примера.

2

Re: Отправка произвольного набора команд (1-задержка-0) через порт вывода

Нельзя ли сделать такой элемент диаграммы - как массив или последовательность - куда можно было бы списком (через разделители или как угодно еще) положить мои временные дельты, чтобы потом связав этот элемент со стандартным контроллером порта-вывода можно было бы менять сигнал порта?
Кажется что это могло было бы бытьудобным для подобных задач, правда как определять что именно сейчас надо слать 0 или 1 все равно пока не понимаю... могут идти подряд несколько нолей и едениц в исходном сигнале.

3

Re: Отправка произвольного набора команд (1-задержка-0) через порт вывода

Пожалуйста, приведите пример последовательности, с указанием возможных временных интервалов.

4

Re: Отправка произвольного набора команд (1-задержка-0) через порт вывода

  kbusHigh();
  delayMicroseconds(524);

  kbusLow();
  delayMicroseconds(296);

  kbusHigh();
  delayMicroseconds( 124 );

Маленький кусок кода на ардуино, реальная последовательность имеет Большее число элементов.

5

Re: Отправка произвольного набора команд (1-задержка-0) через порт вывода

Действительно ли могут подряд идти несколько периодов с одинаковым значением (например с "1")? На сколько критична точность длительности периодов?

6

Re: Отправка произвольного набора команд (1-задержка-0) через порт вывода

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

Думаю точность не так важна, сигнал захватывался так же ардуинкой, уже даже не вспомню через какую именно плату согласования уровней 5-12, то есть во временных дельтах определенные погрешности наверное допустимы.

7

Re: Отправка произвольного набора команд (1-задержка-0) через порт вывода

Сразу не заметил. В фрагменте кода для Ардуино задержки указаны в микросекундах:

 delayMicroseconds(524);

Это уже сложнее. Управление такими интервалами времени возможно только с помощью драйверов контроллера.
Команды управления включением/выключением "1" имеют приставку kbus.

kbusHigh();

Может это передача сообщения в цифровую шину K-bus, т.е. может быть это UART?
Для чего, если не секрет, используется программа? Что она делает?

8

Re: Отправка произвольного набора команд (1-задержка-0) через порт вывода

Да программа посылает в кбаз шину имитацию одного из блоков бмв для оживления сидений. Просто думал можно ли и как использовать для таких целей канни. Я честно скажу - в свое время мне мало что удалось выяснить по протоколу кбаз и проблема решилась тупой записью переговорки блоков и выдачей ее обратно в эфир. И в общем-то все работает, без парсинга кбаз пакетов как таковых и даже без знания что кбаз - это уарт. Ну а теперь с этим знанием как-то можно использовать для подобных целей одну из плат канни? Канни собрана на компонентах предназначенных для работы в авто и больше подходит, чем ардуино, кроме того, пока качество канни плат, против китайских ардуино меня лично радует, но вот такую простую программку я не знаю как реализовать...

9

Re: Отправка произвольного набора команд (1-задержка-0) через порт вывода

В идеале, использовать драйвер UART - это было бы просто и лаконично, но нужно знать какие именно команды передаются. Может можно найти эту информацию на каких-нибудь форумах? Можно попробовать восстановить сообщения по имеющейся последовательности "0" и "1", но это еще сложнее, чем найти их в интернете.
На сколько длинная последовательность (kbusHigh(); delayMicroseconds(ххх); kbusLow(); delayMicroseconds(ххх);) команды?