Translate

пятница, 6 апреля 2018 г.

Дисплей QC1602A V2.0, его подключение к Ардуино и библиотека LiquidCrystal.h


Немного лирики об Ардуино

Давно-давно заказал я из Китая пару дисплеев QC1602A, чтобы в долгосрочной перспективе что-нибудь хорошее на них собрать. Так они у меня бы и провалялись, если бы я не заинтересовался темой Ардуино. Идея этого конструктора мне ужасно понравилась, особенно когда я узнал, что в той же самой Поднебесной продаются все его недорогие аналоги и комплектующие. Так что вероятно, что ближайшие свои посты я посвящу именно Ардуино и всему тому, что на нём смогу собрать. После ассемблера и, по сути дела, самостоятельной разработки библиотек для железа, я ощутил всю прелесть программирования на C++, а также подключения уже готовых библиотек, которые добрыми руками заботливых программистов написаны чуть ли не для всего на свете. И я, в общем, в результате всей душой проникся к ардуинкам. Как знать, может ещё и разочаруюсь... но пока что - материала о них море, пишут про них (и для них тоже пишут!) все, кому не лень, так что захотелось и мне...


Итак, собственно, обзор QC1602A V2.0

Зелёный и синий, канифоль от контактов отмыл спиртом
как смог :)
Никакой рекламы и ссылок на китайские магазины в этом посте не предвидится, пишу что думаю, скорее для себя. Дисплейчики, честно говоря, посредственные, особенно по современным меркам, так что скорее подходят уже не для сборки девайсов, а для изучения самой Ардуино, потому что вывести на них пару слов несложно, а вот выводить что-то осмысленное и много - это поищите чего другое.
В моём распоряжении есть зелёная и синяя версия этого дисплея. Какой симпатяжнее - решать вам. Зелёный с чёрными буквами, синий с белыми, так что вроде повеселее, но тухнут эти буквы как-то неприятно, тоже через какой-то красно-чёрный цвет и не мгновенно, так что быстро выводить на них информацию - тоже занятие неблагодарное.
Скорее так: когда надоело выводить результат работы через Serial.println() и хочется чего-то более ощутимого - можно подключить этот дисплейчик, (на дисплей он явно как-то не тянет) но, уверен, что быстро наиграетесь. Термометр какой замутить на нём что ли...
А, да, ещё одна прекрасная особенность сего девайса - кириллицы на нём нет. Пытаемся вывести кириллицу - наслаждаемся кракозябрами. Так что только 0...9, A...Z. Ну зато маленькие и большие буквы есть и конечно знаки препинания!
Библиотека с руссификацией, как она есть.
Но не нужно отчаиваться. На просторах Интернета пишут, что на этом дисплейчике можно подключить кириллицу! Правда, не факт, что вам очень понравится этот способ, но есть библиотека LiquidCrystalRus.h, скачать её можно здесь: https://github.com/mk90/LiquidCrystalRus
Я её добросовестно скачал, и... у меня ничего не получилось. Вернее, получилось вот что:
Угадайте, что я там понаписал.
В общем, конечно, может я что-то не так сделал, но, подозреваю, что тут нужны танцы с бубном, потому я ограничусь своим скромным английским, без перевода.

Подключаем дисплей к Ардуино.

Для начала обозначу выводы, которые нельзя подключать абы куда ☺
VSS - на землю, минус питания.
VDD - плюс питания (В даташите заявлено напряжение +4,5V... +5,5V; Сознаюсь, я подал 6, но больше лучше не рисковать).
V0 - на среднюю точку потенциометра (10 килоом) - настройки яркости дисплея , при желании потенциометр потом можно заменить постоянными резисторами, если уже всё настроено, но при изменении напряжения буквы тоже начнут тускнеть!
A - через токоограничивающий резистор (я ставил 330 ом, но можно немного поменьше или побольше, главное, чтоб он был! Светодиоды не любят сидеть прямо на +5 вольтах) подключаем на напряжение питания подсветку.
K - земля питания светодиодов подсветки.

Теперь все остальные выводы. Их подключаем к ардуине, куда хотим.
RS - выбор регистра, не заморачивайтесь и вешайте на нужную ногу (например D13)
RW - чтение/запись, можно повесить на землю, о её значении написал дальше.
E - enable, тоже на любую ногу, (допустим D12)
D0 - D7 - подключайте к нужным ногам Ардуино точно также, и я рекомендую подключить только D4 - D7, а остальные четыре просто оставить в покое. (см фотку выше)


Библиотека LiquidCrystal.h

Чтобы начать работу, не забудьте подключить библиотеку LiquidCrystal.
Скачать можно по ссылке вот тут, с официального сайта:  https://playground.arduino.cc/Main/LiquidCrystal#Download
Как я уже писал, программу писать для него на C++ - одно удовольствие, но на этом оно, кажется, и заканчивается.
В начале программы подключаем библиотеку:
#include <LiquidCrystal.h>
И инициализируем дисплей по одному из предложенных синтаксисов:
LiquidCrystal lcd(rs, enable, d4, d5, d6, d7) 
LiquidCrystal lcd(rs, rw, enable, d4, d5, d6, d7)  
LiquidCrystal lcd(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)  
LiquidCrystal lcd(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7) 
В скобках, если не догадались, прописываются номера ножек Ардуино, к которым подключены соответствующие выводы дисплея. Остался вопрос: почему 4 варианта, и какой выбрать?
Ответ: скорее всего вам пойдёт любой.
Если разобраться: rw нужен, чтобы читать/записывать символы с дисплея. Я очень сомневаюсь, что вы будете хранить в его памяти информацию, потому что памяти этой там на две строчки в несколько десятков символов, потому rw можно смело вешать на землю.
Что касается числа используемых выводов: можно использовать четыре, можно все восемь. Все мои программы работали с четырьмя выводами. 

Итак, я предлагаю подключать по такой схеме (но вы можете как угодно иначе)
LiquidCrystal lcd(12, 11, 6, 7, 8, 9); 
Далее в void setup() надо прописать количество используемых строк и длину строки, например:

void setup()
{
  lcd.begin(2,50); // Две строки длиной 50 символов
}
Это почти всё.
Осталось вывести что-нибудь на экран. Есть несколько наиболее распространённых функций, которые вызываем по мере необходимости:
lcd.print(); // В скобках указываем переменную или надпись в кавычках  
lcd.setCursor(0, 0); // Установка курсора для начала записи; формат (№ символа, № строки) 
lcd.clear(); // Очистить дисплей
Вызываем все эти функции уже внутри void loop()

Функций значительно больше, но остальными я не пользовался.
lcd.home(); // Вернуть курсор в начало.
lcd.write(data); // Записать информацию (data) на дисплей, возвращает количество записанных байт. 
lcd.cursor(); // Выводит на дисплей знак "_" - курсор. 
lcd.noCursor(); // Скрывает курсор. 
lcd.blink(); // Выводит мигающий курсор.
lcd.noBlink(); // Скрывает мигающий курсор. 
lcd.display(); // Включает дисплей с восстановлением всего, что на нём изображалось, если он был выключен функцией noDisplay(); 
lcd.noDisplay(); // Выключает дисплей без потери записанной на него информации. 
lcd.scrollDisplayLeft(); // Сдвигает надпись на дисплее влево на один символ. 
lcd.scrollDisplayRight(); // Аналогично вправо. 
lcd.autoscroll(); // Автоматически смещает надпись при вводе каждого нового символа.
lcd.noAutoscroll(); // Выключает автоматическую прокрутку дисплея. 
lcd.LeftToRight(); // Работает по умолчанию - запись символов слева направо. 
lcd.RightToLeft(); // Инвертирует порядок символов, начало теперь справа. 
lcd.createChar(num, data); // Записать собственный символ в память дисплея, всего можно записать 8: от 0 до 7. Пример:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);     
byte smiley[8] = 
{          
 B00000,
 B10001,
 B00000,
 B00000,
 B10001,
 B01110,
 B00000,
};

void setup() 
{           
  lcd.createChar(0, smiley);
  lcd.begin(16, 2);
  lcd.write(byte(0));
}

void loop() {}
  
Ну, и напоследок - пример работающей программы

#include <LiquidCrystal.h> 
LiquidCrystal lcd (13, 12, 2, 3, 4, 5);

void setup() 
{  
       lcd.begin(16, 2);  

void loop() 
{     lcd.print("hello, world!");  
      delay(500);
      lcd.clear();
      delay(500);
}

Это всё, благодарю за внимание, надеюсь, материал окажется полезен кому-то кроме меня ☺


Ссылки:

Datasheet QC1602A: https://www.mpja.com/download/qc1602a.pdf
Ссылка на официальный сайт с библиотекой: https://www.arduino.cc/en/Reference/LiquidCrystal
Ещё мне понравилась статья на эту тему, там всё очень подробно: http://developer.alexanderklimov.ru/arduino/liquidcrystal.php#begin

Комментариев нет:

Отправить комментарий