Управляемая прерываниями библиотека HD44780 для Arduino

StackOverflow https://stackoverflow.com/questions/1822571

  •  10-07-2019
  •  | 
  •  

Вопрос

У меня есть жидкокристаллический экран HD44780, и я использую библиотеку LiquidCrystal, поставляемую с пакетом разработки Arduino. Однако это не надежно. Я заметил некоторые проблемы с ним, и вместо того, чтобы быть управляемым прерыванием, он просто спит, пока разработчик думает, что чип должен взять на себя выполнение операции.

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

Кто-нибудь знает библиотеку, которая на самом деле это делает, и требуется ли для подключения все 8 бит или я могу оставить ее на 4 выводах?

Это было полезно?

Решение

Я не думаю, что вам нужно прерывание для этого. Просматривая LiquidCrystal.cpp в дистрибутиве Arduino вам просто нужно изменить код LiquidCrystal :: write4bits , LiquidCrystal :: write8bits и LiquidCrystal :: pulseEnable . Первые два метода должны начинаться с мониторинга занятой линии (BD7) перед записью данных, а последний будет изменен для удаления паузы в 100us.

Я думаю, что причина, по которой это не было сделано в коде по умолчанию, заключается в том, что многие пользователи этих ЖК-дисплеев просто привязывают R / W к земле, поэтому дисплей всегда находится в режиме записи, что делает невозможным считывание сигнала BUSY. Однако это передается в библиотеку путем установки _rw_pin в -1, поэтому код импульса и записи может условно использовать вывод r / w в качестве способа обнаружения занятости в качестве оптимизации скорости.

Другие советы

Можно использовать 8 бит на трех контактах; вам просто нужен сдвиговый регистр. Я использую HEF4094BP от mouser.com (доставка будет стоить больше, чем фактический чип)

схема подключения и изменения кода для сменного регистра находятся здесь: http: // www. arduino.cc/playground/Code/LCD3wires

Некоторое время назад я изменил библиотеку LiquidCrystal для поддержки флага занятости. Обратите внимание, что реальная операция, управляемая прерываниями, невозможна возможна - для каждого чтения вам нужно дважды переключать строку E nable. Поэтому вам нужно будет опросить флаг занятости.

Затем я сделал несколько тестов и обнаружил, что опрос флага занятости медленнее , чем ожидание большинства команд. (Исключение составляют команды 'clear' и 'home'). Причина заключалась в том, что переключение между режимом чтения и режимом записи требует дополнительных шагов, таких как 8 дополнительных вызовов digitaWrite и 8 дополнительных вызовов pinMode . Даже с 16 МГц Arduinos это медленнее, чем просто ожидание 100 мкс.

После этого я написал библиотеку, которая управляет регистрами выводов напрямую и в массовом режиме - все 8 выводов с одним доступом к регистру. После этого я был на стадионе, чтобы получить какую-то выгоду от голосования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top