Самоделки на дисплее 1602

Обновлено: 18.05.2024

Управление Яркостью подсветки дисплея 1602 происходит через полевой транзистор мне так больше нравится.Раньше я такими экранами 1602 i2c управлял биполярными транзисторами типа кт972 можно управлять любыми подходящими по нашим характеристикам.Я полевые транзисторы беру с материнских плат которые давно сгорели.В материнских платах есть много полезных деталей которые могут пригодится в быту или при создании своих проектов на ардуино.Так и дисплей 1602 arduino я применяю во всех своих самоделках.Как на ардуино так и на esp8266 который стоит в умном доме и следит за солнечными панелями и инвертором,а показания выводит на экран 1602.
Раньше подсветка горела всегда и яркость дисплея была очень сильной и мешала спать ночью.Потом я сделал Управление Яркостью Дисплея на транзисторе и спать стало намного лучше т.к. подсветка не била по глазам и не освещала комнату.Как сделать управление яркостью дисплея я показываю в видео и показываю на схеме.Яркость дисплея также можно изменить просто впаяв резистор подобрав его номинал.регулировка яркости ардуино можно сделать прописав код в самом скетче,но я писать код не умею и мне проще самому спаять схему.подсветка lcd 1602 состоит из обычного светодиода который управляется либо через странзистор в случае i2c модуля или резистором если не использовать модуль.регулировка подсветки lcd 1602 осуществляется простыми способами своими руками глядя на представленную схему в видео.регулировка подсветки lcd 1602 осуществляется аналоговым регулятором которым выступает в качестве потенциометра фоторезистор.
Фоторезистор это датчик, электрическое сопротивление которого меняется в зависимости от интенсивности падающего на него света. Чем интенсивней свет, тем больше создается свободных носителей зарядов и тем меньше становится сопротивление элемента.
Транзистор радиоэлектронный компонент из полупроводникового материала, обычно с тремя выводами[1], способный от небольшого входного сигнала управлять значительным током в выходной цепи, что позволяет его использовать для усиления, генерирования, коммутации и преобразования электрических сигналов. В настоящее время транзистор является основой схемотехники подавляющего большинства электронных устройств и интегральных микросхем.

Транзисторами также называются дискретные электронные приборы, которые, выполняя функцию одиночного транзистора, имеют в своем составе много элементов, конструктивно являясь интегральной схемой, например составной транзистор или многие транзисторы большой мощности[2].

Транзисторы по структуре, принципу действия и параметрам делятся на два класса — биполярные и полевые (униполярные). В биполярном транзисторе используются полупроводники с обоими типами проводимости, он работает за счет взаимодействия двух, близко расположенных на кристалле, p-n переходов и управляется изменением тока через база-эмиттерный переход, при этом вывод эмиттера всегда является общим для управляющего и выходного токов. В полевом транзисторе используется полупроводник только одного типа проводимости, расположенный в виде тонкого канала, на который воздействует электрическое поле изолированного от канала затвора[3], управление осуществляется изменением напряжения между затвором и истоком. Полевой транзистор, в отличие от биполярного, управляется напряжением, а не током. В настоящее время в аналоговой технике доминируют биполярные транзисторы (БТ) (международный термин — BJT, bipolar junction transistor). В цифровой технике, в составе микросхем (логика, память, процессоры, компьютеры, цифровая связь и т. п.), напротив, биполярные транзисторы почти полностью вытеснены полевыми. В 1990-е годы был разработан новый тип гибридных биполярно-полевых транзисторов — IGBT которые сейчас широко применяются в силовой электронике

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


LCD 1602 является широко распространенным и популярным дисплеем среди радиолюбителей, кроме этого, аналогичные дисплеи встраиваются в различные устройства серийного производства. Дисплей построен на базе контроллера HD44780 и его аналогах, широкая известность связана с его давним появлением на рынке, во времена стремительного развития электроники. В этой статье я расскажу про сопряжение интерфейса I2C и LCD 1602, с помощью микросхемы расширителя портов PCF8574.

