2009-11-30 8 views
4

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

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

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

ответ

3

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

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

+0

Я попробую это в эти выходные. – Malfist

1

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

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

0

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

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

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