Альтернатива 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 под рукой-и определить пользовательский синхронный последовательный протокол между двумя микроконтроллерами, а также передать команды вторичного реле на ЖК-дисплей, но это попадает на территорию Руби Голдберга.
Есть какие-нибудь очевидные варианты, которые я упускаю из виду?
1 ответ
Одним из очевидных вариантов было бы получить дисплей с интерфейсом SPI, поскольку он у вас есть. Другой вариант-запустить ЦАП на SPI и использовать I2C для отображения.
Если вы настаиваете на использовании одного из этих ЖК-дисплеев 16x2, для них также есть адаптеры SPI. Пример
- ЖК-дисплей I2C отображает странные символы
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Последовательная связь между несколькими устройствами (или ардуино)
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- 16/2 arduino I2C ЖК-дисплей не загорается?
- Отправка буквы за буквой на ЖК-дисплей, однако дисплей знает полную строку?
- Плата управления реле I2C от двух Arduino Uno
- Датчики I2C не работают при подключении к LCD дисплею 20X04
Также подумайте об использовании 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