В продаже имеется два типа дисплея, с зеленым экраном и темными символами (заказать можно здесь ), а также с синим экраном и светлыми символами (заказать можно тут ), как по мне, то светлый зеленый экран смотрится лучше.

Описание и команды управления LCD 1602

Дисплей содержит две строки, в каждой умещается по 16 символов, напряжение питания может находиться в пределах 4,5-5,5 В, ток потребления составляет 1,2 мА без учета подсветки, которая может потреблять значительный ток. Дисплей имеет достаточно много выводов, назначение которых приведено в следующей таблице:

Ниже в таблице представлены команды для управления LCD 1602:

Описание инструкцииКод инструкцииВремя выполнения
RSR/WDB7DB6DB5DB4DB3DB2DB1DB0
1Очистка дисплея с установкой курсора в начало первой строки00000000011,53 мс
2Установка курсора в начало первой строки0000000011,53 мс
3Установка направления вывода символов, разрешение сдвига экрана00000001I/DSH39 мкс
4Управление режимом питания дисплея и отображением курсора0000001DCB39 мкс
5Команда сдвига курсора и экрана000001S/CR/L39 мкс
6Настройка интерфейса ввода/вывода данных, количества строк для вывода символов, размера шрифта00001DLNF39 мкс
7Запись адреса CGRAM памяти в адресный указатель0001AC5AC4AC3AC2AC1AC039 мкс
8Запись адреса DDRAM памяти в адресный указатель001AC6AC5AC4AC3AC2AC1AC039 мкс
9Команда чтения флага занятости и адресного указателя01BFAC6AC5AC4AC3AC2AC1AC00 мкс
10Запись данных во внутреннюю память дисплея10D7D6D5D4D3D2D1D043 мкс
11Чтение данных из внутренней памяти дисплея11D7D6D5D4D3D2D1D043 мкс

Назначение битов представлено в следующей таблице:

Каждая инструкция выполняется определенное время, которое указано в вышеприведенной таблице, завершение внутренней операции можно узнать с помощью чтения флага занятости BF (инструкция №9). Но обычно флаг не опрашивают, а просто выдерживают соответствующую паузу после передачи инструкции. Вообще чтение данных из дисплея применяется редко, и не представляет особого интереса.

Адреса ячеек
1-я строка000102030405060708090A0B0C0D0E0F
2-я строка404142434445464748494A4B4C4D4E4F

На каждой строке экрана умещается 16 символов, но это только видимая область, общий объем DDRAM памяти составляет 80 байт, то есть в каждую строку можно записать по 40 символов, и только 16 из них будут отображаться на экране, остальные символы останутся в невидимой области. С помощью команды сдвига экрана (инструкция №5) можно просмотреть все остальные символы, наподобие эффекта бегущей строки. Регистры с адресами 0x00-0x27 составляют первую строку, ячейки 0x40-0x67 вторую строку. Если задать только одну строку для вывода (бит N=0 в инструкции №6, при этом будет использована 1-я строка), то длина строки увеличиться, и будет вмещать 80 символов.

LCD 1602 таблица символов

Память CGROM (Character Generator ROM) представляет собой знакогенератор и содержит данные для прорисовки ASCII символов. В памяти заложены спецзнаки, цифры, латинский алфавит, если не ошибаюсь, имеются китайские иероглифы, а также символы греческого алфавита, которые используются для обозначения физических величин. Каждый символ занимает 5 байт в памяти, что соответствует размеру шрифта 5×8 пикселей. На следующей картинке представлена таблица символов в соответствии с ASCII кодами:

Кириллица в LCD 1602 не заложена, что не удивительно, ведь это китайский дисплей, но существуют аналогичные отечественные дисплеи фирмы МЭЛТ с поддержкой русского алфавита.

Для вывода символа необходимо записать адрес регистра DDRAM памяти в адресный указатель (инструкция №8), тем самым выбрав положение символа на экране, затем записать в выбранный регистр код ASCII символа (инструкция №10), исходя из полученного кода, контроллер дисплея извлекает данные из CGROM памяти для прорисовки символа в заданном положении на экране. После вывода символа, адресный указатель автоматически инкрементируется или декрементируется, в зависимости от того, какое значение было задано биту направления I/D. Таким образом, символы можно выводить последовательно, при этом корректировка адреса DDRAM памяти не требуется. Например, если первая строка полностью заполнится символами, то произойдет переход на вторую строку, и наоборот.

