Дисплей Nokia 5110 – подключение к микроконтроллеру

Nokia 5110 подключение к микроконтроллеру
LCD Nokia 5110 представляет собой монохромный графический дисплей с разрешением 48×84 пикселей, который можно использовать для отображения различной информации в устройствах на микроконтроллерах. В прошлом, радиолюбители для своих поделок доставали подобные дисплеи из телефонов Nokia 3310, в настоящее время можно приобрести готовый модуль под Arduino, где дисплей смонтирован на печатной плате. Дополнительно на плате установлены светодиоды подсветки, синего цвета свечения.

Заказать дисплей можно здесь. В дисплее установлен контроллер PCD8544, напряжение питания может находиться в пределах 2,7…3,3 В, ток потребления составляет 240…320 мкА. Модуль имеет следующие выводы для подключения:

  1. RST – вывод сброса контроллера дисплея
  2. CE – вывод разрешения передачи данных
  3. DC – выбор режима передачи, команда или данные
  4. DIN – вход передачи данных интерфейса SPI
  5. CLK – вывод тактирования интерфейса SPI
  6. VCC – вывод питания дисплея
  7. LIGHT – вывод управление подсветкой, для включения необходимо подать низкий логический уровень
  8. GND – общий провод (отрицательный полюс источника питания)

Передача данных осуществляется с помощью стандартного интерфейса SPI, частота тактирования до 4 МГц. Во время сеанса передачи данных, на линии CE необходимо установить низкий логический уровень, тем самым разрешая передачу. Когда на дисплей передается команда, линию DC необходимо “притянуть” к общему проводу (лог. 0), при высоком логическом уровне на линии DC, можно передавать данные, которые непосредственно будут отображаться на дисплее.

При включении дисплея, необходимо обязательно выполнить процедуру сброса, в течение 30 мс после подачи питания, выдать на линию RST отрицательный импульс, минимальная длительность импульса (низкого логического уровня) составляет 100 нс. Лог. 0 на линии RST может присутствовать до подачи питания.

В следующей таблице приведены команды управления дисплеем:

КомандаD/CБайт командыОписание
DB7DB6DB5DB4DB3DB2DB1DB0
Значение бита H не имеет значения (0 или 1)
NOP000000000пустая команда
Function set000100PDVHНастройка функций
Write data1D7D6D5D4D3D2D1D0Запись данных
Бит H=0, базовые команды
Reserved0000001XXЗарезервировано
Display control000001D0EНастройки отображения
Reserved00001XXXXЗарезервировано
Y address001000Y2Y1Y0Установка адресного указателя для вывода данных (0 ≤ Y ≤ 5)
X address01X6X5X4X3X2X1X0Установка адресного указателя для вывода данных (0 ≤ X ≤ 83)
Бит H=1, расширенные команды
Reserved000000001Зарезервировано
00000001X
Temperature control0000001TC1TC0Установка значения температурного коэффициента
Reserved000001XXXЗарезервировано
Bias system000010BS2BS1BS0Настройка смещения напряжений
Reserved001XXXXXXЗарезервировано
Set Vop01Vop6Vop5Vop4Vop3Vop2Vop1Vop0Установка значения напряжения питания матрицы (контрастность)

Назначение битов в командах описано в следующей таблице:

БитЗначениеОписание
PD0Контроллер дисплея включен
1Контроллер дисплея выключен
V0Горизонтальная адресация
1Вертикальная адресация
H0Использовать базовый набор команд
1Использовать расширенный набор команд
D и E00Все сегменты дисплея выключены
01Все сегменты дисплея включены
10Нормальный режим
11Инверсное отображение
TC1 и TC000Температурный коэффициент 0
01Температурный коэффициент 1
10Температурный коэффициент 2
11Температурный коэффициент 3
BS2, BS1, BS00001:100
0011:80
0101:65
0111:48
1001:40/1:34
1011:24
1101:18/1:16
1111:10/1:9/1:8

Матрица дисплея условно поделена на столбцы, представляющие собой 8 пикселей, то есть когда мы отправляем 1 байт данных на дисплей, он отображается в этом столбце. По ширине (горизонтали) дисплея расположены 84 столбца, по высоте (вертикали) расположены 6 столбцов (то есть всего 6 строк). Адрес необходимого столбца (адресный указатель) задается командами X address, Y address. Ниже на картинке представлена структура матрицы:
Структура матрицы контроллера PCD8544

