Самоделки на дисплее 1602
Управление Яркостью подсветки дисплея 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 является широко распространенным и популярным дисплеем среди радиолюбителей, кроме этого, аналогичные дисплеи встраиваются в различные устройства серийного производства. Дисплей построен на базе контроллера HD44780 и его аналогах, широкая известность связана с его давним появлением на рынке, во времена стремительного развития электроники. В этой статье я расскажу про сопряжение интерфейса I2C и LCD 1602, с помощью микросхемы расширителя портов PCF8574.
В продаже имеется два типа дисплея, с зеленым экраном и темными символами (заказать можно здесь ), а также с синим экраном и светлыми символами (заказать можно тут ), как по мне, то светлый зеленый экран смотрится лучше.
Описание и команды управления LCD 1602
Дисплей содержит две строки, в каждой умещается по 16 символов, напряжение питания может находиться в пределах 4,5-5,5 В, ток потребления составляет 1,2 мА без учета подсветки, которая может потреблять значительный ток. Дисплей имеет достаточно много выводов, назначение которых приведено в следующей таблице:
Ниже в таблице представлены команды для управления LCD 1602:
№ | Описание инструкции | Код инструкции | Время выполнения | |||||||||
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | |||
1 | Очистка дисплея с установкой курсора в начало первой строки | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1,53 мс |
2 | Установка курсора в начало первой строки | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | – | 1,53 мс |
3 | Установка направления вывода символов, разрешение сдвига экрана | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | SH | 39 мкс |
4 | Управление режимом питания дисплея и отображением курсора | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | 39 мкс |
5 | Команда сдвига курсора и экрана | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | – | – | 39 мкс |
6 | Настройка интерфейса ввода/вывода данных, количества строк для вывода символов, размера шрифта | 0 | 0 | 0 | 0 | 1 | DL | N | F | – | – | 39 мкс |
7 | Запись адреса CGRAM памяти в адресный указатель | 0 | 0 | 0 | 1 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 39 мкс |
8 | Запись адреса DDRAM памяти в адресный указатель | 0 | 0 | 1 | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 39 мкс |
9 | Команда чтения флага занятости и адресного указателя | 0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | 0 мкс |
10 | Запись данных во внутреннюю память дисплея | 1 | 0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 43 мкс |
11 | Чтение данных из внутренней памяти дисплея | 1 | 1 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 43 мкс |
Назначение битов представлено в следующей таблице:
Каждая инструкция выполняется определенное время, которое указано в вышеприведенной таблице, завершение внутренней операции можно узнать с помощью чтения флага занятости BF (инструкция №9). Но обычно флаг не опрашивают, а просто выдерживают соответствующую паузу после передачи инструкции. Вообще чтение данных из дисплея применяется редко, и не представляет особого интереса.
Адреса ячеек | ||||||||||||||||
1-я строка | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
2-я строка | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F |
На каждой строке экрана умещается 16 символов, но это только видимая область, общий объем DDRAM памяти составляет 80 байт, то есть в каждую строку можно записать по 40 символов, и только 16 из них будут отображаться на экране, остальные символы останутся в невидимой области. С помощью команды сдвига экрана (инструкция №5) можно просмотреть все остальные символы, наподобие эффекта бегущей строки. Регистры с адресами 0x00-0x27 составляют первую строку, ячейки 0x40-0x67 вторую строку. Если задать только одну строку для вывода (бит N=0 в инструкции №6, при этом будет использована 1-я строка), то длина строки увеличиться, и будет вмещать 80 символов.
Память CGROM (Character Generator ROM) представляет собой знакогенератор и содержит данные для прорисовки ASCII символов. В памяти заложены спецзнаки, цифры, латинский алфавит, если не ошибаюсь, имеются китайские иероглифы, а также символы греческого алфавита, которые используются для обозначения физических величин. Каждый символ занимает 5 байт в памяти, что соответствует размеру шрифта 5×8 пикселей. На следующей картинке представлена таблица символов в соответствии с ASCII кодами:
Кириллица в LCD 1602 не заложена, что не удивительно, ведь это китайский дисплей, но существуют аналогичные отечественные дисплеи фирмы МЭЛТ с поддержкой русского алфавита.
Для вывода символа необходимо записать адрес регистра DDRAM памяти в адресный указатель (инструкция №8), тем самым выбрав положение символа на экране, затем записать в выбранный регистр код ASCII символа (инструкция №10), исходя из полученного кода, контроллер дисплея извлекает данные из CGROM памяти для прорисовки символа в заданном положении на экране. После вывода символа, адресный указатель автоматически инкрементируется или декрементируется, в зависимости от того, какое значение было задано биту направления I/D. Таким образом, символы можно выводить последовательно, при этом корректировка адреса DDRAM памяти не требуется. Например, если первая строка полностью заполнится символами, то произойдет переход на вторую строку, и наоборот.
Энергонезависимая память 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 интерфейс
Специально для дисплея, в продаже имеется модуль-переходник на основе микросхемы PCF8574AT, которая предназначена для расширения количества линий ввода/вывода. Микросхема подключается по I2C интерфейсу и имеет порт из 8 линий ввода/вывода, принцип функционирования простой, при записи байта данных в микросхему, линии порта принимают уровни, соответствующие значениям битов полученного байта. Операция чтения возвращает байт данных, биты которого указывают состояние линий порта. Таким образом, микросхема позволяет расширить количество линий ввода/вывода, используя два управляющих провода. Фото модуля представлено ниже:
Заказать модуль можно тут . На модуле установлен подстроечный резистор для регулировки контрастности экрана, также имеется джампер (перемычка), разрешающий управление подсветкой дисплея, о котором будет сказано позже.
На следующей картинке приведена схема подключения LCD 1602 и I2C модуля:
Адрес микросхемы PCF8574AT на шине I2C можно настраивать, старшие 4 бита адреса фиксированы, и равны 0111, младшие 3 бита зависят от состояния входов микросхемы A2-A0. На модуле данные входы подтянуты к высокому уровню, соответственно адрес микросхемы принимает значение 0111111.
Как видно из схемы, к микросхеме подключена только часть линий ввода/вывода дисплея DB7-DB4, это означает, что управление дисплеем возможно только через 4-битный интерфейс. Для ввода инструкции в дисплей требуется 2 тактовых импульса на линии E, то есть последовательность уровней 1010 (“защелкивание” данных происходит по спаду уровня), в итоге необходимо записать в микросхему 4 байта для одной инструкции. На картинке ниже приведен пример записи инструкции в дисплей по интерфейсу I2C:
Сначала передается старший полубайт инструкции с битом E=1, затем то же самое с битом E=0, при этом в дисплей передается первая половина инструкции. Далее таким же образом передается вторая половина (младший полубайт).
Для управления подсветкой дисплея, на плате модуля установлен транзистор, подключенный к линии P3 микросхемы. Таким образом, 3-й бит в байте данных управляет подсветкой, 0 – выключена, 1 – включена. При отсутствии джампера (о котором я писал выше) подсветка отключается, независимо от бита управления.
Я подключил дисплей с модулем к микроконтроллеру PIC16F628A, схема представлена ниже:
Кнопка SB1 управляет подсветкой дисплея, светодиод HL1 загорается в случае ошибки передачи данных. Неполный код программы приведен ниже (полную версию можно скачать в конце статьи):
Поддерживаемые дисплеи:
// Пояснение:
LiquidCrystal ОБЪЕКТ ( RS , E , D4 , D5 , D6 , D7 );
void setup()
// Пояснение:
LiquidCrystal ОБЪЕКТ ( RS , E , D4 , D5 , D6 , D7 );
void setup()
Выводим надпись на дисплей 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 служит для защиты полевого транзистора от всплесков.
Читайте также: