Подключение LCD WH0802 к Arduino через регистр сдвига
Довольно редко микропроцессорная система обходится без какого-нибудь цифрового индикатора. Обычно это семисегментные светодиодные или жидко-кристаллические индикаторы. У меня "завалялся" более сложный - двустрочный индикатор Winstar WH0802A (приобрел "до кучи" - вот теперь руки дошли).
Стал, на досуге, разбираться с устройством... Откровенно говоря, был удивлен "бесхозяйственностью" производителя контроллера: довольно небыстрое устройство... а шина данных параллельная, да еще и 8-ми битная... Непонятное расточительство! Хорошо, хоть предусмотрели 4-х битный режим...
Полез в "ленивое" общество Arduino - ОК, все в порядке: про такое семейство контроллеров все известно и есть стандартная библиотека LiquidCrystal. Напаял проводов - подключил... Все работает "с пол-пинка", только ручку переменного резистора пришлось немного "покрутить", чтоб добиться нормальной контрастности (кстати: комфортное напряжение на выводе VO составило +0,65В - что довольно близко к теретическим "напряжение питания минус четыре вольта"). Проверил все примеры - с учетом того что они даются для 16-ти разрядного индикатора, а у меня только 8 - все работает корректно...
Но в душе все равно "как-то некомфортно": на такую "фигню" ушло шесть контактов ардуины (4 разряда шины данных, Enable и RS (команда/данные), чтение/запись запаял на землю - без чтения обойдемся...) Возникло логичное желание "усовершенствовать"! Как можно уменьшить число проводов? Правильно: заменив параллельную шину последовательной. "Пошерстил" рынок на предмет регистров сдвига - обычно применяют 74хх595, но есть и более "старые" 74хх164 (в принципе, и 4-х разрядного бы даже хватило). Оказалось - дефицитом эти микросхемы не являются, стоит "удовольствие" 30 рублей.
Стал, на досуге, разбираться с устройством... Откровенно говоря, был удивлен "бесхозяйственностью" производителя контроллера: довольно небыстрое устройство... а шина данных параллельная, да еще и 8-ми битная... Непонятное расточительство! Хорошо, хоть предусмотрели 4-х битный режим...
Полез в "ленивое" общество Arduino - ОК, все в порядке: про такое семейство контроллеров все известно и есть стандартная библиотека LiquidCrystal. Напаял проводов - подключил... Все работает "с пол-пинка", только ручку переменного резистора пришлось немного "покрутить", чтоб добиться нормальной контрастности (кстати: комфортное напряжение на выводе VO составило +0,65В - что довольно близко к теретическим "напряжение питания минус четыре вольта"). Проверил все примеры - с учетом того что они даются для 16-ти разрядного индикатора, а у меня только 8 - все работает корректно...
Но в душе все равно "как-то некомфортно": на такую "фигню" ушло шесть контактов ардуины (4 разряда шины данных, Enable и RS (команда/данные), чтение/запись запаял на землю - без чтения обойдемся...) Возникло логичное желание "усовершенствовать"! Как можно уменьшить число проводов? Правильно: заменив параллельную шину последовательной. "Пошерстил" рынок на предмет регистров сдвига - обычно применяют 74хх595, но есть и более "старые" 74хх164 (в принципе, и 4-х разрядного бы даже хватило). Оказалось - дефицитом эти микросхемы не являются, стоит "удовольствие" 30 рублей.
В схеме подключения ничего сверхестественного нет:
Принцип работы ясен из схемы: E LCD в "ноль" - пишем в регистр данные - ставим на RS нужный уровень (команда/данные) - включаем импульс на E LCD - даем паузу на отработку задачи...
Естественно, стандартная библиотека Arduino LiquidCrystal про "такие махинации" с подключением ничего не знает... Пришлось подправить ее... Заодно убрал "лишнее": оставлен только 4х битный режим работы, исключено управление входом R/W LCD. Назвал "творение" LiquidCrystal_164. Файлы библиотеки можно взять тут. Там оставил примерчик с "Hello, word". Подключение только по трем проводам - в комментариях примера подробно расписано:
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
1 * LCD RS pin to digital pin 12 & 74164 pin 1,2 (DAT)
2 * LCD Enable pin to digital pin 11
* LCD D4 pin to 74164 pin 6 (Q3)
* LCD D5 pin to 74164 pin 5 (Q2)
* LCD D6 pin to 74164 pin 4 (Q1)
* LCD D7 pin to 74164 pin 3 (Q0)
* LCD R/W pin & 74164 RES (9) to ground
3 * 74164 pin 8 (CLK) to pin 10
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3) [+0,65V]
На нижепредставленных фото хорошо видно как подключается и работает:
- четырех-битный режим,
- Enable LCD подключаем к контроллеру,
- обнулять регистр сдвига будем (если понадобится) записью цепочки нулей, поэтому "СБРОС" не активен,
- тактовый вход регистра - к контроллеру,
- вход данных регистра (в 164-ой их два по схеме "И") объединим с входом RS LCD.
Принцип работы ясен из схемы: E LCD в "ноль" - пишем в регистр данные - ставим на RS нужный уровень (команда/данные) - включаем импульс на E LCD - даем паузу на отработку задачи...
Естественно, стандартная библиотека Arduino LiquidCrystal про "такие махинации" с подключением ничего не знает... Пришлось подправить ее... Заодно убрал "лишнее": оставлен только 4х битный режим работы, исключено управление входом R/W LCD. Назвал "творение" LiquidCrystal_164. Файлы библиотеки можно взять тут. Там оставил примерчик с "Hello, word". Подключение только по трем проводам - в комментариях примера подробно расписано:
This sketch prints "Hello World!" to the LCD
and shows the time.
The circuit:
1 * LCD RS pin to digital pin 12 & 74164 pin 1,2 (DAT)
2 * LCD Enable pin to digital pin 11
* LCD D4 pin to 74164 pin 6 (Q3)
* LCD D5 pin to 74164 pin 5 (Q2)
* LCD D6 pin to 74164 pin 4 (Q1)
* LCD D7 pin to 74164 pin 3 (Q0)
* LCD R/W pin & 74164 RES (9) to ground
3 * 74164 pin 8 (CLK) to pin 10
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3) [+0,65V]
На нижепредставленных фото хорошо видно как подключается и работает:
опубликовано 27.02.2015