Как превратить это в контроллер (Ableton)?

wires multiplexer prototype

Недавно я нашел эту прекрасную десятилетнюю коробку в снесенном доме и хочу превратить ее в контроллер Ableton. Как видите, здесь 18 ручек, каждая из которых имеет 12 отдельных состояний.

Мне хотелось бы иметь программу, которая могла бы получать доступ к состояниям всех ручек в любое время, и у меня есть Arduino, которую я могу использовать. Можно ли обойтись без щита?

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

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

Спасибо за помощь.

, 👍2


3 ответа


Лучший ответ:

1

Другие ответы отличные, однако я хочу ответить на этот вопрос:

Какую роль в этом играет мультиплексор?

В качестве примера того, как помогает мультиплексирование, я открыл светодиодный знак прокрутки с 504 отдельных светодиода, которые «кажутся» включенными одновременно (при желании).

Внутри было 10 последовательных сдвиговых регистров 74HC595. 9 из них были подключены к отдельным столбцам (что дало 72 столбца), а последний — к 7 рядам.

 9 * 8 =  72    columns
72 * 7 = 504    LEDs

Таким образом мы смогли включить 504 светодиода. Однако для того, чтобы загорелись отдельные светодиоды, код должен включить одну строку (из 7), а затем вывести шаблон для этой строки в 72 столбца. Затем он переключается на другую строку, выполняет следующий шаблон и так далее.

У меня есть видео с этим эффектом на Vimeo.

Если вы сделаете это достаточно быстро, все светодиоды загорятся одновременно.


Теперь вы можете сделать то же самое и для переключателей: просто соедините все отдельные положения вместе, а затем последовательно подайте «питание» на каждый переключатель и прочтите результаты. На этот раз вам нужен сдвиговый регистр входной, например. 74HC165 для чтения и выходной регистр для питания каждого переключателя.

Однако проблема в переключателях: вы можете получить «фантомное» чтение, потому что переключатели не являются диодами (или, что еще хуже, неактивные переключатели закоротят питание на землю). Поэтому, чтобы предотвратить это, вам понадобится диод последовательно с каждым переключателем. Ну, диоды дешевы.

Это та же концепция, что и в работе клавиатур. Скажем, 16-клавишная клавиатура будет иметь 8 проводов: 4 строки и 4 столбца.


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

У вас есть 17 переключателей, то есть 2 x 74HC595 для активации каждого переключателя, плюс один запасной контакт на Arduino. И переключатели, похоже, имеют около 12 положений, так что для чтения того, в каком положении он находился, потребуется 2 x 74HC165.

Итак, для каждого переключателя вы устанавливаете один ВЫСОКИЙ, а остальные НИЗКИЙ. Ток будет течь через диоды и поворотный переключатель, показывая ВЫСОКИЙ уровень на одном из 12 «считывающих» контактов. Диоды не позволяют току замыкать ВЫСОКИЙ уровень на НИЗКИЙ через другие переключатели.

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

Эта схема иллюстрирует эту идею:

Пример поворотного переключателя

В этом примере мы применяем HIGH к общей части (ротору) левого переключателя. Он проходит через диод и выбранную позицию, чтобы сделать вход «чтение 1» высоким. Диод на другом переключателе предотвращает замыкание HIGH на LOW, даже если оба переключателя находятся в одном и том же положении.

Вам понадобится понижающий резистор для каждой из 12 линий «чтения», чтобы, если бы они не были установлены на ВЫСОКИЙ уровень, они отображались бы как НИЗКИЕ. И по одному диоду на поворотный переключатель. Так что лишних деталей не так уж и много. А проводка простая, достаточно соединить вместе каждый соответствующий контакт переключателя (кроме общего, конечно).

Я думаю, это сработает, если только кто-нибудь не увидит серьезный недостаток. :)

,

Вау, это здорово! Спасибо. Пример со светодиодами действительно помогает проиллюстрировать эту мысль. Я думаю, что эта идея осуществима и кажется, что она будет довольно дешевой., @bealbrown

Я начинаю думать, что Ник какой-то сверхчеловек. Как еще можно объяснить возможность создания такого количества высококачественных образовательных решений? :D, @linhartr22


1

Сложность здесь в том, что вам нужно прочитать 216 входных данных.

Вы можете мультиплексировать аналоговые контакты, используя два 74HC4051. Аналоговое чтение занимает около 0,1 мс, то есть около 2 мс для всех 18 ручек. Однако устранить дребезг будет довольно сложно.

Я бы, наверное, использовал входные сдвиговые регистры и удалил все резисторы. Однако вам понадобится 27 8-битных сдвиговых регистров (3 регистра на 2 ручки).

Чтобы уменьшить это, вы можете закодировать положение вращения в 4-битное число, используя диодную сеть. Таким образом, вы можете использовать только один регистр сдвига на две ручки. Итого 9.

,

1

Вы можете использовать аналоговый маршрут, используя CD74HC4067, а затем подключить его к аналоговому демультиплексору, например как CD74HC4067(прорыв от SFE), который имеет 16 аналоговых/цифровых входов. Вы бы использовали один из этих и два аналоговых контакта, один от прорыва и один от панели, поскольку, насколько я вижу, здесь 17 циферблатов.

Пример резисторной лестницы:

Адресация 4067 осуществляется с помощью 4 цифровых контактов для формирования двоичного адреса, относящегося к каждому входу. Вы бы поместили это в цикл for и читали бы каждый адрес и помещали бы массив значений каждый раз, когда вы выполняете цикл. А при выходе из цикла читаем последнее аналоговое значение. Я бы использовал манипуляции с портами для записи адреса, поскольку это ускорило бы операцию.

После того, как у вас есть значения в массиве, вы можете выполнить необходимые математические вычисления, чтобы определить, где находится циферблат, или вы можете сделать это, читая аналоговый вывод цикла for , как бы сохранив все это в одной функции. Расчет конвертации вы можете найти в статье в Википедии, стиль R-2R.

Bildr, сделайте хороший отзыв с кодом и изображением базовой настройки:

,