Главная » Микроконтроллеры
Призовой фонд
на март 2017 г.
1. UNI-T UT-39C
Паяльник
2. Тестер компонентов LCR-T4
Паяльник
3. 100 руб.
От пользователей

LCD WH1602B компании Winstar

LCD дисплеи от компании Winstar уже на протяжении нескольких лет являются неотъемлемой частью современной электронной продукции, и не только на российском рынке. Они дешевы, очень распространены (не видел магазинов, где их не было бы), их разнообразие предоставляет разработчику выбирать подходящий в зависимости от эксплуатационных условий. Их различие заключается в диапазонах рабочих температур, количеством строк для отображения информации, количеством знакомест в строке, стандартными из которых являются значения 8, 12, 16, 20, 24 и 40 символов на одну строку, так же различаются размерами символа, его разрешением, размерами самого дисплея и т.д. Winstar выпускает не только буквенно-цифровые знакосинтезирующие LCD-модули, но и графические. Те, в свою очередь, тоже имеют различные параметры, что предоставляет пользователю возможность выбирать подходящий исходя из поставленной задачи.

Многие начинающие радиолюбители, только-только начавшие осваивать цифровую технику, микроконтроллеры, рано или поздно столкнутся с проблемой, связанной с подключением и управлением данного дисплея. Немного упростив ситуацию с даташитом на дисплей WH1602B, я старался описать процесс подключения и управления модулем максимально просто для понимания.

Стандартно дисплей WH1602B выглядит так:

LCD дисплей 1602

16 выводных линий, из которых 11 – линии управления, расположены в ряд с шагом 2,54мм, что позволяет разработчику напрямую подпаять шлейф или поставить разъем, и отвести шлейф к плате управления, в зависимости от конструкции конечного устройства.

Далеко не редким является дисплей с боковым расположением контактов.

В зависимости от конструктива радиоэлектронного устройства разработчик может использовать любой тип расположения выводов – различия между программными обеспечениями совершенно нет.
Модули могут комплектоваться задней подсветкой экрана, причем тип источника подсветки у разных модулей различен. В некоторых дисплеях используется электролюминесцентная подсветка, обеспечивающая равномерное распределение свечения по всей отображаемой поверхности экрана. Главным недостатком дисплея с таким типом подсветки является, пожалуй, одно: для питания такого дисплея нужен переменный ток высокого напряжения. У светодиодных подсветок недостатков практически нет, модули с применением светодиодной подсветки могут использоваться в приложениях, работающих при широких диапазонах температур. Производитель дает широкий выбор в плане цвета подсветки – поскольку светодиодные матрицы можно установить практически любого цвета.

Существенным недостатком дисплеев WH1602B является ток потребления, поэтому применять данный тип дисплеев в устройствах с автономным питанием совершенно невыгодно.

Дисплеи линейки WH построены на базе специализированного контроллера LCD-модулей HD44780, который как раз и разрабатывался для управления знакосинтезирующими ЖК-панелями.

С небольшим описанием, пожалуй, стоит закончить, и приступить к практической части. Нумерация выводов дисплея, если смотреть на него сверху (т.е. как мы смотрим на него при чтении информации), идет начиная с самого крайнего левого вывода. Это вывод 1.

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

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

Итак распиновка 1602:
1) GND – общий провод
2) Vcc – напряжение питания +5В
3) V0 – контрастность
4) RS – линия выбора регистра
5) RW – линия выбора направления передачи данных (чтение или запись)
6) E – линия синхронизации
7) DB0 – 14) DB7 – линии шины данных
15) A – анод подсветки (подключаем сюда +5В через резистор 100Ом)
16) К – катод подсветки (подключаем к общему проводу)

Дисплей может работать в 2 режимах: в режиме 8-битной передачи данных, когда данные передаются группами по 8 бит (при этом обеспечивается максимальная скорость взаимодействия с дисплеем), и в режиме 4-битной передачи, когда 8-битные данные разбиваются на две группы по четыре разряда и последовательно передаются по четырем старшим линиям данных DB4-DB7.

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

Мы рассмотрим процесс инициализации дисплея WH1602B в 8-битном режиме с использованием управляющей платы, основанной на микроконтроллере Attiny2313.

Итак, какие действия необходимо выполнить для надежного процесса инициализации:
1) Включить питание дисплея
2) Выдержать паузу 20мс
3) Выдать команду 00110000 при RS=0 RW=0
4) Выдержать паузу не менее 40мкс
5) Выдать команду 00110000 при RS=0 RW=0
6) Выдержать паузу не менее 40мкс
7) Выдать команду 00110000 при RS=0 RW=0
8) Выдержать паузу не менее 40мкс
9) Выдать команду 00111000 при RS=0 RW=0
10) Выдержать паузу не менее 40мкс
11) Выдать команду 00001000 при RS=0 RW=0
12) Выдержать паузу не менее 40мкс
13) Выдать команду 00000001 при RS=0 RW=0
14) Выдержать паузу не менее 1,5мс
15) Выдать команду 00000110 при RS=0 RW=0.

