Подключение ЖК дисплея Nokia 5110 к Arduino: схема и программа

Подключение дисплея Nokia 5110 к Arduino. Примеры скетчей и библиотек для работы с популярным графическим экраном на Ардуино.

Комплектующие

Мы собираемся связать ЖК-дисплей Nokia 5110 и Arduino. Вы изучите интерфейс Nokia 5110 Arduino с помощью двух примеров.

Во-первых, мы просто покажем некоторые данные на экране, а во втором примере мы будем читать с датчика температуры и влажности DHT22 показатели и покажем их на ЖК-экране Nokia 5110.

Nokia 5110 LCD — отличный выбор для отображения данных. Это дешевле обычных ЖК и его очень легко использовать с микроконтроллерами. Вам просто нужно подключить несколько проводов и всё готово к работе.

Для подключения Nokia 5110 к Ардуино нам нужны будут сам экран с микроконтроллером и еще ряд деталей.

  • Arduino UNO × 1
  • Nokia 5110 LCD × 1
  • Многооборотный прецизионный потенциометр — 1 кОм (25 витков) × 1
  • Резистор 10 кОм × 4
  • Резистор 1 кОм × 1
  • Резистор 330 Ом × 1
  • Перемычки × 1
  • Макет (универсальный) × 1

Дополнительно нам понадобится программное обеспечение в виде Arduino IDE, с которым вы скорее всего знакомы.

Необходимые компоненты

  1. Плата Arduino (любой версии) (купить на AliExpress).
  2. ЖК дисплей Nokia 5110 (купить на AliExpress).
  3. Соединительные провода.

Варианты подключения дисплея Nokia 5110 к Arduino и схемы

Дисплей к Нокиа 5110 выпускался на платах синего и красного цветов. Различие состоит в том, каким уровнем сигнала активируется подсветка. Для синих плат это происходит при подаче высокого уровня на пин 8, а для красных — подачей низкого уровня на тот же коннектор.

Распиновка Nokia 5110

С обратной стороны дисплея в два ряда расположены 8 маркированных контактов, соединенных между собой параллельно.

8 контактов нокиа

8 контактов Nokia, которые расположены в 2 ряда.

Их обозначения с пояснениями приведены в таблице:

Номер

Обозначение

Направление

Комментарий

1

VCC

вход

Питание от 2,7 до 3,3 В

2

GND

вход

Питание, земля

3

SCE

вход

Выбор чипа по 0

4

RST

вход

Перезагрузка по 0

5

D/C

вход

Выбор: режим команд по 0, данных по 1

6

DN(MOSI)

вход

Последовательный ввод данных

7

SCLK

вход

Тактовая частота

8

LED

вход

Питание подсветки LED 3,3 В

Особенности питания Нокиа 5110

На плате LCD Нокиа 5110 имеются 2 коннектора для подачи электропитания:

  1. Пин под номером 1 служит для подачи напряжения в пределах от 2,7 до 3,3 В на микросхемы платы, потребляющие ток силой до 7 мА.

  2. Пин под номером 8 подает напряжение 3,3 В на 4 светодиода белого свечения, размещенные по углам экрана. Их задача — обеспечивать подсветку. При подаче напряжения на этот пин нужно помнить, что в цепи отсутствуют резисторы, ограничивающие ток. При подаче 3,3 В ток потребления подсветки может достигать 100 мА, потому следует заранее продумать варианты его ограничения.

Плата и коннекторы

Коннекторы 8 и 1 предназначены для подачи электропитания.

Интерфейс управления

При управлении дисплеем используется последовательный протокол, подобный SPI. Для преобразования поступающих сигналов и команд используется встроенная микросхема Philips PCD8544.

Управление осуществляется набором сигналов, подаваемых на коннекторы:

  • SCLK — временные метки;

  • DN — данные, входящие последовательно, выбор чипа (SCE) активируется низким уровнем;

  • SCE производит выбор чипа по низкому уровню;

  • D/C — сигнал, разрешающий отображение поступающей информации.

