Как правильно получить MIDI с Arduino, с 6n138?

serial arduino-mega midi opto-isolator

ОБНОВЛЕНИЕ: по состоянию на 01.07.2019 я все еще не могу получать MIDI.

Здесь заходит так далеко: я пытаюсь следовать этой схеме из instructables, используя 6N138. Чтобы было проще, я скопирую его схемы.

===================================

Я использую Arduino Mega. Я пытался найти конкретную тему по этому поводу и не могу найти.

На самом деле целью является отправка и получение MIDI, а затем замена всего Arduino Mega на ESP8266 (вероятно, ESP-01 или Wemos D1), но я боюсь, что это слишком специфично.

Вот код на данный момент в PasteBin

Вот моя работа на данный момент. 6N138

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

, 👍2

Обсуждение

Что должна делать Мега? ESP8266 может легко справиться со всем этим самостоятельно., @tttapa

@tttapa Я использую esp8266 только как модуль Wi-Fi, в остальном мега, @Rinaldo Jonathan

Дайте определение «остальные»?, @tttapa

@tttapa mega получит питание, получит миди-соединение, отправит миди обратно, и все, что делает esp8266, предназначено только для замены экрана Wi-Fi., @Rinaldo Jonathan

ESP8266 может легко обрабатывать MIDI-соединения, а также получать питание. Использование дополнительного микроконтроллера только усложняет задачу и, на мой взгляд, является пустой тратой времени и ресурсов., @tttapa

@tttapa да, но пока невозможно изменить мою дипломную документацию. также, поскольку у esp8266 нет другого серийного номера, я не могу отлаживать с помощью монитора последовательного порта или подобного и, вероятно, работать вслепую. именно поэтому я считаю мега в первую очередь. или у вас есть другое решение?, @Rinaldo Jonathan

ESP8266 имеет два последовательных порта. Один из них может только передавать данные. Это не проблема для отладки. Кроме того, вы можете изменить контакты первого последовательного порта., @tttapa

@tttapa, но я получил только модуль ESP01 ... черт возьми, я должен был подумать об этом раньше. теперь я сильно застрял :с, @Rinaldo Jonathan

Тогда вам, вероятно, следует использовать Mega. Если бы вы начали с нуля, я бы порекомендовал WeMos D1 mini или аналогичный, они стоят 3,50 доллара США из Китая, у них есть все используемые контакты ввода-вывода и интерфейс USB, так что вы можете просто подключить его к компьютеру напрямую. запрограммируйте его, как обычный Arduino. Если вы сможете получить его вовремя, это будет хорошим решением, но вы можете начать использовать Mega прямо сейчас. В любом случае вам придется запрограммировать ESP8266, вы не можете использовать AT-команды для RTP-MIDI, насколько мне известно., @tttapa