Адресный указатель автоматически инкрементируется после каждого отправленного на дисплей байта данных. С помощью бита V команды Function set, можно выбрать порядок заполнения столбцов матрицы, если бит равен 0 (горизонтальная адресация), столбцы матрицы заполняются слева-направо, сверху-вниз, при вертикальной адресации V=1, сверху-вниз, слева-направо. После заполнения последнего столбца (X=83, Y=5), адресный указатель возвращается в левый верхний угол (X=0, Y=0). На следующей картинке изображена схема адресаций:
Адресация контроллера PCD8544

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

  • 0x21 (00100001) – команда настройки функций: включить контроллер дисплея, горизонтальная адресация, выбрать расширенный набор команд.
  • 0x13 (00010011) – команда установки смещения напряжений (Bias system), в указанной команде выбрано значение 1:48. Значение смещения влияет на внутренний генератор напряжения, питающий матрицу дисплея. Внутренний генератор способен повышать напряжение до 8,5 В, которое влияет на контрастность изображения.
  • 0x04 (00000100) – команда установки температурного коэффициента, здесь выбран 0-й коэффициент. Данный коэффициент устанавливает кривую зависимости напряжение питания матрицы (контрастность) от температуры окружающей среды. При понижении температуры контрастность автоматически увеличивается, всего можно выбрать 4 различных коэффициента, соответствующие кривые можно посмотреть в даташите.
  • 0xC1 (11000001) – команда установки контрастности дисплея, в данном случае величина контрастности равна 0x65 (1000001). Значение может варьироваться от 0x00 до 0x7F. От этого значения зависит напряжение питания матрицы.
  • 0x20 (00100000) – команда настройки функций: включить контроллер дисплея, горизонтальная адресация, выбрать стандартный набор команд. Здесь мы возвращаемся на стандартный набор команд.
  • 0x0С (00001100) – команда настройки отображения: выбрать нормальный режим работы.

После инициализации дисплей готов к работе, но необходимо выполнить еще одно действие, после сброса и инициализации состояние сегментов не определено, и дисплей будет показывать мусор, поэтому следует выполнить очистку, записав во все столбцы значение 0x00.
На следующей картинке показана схема подключения дисплея Nokia 5110 к микроконтроллеру PIC16F628A:
Nokia 5110 схема подключения к МК
Основная часть кода программы приведена ниже (полный код доступен для скачивания в конце статьи):

Данный код выводит на дисплей последовательно 6 строк, с паузой в 1 сек: “Radiolaba.ru”, Тестовый код, *Дисплей*, Nоkiа 5110, Контроллер, PIC16F628A.

Каждый символ имеет размеры 5×7 пикселей, то есть состоит из 5 байт. Контроллер дисплея не имеет встроенного знакогенератора, поэтому байты для прорисовки символов включены в код программы в виде таблиц данных. Всего поддерживается отображение 162 символов, это спецзнаки, цифры, латинские и кириллические символы, все они разделены на 4 таблицы данных, так как одна таблица может вмещать только 256 байт данных.

Подпрограмма знакогенератора (viv_symb) на основе ASCII кода символа извлекает байты из соответствующей таблицы, и выводит их на дисплей. Сначала определяется таблица данных, в которой находятся байты символа, затем из ASCII кода символа вычитается определенное значение, чтобы в дальнейшем не выйти за границы таблицы, при выполнении вычисляемого перехода. Полученное значение умножается на 5, это необходимо для попадания на первый байт символа при вычисляемом переходе, так как каждый символ занимает в таблице 5 байт. Далее последовательно выводятся остальные 4 байта.

В подпрограмме viv_symb дополнительно вставляется пустой столбец (байт 0x00) для разделения символов на экране, то есть на одну строку дисплея умещается 84/6=14 символов. Байты для прорисовки символов занимают значительную часть памяти программ микроконтроллера: 162*5 = 810 слов, или 40,5% памяти.

Для вывода символа размерности угла и температуры, в подпрограмму viv_symb нужно передать значение 176 (ASCII код символа).

После настройки внутренних регистров микроконтроллера выполняется инициализация дисплея с помощью подпрограммы init_lcd, далее вызывается подпрограмма очистки дисплея clear_lcd, которая записывает во все столбцы матрицы значение 0x00, после очистки адресный указатель возвращается в левый верхний угол (X=0, Y=0). Ну а дальше на дисплей поочередно выводятся символы. Для установки адресного указателя в начала требуемой строки необходимо вызвать соответствующую подпрограмму ust_cur_1, ust_cur_2 и т. д. Для отправки команды используется подпрограмма sendispcom, для передачи данных sendispdat, предварительно необходимо записать в аккумулятор передаваемое значение.

В конце статьи также можно скачать кода программы для вывода шрифта удвоенного размера 9×14. При использовании такого шрифта на дисплее поместится 3 строки по 8 символов. Программа выводит на дисплей последовательно 3 строки, с паузой в 1 сек: +PIC16+, Nokia, 5110.