Полный набор команд описан в руководстве пользователя микросхемы PCD8544 в разделе Instructions. Имеются сигналы очистки дисплея, инверсии светимости пикселей, отключения питания и других.

Подготовка дисплея 5110 к подключению

До работы со скетчами следует подготовить «сборку» и определиться с соединением с Arduino. Понадобятся 8 коннекторов прямого типа или с загнутыми на 90 градусов ножками. Также нужно приготовить монтажную плату, «рельсу» с прямыми коннекторами или напаять переходники непосредственно к дисплею, расположить дисплей Nokia 5110 на монтажной плате.

Варианты подключения Нокиа 5110 к Arduino

Способ подключения LCD к Arduino затем можно применить в отношении других микроконтроллеров. Для высокой скорости передачи данных пины SCLK и DN(MOSI) выводятся на SPI Arduino. Коннекторы SCE, RST и D/C подключаются ко всем цифровым коннекторам микроплаты. Выход от светодиода соединяется с пином Arduino, поддерживающим ШИМ, что позволяет регулировать яркость подсветки. Питание дисплея 5110 нельзя напрямую соединять со стандартным выходом «Ардуино» из-за его 5-вольтовой логики.

Прямое соединение с Arduino

Этот способ подключения наиболее прост: применяются платы с 3 В питанием, такие как Arduino Pro 3.3V/8MHz либо Arduino Pro Mini. Применение версии микроконтроллера с питанием от 5 В допустимо, но это может негативно отразиться на продолжительности работы дисплея.

Подключение модуля

Подключение устройства к Arduino.

Пины подключаются так:

Пины дисплея

Пины «Ардуино»

Примечание

VCC

VCC 3,3 В

Только 3-вольтовая плата

GND

GND

 

SCE

7

Любой цифровой коннектор

RST

6

Любой цифровой коннектор

D/C

5

Любой цифровой коннектор

MOSI

11

Только этот коннектор

SCLK

13

Только этот коннектор

LED

9

Любой ШИМ-выход, ограничивающий R=330 Ом

Дополнительной защитой станут резисторы между пинами передачи данных от Arduino к экрану. При использовании Arduino Uno или иных 5-вольтовых плат можно применять резисторы на 10 и 1 кОм. Первые устанавливаются между пинами SCLK, DN, D/C и RST, а вторые между пинами SCE и 7. Резистор 330 Ом используется между коннектором светодиода и 9-ым пином.

Преобразователи уровня

Решить вопрос разного питающего напряжения можно с помощью преобразователей уровня. Для этого можно применить модули Bi-Directional Logic Level Converter либо TXB0104. Трудность состоит в том, что дисплей имеет 5 входов, а преобразователи обеспечивают только 4 контакта. Выход можно найти, если на RST подать высокий уровень через резистор на 10 кОм. Недостаток этого способа — невозможность перезагрузки дисплея при сохранении всех прочих функций.

Модуль преобразования

Модуль «Bi-Directional Logic Level Converter».

Подключение дисплея Nokia 5110 к Arduino Uno

Arduino madrobots.png
AliExpress RU&CIS

Привет Хабр! Эта очень маленькая статья для начинающих, тех кто только начал осваивать Arduino и её программирование. Я искал информацию о том, как подключить дисплей от Nokia 5110 к Arduino Uno, но как-то все было не до конца понятно. Информации на русском мало, поэтому прошу сильно не закидывать помидорами. После поисков и экспериментов решил написать свою простую инструкцию, надеюсь кому пригодиться.

image

Итак, будем делать все в Windows, так как в данный момент у меня она.

Для начала нам надо скачать библиотеку https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library

Теперь распаковываем это все в папку C:Program Files (x86)Arduinolibraries или C:Program FilesArduinolibraries в зависимости от того где у вас программа Arduino.

В папке C:Program Files (x86)ArduinolibrariesAdafruit-PCD8544-Nokia-5110-LCD-library-master должны после всех манипуляций появится следующие файлы:

image

Теперь надо правильно подключить ардуинку к дисплейчику. Вот правильная распиновка:

