Управление яркостью подсветки дисплея 1602

Arduino и дисплей LCD1602

Описание

Классический LCD дисплей, раньше такие стояли в кассовых аппаратах и офисной технике.

  • Бывают разного размера, самый популярный – 1602 (16 столбцов 2 строки), есть ещё 2004, 0802 и другие. В наборе идёт 1602.
  • Снабжён отключаемой светодиодной подсветкой. Существует несколько вариантов, например синий фон белые буквы, зелёный фон чёрные буквы, чёрный фон белые буквы и проч. В наборе идёт с зелёным фоном и чёрными буквами.
  • Сам по себе требует для подключения 6 цифровых пинов, но китайцы выпускают переходник на шину I2C на базе PCF8574, что сильно упрощает подключение и экономит пины. В наборе идёт дисплей с припаянным переходником.
  • На переходнике также распаян потенциометр настройки контрастности (синий параллелепипед с крутилкой под крестовую отвёртку). В зависимости от напряжения питания нужно вручную подстроить контрастность. Например при питании платы от USB на пин 5V приходит

4.7V, а при внешнем питании от адаптера – 5.0V. Контрастность символов на дисплее будет разной!

  • Переходник может иметь разный адрес для указания в программе: 0x27 или 0x3F , об этом ниже.
  • Подключение

    Дисплей подключается по шине I2C, выведенной на пины:

    • Arduino: SDA – A4, SCL – A5
    • Wemos: SDA – D2, SCL – D1
    • Питание: 5V в обоих случаях

    Библиотеки

    Для этого дисплея существует несколько библиотек, я рекомендую LiquidCrystal_I2C от Frank de Brabander. Библиотека идёт в архиве к набору, а также её можно скачать через менеджер библиотек по названию LiquidCrystal_I2C и имени автора. Репозиторий на GitHub.

    Пример вывода

    При первой работе с дисплеем нужно настроить контраст и определиться с адресом:

    • Прошить пример “Демо”
    • Если дисплей показывает чёрные прямоугольники или пустой экран – крутим контраст
    • Если кроме чёрных прямоугольников и пустого экрана ничего не видно – меняем адрес в программе. Их всего два: 0x27 и 0x3F
    • Снова крутим контраст, должно заработать
    • Если не работает – проверяем подключение и повторяем сначала
    • Примечание: в наборе должны идти дисплеи с адресом 0x27 , но может зависеть от партии!

    Символы дисплея

    В памяти дисплея содержится 255 символов, это английские буквы, стандартные символы и китайские буквы. Стандартные символы, такие как !@#$%&()* и так далее выводятся через print() , остальные можно вывести по их коду при помощи write() :

    • Стрелка вправо – 126
    • Стрелка влево – 127
    • Символ градуса – 223
    • Прямоугольник – 255

    Свои символы

    Библиотека поддерживает создание “своих” дополнительных символов размером 5х7 точек, можно воспользоваться онлайн-генератором кодов символов – ссылка. Для компактности рекомендую переключить его в HEX. Вот так будет выглядеть “символ” крестик: byte myX[] = <0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00>;

    Дисплей имеет 8 ячеек под сторонние символы, добавляются они при помощи createChar(номер, массив) , где номер – от 0 до 7, а массив – имя массива с данными, которое мы создали для символа. Выводятся символы при помощи write(номер) .

    Важный момент: после вызова createChar сбрасывается позиция вывода текста, нужно обязательно вызвать setCursor!

    Важная информация по дисплеям

    Данная информация относится ко всем дисплеям.

    • Вывод данных на дисплей занимает время, поэтому выводить нужно либо по таймеру, либо по факту изменения данных.
    • Очищать дисплей полностью не всегда целесообразно, иногда достаточно вывести новые значения поверх старых, либо частично очистить “пробелами”.

    Источник

    Форум arduino.ua

    #1 2019-01-18 17:34:30

    Управление подсветкой дисплея 1602 I2C

    Добрый день. Прошу пнуть в нужном направлении. Есть связка ардуино нано, LCD 1602 на шине I2C, DHT22, часы реального времени.

    Подсветка включается посредством команды lcd.backlight(); Отключить ее можно командой lcd.noBacklight();
    Основную задумку по коду реализовал, кроме вкл. и выкл. подсветки кнопкой. Я перечитал много тем, примеров, но так и не нашел как реализовать это. Если не сложно подскажите пожалуйста. Буду очень благодарен.

    #2 2019-01-18 19:53:35

    Re: Управление подсветкой дисплея 1602 I2C

    только аппаратно — купите дисплей и модуль i2с отдельно.
    при установке модуля ноги под подсветку не подключаете (я их просто откусил) , паяете провода под кнопку или шим (для регулировки яркости подсветки).

    #3 2019-01-19 00:39:05

    Re: Управление подсветкой дисплея 1602 I2C

    Я думал про такой вариант, но не хотелось его применять.
    А если библиотеку поковырять? Может можно там чего подправить?

    Остання редакція Marshall Kross (2019-01-19 00:39:42)

    #4 2019-01-19 10:33:08

    Re: Управление подсветкой дисплея 1602 I2C

    ну попробуйте, вам же никто не запрещает и не мешает.

    #5 2019-01-19 11:33:16

    Re: Управление подсветкой дисплея 1602 I2C

    Подсветка включается посредством команды lcd.backlight(); Отключить ее можно командой lcd.noBacklight();
    Основную задумку по коду реализовал, кроме вкл. и выкл. подсветки кнопкой. Я перечитал много тем, примеров, но так и не нашел как реализовать это. Если не сложно подскажите пожалуйста. Буду очень благодарен.

    а в чем проблема если кнопкой (задействовать один вход контроллера) запускать команды .

    #6 2019-01-22 15:30:14

    Re: Управление подсветкой дисплея 1602 I2C

    только аппаратно — купите дисплей и модуль i2с отдельно.
    при установке модуля ноги под подсветку не подключаете (я их просто откусил) , паяете провода под кнопку или шим (для регулировки яркости подсветки).

    Увы но это не так. Вопрос вполне решается программно. Просто нужно было некоторое время для понятия сути.

    #7 2019-01-22 15:35:52

    Re: Управление подсветкой дисплея 1602 I2C

    Подсветка включается посредством команды lcd.backlight(); Отключить ее можно командой lcd.noBacklight();
    Основную задумку по коду реализовал, кроме вкл. и выкл. подсветки кнопкой. Я перечитал много тем, примеров, но так и не нашел как реализовать это. Если не сложно подскажите пожалуйста. Буду очень благодарен.

    а в чем проблема если кнопкой (задействовать один вход контроллера) запускать команды .

    Проблема была в непонимании сути и как следствие реализации желаемого. В итоге после курения вики получился такой код:

    Источник

    Arduino.ru

    Есть ли возможность менять яркость LCD1602 через модуль i2c?

    В стандартной LiquidCrystal_I2C функция setBacklight работает только на вкл/выкл и не передает ШИМ. Значит не может?
    На i2c модуле с краю есть перемычка LED, можно на нее ШИМ с дополнительного пина подавать?

    Есть несколько схем i2c-LCD модуля. Которые получал я с али собраны по схеме как здесь http://robotchip.ru/obzor-interfeysnogo-modulya-i2c/ .По ней видно, что прямо с пина подать нельзя. Дисплей кушает 80мА. Нога столько не выдаст. Надо городить транзистор.

    Почему 80? Разве диод (тот что на схеме внизу, это же он?) подклчюеный через 1кОм не будет потребялть меньше ток чем обычный диод через 220 Ом?

    Почему 80? Разве диод (тот что на схеме внизу, это же он?) подклчюеный через 1кОм не будет потребялть меньше ток чем обычный диод через 220 Ом?

    Это тот диод что на плате контроллера установлен. Подсветка 1602 не имеет токоограничивающего резистора. Можно подать ШИМ с пина Ардуины через резистор в 220 Ом на пин 1 перемычки LED, но тогда не получится добиться максиммальной яркости.

    «не имеет токоограничивающего резистора»
    это получается другйо тип диода? более мощный?

    Стандарта на мощность подсветки в 1602 нет. Каждый ставит во что горазд. Вот для этого, например, — https://www.mouser.com/datasheet/2/244/LCM-S01602DSF_D-Y-1176264.pdf

    Рабочий ток подсветки 220мА. Напрямую от ардуины засветить (через резистор) можно, но яркость будет далека от максимальной.

    Там не один диод. Это рисуют один. А на самом деле несколько. И резистор стоит, но 50 Ом. Этого слишком мало для ноги. Было дело, менял его на 220 Ом, но яркость становилась совсем никакой.

    Не сильно понял в чем сложность вопроса.
    Транзистор уже стоит на плате. Токоограничительный резистор к базе подключен. Отрезаем резистор от питания и подаем через него ШИМ.

    Можно базу отрезать от PCF, а можно просто включить подсветку по I2C. Но тут надо на схему смотреть.

    на плате экрана не вижу транзисторов
    наверное все под крышками

    модуля I2C. Какой он? Его схема?

    У меня нет никакой о нем информации, он был на экране, экран шел в комплекте. Похож на тот, что по ссылке. С «К» идет на транзистор j3y одинокую ногу, рядом 4.7 ком с 1-ой ноги, а потом не понятно как вся связано, черное же

    Ну если похож, то варианты

    1) пин ардуино подключить через диод шоттки на базу транзистора (катод на пин ардуино, анод на базу).
    В сетап() включить подсветку по I2C, а дальше рулить ШИМ.

    2) R7 отпаять и подключить пин ардуино через резистор 1-2 кОм на базу транзистора.
    В сетап() включить подсветку по I2C, а дальше рулить ШИМ.

    3) R7 отпаять, отрезать базу от ноги 7 PCF8574 и подключить пин ардуино через резистор 1-10 кОм на базу транзистора.

    Источник

    Взаимодействие LCD 1602 с Ардуино. Описание, распиновка, подключение

    Хотите, чтобы в ваших проектах Arduino отображались пользовательские сообщения или показания датчиков? Тогда для этих целей можно рекомендовать дисплей LCD 1602. Подобные дисплеи чрезвычайно распространены и представляют собой быстрый способ добавить читаемый интерфейс в какой-либо проект.

    Эта статья охватит все, что необходимо знать, чтобы начать работу с LCD 1602 . Да и не только с 1602 (16×2), но и любыми другими символьными ЖК-дисплеями (например, 16×4, 16×1, 20×4 и т. д.), основанными на контроллере параллельного интерфейса HD44780 от Hitachi.

    В LCD дисплеях используются жидкие кристаллы для создания видимого изображения. Когда к подобному кристаллу прикладывается ток он становится непрозрачным, перекрывая подсветку, которая находится за экраном. В результате эта конкретная область становиться темной по сравнению с другой. Подобным образом на экране отображаются символы.

    Обзор LCD 1602

    Эти ЖК-дисплеи идеально подходят для отображения только текста/символов, отсюда у них есть и другое название — «символьные ЖК-дисплеи». Дисплей имеет светодиодную подсветку и может отображать 32 символа в кодировке ASCII в двух рядах по 16 символов в каждом ряду.

    Если вы посмотрите внимательно, вы можете увидеть маленькие прямоугольники для каждого символа на дисплее и пиксели, которые составляют символ. Каждый из этих прямоугольников представляет собой сетку 5 × 8 пикселей.

    Хотя такие дисплеи отображают только текст, они бывают разных размеров и цветов: например, 16×1, 16×4, 20×4, с белым текстом на синем фоне, с черным текстом на зеленом и другие.

    Хорошая новость заключается в том, что все эти дисплеи взаимозаменяемые — если вы строите свой проект с одним из них, вы можете просто отключить его и использовать другой (размер/цвет) ЖК-дисплей на свой выбор. Возможно, придется откорректировать код в зависимости от количества строк, но по крайней мере проводка останется той же!

    Распиновка 16х02 символов

    Перед тем, приступить к сборке и написанию кода, давайте сначала взглянем на распиновку LCD 1602.

    • GND должен быть подключен к земле Arduino.
    • VCC — это вывод питание для ЖК-дисплея, к которому мы подключаем 5-вольтовый контакт Arduino.
    • Vo (LCD Contrast) — вывод контролирует контрастность и яркость ЖК-дисплея. Используя простой делитель напряжения с потенциометром, мы можем точно отрегулировать контрастность.
    • RS (Register Select) — этот вывод позволяет Arduino сообщать ЖК-дисплею, отправляются команды или данные. В основном этот вывод используется для дифференциации команд от данных. Например, когда на выводе RS установлено значение LOW, мы отправляем команды на ЖК-дисплей (например, установить курсор в определенном месте, очистить дисплей, сдвинуть дисплей вправо и т. д.). Когда вывод RS установлено значение HIGH, мы отправляем данные/символы на ЖК-дисплей.
    • R/W (Read/Write) — вывод предназначен для контроля того, что необходимо сделать — считать данные или передать их на ЖК-дисплй. Поскольку мы просто используем этот ЖК-дисплей в качестве устройства вывода, то достаточно на этот вывод подать HIGH уровень, тем самым мы перейдем в режим записи.
    • EN (Enable) вывод используется для включения дисплея. Это означает, что когда на этом выводе установлено значение LOW ЖК-дисплей не реагирует на то, что происходит с R/W, RS и линиями шины данных. Когда же на этом выводе HIGH ЖК-дисплей обрабатывает входящие данные.
    • D0-D7 (Data Bus) — это выводы, по которым передаются 8-битные данные на дисплей. Например, если мы хотим отобразить символ «A» в верхнем регистре, мы отправляем на LCD дисплей 0100 0001 (в соответствии с таблицей ASCII) .
    • AK (Anode & Cathode) используются для управления подсветкой LCD дисплея.

    Практика

    Теперь мы переходим к интересным вещам. Давайте проверим ЖК-дисплей. Сначала подключим контакты 5В и GND от Arduino Uno к шинам электропитания макетной платы. Затем подключим LCD 1602. Данный LCD имеет две отдельные линии питания:

    1. Контакт 1 и контакт 2 для питания самого LCD 1602
    2. Контакт 15 и контакт 16 для подсветки LCD 1602

    Подсоедините контакты 1 и 16 LCD на минус питания, а контакты 2 и 15 к + 5В.

    Далее необходимо подключить контакт 3, который отвечает за контрастность и яркость дисплея. Для точной настройки контрастности необходимо подключить крайние выводы потенциометра сопротивлением 10 кОм к 5В и GND, а центральный контакт (бегунок) потенциометра к контакту 3 на LCD дисплея.

    Регулировка контрастности ЖК-дисплея с помощью потенциометра

    Теперь включите Arduino и вы увидите подсветку. Поворачивая ручку потенциометра, вы должны заметить появление первой линии прямоугольников. Если это произойдет, поздравляем! Ваш ЖК-дисплей работает правильно.

    Подключение LCD 1602 к Arduino

    Прежде чем мы приступим к загрузке скетча и отправке данных на дисплей, давайте подключим LCD 1602 к Arduino.

    LCD дисплей имеет много контактов (16 контактов). Но, хорошая новость заключается в том, что не все эти контакты необходимы для нас, чтобы подключиться к Arduino.

    Мы знаем, что есть 8 выводов данных, по которым передаются данные на дисплей. Но, ЖК-дисплеи на HD44780 разработаны таким образом, что мы можем общаться с ЖК-дисплеем, используя только 4 вывода данных (4-разрядный режим) вместо 8 (8-разрядный режим). Таким образом мы можем сэкономить 4 вывода Arduino!

    Разница между 4-битным и 8-битным режимом

    8-битный режим быстрее, чем 4-битный. Это связано с тем, что что в 8-битном режиме мы передаем данные за один раз. Однако в 4-битном режиме мы должны разделить байт на 2 части, сдвинуть один из них на 4 бита вправо и выполнить 2 операции записи.

    Итак, 4-битный режим часто используется для экономии выводов микроконтроллера, а 8-битный режим лучше всего использовать, когда требуется высокая скорость в приложении и при этом доступно как минимум 10 выводов ввода/вывода микроконтроллера.

    Итак, что мы будем работать с LCD дисплеем, используя 4-битный режим, и, следовательно, нам нужно только 6 контактов: RS, EN, D7, D6, D5 и D4.

    Теперь давайте подключим ЖК-дисплей к Arduino. Четыре контакта данных (D4-D7) дисплея подключаем к цифровым контактам Arduino #4, #5, #6, #7. Вывод EN подключим к Arduino вывод #2, а вывод RS к выводу #1.

    Подключение 16-символьного ЖК-дисплея к Arduino UNO

    Скетч

    Следующий тестовый скетч напечатает сообщение «Hello World!». Далее разберем его работу по подробнее.

    Объяснение кода:

    Скетч начинается с подключения библиотеки LiquidCrystal. Как упоминалось ранее в этом руководстве, в сообществе Arduino есть библиотека LiquidCrystal, которая облегчает использование LCD дисплеев. Вы можете узнать больше о библиотеке LiquidCrystal на официальном сайте Arduino .

    Далее мы должны создать объект LiquidCrystal. Этот объект использует 6 параметров и указывает, какие выводы Arduino подключены к выводам RS, EN и выводам данных: d4, d5, d6 и d7.

    Теперь, когда мы объявили объект LiquidCrystal, мы можем получить доступ к специальным методам (или функциям), специфичным для ЖК-дисплея.

    В функции setup() мы будем использовать две функции: первая функция begin(). В ней указываются размер дисплея, т.е. количества столбцов и строк. Если вы используете 16 × 2 символьный ЖК-дисплей, укажите параметры 16 и 2, если вы используете ЖК-дисплей 20 × 4, укажите параметры 20 и 4.

    Вторая функция clear() очищает экран и перемещает курсор в верхний левый угол.

    В функции loop() мы используем функцию print(), выводящая сообщение, которое мы видим в первой строке экрана.

    После этого мы переводим курсор на вторую строку, вызвав функцию setCursor(). Позиция курсора указывает место, где вам нужно отобразить новый текст на дисплее. Верхний левый угол считается col = 0, row = 0.

    Другие полезные функции библиотеки LiquidCrystal

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

    • Если вы просто хотите расположить курсор в верхнем левом углу дисплея без очистки дисплея, используйте home().
    • Существует много приложений, таких как turbo C++ или notepad ++, в которых нажатие клавиши «insert» на клавиатуре меняет курсор. Точно так же вы можете изменить курсор на ЖК-дисплее с помощью blink() или lcd.Cursor().
    • Функция blink() отображает мигающий блок размером 5 × 8 пикселей, а lcd.Cursor() подчеркивание (линия) на позиции, в которую будет записан следующий символ.
    • Вы можете использовать функцию noblink(), чтобы отключить мигающий курсор на дисплее и lcd.noCursor() чтобы скрыть курсор.
    • Вы можете прокрутить содержимое дисплея на один пробел вправо, используя lcd.scrollDisplayRight() или один пробел влево используя lcd.scrollDisplayLeft(). Если вы хотите непрерывно прокручивать текст, вам нужно использовать эти функции внутри цикла for.

    Генерация пользовательских символов для LCD

    Если вы находите символы на дисплее неподходящими и неинтересными, вы можете создать свои собственные символы (глиф) для своего ЖК-дисплея. Пользовательские символы чрезвычайно полезны в том случае, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.

    Как мы уже обсуждали ранее в этом руководстве, символ на дисплее формируется в матрице 5×8 пикселей, поэтому вам нужно определить свой пользовательский символ в этой матрице. Для определения символа необходимо использовать функцию createChar() библиотеки LiquidCrystal.

    Для использования createChar() сначала необходимо назначить массив из 8 байт. Каждый байт (учитывается только 5 бит) в массиве определяет одну строку символа в матрице 5×8. В то время как нули и единицы в байте указывают, какие пиксели в строке должны быть включены, а какие-выключены.

    Генератор символов LCD

    Создание собственного символа до сих пор было непросто! Поэтому было создано небольшое приложение под названием «Генератор пользовательских символов» для LCD.

    Вы видите синюю сетку ниже? Вы можете нажать на любой из 5 × 8 пикселей, чтобы установить/очистить этот конкретный пиксель. И когда вы нажимаете на пиксели, код для символа генерируется рядом с сеткой. Этот код может быть непосредственно использован в вашем скетче Arduino.

    Единственным ограничением является то, что библиотека LiquidCrystal поддерживает только восемь пользовательских символов.

    Следующий скриншот демонстрирует, как вы можете использовать эти пользовательские символы на дисплее.

    После включения библиотеки нам нужно инициализировать пользовательский массив из восьми байтов.

    В настройках мы должны создать пользовательский символ, используя функцию createChar(). Эта функция принимает два параметра. Первый — это число от 0 до 7, чтобы зарезервировать один из 8 поддерживаемых пользовательских символов. Второй параметр — это имя массива байтов.

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

    Источник

    Читайте так же:  Стол из стеклопакета с подсветкой своими руками
    Оцените статью
    Охраны в доме нет
    Adblock
    detector