Дисплей Nokia 3310 tinyAVR

October 14, 2014 by admin Комментировать »

Это небольшой графический дисплей, подходящий для встраивания в различные устройства. Он довольно популярен, поскольку просто подключается к большинству микроконтроллеров и доступен. Размер самого дисплея 38×35 мм, размер активной зоны — 30×22 мм, разрешение — 84×48 пикселов. Дисплей поставляется с контроллером PCD8544, который управляет жидкокристаллической матрицей из 48 строк и 84 столбцов. Дисплей легко состыковать при помощи стандартного интерфейса SPI. Вот некоторые его особенности:

0 Нужен только один внешний компонент— конденсатор емкостью от 1 до 10 мкФ между клеммами Vout и GND.

□              Диапазон напряжения питания от 2,7 до 3,3 В.

□              Низкое потребление энергии (хорошо подходит для систем с питанием от батарей).

□              Диапазон температур от -25 до +70 °С.

Полностью спецификацию на дисплей можно скачать по ссылке: www.avrgemus.com/tinyavrl.

Сопряжение дисплея Nokia 3310

Дисплей Nokia 3310 работает через интерфейс SPI, который имеется во многих микроконтроллерах tinyAVR, но отсутствует в микроконтроллерах других серий. Часто SPI занят обменом с другими устройствами. Однако это не означает, что данный дисплей нельзя использовать с этими устройствами. Мы можем состыковать такой дисплей при помощи программной реализации интерфейса SPI через любой вывод микроконтроллера. Для этой цели нам потребуется как минимум четыре контакта.

Вот назначение контактов дисплея Nokia 3310 (рис. 4.5):

□              усс— входное напряжение питания, подаваемое на внутренний стабилизатор (от 2,7 до 3,3 В).

□              SCK— входной тактовый сигнал (от 0 до 4,0 МГц). Подключается к контакту ввода/вывода микроконтроллера.

□              SDI — вход последовательных данных. Подключается к контакту ввода/вывода микроконтроллера.

□              D/C — вход выбора режима Data/Command. Подключается к контакту ввода/вывода микроконтроллера.

□              SCE — выбор кристалла. Этот контакт может быть подключен к контакту ввода/вывода микроконтроллера или заземлен (чтобы дисплей был всегда активизирован).

□              GND — общая шина.

□              Vqut— VLCD. Этот контакт подключен к GND через конденсатор емкостью 10 мкФ.

□              RST — контакт сброса контроллера PCD8455. Подключается к контакту ввода/вывода микроконтроллера.

Рис. 4.5. Назначение контактов дисплея Nokia 3310

Функциональное описание контроллера PCD8455

PCD8455 — это контроллер, который управляет графическим дисплеем из 48 строк и 84 столбцов. Все требуемые для дисплея функции содержатся в одном чипе (в том числе генерирование необходимых напряжений), что минимизирует количество необходимых внешних компонентов и потребление энергии. На рис. 4.6 изображена блок-схема контроллера PCD8455.

Рис. 4.6. Блок-схема контроллера PCD8455

Вот некоторые важные особенности этого контроллера:

□              Счетчик адреса — содержит адрес в памяти отображаемых данных (для адресации столбца из 8 пикселов). Адреса по оси X (от 0 до 83) и адреса по оси Υ (от О до 5) настраиваются отдельно.

□              Память отображаемых данных — статическая память размером 48×84 бита, которая хранит отображаемые данные. Она разделена на шесть страниц по 84 байта (6x8x84 бита). Каждая страница адресуется одним адресом К, а отдельные столбцы каждой страницы адресуются одним адресом X.

□              Формат команд определяется двумя режимами — если на входе D/С присутствует низкий уровень (LOW), то текущий байт интерпретируется как байт команды; в противном случае (при высоком уровне — HIGH) текущий байт сохраняется как байт данных в памяти отображаемых данных.

После каждого байта данных счетчик адреса автоматически увеличивается. Сигнал на входе D/С читается после передачи последнего бита (на восьмом импульсе SCLK). Если на входе SCE высокий уровень (HIGH), то сигнал SCLK игнорируется и выполняется инициализация последовательного интерфейса. Данные (SDIN) отсчитываются при положительном фронте тактового импульса. Если напряжение на SCE остается низким даже после передачи последнего бита байта команды/данных, то контроллер настраивается на прием следующего байта (предполагая, что входящий бит является седьмым битом следующего байта). Импульс RESET сбрасывает контроллер (прерывая передачу и очищая все регистры). Если SCE находится в состоянии LOW после положительного фронта импульса RESET, то контроллер готов принимать следующий байт.

Программа управления LCD

Необходимую для сопряжения с LCD библиотеку на языке С можно скачать по ссылке: www.avrgemus.com/tinyavrl. Эти функции интегрированы с исходными кодами всех проектов данной главы.

void clockdata(char bits_in)