RST -> D3
CE -> D4
DC -> D5
Din -> D6
Clk -> D7
Vcc -> 3.3V
BL -> 5V
Gnd -> GND

Слева контакты дисплея, справа ардуино.

После того как все подключили можно запустить пример из папки examples и сразу залить его на Arduino Uno. После окончания можем созерцать красивую анимацию. Всё это конечно красиво, но много чего бесполезного. Что если нам надо просто выводить какой-то текст и показания в виде цифр? Ниже обрезанный код-шаблон для ваших последующих разработок. В нём убрано все лишнее, отображается на дисплее только текст и цифры меняются в цикле loop(). Можете выводить какую угодно информацию теперь в цикле. В данном случае задержка итерации цикла составляет 1 секунду.

Код:

#include <Adafruit_GFX.h>#include <Adafruit_PCD8544.h>Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);void setup() { display.begin(); display.clearDisplay();}void loop() { display.setTextSize(1); // размер текста 1 display.setTextColor(BLACK); // цвет текста темный display.println(«Hello, world!»); // отображаем надпись display.setTextSize(2); // увеличиваем шрифт на 1 display.println(random(1,10000)); // выводим число от 1 до 10000 display.setTextSize(3); display.print(random(1,10000)); display.display(); delay(1000); // задержка в секунду display.clearDisplay(); // очищаем дисплей}





Общая характеристика ЖК дисплея Nokia 5110

Существует два типа подобных ЖК дисплеев – у первого типа ламели для пайки располагаются с обоих сторон дисплея, а у второго типа они располагаются только с обратной стороны дисплея. Мы использовали дисплей 2-го типа, но принципы подключения и использования обоих типов этих дисплеев одинаковы, поэтому совершенно неважно какой из этих типов дисплеев вы приобретете.

Внешний вид ЖК дисплея Nokia 5110

Как уже упоминалось, графический ЖК дисплей Nokia 5110 имеет 84 пикселя по горизонтали и 48 пикселей по вертикали. Общий размер дисплея — 1.72’ x 1.72’. Дисплей имеет 6 входных контактов которые можно подключить к любому микроконтроллеру по протоколу SPI. Микросхема дисплея, которая отвечает за взаимодействие с микроконтроллером – это микросхема контроллера дисплея Philips PCD8544, даташит на которую можно найти по этой ссылке. Однако, поскольку мы используем плату Arduino, нам нет нужды беспокоиться о даташите этой микросхемы и принципах ее работы поскольку все низкоуровневое взаимодействие с ней мы будем осуществлять с помощью специальных библиотек для Arduino.

Преимущества использования Arduino Uno

Было создано множество платформ и микроконтроллеров, являющихся аналогами представленной в данной статье платформы Arduino. Одни из таких аналогов — Netmedia’s BX-24, Parallax Basic Stamp и многие другие. Однако остановимся на Arduino Uno, так как этот конструктор имеет ряд преимуществ перед остальными контроллерами. На них и стоит обратить внимание при выборе платформы для работы. В первую очередь это низкая стоимость данных устройств. Модели с этим программным обеспечением стоят менее 45 долларов, а при желании могут быть собраны вручную, так как обладают довольно простой конструкцией. Вторым пунктом стоит отметить, что платформы Arduino могут работать со всеми операционными системами: Windows, Linux, а также Macintosh OSX, тогда как все остальные ограничиваются работой исключительно с Windows.

Распиновка Nokia 5110

Выводы Nokia 5110 LCD выглядит следующим образом:

RST: пин сброса
SCE: пин выбора чипа
D/C: (Данные / Команда): это вывод выбора режима. LOW означает командный режим, а HIGH означает режим данных.
DN (Data Pin): последовательные данные на входе
SCLK: последовательный тактовый сигнал
VCC: входное напряжение от 2,7 до 3,3 В
Светодиод: этот светодиод является подсветкой. Входное напряжение 3,3 В
GND: земля

Скетч и библиотека для работы с дисплеем

