Альтернатива LCD-дисплеям UART/I2C?

Я создаю MIDI-синтезатор на Arduino Uno и рассматриваю варианты пользовательского интерфейса.

Я вижу, что на Adafruit и Sparkfun доступны ЖК-панели 16x2, которые взаимодействуют через последовательный интерфейс I2C или UART, но я думаю, что ни одна из них не будет работать в моем приложении:

  • UART работает с тактовой частотой 31250 бод для приема MIDI, и это не поддерживается скоростью передачи данных для этих ЖК-устройств;

  • Я создаю звук, управляя внешним ЦАП (MCP4725) на полной скорости I2C; любая передача на другое устройство будет заметно дрожать на выходе ЦАП;

  • SoftwareSerial позволит обойти проблему синхронизации UART, но я считаю, что это остановит основной цикл во время вывода.

Одним из вариантов может быть запуск моей собственной последовательной программы, тщательно синхронизируя ее с основным циклом, который (я полагаю) надежно работает либо на частоте 14,8 кГц, либо на частоте 22,2 кГц в зависимости от используемого протокола DAC. Я мог бы установить SparkFun SerLCD на медленную скорость передачи данных (2400 бод) и подсчитать количество проходов через основной цикл для определения времени вывода данных.

Другим вариантом было бы использовать дополнительный микроконтроллер-у меня есть лишняя Trinket M0 под рукой-и определить пользовательский синхронный последовательный протокол между двумя микроконтроллерами, а также передать команды вторичного реле на ЖК-дисплей, но это попадает на территорию Руби Голдберга.

Есть какие-нибудь очевидные варианты, которые я упускаю из виду?

, 👍3

Обсуждение

Также подумайте об использовании Arduino Mega, который имеет 4 UARTs., @Michel Keijzers

@LookAlterno: IIRC, это своего рода синхронный, 8-битный или 4-битный параллельный интерфейс., @Edgar Bonet

Существует несколько программных альтернатив на основе прерываний, которые не остановят ваш цикл., @Edgar Bonet

Стандартный ЖК-интерфейс HD44780 определяется как "интерфейс шины процессора 6800" с дополнительным 4-битным режимом. Это не "своего рода синхронный" и не "на самом деле не интерфейс", а жестко определенный в работе. ЖК-дисплеи I2C и UART просто предоставляют сторонний интерфейс (расширитель ввода-вывода, небольшой MCU и т. Д.) Для этого интерфейса шины процессора 6800., @Majenko

UART считается "точка-точка", поэтому, как правило, вы не должны подключать более двух устройств. Обычно последовательные ЖК-дисплеи поставляются с интерфейсом I2C или SPI, или вы можете использовать любой параллельный ЖК-дисплей, соединяющий необходимые 7 контактов (4 данных, 3 управления). Или вы можете использовать регистр сдвига для управления им (в Интернете есть много схем, и я думаю, что все библиотеки поддерживают эти режимы). Во всяком случае, высокоскоростной I2C (3,4 Мбит / с)? Вы уверены, что arduino uno поддерживает это? Вы уже пробовали это сделать? Если, как я думаю, uno ограничен 400 Кбит / с, я предлагаю вам переключиться на SPI-АЦП (немного быстрее)., @frarugi87

@frarugi87 Я имел в виду полноскоростной I2C (400k) для ЦАП, а не высокоскоростной - буду редактировать. В настоящее время я использую только входную сторону UART для MIDI, поэтому я решил, что выходная сторона будет доступна. Параллельный ЖК-дисплей кажется лучшим решением, но у меня не хватает контактов, так что мне, возможно, придется потерять несколько индикаторных светодиодов, если я пойду по этому пути., @Russell Borogove

@RussellBorogove хорошо, тогда, если вы используете I2C только для связи с ЦАП (и никогда не выпускаете его - это означает, что вам придется написать свою библиотеку, так как вам никогда не нужно отправлять стоп-байт и адрес), вы сможете непрерывно кормить ЦАП двумя байтами для каждого образца, которые составляют примерно 19 бит. При 400 Кбит / с частота дискретизации сигнала может составлять не более 21 кГц. Достаточно ли этого? На мой взгляд, лучше переключиться на ЦАП SPI (например, от того же поставщика MCP4921 или варианты с более низким разрешением MCP4911 или 4901), который намного быстрее управляется, @frarugi87

Да, требования к шероховатому басовому синтезатору отличаются от требований к симфонии ;) На самом деле я использовал режим sample-at-a-time 4725, поэтому получал от него ~14 кГц — и передавал его непосредственно через фиксированные нижние частоты на ~4500. В любом случае я, вероятно, переключаюсь на ШИМ-выход., @Russell Borogove


1 ответ


1

Одним из очевидных вариантов было бы получить дисплей с интерфейсом SPI, поскольку он у вас есть. Другой вариант-запустить ЦАП на SPI и использовать I2C для отображения.

Если вы настаиваете на использовании одного из этих ЖК-дисплеев 16x2, для них также есть адаптеры SPI. Пример

,