Здесь использованы почти те же алгоритмы что и для шрифта 5×7, с одной разницей: добавлены два регистра x_adr, y_adr, хранящих значения адресного указателя. Каждый символ состоит из 18-ти байт. Так как высота символа занимает две строки, сначала выводится верхняя часть, затем нижняя, поэтому для корректного отображения необходимо знать текущее положение указателя. Если требуется вывести символ в произвольном месте экрана, после установки адресного указателя следует перезаписать регистры x_adr, y_adr новыми значениями. В подпрограммах установки адресного указателя (ust_cur_x), вышеуказанное действие выполняется автоматически.

В этом коде заложены не все символы: цифры 0-9, прописные латинские символы A-Z, точка, пробел, тире, плюс, и символ размерности угла и температуры. Данные символы занимают 41*18 = 738 байт, или 37% памяти программ.

Кроме символов, на дисплей можно выводить графические изображения с разрешением 48×84 пикселей, и даже анимированные ролики. Одна картинка будет занимать 504 байта, поэтому для хранения большого количества изображений придется использовать внешнюю EEPROM память, или SD карту.

Nokia 5110 макетная платаNokia 5110 общий вид макетная плата

На следующем видеоролике представлен вывод информации на дисплей Nokia 5110:

Один из читателей сайта прислал таблицу для шрифта размером 7×11, при этом на экран влезает 4 строки. Таблица содержит цифры, специальные знаки, прописные и строчные латинские символы.
Nokia 5110 шрифт 7x11Nokia 5110-шрифт 7x11

У этой записи 14 комментариев

  1. Очень полезная статья,спасибо!

  2. Спасибо, сэкономит массу времени.

  3. Спасибо! И статья хорошая и сайт, ну и автор всего этого молодец . Сам разобрался – другим помогает! Без-воз-мез-дно, т.е. даром.

  4. Огромное спасибо за Ваши статьи, очень интересно и доступно!

    1. Я рад что вам и другим участникам понравилось, буду стараться писать новые статьи.

  5. Пожалуйста, помогите мне. Это не работает для меня. Я загрузил шестнадцатеричный файл 5×7 в PIC16F628A, подключив его к дисплею, но ничего не отображается. Знаете ли вы, для чего предназначена перемычка JP? Заранее спасибо.
    С наилучшими пожеланиями,
    Ференц Изинг, Венгрия
    Pozhaluysta, pomogite mne. Eto ne rabotayet dlya menya. YA zagruzil shestnadtsaterichnyy fayl 5×7 v PIC16F628A, podklyuchiv yego k displeyu, no nichego ne otobrazhayetsya. Znayete li vy, dlya chego prednaznachena peremychka JP? Zaraneye spasibo. S nailuchshimi pozhelaniyami, Ferenc Izing, Vengriya

  6. Извините, это настоящее сообщение:
    Пожалуйста, помогите мне. Это не работает для меня. Я загрузил шестнадцатеричный файл 5×7 в PIC16F628A, подключив его к дисплею, но ничего не отображается. Знаете ли вы, для чего предназначена перемычка JP? Заранее спасибо.
    С наилучшими пожеланиями,
    Ференц Изинг, Венгрия

    1. Здравствуйте, перемычка JP включает подсветку дисплея. Обычно сам дисплей плохо прижат к плате, из-за чего теряется контакт и дисплей ничего не показывает, попробуйте прижать дисплей к плате. Второй вариант, это подрегулировать контрастность дисплея, поменять значение контрастности в прошивке в пределах 0xA0 – 0xE6 (160-230). В прошивке установлено значение 0xC1

      movlw 0xC1 ;установка контрастности (значение 0x65)
      call sendispcom ;

  7. Спасибо за быстрый ответ. К сожалению, это не помогло затянуть панель или увеличить контраст. На дисплее ничего не отображается. В чем проблема?

    1. Кроме микроконтроллера остается только один вариант – это неисправный дисплей.

      Попробуйте прижать дисплей к плате с разным усилием, а также давить на различные участки дисплея. Можно попробовать разобрать дисплей, почистить контакты на плате и токопроводящую резину спиртом.

  8. Большое спасибо за прекрасный материал. Программа работает сразу. Поменял символы на то что хотел, перепрошил, всё получилось.
    Теперь задача считать данные ч контроллера HX711, вывести на экран вес и обороты бесколлекторного двигателя, которым предполагается управлять с этого же (pic16f628a) контроллера.

Имя (обязательно)Email (обязательно)Веб-сайт

Добавить комментарий