Це невеликий графічний дисплей, відповідний для вбудовування в різні пристрої. Він досить популярний, оскільки просто підключається до більшості мікроконтролерів і доступний. Розмір самого дисплея 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 с .: іл. – (Електроніка)