@tttapa на данный момент у меня есть Wemos D1 Uno, что-то вроде того же. Но проблема в том, что я не могу изменить какие-либо характеристики, они должны включать mega и esp. У меня есть esp с прошивкой AT, которая совместима с [этой прошивкой](https://github.com/bportaluri/WiFiEsp/). Хз, что делать дальше..., @Rinaldo Jonathan

Пожалуйста, не редактируйте вопрос таким образом, чтобы сделать существующие ответы недействительными или неполными. "Как создать 220 Ом из нескольких 1 кОм?" и «Могу ли я заменить или исключить 1N914 в MIDI-входе?» будут отдельные вопросы. (подсказка: 1/1/1/1/(1+1) параллельно; и см. [MIDI-разъемы/диоды](https://arduinoprosto.ru/q/35145/6802)) И диод перевернут ., @CL.


4 ответа


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

2

Как подключить 6N138 к Arduino:

Схемы:

В основном приведенные выше схемы и установка уже в порядке, но вместо 1k я использовал 10k на 6N138 PIN 7 для GND. VCC до 470 Ом на контакте 6, а также выход RX, соединенные последовательно.


На всякий случай, если вы хотите использовать 6N137:

Схемы:

  • Контакт 5 разъема MIDI DIN подключается к контакту 2 6N137
  • Контакт 4 разъема MIDI DIN подключается через резистор 330 Ом к контакту 3 6N137 (поэтому контакты 6N137 и резистор соединены последовательно)
  • У вас также должен быть защитный диод обратного соединения между контактами 2 и 3 6N137, но я предпочитаю опасную жизнь и полагаюсь на диод внутри 6N137
  • Контакты 8 и 7 подключены к VCC.
  • Контакт 6 подключен к RX.
  • Контакт 5 подключен к GND.
  • Подтягивающий резистор 4,7 кОм между контактами 8 и 6 (VCC и сигнальный выход)

Адаптировано из этой записи в блоге.


Как это проверить:

  1. Я использовал Arduino Mega с этим кодом.
  2. Затем я подключил Arduino Mega к Hairless MIDI, а затем к loopMIDI.
  3. Затем я прочитал вывод MIDI с помощью MIDIOX.


Я могу обновить его до H11L1 / PC900 позже, если у меня будет время. Кроме того, позже я опубликую эту тему на индонезийском в своем блоге.

,

3

Большинство из них начинаются с миди-сайта по адресу площадка.arduino.cc. Но в Интернете существует множество веб-сайтов. Важно понимать, что MIDI-интерфейс использует текущий цикл для отправки и получения данных. В то время как Arduino обычно использует уровни напряжения для связи. Таким образом, необходимо создать или купить электронный интерфейс для преобразования этих двух типов сигналов. Некоторые интерфейсы просты и ограничены. Другие сложные и надежные.

,

Это много прочитано. Я постараюсь прочитать их один за другим. Спасибо!, @Rinaldo Jonathan

Используйте википедию в качестве справочника (не читайте все, только то, что вам нужно). Сайт player.arduino.cc, вероятно, ваш лучший источник. Простой дизайн не так прост, а сложный не так уж и сложен. Я больше искал примеры простых (прямые соединения) и лучших (оптически изолированные) способов преобразования уровней напряжения в токовые петли., @st2000

@RinaldoJonathan, твой вопрос сильно изменился. На некоторых макетных платах питание не подключается с одного конца на другой. В таком случае вам необходимо соединить перемычкой шины питания там, где они не соединяются. Или переместите провода питания в сторону, где вы питаете свой чип., @st2000

другая линия электропередач вообще не используется., @Rinaldo Jonathan

@RinaldoJonathan, я не это имел в виду. На некоторых хлебных платах, таких как ваша, есть 4 линии шины питания. По два с каждой стороны. Сломан посередине. Я вижу, на вашей хлебной доске непрерывные синие и красные линии. Так что я думаю, что ваша макетная плата имеет только 2 линии шины питания. Но не мешало бы переместить место, где вы подаете питание, на конец платы, ближайший к тому, где вы подаете питание, просто для проверки. Посмотрите, как нарисованы линии на [этой макетной доске](https://potentiallabs.com/cart/image/cache/catalog/New%20Components/breadboard-600x315.jpg)., @st2000


3

Схем MIDI много, и большинство из них довольно простые, в основном это оптрон (6N137 или 6N138, хотя мне больше повезло с H11L1), несколько резисторов и в основном это все. Я также добавил ферритовые кольца для защиты от электромагнитных помех, но это не обязательно.

Чтобы проверить свою схему, используйте большое количество данных (например, изменение высоты тона/послекасание) и одновременно играйте ноты. Если вы слышите застрявшие ноты (это означает, что команда MIDI Note Off пропущена), вы знаете, что схема не полностью защищена.

Что касается библиотек: библиотека FortySeven Effects очень проста в использовании. Я использовал его в начале, прежде чем перешел на STM32 и написал свой собственный, но это хорошая отправная точка.

Схемы, на которых я основывал свою схему, можно найти по адресу Оптопара H11L1.

Лучше всего прочитать официальную документацию по MIDI, см. страницу MIDI 1.0. Уточнение, чем искать

Download the Complete MIDI 1.0 Detailed Specification Document (1996) 
(Please Register! It's Free!).
,

У вас есть примеры схем? Это бы очень помогло. Спасибо!, @Rinaldo Jonathan

Обратите внимание, что в 2014 году было добавлено дополнение: [Обновление электрических спецификаций (CA-033)](https://www.midi.org/downloads?task=callelement&format=raw&item_id=100&element=f85c494b-2b32-4109-b8c1-083cca2b7db6&method = скачать) Он добавляет спецификацию для систем 3,3 В., @tttapa

@tttapa Спасибо за это замечание (не знал об этом дополнении), @Michel Keijzers

только что понял, что никто не продает 6N137/6N138, H11L1 или все остальное, что я нашел на arduino.cc, что можно использовать в качестве альтернативы., @Rinaldo Jonathan

@RinaldoJonathan Я покупаю их на AliExpress, никаких проблем., @Michel Keijzers

@RinaldoJonathan 6N138: https://www.aliexpress.com/item/A6N138-6N138-DIP8/32843461925.html?spm=2114.search0204.3.1.3f891715EwEFhK&ws_ab_test=searchweb0_0,searchweb201602_5_10 065_10068_10130_10547_10059_10884_10887_10696_100031_10190_10084_10083_10103_10618_10307_10820_10301_10821_10303, searchweb201603 _60,ppcSwitch_5_ppcChannel&algo_expid=59100523-2f5e-4065- af82-6c1e5b4c5d08-0&algo_pvid=59100523-2f5e-4065-af82-6c1e5b4c5d08&priceBeautifyAB=0, @Michel Keijzers

@ Ринальдо Джонатан 6N137: https://www.aliexpress.com/item/10PCS-6N137-DIP8-6N137-DIP-DIP-8-new-and-original-IC/32911564265.html?spm=2114.search0204.3.1. 7ea619e7LGtwnu&ws_ab_test=searchweb0_0,searchweb201602_5_10065_10068_10130_10547_10059_10884_10887_10696_100031_10190_10084_10083_10103_1 0618_10 307_10820_10301_10821_10303,searchweb201603_60,ppcSwitch_5_ppcChannel&algo_expid=0090b46e-5df5-4ac3-8601-67cdbb571f94-0&algo_pvid=0090b46e-5 df5-4ac3-8601-67cdbb 571f94&priceBeautifyAB=0, @Michel Keijzers

@RinaldoJonathan H11L1M: https://www.aliexpress.com/item/10pcs-lot-H11L1-DIP-6-H11L1M-Schmitt-trigger-output-at-a-high-speed-In-Stock/32892398601.html? spm=2114.search0204.3.1.36257b29TrA9ZE&ws_ab_test=searchweb0_0,searchweb201602_5_10065_10068_10130_10547_10059_10884_10887_10696_100031_10190_ 10084_10083_10103_10618_10307_10820_10301_10821_10303,searchweb201603_60,ppcSwitch_5_ppcChannel&algo_expid=2f5ebd94-33f1-4a10-9c0c-ebcf204e1f14- 0&algo_pvid=2f5ebd94-33f1-4a10-9c0c-ebcf204e1f14&priceBeautifyAB=0, @Michel Keijzers

@Michel Keijzers, братан, я могу купить их в tokopedia, и они прибудут через 3 дня. но никто не продает их на месте., @Rinaldo Jonathan

ладно как-то получил 6н137, но опять зациклился на схемах., @Rinaldo Jonathan

Это для 6n138 https://electronics.stackexchange.com/q/165255/140343, @Michel Keijzers

Например, для 6n137 https://goo.gl/images/K71nAo, @Michel Keijzers

@MichelKeijzers Я купил H11L1. но он все еще не работает :( Я купил его, потому что вижу, что вы тоже использовали его., @Rinaldo Jonathan

Я все еще застрял с получением MIDI. каким-то образом Arduino считывал входной сигнал с высоким уровнем, когда ничего не было подключено. Но когда подключен MIDI-кабель, ардуино его не читает. https://electronics.stackexchange.com/questions/400080/how-do-i-use-h11l1-correctly-to-receive-midi, @Rinaldo Jonathan

У меня были проблемы с 6Н137, но не с H11L1. Убедитесь, что вы используете правильные значения резисторов (это важно для того, что я испытал). Также мне очень помогло приобретение логического анализатора (около 5$), с его помощью можно увидеть точные тайминги. Если вам нужно увидеть, достаточно ли быстро повышается/понижается напряжение, вам нужен «настоящий» осциллограф, но H11L1 должен быть достаточно быстрым., @Michel Keijzers

@MichelKeijzers не могли бы проверить мой вопрос на Electronics Stackexchange, чтобы увидеть, что на самом деле не так? Я очень застрял..., @Rinaldo Jonathan


0

Я использую эту библиотеку с Arduino Uno (где можно изменить загрузчик): https://github.com/TheKikGen/USBMidiKliK И после того, как устройство будет распознано Windows как устройство Midi, вам не потребуется никакая другая программа для взаимодействия с ним.

Вы можете использовать предпочтительную программу-секвенсор, и ваш интерфейс Arduino распознается как интерфейс midi.

Скетч очень простой:

    /**********************************************************************************
  
  KIKGEN MIDI USB 
  A MIDI USB RELIABLE INTERFACE
  USB-MIDI simple converter Sketch for Arduino
       USB                           ATMEGA8U2                    ATMEGA 328P
  --------------         ------------------------------         ---------------
  IN Endpoint  o<--------o USBOUT | usbMidiKliK |  RX o<--------o (TX) MIDI IN
  OUT Endpoint o-------->o USBIN  |  firmware   |  TX o-------->o (RX) MIDI OUT   
  
  The RX/TX on the Arduino must no be crossed, as the ATMEGA8U2 is directly connected
  to the RX and TX pins.  When PIN0 (RX) and PIN1 (TX) are configured as INPUT, we
  can talk directly with the ATMEGA8U2 managing the USB, making the Arduino transparent.
  
************************************************************************************/

void setup() {

  // Сделать Arduino прозрачным для последовательной связи с USB и с USB

  pinMode(0,INPUT); // Arduino RX — ATMEGA8U2 TX

  pinMode(1,INPUT); // Arduino TX — ATMEGA8U2 RX


}

void loop() {
  
}

Аппаратная схема такова:

,