Главная » Микроконтроллеры » Модуль I2C 1602 для LCD с драйвером HD4478. Совместная работа с микроконтроллером Atmega8

Модуль I2C 1602 для LCD с драйвером HD4478. Совместная работа с микроконтроллером Atmega8

Модуль под названием 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, я без проблем запустил чип.

Модуль 1602 I2C запущен с ArduinoВ свою очередь, с моим модулем и 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)

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*