Для работы с данным дисплеем существует множество библиотек, мы же будем использовать весьма простую и функциональную библиотеку <LCD5110_Basic.h>, доступную по адресу http://www.rinkydinkelectronics.com/library.php?id=44. Данная библиотека позволяет работать с дисплеем с помощью 14 простых функций:

Функция Назначение
LCD5110(SCK, MOSI, DC, RST, CS) Объявление дисплея с указанием пинов подключения.
InitLCD([contrast]) Инициализация дисплея с опциональным указанием контрастности (0-127), по умолчанию используется значение 70.
setContrast(contrast) Изменение контрастности (0-127).
enableSleep() Переводит экран в спящий режим.
disableSleep() Выводит экран из спящего режима.
clrScr() Очищает экран.
clrRow(row, [start], [end]) Очищает выбраную строку (номер row), от позиции start до end (опционально).
invert(true), invert(false) Включает и выключает инверсию содержимого LCD экрана.
print(string, x, y) Выводит строку символов (string) с заданными координатами (x, y); вместо x-координаты можно использовать LEFT, CENTER и RIGHT; высота стандартного шрифта 8 точек, поэтому строки должны идти с интервалами через 8.
printNumI(num, x, y, [length], [filler]) Выводит целое число (num) на экран на заданной позиции (x, y); опционально: length – количество символов, резервируемых для числа; filler – символ для заполнения «пустот», если число меньше желаемой длины length (по умолчанию это пробел ” “).
printNumF(num, dec, x, y, [divider], [length], [filler]) Выводит число (num) с плавающей запятой; dec – число знаков после запятой; опционально: divider – знак десятичного разделителя, по умолчанию точка “.”, length и filler – по аналогии с предыдущей функцией.
setFont(name) Выбирает шрифт; встроенные шрифты – SmallFont,  MediumNumbers и BigNumbers.
invertText(true), invertText(false) Инвертирует текст, выведенный с помощью функций print, printNumI и printNumF (вкл./выкл.).
drawBitmap(x, y, data, sx, sy) Выводит картинку на экран по необходимым координатам (x, y); data – массив, содержащий картинку; sx и sy – ширина и высота рисунка.

Рассмотрим работу с дисплеем с помощью данной библиотеки на примере простого скетча:

#include <LCD5110_Basic.h>LCD5110 LCD(7, 6, 5, 4, 3); //обьявляем дисплей с указанием пинов подключенияextern uint8_t SmallFont[]; //указываем наличие массива со шрифтом SmallFont в библиотекеextern uint8_t MediumNumbers []; //указываем наличие массива со шрифтом MediumNumbers в библиотекеvoid setup() {     LCD.InitLCD(); //инициализируем дисплей}void loop() {LCD.disableSleep(); //выводим дисплей из режима снаLCD.clrScr(); //очищаем дисплейLCD.setFont(SmallFont); //устанавливаем шрифт SmallFontLCD.print(“Hello World!”, CENTER, 2); //выводим “Hello World!” на второй строчке с равнением по центруLCD.setFont(MediumNumbers); // устанавливаем шрифт MediumNumbersfor (int i=0; i<=5; i++) {     LCD.clrScr(); //очищаем экран     LCD.print(i, CENTER, 20); //выводим значение i по центру 20 строчки     delay(1000);}LCD.enableSleep(); //вводим дисплей в режим сна на время длительной паузыdelay(5000);}

После того как мы рассмотрели базовые функции библиотеки, остановимся более подробно на функции drawBitmap и рассмотрим особенности вывода изображений на экран.

Для начала нам понадобится интересующее изображение в формате .bmp.

Далее необходимо скачать программу Image Generate от Alex_EXE по адресу https://alex-exe.ru/programm/image-generate/. В окне программы устанавливаем необходимое разрешение нашего изображения на дисплее (должно быть меньше, чем 84 пикселя по горизонтали и 48 по вертикали), нажимаем «установить новый размер».

Нажимаем «установить новый размер»Нажимаем «установить новый размер»