Поясню: RS – как отмечалось выше – линия выбора регистра (0 – адресуется регистр команд, в который мы записываем команды отключения дисплея, сдвига строки, установление курсора и т.д.; 1 – адресуется внутренняя память, куда будет записываться байт и отображаться на дисплее).

RW – линия выбора направления передачи данных (0 – запись в дисплей, 1 – чтение данных из дисплея).
После выдачи данных на линию данных DB0-DB7 и установки значений на линиях RS, RW, необходимо эти данные защелкнуть – для этого нужно установить линию E в 1, и, затем, снова сбросить в исходное положение – в 0.

Подключаем PD0 микроконтроллера к линии RS LCD, вывод PD1 микроконтроллера к RW дисплея, ну а PD2 – соответственно к линии Е дисплея, а линии шины данных DB0-DB7 к соответствующим линиям порта B микроконтроллера. Сам дисплей подключаем согласно схеме вверху.

Теперь дело за программной частью:

.include "tn2313def.inc" ; Attiny2313, 1 MHz clock
.cseg
.org 0
rjmp reset
;********************************************************************
;Стандартный переход к инициализированной части программы
reset: 
ldi r16, low (RAMEND) ; Инициализация стека МК
out SPL, r16
rcall lcd_init ; Инициализация дисплея
;Здесь мы инициализировали стек микроконтроллера и перешли к инициализации LCD-модуля
;********************************************************************
lcd_init:
ldi r16, 0b10000000 ; сбрасываем все подтягивающие резисторы
out MCUCR, r16
ldi r16, 0b11111111 ; Настройка порта B
out ddrb, r16
ldi r16, 0b00000111 ; Настройка порта D
out ddrd, r16
;Настраиваем линии портов ввода/вывода: сбрасываем подтягивающие резисторы и определяем ;PB0-PB7, PD0-PD2 как линии вывода данных
;********************************************************************
;Исходя из вышеуказанной процедуры инициализации выполняем операции:
ldi r16, 0b00000000 ; Адресация IR
ldi r17, 0b00110000 ; Установка разрядности Data line
rcall delay_20000mks ; Пауза перед инициализацией lcd
rcall write_lcd ; Запись данных в lcd
rcall delay_40mks ; Задержка перед выполнением операций с lcd
rcall write_lcd ; Запись данных в lcd
rcall delay_40mks ; Задержка перед выполнением операций с lcd
rcall write_lcd ; Запись данных в lcd
rcall delay_40mks ; Задержка перед выполнением операций с lcd
ldi r17, 0b00111000 ; Установка параметров lcd 
rcall write_lcd ; Запись данных в lcd
rcall delay_40mks ; Задержка перед выполнением операций с lcd
ldi r17, 0b00001000 ; Выключение дисплея
rcall write_lcd ; Запись данных в lcd
rcall delay_40mks ; Задержка перед выполнением операций с lcd
ldi r17, 0b00000001 ; Очистка дисплея
rcall write_lcd ; Запись данных в lcd
rcall delay_1500mks ; Задержка перед выполнением операций с lcd
ldi r17, 0b00000110 ; Установка режима ввода данных
rcall write_lcd ; Запись данных в lcd
rcall delay_40mks ; Задержка перед выполнением операций с lcd
ret ; Выход из подпрограммы
;********************************************************************
delay_20000mks:
ldi r18, 0b10110010 ; Ввод переменной задержки
ldi r19, 0b00000101 ; Настройка предделителя
rjmp init_delay
delay_1500mks:
ldi r18, 0b11111010 ; Ввод переменной задержки
ldi r19, 0b00000101 ; Настройка предделителя
rjmp init_delay
delay_40mks:
ldi r18, 0b11011000 ; Ввод переменной задержки
ldi r19, 0b00000010 ; Настройка предделителя
init_delay:
out TCNT0, r18 ; Инициализация TCNT0
out TCCR0B, r19 ; Старт T0
test_TIFR:
in r18, TIFR ; Чтение TIFR
sbrs r18, 1 ; Переход, если "Переполнение T0"
rjmp test_TIFR ; Бесконечная проверка TOV0
ldi r20, 0b00000000 ; Остановка T0
out TCCR0B, r20
ldi r20, 0b00000010 ; Загрузка TOV0>>0
out TIFR, r21
ret ; Выход из подпрограммы
;********************************************************************
write_lcd:
out portd, r16 ; Установка значения линии RS
out portb, r17 ; Вывод байта данных DB0-DB7
nop ; Защита от шумов на линии стробирования
sbi portd, 2 ; E>>1
nop ; Защита от шумов на линии стробирования
cbi portd, 2 ; E>>0
nop ; Защита от шумов на линии стробирования
ret ; Выход из подпрограммы
;********************************************************************
user_write_IR:
ldi r16, 0b00000000 ; Адресация IR
rcall write_lcd ; Запись данных в lcd
rcall delay_40mks ; Задержка перед выполнением операций с lcd
ret ; Выход из подпрограммы
;********************************************************************
user_write_DR:
ldi r16, 0b00000001 ; Адресация DR
rcall write_lcd ; Запись данных в lcd
rcall delay_40mks ; Задержка перед выполнением операций с lcd
ret ; Выход из подпрограммы
;********************************************************************
lcd_clear:
ldi r16, 0b00000000 ; Адресация IR
ldi r17, 0b00000001 ; Очистка дисплея
rcall write_lcd ; Запись данных в lcd
rcall delay_1500mks ; Задержка перед выполнением операций с lcd
ret ; Выход из подпрограммы
;********************************************************************

Как пользоваться данным кодом. Для занесения символа на экран необходимо записать байт, соответствующий коду этого символа, в регистр R17. В регистр 17 заносим 0х1 – если хотим записать символ на экран, или сбрасываем в 0х0, если хотим записать какую-то команду в регистр команд LCD дисплея.

Мной были предусмотрены подпрограммы, которые вызывает пользователь:
user_write_IR – запись команды в регистр команды LCD;
user_write_DR – запись данных для отображения на LCD;
lcd_clear – подпрограмма/команда, вызов которой осуществляет очистку дисплея.

Как работать с вызовом подпрограмм:

ldi r17, 0x24; Символ с кодом 0x24
rcall user_write_DR; запись символа на отображение
ldi r17, 0x2; команда 0х2
rcall user_write_IR; записываем в регистр.

Отмечу, что при использовании подпрограммы lcd_clear предварительная запись в R17 не требуется.
Где писать свой код? Вот здесь:

reset: 
ldi r16, low (RAMEND) ; Инициализация стека МК
out SPL, r16
rcall lcd_init ; Инициализация дисплея
;ВАШ КОД!!! Например:
Ldi r17, 0xC; Включаем изображение
ldi r17, 0x24; Символ с кодом 0x24
rcall user_write_DR; запись символа на отображение

mc89-3.jpg

Отображение текста на LCD дисплее 1602

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

1602 с I2C модулем

Скачать исходники и прошивку вы можете ниже

Прикрепленные файлы:

Теги:

Ильин Евгений Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (22) | Я собрал (0) | Подписаться

0
Sfdag #
А в какой программе писать этот код ,наверно AVRStudio? Почему когда пишут подобные статьи ,не пишут в чём писать надо код.Хотелось бы что бы писали в чём компилировали прошивку ,что бы новичкам попробовать скомпилировать этот код ,и возможно сделать свою первую прошивку
Ответить
0
Евгений Ил #
Да, все в AVRStudio. В следующий раз буду указывать, спасибо за замечание.
Ответить
0
Evgeniy #
Евгений Ильин, скажите как называется плата последовательного преобразователя для LCD? (модель)
Ответить
0
talibanich #
Названия как такового нет, просто например в eBay или гугл вбейте в поисковую строку 1602 serial
Например
Ответить
0
CaLLIa #
Контроллер дисплея WH1602B аналог ks0066u от SAMSUNG, согласно даташиту от WINSTAR. Хотя... он аналогичен HD44780 HITACHI
Ответить
0
Sergey #
Если линейки WH используют контроллер HD44780, почему-же тогда в описании WH1602L-YGH-CP написан контроллер S6B0066U?
Ответить
0
cezar #
Вы не указали номера выводов для attiny2313. К какому порту каким выводам 2313 подключать дисплей?
Ответить
0
Евгений Ил #
Подключаем PD0 микроконтроллера к линии RS LCD, вывод PD1 микроконтроллера к RW дисплея, ну а PD2 – соответственно к линии Е дисплея, а линии шины данных DB0-DB7 к соответствующим линиям порта B микроконтроллера. Сам дисплей подключаем согласно схеме вверху.
В статье написано...
Ответить
0
Андрей #
15) A – анод подсветки (подключаем сюда +5В через резистор 100Ом)
Не верю. Подключите через 100 Ом - никакой подсветки не увидите. В даташите рекомендуемое сопротивление 4.7 Ом.
Ответить
0
dizzyy Dubetskiy #
А я верю. Делал зарядное, давал 100 ом к +5. Делал металлоискатель, давал 200 ом на +12 в АКБ.
Ответить
0
Владимир #
Записал в микроконтроллер ATtiny2313V вашу программу и попробовал вывести символ с кодом 0x24, добавив строки как у вас в примере:
Ldi r17, 0xC; Включаем изображение
rcall user_write_IR; записываем в регистр (этой строчки у вас нет)
ldi r17, 0x24; Символ с кодом 0x24
rcall user_write_DR; запись символа на отображение

m: rjmp m ; конец программы

Но на дисплее ничего не появилось , кроме черных квадратов в верхней строке и серых в нижней строке.
Я использовал внутренний генератор микроконтроллера на 8МГц и включил деление на 8 при программировании, дисплей WH1602B-YYH-CTK WINSTAR.
Помогите пожалуйста разобраться в чем моя ошибка.
Ответить
0
Владимир #
Такая же проблема. Только экран WH1602B-yyK-ctk winstar.
Ответить
0
.юрий #
Я сделал цифровой КСВ-метр, у меня на экране горит только первый ряд квадратиков на дисплее. Микроконтроллер PIC16F373, как проверить что не работает?
Ответить
0
Алексей #
Первый ряд квадратиков горит когда дисплей не инициализирован, и на него не подана ни одна или неправильная команда, это может быть если вы использовали 100% рабочую библиотеку но забыли например сконфигурировать контроллер, или все намного проще если все тестится прямо на железе простой обрыв контакта (для проверки тестить в протеусе), или многое другое. Поэтому ответить на ваш вопрос по крайней мере в таком плане как он поставлен невозможно, нужно хотя бы кусочек кода увидеть и узнать как вы проверяете работоспособность
Ответить
0
Николай #
Столкнулся с проблемой WH1602B_ купил 2 шт подключил и в двух индикаторах одна и та же проблема
Греется микросхема U3 HTC, выпаял U3, индикатор работает но тускло и С1 С2 подпаяны наоборот со временем почернели, я их тоже удалил. Разобрался оказалось, что подается питание на U3 наоборот, но в самом индикаторе 1 нога (земля) 2 (+) как по стандарту но по разводке (косячок)
Полное название WINSTAR WH1602B-PPL-CWVE# CQC OK 05/15/14-015033
Ответить
0
Николай #
По поводу проблемы WH1602B.
Оказывается надо подавать питание только на 16(-) и 15(+), на 1 и 2 не надо микросхема U3(8ног) делает -5v на контрастность 3 ножка индикатора (если установить подсроечник) то можно регулировать на 3 ножке от +5 до -5v (хорошая контрастность при - 1,7v) на 3 выводе индикатора. С такой продлемой столкнулся в первые. До этого было 4-5 индикаторов без всяких проблем. Берите WH1602 без маленькой микросхемы на индикаторе
Ответить
0
Виталий #
Я не занимаюсь созданием устройств, просто на моем заряднике пропала куча квадратиков и соответственно прочитать выполняемую операцию стало затруднительно, в итоге купил экран который на 100% подходил на место старого но с 18 пинами, лишние 2 давали возможность управления цветами подсветки. Заменив, получил 2 ряда черных квадратов, под углом все видно хорошо, но как от них избавиться не понимаю, может вы подскажите?
Ответить
0
Николай #
Все правильно, но в ДАТАШИТЕ об этом ничего не сказано. Я уже разобрался сделал генератор и подал - 2.5 на ножку контрастности, все работает хорошо, но больше эти индикаторы не покупаю
Ответить
0
Алексей #
Кто сможет, поясните почему на второй картинке сверху в схеме выбран резистор 430 кОм. Я конечно понимаю, что опытным путем и из расчета силы тока 100 мА, но в datasheet почему то указаны значения от 10 - 20 кОм? И вообще совсем для самых тупых, как в схеме работает этот самый подстроечный резистор, он же не цифровой, а аналоговой значит у него изменение напряжения должно быть похожее на линию, но при этом ножка Vo является цифровой с определенным значение тока, т.е. у неё может быть либо 0.3В или 5В при определенной силе тока. Я так понимаю при изменении сопротивления резистора ток на самом контакте Vcc падает, в результате чего яркость снижается, но не понятно как можно её менять в определенных пределах?
Ответить
0
Николай #
Алексей будет работать от 1К - 47К проверено
430к - это чересчур, но тоже будет работать
Ответить
0
Сергей #
Хочу собрать частотомер. В магазине только LCD типа JXD1602A c контролером SPLC780D. Будет ли работать или поискать Winstar?
Ответить
0
Алекс #
Проверено, SPLS780D китайский клон HD44780, работает на ура.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Discovery V8 Arduino UNO
вверх