Arduino Mega Pins для SoftwareSerial (по сравнению с AltSoftSerial)

В настоящее время я рассматриваю возможность использования Arduino Mega для создания устройства приема MIDI, которое затем будет передавать данные по USB, но у меня возникли проблемы/неопределенности с конструкцией приемной стороны Arduino.

Я надеюсь, что в этой сборке будет 16 входов MIDI (как 5-контактные DIN), без выходов, кроме USB. У Mega 4 контакта Rx, что все еще оставляет мне 12 для создания в программном обеспечении. Из того, что я читал, похоже, что SoftwareSerial не будет поддерживать одновременное чтение с разных входов, в то время как AlftSofSerial поддерживает. Однако также похоже (по крайней мере, из того, что я собрал), что AltSoftSerial не поддерживается на таком количестве контактов, которое мне нужно для работы.

В моей настройке не все 16 MIDI-устройств будут отправлять данные в Arduino одновременно, а только 2–4; однако они будут работать одновременно (например, нота клавиатуры вместе с фейдером громкости), поэтому я не думаю, что SoftwareSerial будет хорошо работать для того, что мне нужно.

Можно ли разобраться с тем, что мне нужно, с помощью SoftwareSerial/AltSoftSerial и физических UART? Если есть какая-то необходимая информация, которая, кажется, отсутствует или я что-то не понимаю, пожалуйста, дайте мне знать. Спасибо!

, 👍1

Обсуждение

Похоже, altsoftserial поддерживает только один экземпляр. Вам нужен только RX для MIDI? Какая скорость передачи данных?, @Gerben

Для такого специализированного приложения вы, вероятно, не можете полагаться на библиотеку и должны будете программировать оборудование напрямую., @CL.

@Gerben Мне он нужен только для MIDI. Я использовал 9600 в своих аппаратных «тестах» с одним устройством, и, похоже, всё работало нормально., @som3oneMw

@CL Мне нужно будет узнать, как это сделать. Есть ли полезные ссылки, которые подскажут мне верное направление?, @som3oneMw

[AVR304](http://www.microchip.com//wwwAppNotes/AppNotes.aspx?appnote=ru591260) может быть хорошим началом. Но вам потребуются знания и опыт, чтобы написать собственную библиотеку AltSoftSerial и улучшить её., @CL.


1 ответ


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

0

Из того, что я прочитал, следует, что SoftwareSerial не будет поддерживать одновременное чтение с разных входов

Верно. Вы можете listen() только на одном экземпляре за раз.

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

Так что лучшее, на что вы можете надеяться, — это 4 аппаратных UART и один AltSoftSerial на 5 портов.

Я бы предложил рассмотреть возможность использования нескольких плат Arduino Mega с 4 портами на каждой (4 платы дадут в общей сложности 16 портов) и заставить их взаимодействовать друг с другом через какой-либо другой протокол (например, SPI или I2C).

,

Поначалу я рассматривал подобную схему, но отказался от неё в попытке сэкономить. Похоже, это и есть выход. Не знаете ли вы случайно, есть ли другое устройство с большим количеством UART? Я рассматривал последнюю версию Teensy, но там их всего 6., @som3oneMw