Как превратить это в контроллер (Ableton)?
Недавно я нашел эту прекрасную десятилетнюю коробку в снесенном доме и хочу превратить ее в контроллер Ableton. Как видите, здесь 18 ручек, каждая из которых имеет 12 отдельных состояний.
Мне хотелось бы иметь программу, которая могла бы получать доступ к состояниям всех ручек в любое время, и у меня есть Arduino, которую я могу использовать. Можно ли обойтись без щита?
Моя первая мысль заключается в том, что, поскольку на многих выводах на задней панели уже есть резисторы, я мог бы использовать своего рода подход с общим сопротивлением по всему соединению, который подходил бы для аналоговых входов. Но я не уверен, что это правильный путь, особенно если мне нужна очень низкая задержка.
Как мне подключить плату, которая имеет цифровой доступ ко всем контактам здесь? Какую роль в этом играет мультиплексор? Сколько входов мне понадобится? Я новичок в подобных вещах, поэтому думаю, что это довольно простой ответ.
Спасибо за помощь.
@bealbrown, 👍2
3 ответа
Лучший ответ:
Другие ответы отличные, однако я хочу ответить на этот вопрос:
Какую роль в этом играет мультиплексор?
В качестве примера того, как помогает мультиплексирование, я открыл светодиодный знак прокрутки с 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 линий «чтения», чтобы, если бы они не были установлены на ВЫСОКИЙ уровень, они отображались бы как НИЗКИЕ. И по одному диоду на поворотный переключатель. Так что лишних деталей не так уж и много. А проводка простая, достаточно соединить вместе каждый соответствующий контакт переключателя (кроме общего, конечно).
Я думаю, это сработает, если только кто-нибудь не увидит серьезный недостаток. :)
Сложность здесь в том, что вам нужно прочитать 216 входных данных.
Вы можете мультиплексировать аналоговые контакты, используя два 74HC4051. Аналоговое чтение занимает около 0,1 мс, то есть около 2 мс для всех 18 ручек. Однако устранить дребезг будет довольно сложно.
Я бы, наверное, использовал входные сдвиговые регистры и удалил все резисторы. Однако вам понадобится 27 8-битных сдвиговых регистров (3 регистра на 2 ручки).
Чтобы уменьшить это, вы можете закодировать положение вращения в 4-битное число, используя диодную сеть. Таким образом, вы можете использовать только один регистр сдвига на две ручки. Итого 9.
Вы можете использовать аналоговый маршрут, используя CD74HC4067, а затем подключить его к аналоговому демультиплексору, например как CD74HC4067(прорыв от SFE), который имеет 16 аналоговых/цифровых входов. Вы бы использовали один из этих и два аналоговых контакта, один от прорыва и один от панели, поскольку, насколько я вижу, здесь 17 циферблатов.
Пример резисторной лестницы:
Адресация 4067 осуществляется с помощью 4 цифровых контактов для формирования двоичного адреса, относящегося к каждому входу. Вы бы поместили это в цикл for и читали бы каждый адрес и помещали бы массив значений каждый раз, когда вы выполняете цикл. А при выходе из цикла читаем последнее аналоговое значение. Я бы использовал манипуляции с портами для записи адреса, поскольку это ускорило бы операцию.
После того, как у вас есть значения в массиве, вы можете выполнить необходимые математические вычисления, чтобы определить, где находится циферблат, или вы можете сделать это, читая аналоговый вывод цикла for , как бы сохранив все это в одной функции. Расчет конвертации вы можете найти в статье в Википедии, стиль R-2R.
Bildr, сделайте хороший отзыв с кодом и изображением базовой настройки:
- Проблема с кодом для мультиплексора SDA/SCL TC9548A и датчиков HMC58 83L.
- Пример мигания ATmega328P-PU не работает
- Какой тип разъема использует система GROVE?
- Несколько датчиков I2C с одинаковым адресом
- Подключить Arduino к телефонной линии?
- Путаница между SPI и I2C для SSD1306 OLED
- Как исправить подключение светодиодной ленты RGB 12 В к NodeMCU?
- 16*2 1602A LCD дисплей не отображает никаких символов или контрастности, несмотря на правильное подключение
Вау, это здорово! Спасибо. Пример со светодиодами действительно помогает проиллюстрировать эту мысль. Я думаю, что эта идея осуществима и кажется, что она будет довольно дешевой., @bealbrown
Я начинаю думать, что Ник какой-то сверхчеловек. Как еще можно объяснить возможность создания такого количества высококачественных образовательных решений? :D, @linhartr22