LCD 1602 CGRAM память

Энергонезависимая память CGRAM (Character Generator RAM) предназначена для создания уникальных символов под нужды разработчика. Объем памяти небольшой, и позволяет хранить 8 произвольных символов. Для создания одного символа размером 5×8 пикселей, необходимо передать 8 байт данных в регистры памяти. На картинке ниже изображена структура CGRAM памяти и пример расположения символов:

Перед созданием символа необходимо записать адрес регистра CGRAM памяти в адресный указатель (инструкция №8), далее передать байты данных, которые составят изображение символа (инструкция №10), адресный указатель автоматически инкрементируется/декрементируется (в зависимости от бита I/D), как и в случае DDRAM памяти. В создании символа участвуют только 5 младших битов байта данных. Символам присваиваются коды 0x00-0x07 в соответствии с их расположением в памяти CGRAM, они отображены в ранее приведенной таблице символов.

Инициализация LCD 1602

Если разрешить сдвиг экрана при выводе символов (бит SH=1), то с каждым новым символом экран будет сдвигаться в выбранном направлении, то есть новые символы будут появляться в заданном положении на экране, а остальные сдвигаться.

Дополнительно на экране можно включить отображение курсора (бит C=1), который выглядит в виде линии подчеркивания, и может мигать в зависимости от настроек. Положение курсора на экране соответствует текущему адресу DDRAM памяти в адресном указателе. Курсор можно сдвигать по экрану (инструкция №5), при этом адресный указатель будет инкрементироваться/декрементироваться в зависимости от направления сдвига.

Подключение LCD 1602 через I2C интерфейс

Модуль PCF8574 I2C

Специально для дисплея, в продаже имеется модуль-переходник на основе микросхемы PCF8574AT, которая предназначена для расширения количества линий ввода/вывода. Микросхема подключается по I2C интерфейсу и имеет порт из 8 линий ввода/вывода, принцип функционирования простой, при записи байта данных в микросхему, линии порта принимают уровни, соответствующие значениям битов полученного байта. Операция чтения возвращает байт данных, биты которого указывают состояние линий порта. Таким образом, микросхема позволяет расширить количество линий ввода/вывода, используя два управляющих провода. Фото модуля представлено ниже:

Заказать модуль можно тут . На модуле установлен подстроечный резистор для регулировки контрастности экрана, также имеется джампер (перемычка), разрешающий управление подсветкой дисплея, о котором будет сказано позже.

Подключение LCD 1602 по I2C интерфейсу

На следующей картинке приведена схема подключения LCD 1602 и I2C модуля:

Адрес микросхемы PCF8574AT на шине I2C можно настраивать, старшие 4 бита адреса фиксированы, и равны 0111, младшие 3 бита зависят от состояния входов микросхемы A2-A0. На модуле данные входы подтянуты к высокому уровню, соответственно адрес микросхемы принимает значение 0111111.

Передача данных LCD 1602 через PCF8574

Как видно из схемы, к микросхеме подключена только часть линий ввода/вывода дисплея DB7-DB4, это означает, что управление дисплеем возможно только через 4-битный интерфейс. Для ввода инструкции в дисплей требуется 2 тактовых импульса на линии E, то есть последовательность уровней 1010 (“защелкивание” данных происходит по спаду уровня), в итоге необходимо записать в микросхему 4 байта для одной инструкции. На картинке ниже приведен пример записи инструкции в дисплей по интерфейсу I2C:

Сначала передается старший полубайт инструкции с битом E=1, затем то же самое с битом E=0, при этом в дисплей передается первая половина инструкции. Далее таким же образом передается вторая половина (младший полубайт).

Для управления подсветкой дисплея, на плате модуля установлен транзистор, подключенный к линии P3 микросхемы. Таким образом, 3-й бит в байте данных управляет подсветкой, 0 – выключена, 1 – включена. При отсутствии джампера (о котором я писал выше) подсветка отключается, независимо от бита управления.

