Управляемая прерываниями библиотека HD44780 для Arduino - PullRequest
4 голосов
/ 01 декабря 2009

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

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

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

Ответы [ 3 ]

3 голосов
/ 03 декабря 2009

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

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

1 голос
/ 17 августа 2010

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

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

0 голосов
/ 15 сентября 2011

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

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

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

...