Модуль под названием I2C LCD1602 является альтернативой другому описанному мной модулю управления LCD с использованием регистра 74HC164. Оба поддерживают LCD с драйвером HD4478.
С другой стороны, преимуществом модуля LCD1602 является освобождение еще большего количества выводов микроконтроллера. Для управления используются только два вывода — для работы по шине I2C. Готовый модуль LCD1602 — тоже плюс. Модуль с 74HC164 намного дешевле, но требует сборки платы и сборки элементов.
В одном интернет-магазине я насчитал три разных варианта этого модуля. Пишу о внешнем виде, потому что электрически он может быть разным (соединения). У меня есть версия, представленная на картинке выше.
Стоит отметить следующие основные особенности:
- Модуль на базе расширителя PCF8574T
- Источник питания 5В
- Светодиодная индикация питания
- Регулировка контрастности на плате с помощью монтажного потенциометра
- Взаимодействие со светодиодными экранами на базе драйвера HD44780
- Перемычки [2..0] для изменения адреса устройства. По умолчанию перемычки разомкнуты, а контакты адреса подтягиваются резисторами 10 кОм к напряжению питания (высокое состояние), что означает (согласно документации) адрес модуля 0x27 на шине I2C.
- Установлены резисторы 4,7к, протягивающие линии I2C шины
- Управление подсветкой ЖК-дисплея. Также есть перемычка для отключения подсветки ЖК-дисплея.
Что касается запуска, то вначале я пошел очень простым путем, используя Arduino Uno и библиотеку LiquidCrystal_V1.2.1, я без проблем запустил чип.
В свою очередь, с моим модулем и ATmega 8 было не так весело. Я проверил несколько разных скриптов в сети, но ни с одним из них дисплей не работал. Подключенный логический анализатор (дешевый клон анализаторов Saleae) пролил свет на проблему.
Оказалось, что после отправки адреса линия SCL переходила в низкое состояние. Проблема была в байте, в котором я отправлял адрес без бита записи.
Для работы самого ЖК-дисплея я использовал решение от Davide Gironi. На одной из страниц его блога «Библиотека AVR Atmega для жк-дисплея на базе HD44780, подключенного через I2C» вы можете найти систему на базе расширителя ATmega 8 и PCF8574 и поддержки, написанной на C. Упомянутая библиотека Fleury использовалась для поддержки шины I2C.
Следовательно, для работы модуля требуется только соответствующая конфигурация. Тем более что схема подключения отличается от описываемого модуля. В частности, отличаются соединения выходных контактов модуля с модулем LCD. Нужно также помнить о тактовой частоте ATmega, равной 1 МГц (в моем случае это была 16 МГц) и ее влиянии на частоту шины I2C (линии SCL).
Проще говоря, из кода, прилагаемого к указанной статьи я взял на свои нужды только код из каталогов lcdpcf8574 и pcf8574. Остальные каталоги, то есть uart и i2chw меня не интересовали, потому что первый из перечисленных мне не был нужен. А второй (поддержка I2C Fleury) я скачал себе уже ранее.
Установка данного модуля, подключенного к Atmega с тактовой частотой 16MHz и управления четырехстрочным дисплеем сводилась к модификации констант в файлах, указанных ниже:
Файл Twimaster.c
- Тактовая частота ATmega 16 МГц
#define F_CPU 16000000UL - Тактовая частота I2C 100 кГц
#define SCL_CLOCK 100000L
Файл Lcdpcf8574.h
- Количество строк дисплея (в моем случае 4, по умолчанию было 2)
#define LCD_LINES 4 - Адреса первых символов для 3-й и 4-й строк (они оказались отличными от стандартных — 0x14 и 0x54 соответственно)
#define LCD_START_LINE3 0x10
#define LCD_START_LINE4 0x50 - Конфигурация контактов расширителя (совсем другая, чем по умолчанию)
#define LCD_DATA0_PIN 4
#define LCD_DATA1_PIN 5
#define LCD_DATA2_PIN 6
#define LCD_DATA3_PIN 7
#define LCD_RS_PIN 0
#define LCD_RW_PIN 1
#define LCD_E_PIN 2
#define LCD_E_PIN 2 #define LCD_
Файл pcf8574.h
- Изменение базового адреса (по умолчанию можно было обрабатывать до 8 таких модулей)
#define PCF8574_ADDRBASE (0x27) - Ограничение максимального количества модулей одним
#define PCF8574_MAXDEVICES 1 - Измените путь к коду обработчика I2C
#define PCF8574_I2CFLEURYPATH «../i2c/i2cmaster.h»
Ниже приведена ссылка на полный код:
Скачать файл проекта (23,0 KiB, скачано: 369)