Схема подключения LCD 1602 по интерфейсу I2C

Я подключил дисплей с модулем к микроконтроллеру PIC16F628A, схема представлена ниже:

Кнопка SB1 управляет подсветкой дисплея, светодиод HL1 загорается в случае ошибки передачи данных. Неполный код программы приведен ниже (полную версию можно скачать в конце статьи):


Поддерживаемые дисплеи:

// Пояснение:
LiquidCrystal ОБЪЕКТ ( RS , E , D4 , D5 , D6 , D7 );
void setup()

Подключение дисплея LCD1602 к Arduino

// Пояснение:
LiquidCrystal ОБЪЕКТ ( RS , E , D4 , D5 , D6 , D7 );
void setup()

Подключение дисплея LCD2004 к Arduino

Выводим надпись на дисплей LCD1602 подключённый по шине I2C. Для работы с дисплеем LCD2004 нужно изменить 3 строку на LiquidCrystal_I2C lcd(0x27,20,4);

Выводим надпись на дисплей LCD1602 подключённый по 4-битной параллельной шине. Для работы с дисплеем LCD2004 нужно изменить 5 строку на lcd.begin(20, 4);

Выводим время прошедшее после старта на дисплей LCD1602 подключённый по шине I2C:

И так начнем. Так как это моя первая самоделка на LCD, то я немного расскажу, как я начинал учить язык программирования.

Начинал я изучать язык СИ так как и все, с самого простого, миганием светодиодов ну и различные простенькие схемы, но я все ровно не мог понять как написать что-то серьезное в итоге я решил начать с более менее сложного устройства и тем самым собрать себе термостат+вольтметр на автомобиль, после двух недель мучения я наконец-то понял как это все работает и что такое программирование.

Поэтому для меня, как оказалось, лучше начинать изучать с более менее сложных устройств, теперь я хоть начал понимать о чем идет речь, но еще по прежнему слабый в этом деле. Как показала практика (лично для меня), то лучше начинать с тяжелого, а легкое само прейдёт. Может кому-то из начинающих эта статья поможет.
Пишу я в программе Codevisionavr, в этой программе есть готовые библиотеки и начальные термины, в общем, начинать в ней легче.

Пожалуй, хватит обо мне пора начать рассматривать моё устройство, вот принципиальная схема.

Вот такая получилась у меня простенькая схема и проще как мне кажется уже некуда, самый главный здесь ми контроллер ATmega8, к которому подключен LCD дисплей 1602, что означает 16 символов и 2 ряда.

Резистор R1 служит для точной настройки выводимого напряжения на дисплей, а резистор R2 для настройки контрастности дисплея.

Дальше все просто три тактовые кнопки S1 S2 S3 для установки и сохранения температуры, рядом у нас установлен температурный датчик Даллас DS18B20 с подтягивающим резистором R3 в 4,7k.

Теперь мы рассмотрим питание самой схемы, для нормальной работы нам нужно подать на схему 5 вольт и не в коем случае больше, а то наш ми контроллер с дисплеем и температурным датчиком выйдут из строя, а как нам известно, мы это устройство будем использовать в автомобиле, а там 12 вольт.

Для этого я поставил всем известную кренку L7805, параллельно входу поставил конденсатор C2 ёмкостью в 0,047 мкФ и на выходе в 0,1 мкФ также на выходе стоит электролит ёмкостью в 1000 мкФ, после всего этого мы получаем стабилизированное питание 5 вольт.

Дальше рассмотрим узел управления эл.клапаном. Наш ми контроллер подает 5 вольт на опто-транзистор, но через ограничивающий резистор R4 после чего наш оптрон открывается и питание идет на затвор полевого транзистора VT1, полевик открывается и на наш эл. клапан подается полноценные 12 вольт. Резистор R5 служит для разряда затвора VT1 в тот момент, когда оптрон закрылся, а диод VD1 служит для защиты полевого транзистора от всплесков.

Читайте также: