Дисплей 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 Байт команды Описание
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Значение бита H не имеет значения (0 или 1)
NOP 0 0 0 0 0 0 0 0 0 пустая команда
Function set 0 0 0 1 0 0 PD V H Настройка функций
Write data 1 D7 D6 D5 D4 D3 D2 D1 D0 Запись данных
Бит H=0, базовые команды
Reserved 0 0 0 0 0 0 1 X X Зарезервировано
Display control 0 0 0 0 0 1 D 0 E Настройки отображения
Reserved 0 0 0 0 1 X X X X Зарезервировано
Y address 0 0 1 0 0 0 Y2 Y1 Y0 Установка адресного указателя для вывода данных (0 ≤ Y ≤ 5)
X address 0 1 X6 X5 X4 X3 X2 X1 X0 Установка адресного указателя для вывода данных (0 ≤ X ≤ 83)
Бит H=1, расширенные команды
Reserved 0 0 0 0 0 0 0 0 1 Зарезервировано
0 0 0 0 0 0 0 1 X
Temperature control 0 0 0 0 0 0 1 TC1 TC0 Установка значения температурного коэффициента
Reserved 0 0 0 0 0 1 X X X Зарезервировано
Bias system 0 0 0 0 1 0 BS2 BS1 BS0 Настройка смещения напряжений
Reserved 0 0 1 X X X X X X Зарезервировано
Set Vop 0 1 Vop6 Vop5 Vop4 Vop3 Vop2 Vop1 Vop0 Установка значения напряжения питания матрицы (контрастность)

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

Бит Значение Описание
PD 0 Контроллер дисплея включен
1 Контроллер дисплея выключен
V 0 Горизонтальная адресация
1 Вертикальная адресация
H 0 Использовать базовый набор команд
1 Использовать расширенный набор команд
D и E 00 Все сегменты дисплея выключены
01 Все сегменты дисплея включены
10 Нормальный режим
11 Инверсное отображение
TC1 и TC0 00 Температурный коэффициент 0
01 Температурный коэффициент 1
10 Температурный коэффициент 2
11 Температурный коэффициент 3
BS2, BS1, BS0 000 1:100
001 1:80
010 1:65
011 1:48
100 1:40/1:34
101 1:24
110 1:18/1:16
111 1: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:

Прошивка МК и исходник для шрифта 5×7
Прошивка МК и исходник для шрифта 9×14
Даташит PCD8544

Последние записи:

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *