ATtiny85 MIDI IN с использованием SoftwareSerial – возможно ли это?

Я пытаюсь прочитать MIDI-ноты с помощью ATtiny85 через SoftwareSerial; пока что у меня вообще ничего не получилось.

  • ATtiny использует внутреннюю тактовую частоту, 8 МГц, 5 В.
  • MIDI-клавиатура отправляет сообщения включения/выключения чистых нот (проверено с помощью MIDI-монитора).
  • Я попробовал несколько тестовых программ, в частности программу Ника Гаммона, как описано здесь.
  • Я следовал схемам Ника при создании соединителя и могу подтвердить, что его программа работает с Arduino, но не с ATtiny.
  • Я откалибровал Tiny с помощью OSCCAL, но все равно безуспешно.
  • Насколько я могу судить, midiSerial.available() всегда равен 0 во всех программах, которые я пробовал.
  • SoftwareSerial отлично подходит для вывода MIDI.

Это все, что у меня есть. Буду признателен за любые советы, особенно если кто-нибудь еще сможет попробовать код Ника и проверить, работает ли он.

ИЗМЕНИТЬ

В моей локальной версии SoftwareSerial возникла проблема. Я закомментировал код, чтобы можно было использовать прерывания смены контактов в моей программе вывода MIDI, но эти прерывания необходимы для ввода MIDI. Как только я раскомментировал код, все программы, которые я тестировал, заработали, так что действительно можно получать MIDI с помощью ATtiny.

Тем не менее, я попробовал четыре клавиатуры в качестве входов, и пока работала только одна — Korg 01/W proX. То же самое происходит, когда я загружаю MIDI-код непосредственно в Arduino, поэтому, основываясь на ответах ниже, я попробую другой оптрон и опубликую здесь свои результаты, чтобы улучшить ответ.

Вот схемы, о которых я говорил:

MIDI-соединения

, 👍1

Обсуждение

Схема неправильная: контакт 2 на приемнике не должен быть подключен к земле, а оптопара ненадежна на скоростях MIDI. См. [Оптоизолятор 4N35 для входа MIDI не работает?](https://electronics.stackexchange.com/q/314150), @CL.

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

Ваша ссылка теперь указывает на лучшую схему…, @CL.

@LookAlterno, двойного перехода нет — прокрутите вниз до «Пример кода для ATtiny85»., @jose

Вы можете попробовать [NeoSWSerial](https://github.com/SlashDevin/NeoSWSerial). У него есть опция конфигурации, позволяющая избежать проблемы с вектором PCI, и теперь он поддерживает скорость передачи данных MIDI. Это **НАМНОГО** эффективнее, чем «SoftwareSerial»., @slash-dev

Я бы также сказал, что это оптоизолятор. Я получаю хорошие результаты с 6Н138. У меня также были хорошие результаты с 6Н137, но, судя по сообщениям других людей, кажется, что с некоторыми устройствами он может выйти из строя., @travelboy

@CL исправил контакт заземления на схеме., @Nick Gammon


1 ответ


1

Я проводил тесты на обычном Arduino с программным серийным номером и пропустил немало сообщений, поэтому я бы посоветовал вместо этого использовать аппаратный серийный номер.

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

Кроме того, я попробовал несколько оптопар, которые не сработали (например, 6N137). Сейчас я использую оптопары H11L1 (они белые по сравнению с большинством черных микросхем) и работают отлично.

Вы уже включили/выключили чистую заметку... вы уверены, что она не отправляет активные сообщения?

Ниже схема, которую я использую. Не имеет значения, используется ли STM32 или Arduino. На самом деле я не проверял, имеет ли H11L1 напряжение 3,3 В или 5 В, но, похоже, они работают с обоими.

schematic

,

Да, других сообщений вообще нет., @jose

Судя по вашим комментариям и комментариям CL, я не могу полагаться на 435, поэтому попробую H11L1., @jose

Возможно, следует использовать резисторы других номиналов. Если хотите, я могу проверить, когда буду дома этим вечером., @Michel Keijzers

Буду очень признателен, если сможете :), @jose

Добавил свою схему (надеюсь без ошибок), @Michel Keijzers

Выглядит великолепно, я закажу детали и сообщу как можно скорее!, @jose

Удачи... кстати, раньше я пробовал это с Arduino Uno/Mega (5 В), а сегодня с STM32 (3,3 В). ... оба работают. Кстати, между H11L1 и H11L1M нет никакой разницы, кроме производителя (некоторые белые, некоторые черные)., @Michel Keijzers

Номера контактов и некоторые соединения неверны., @CL.

@CL Я проверил это, и единственная ошибка, которую я смог найти, - это соединение с проводом слева от R2. Мне действительно интересно, какие номера контактов/соединения неверны, потому что это соответствует схеме, которую я построил (на макете)., @Michel Keijzers

Разъем DIN имеет другую нумерацию контактов. R4 должен быть подтягивающим выходным сигналом. (И эта схема была бы гораздо более читабельной, если бы вы не пытались соединить все сигналы VCC и GND вместе; см., например, [эту страницу](https://www.mikrocontroller.net/articles/MIDI).), @CL.

@CL Спасибо за комментарии ... правда, я сам пронумеровал контакты DIN (я буду следовать исходной нумерации, но всегда путаюсь в том, на какую сторону смотреть). И хороший совет по поводу VCC/GND... Я действительно использовал подтягивание так, как указано на схеме, и оно работает, но я проверю официальный вариант и соответствующим образом изменю свою схему., @Michel Keijzers