{

int bitcnt;

for (bitcnt=8; bitcnt>0; bitcnt—)

{

LCD_PORT = LCD_PORT& (~ (1«SCK) ) ;

// Установить Clock Idle в уровень LOW.

if ((bits_in&0x80)==0x80) {LCD_PORT | =1«SDIN; }

else {LCD_PORT &= ~(1«SDIN);}

LCD_PORT I =1«SCK;

// Данные тактируются по нарастающему фронту SCK. bits_in=bits_in«l;

// Логический сдвиг данных на 1 бит влево. }

}

Процедура, приведенная в листинге 4.1, передает байт данных из микроконтроллера в контроллер LCD. Для передачи данных (по одному биту) организован цикл. Сначала SCK переводится в состояние LOW, а затем передаваемый бит выдается на контакт SDIN (подключенный к LCD). После установки бита SCK переводится в HIGH (в течение того времени, пока данные передаются по нарастающему фронту тактового импульса). Этот процесс для передачи байта повторяется в цикле восемь раз. Обратите внимание, что мы заземлили контакт SCE дисплея.

void writecom(char command_in)

{

LCD_PORT = LCD_PORT& (~ (1«D_C) ) ;

// Выбрать регистр Select Command, clockdata(command_in);

// Тактировать биты команды.

}

void writedata(char data_in)

{

LCD_PORT = LCD_PORT | (1«D_C) ;

//Выбрать регистр данных, clockdata (data_in) ;

// Тактировать биты данных.

}

Подпрограмма из листинга 4.2 используют функцию clockdata для передачи либо байта команды после установки режима D/С (в функции writecom), либо байта данных (в функции writedata). Теперь мы знаем, как передать байт данных на дисплей, но для применения дисплея нам нужно инициализировать его (в соответствии с описанной в спецификации процедурой). Это показано в листинге 4.3.

void ini tied (void)

(

LCD_DDR |= 1«SCK 11«SDIN 11«U_C 11 «RESET;

LCD_PORT = LCD_PORT 11«RESET;

LCD_PORT = LCD_PORT& (~ (1«RESET) ) ;

_delay_ms(2 0 0) ;

LCD_PORT = LCD_PORT 11«RESET;

writecom(0x21) ;

// Активировать чип и Н=1. writecom(0xD3);

// Установить напряжение LCD примерно в 9V. writecom(0xl3);

// Настроить напряжение смещения. writecom(0x20);

// Горизонтальная адресация и Н=0. writecom(0x09);

// Активизировать все сегменты, с1earг am ();

// Стереть все пикселы в памяти. writecom(0x08);

// Очистить дисплей. writecom(OxOC);

// Режим дисплея Normal.

}

В*этой процедуре мы сначала объявляем все четыре контакта ввода/вывода как выходы (при помощи соответствующего регистра). Затем мы сбрасываем LCD импульсом RESET длительностью 200 мс. Это очищает все предыдущие настройки LCD. Затем LCD инициализируется под наши требования (при помощи посылки последовательности командных слов). Сначала на LCD активизируется расширенная система команд (Н=1). Следующий командный байт устанавливает рабочее напряжение на LCD. При помощи этой функции можно программно настроить контраст LCD. Это делается посредством вычисления подлежащего передаче восьмибитового значения при помощи описанного в спецификации Nokia 3310 соотношения. Затем настраивается напряжение смещения — задается коэффициент мультиплексирования 1:48. Следующий командный байт служит для выбора горизонтального адреса и для выставления Н=0 (чтобы использовать команды типа "установить адрес X’ или "установить адрес К"). Для активизации дисплея сначала посылается командный байт для включения всех сегментов дисплея; следующий байт посылается для очистки дисплея, а последний — для перевода его в нормальный режим. Эта процедура должна вызываться при необходимости перевода дисплея в нормальный режим.

Сбои, наблюдающиеся в некоторых дисплеях

В некоторых образцах дисплеев мы иногда сталкиваемся с проблемой искажения первой страницы на экране размером в 48×84 пиксела. Дисплей Nokia 3310 содержит шесть страниц (от нулевой до пятой), но самая верхняя страница (с адресом Yaddress=o) бывает искаженной. Видны только пять пикселов каждого столбца этой страницы. На нижней стороне появляется новая страница с тремя пикселами в каждом столбце. Эта новая страница адресуется при помощи Yaddress=6. Чтобы устранить эту ошибку, нужно изменить инициализирующий код LCD. Если в функции initicd после настройки напряжения смещения написать команду writecom(0x45), то произойдет выравнивание страниц и смещение вверх на пять пикселов. После этого искаженная верхняя страница скроется, а нижняя страница станет полностью видна. В таком случае адреса Yaddress меняются от 1 до 6.

На рис. 4.7^-4.9 показаны дисплей и клавиатура Nokia, печатная плата, а также окончательный вид припаянного на плату дисплея.

Рис. 4.7. Внешний вид дисплея Nokia 3310 с клавиатурой

Источник: Гадре, Д., Занимательные проекты на базе микроконтроллеров tinyAVR / Дхананья Гадре, Нигул Мэлхотра: Пер. с англ. — СПб.: БХВ-Петербург, 2012. — 352 с.: ил. — (Электроника)

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

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты