Дек 232013
 

Как подружить плату Ардуино с символьным дисплеем? Довольно просто! Все ниже по порядку и с подробностями.

Если есть желание получать информацию от Ардуино без подключения к компьютеру и вывода на серийный порт, можно использовать символьный дисплей. Сделать это не так сложно. Полученное удобство от общения неоценимо.
Для работы я использовал символьный LCD-дисплей J204A на базе чипа HD44780, на eBay часто встречается как LCD2004. 4 строки по 20 символов, инвертированный. Куплен с кучей других на eBay, за сущие копейки, от 60 до 100 рублей за штуку. Русский язык не поддерживается по-умолчанию, но это решаемая проблема, об этом как нибудь в следующий раз. И еще коннекторы на схеме не распаяны, придется поработать паяльником.
Для работы с дисплеями используется библиотека LiquidCrystal.h входящая в дефолтную постаку Arduino IDE.

Сам экран.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino, Дисплей, J204A, HD44780

А результат мы получим вот такой!

На снимке ниже вся работа с паяльником уже выполнена. Гребенка припаяна так специально, с ориентацией подключения с верхней стороны, там же где и экран. Тут видно насколько удобно в таком случае подключать дисплей. Хотя, возможно, кому-то будет удобнее сразу втыкать дисплей в макетную плату, тогда лучше припаять контакты наоборот.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino, Дисплей, J204A, HD44780

И с другой стороны.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino, Дисплей, J204A, HD44780

Подключение контактов и использование устройства подробно описано в даташите.

Информация по микроконтроллеру дисплея HD44780-datasheet .

А вот даташита по дисплею LCD2004 я не нашел, но зато в интернетах полным полно таблиц по дисплею LCD1602. Но они практически не отличаются друг от друга. По управлению и подключению полностью идентичны. Отличие только в количестве строк/символов на дисплее. Но это абсолютно не повлияет если у вас 1602.

Читать PDF с техническими данными не обязательно. Ниже я все объясню в деталях, но если нужны подробности, то все можно найти в даташите.

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

# Контакты Для чего используется Примечание
1 VSS (VSS) GND. Земля. Питание микроконтроллера дисплея. 0V
2 VDD (VCC) Питающее напряжение для микроконтроллера дисплея. +5V
3 V0 (VEE) Контраст символов на дисплее. Подключать лучше через потенциометр. от 0v до +5V
4 RS (RS) Выбор регистра.
5 RW (R/W) Переключение режима чтения/записи. Утянем на землю, нам нужно только передавать информацию на дисплей. 0-запись +5V-чтение
6 E Тактирование
7 D0 (DB0) Передача данных. (Не будем использовать) Данные
8 D1 (DB1) Передача данных. (Не будем использовать) Данные
9 D2 (DB2) Передача данных. (Не будем использовать) Данные
10 D3 (DB3) Передача данных. (Не будем использовать) Данные
11 D4 (DB4) Передача данных. (Задействуется) Данные
12 D5 (DB5) Передача данных. (Задействуется) Данные
13 D6 (DB6) Передача данных. (Задействуется) Данные
14 D7 (DB7) Передача данных. (Задействуется) Данные
15 A (LED+) +5V Напряжение, подсветка дисплея, через потенциометр можно регулировать яркость дисплея. +5V
16 K (LED-) GND Земля, подсветка дисплея 0V

v


Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino, Дисплей, J204A, HD44780

Передача данных к дисплею возможна в двух вариантах: по 8 и по 4 бит за такт. Т.к. Ардуино имеет мало контактов, мы будем использовать 4 — этого с лихвой хватает, чтоб обновлять информацию на дисплее с запредельной для восприятия скоростью.

Вот так все это дело у меня подключено. Возможно кажется что это хаос, но тут есть система. Можно выделить красные, зеленые, желтые и оранжевые провода. Красные всегда идут на +5V, зеленые — GND, а желтые и оранжевые — это провода для подключения к Ардуино, по которым идут данные.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino, Дисплей, J204A, HD44780

Самая важная часть — физическое подключение дисплея. По клику открывается в большом разрешении, где все хорошо видно.
R1 — Резистор 200OM. Сопротивление ограничивающее ток, проходящий через подсветку дисплея.
R2 — Потенциометр с сопротивлением до 10kOM. Кутим ручку, подбираем контраст символов.

Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino, Дисплей, J204A, HD44780

И крайне простой скетч, для вывода на экран пары строк.
Скачать.

/*  http://compblog.vlukyanov.com  */
#include <LiquidCrystal.h>  // Подключаем библиотеку для работы с дисплеем.

/* Командой LiquidCrystal lcd(rs, enable, d4, d5, d6, d7); создаем переменную типа LiquidCrystal
И определяем через какие контакты Ардуино рабоает с дисплеем.
подробнее про эту команду тут http://arduino.cc/en/Reference/LiquidCrystalConstructor */
LiquidCrystal lcd(6, 7, 8, 9, 10, 11);

void setup()
{
  lcd.begin(20, 4);                
  // определяем характеристики дисплея (20 Символов в строке, 4 строки) 
  // Для дисплея 1602 надо указывать lcd.begin(16, 2);
  
  lcd.setCursor(1, 1);             
  // Указываем с какой позиции начать выводить текст. строки и символы начинаются с 0!!! 
  // 1 уже отодвинет каретку на одно деление от начала экрана и сдвинет текст на одну строку ниже
  
  lcd.print("compblog.vlukyanov"); // выводим текст начиная с указанной позиции.
  lcd.setCursor(7, 2);             // выводим с 8го символа на экране в третьей строке.
  lcd.print(".com");               // текст для вывода.
}

void loop()
{ 
// в цикле ни чего больше не делаем все уже сделано во время инициализации платы.
}

Результат. Если знать, как все это подключается и как написать код, то время на все работы 5 минут.
Блог о компьютерах  и компьютерной технике, Москва, Владимир Лукьянов, Arduino, Дисплей, J204A, HD44780

Также дисплей может выполнять некоторые функции самостоятельно, а еще есть возможность задать некоторые параметры.

Например:

  • Скролить текст;
  • Мигать позицией курсора;
  • Включаться/выключаться.

Обо всех функциях дисплея можно подробнее узнать тут: http://arduino.cc/en/Reference/LiquidCrystal

А теперь бонус!
Подсветка дисплея тратит энергию, которую, при питании от батареи, например, хотелось бы экономить. Я сделал для себя такой вариант — при нажатии на кнопку, включается подсветка дисплея на 5 секунд.

Дисплей подключен почти тем же способом. Осталось только добавить кнопку с вызовом прерывания.
Как сделать такую кнопку подробно описано вот тут: http://compblog.vlukyanov.com/?p=435
Кнопка подключена по этой схеме также ко второму контакту.

Нужно внести небольшие изменения в подключение.
1) Все провода дисплея остаются на местах кроме «А», он был подключен к +5V, теперь подключаем к четвертому пину Ардуино.
2) Добавить кнопку как показано на схеме к контакту 2. Если не понятно, как это сделать, еще раз говорю идем сюда и читаем статью: http://compblog.vlukyanov.com/?p=435

Скетч:
Скачать.


/*  http://compblog.vlukyanov.com  */
#include <LiquidCrystal.h> // Подключаем библиотеку для работы с дисплеем.

int buttonInt = 0;         // Номер прерывания, которое будет вызыватся.
int screenLed = 4;         // Номер пина к которому подключен экран. +5V
volatile long x = 5000;    // переменная для хранения времени
LiquidCrystal lcd(6, 7, 8, 9, 10, 11); 

void setup()
{
  attachInterrupt(buttonInt, screenon, FALLING);  // параметры прерывания
  lcd.begin(20, 4);
  pinMode(screenLed, OUTPUT); 
  digitalWrite(screenLed,HIGH);                   // включаем дисплей
  lcd.setCursor(0, 0);
  lcd.print("Start screenon test!");
}

// Функция которая будет выполнятся при нажатии на кнопку.
void screenon()
{
  x = millis()+5000;            // Запоминаем время, когда надо выключить подсветку. Текущее время работы +5 секунд.
  digitalWrite(screenLed,HIGH); // Подаем напряжение на подсветку дисплея.
}

void loop()
{ 
  lcd.setCursor(0, 2); // переходим к третей строке 
  lcd.print(x);        // и выводим время когда дисплей выключится
  lcd.setCursor(0, 3); // переходим к четвертой строке
  lcd.print(millis()); // печатаем текущее время работы
  if ( x < millis() )  // если время работы выключения наступило >
  {
    digitalWrite(screenLed,LOW);  // то гасим дисплей
  }
}

И результат:

  6 комментариев to “Arduino и символьный LCD-дисплей”

  1. У меня таких экранчиков очень много, если кому то надо то могу отдать за пол цены.

  2. У меня есть такой дисплей но только на контроллере, кому надо ???? Это от касового апарата, он подключаеться к КОМ-порту ? пишите на cxemotexnikaqq@ukr.net

  3. расскажите пожалуйста
    как русифицировать дисплей J204A
    очень нужно)

    • Сейчас очень мало времени заниматься ардуино. Могу пока скинуть пару ссылок, где-то находил как это сделать, если еще актуально.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)