После этого нажимаем «Картинка», «Открыть», выбираем наш файл, жмем «преобразовать».

жмем «преобразовать»Жмем «преобразовать»

Нажимаем «Применить».

Нажимаем «Применить»Нажимаем «Применить»

Теперь жмем на кнопку «Массив» и копируем появившийся массив в новый скетч.

Теперь жмем на кнопку «Массив» и копируем появившийся массив в новый скетчТеперь жмем на кнопку «Массив» и копируем появившийся массив в новый скетч#include <LCD5110_Basic.h>LCD5110 LCD(7, 6, 5, 4, 3); //обьявляем дисплей с указанием пинов подключенияstatic const char lcd_image_mas[288] = {} //массив с изображениемvoid setup() {     LCD.InitLCD(); //инициализируем дисплей}void loop() {LCD.clrScr(); //очищаем дисплейLCD.drawBitmap(18, 0, lcd_image_mas, 48, 48); //выводим изображение из массива размером 48х48 пикселей начиная с точки 18х0LCD.enableSleep(); //вводим дисплей в режим снаwhile(1);}

Пример №1

В первом примере мы просто отобразим данные на ЖК-дисплее Nokia 5110. Принципиальная схема для соединения Nokia 5110 и Arduino показана ниже.

Схема соединения

Для работы Nokia 5110 LCD требуется 3,3 В, поэтому нам придется использовать резисторы для преобразования 5 В в 3,3 В. Если вы будете работать с Nokia 5110 без резисторов, экран будет работать, но срок службы ЖК-дисплея сократится.

  • Подключите контакт 1 (контакт RST) к контакту 6 Arduino через резистор 10 кОм.
  • Подключите контакт 2 (контакт SCE) к контакту 7 Arduino через резистор 1 кОм.
  • Подсоедините контакт 3 (контакт D/C) к контакту 5 Arduino через резистор 10 кОм.
  • Подсоедините контакт 4 (DIN контакт) к контакту 4 Arduino через резистор 10 кОм.
  • Подсоедините контакт 5 (контакт CLK) к контакту 3 Arduino через резистор 10 кОм.
  • Подсоедините контакт 6 (контакт VCC) к контакту 3,3 В Arduino.
  • Подсоедините контакт 7 (светодиодный контакт) к среднему контакту потенциометра 1 кОм через резистор 330 Ом и подключите два других контакта к VCC и заземлению.
  • Подсоедините контакт 8 (контакт GND) к заземлению Arduino.

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

Код

Скачайте библиотеку Nokia 5110 ниже.

Сам код первого примера:

#include <PCD8544.h> PCD8544 lcd;void setup() { lcd.begin(84, 48);}void loop() { lcd.setCursor(0, 0); lcd.print(» WELCOME «); lcd.setCursor(0, 1); lcd.print(» To»); lcd.setCursor(0,2); lcd.print(«ArduinoPlus.ru»); delay(200); }

Прежде всего, мы подключаем библиотеку для Nokia 5110 LCD. Библиотека будет включать все команды, которые нам потребуются для ЖК-дисплея Nokia 5110. Затем мы объявили переменную с именем «lcd» типа PCD8544.
#include <PCD8544.h>
PCD8544 lcd;

Затем в функции setup (настройка) мы установили разрешение для Nokia 5110 LCD. ЖК-дисплей Nokia5110 имеет разрешение 84х48, поэтому мы установили разрешение 84х48 в Arduino IDE.

lcd.begin(84, 48);

Затем в функции loop (цикл) мы сначала установили курсор на первую строку и напечатали «Добро пожаловать!» (WELCOME). Затем мы перешли ко второй строке и напечатали «в» (to), а затем в третьей строке мы напечатали «ArduinoPlus.ru».

lcd.setCursor(0, 0); lcd.print(» WELCOME «); lcd.setCursor(0, 1); lcd.print(» To»); lcd.setCursor(0,2); lcd.print(«ArduinoPlus.ru»); delay(200);

Видео, демонстрирующее работу схемы

loading.gif

Загрузка…

2 367 просмотров

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