Главная » 2014 » Ноябрь » 9 » Используем LCD 3310 в своих целях
03:45
Используем LCD 3310 в своих целях

   Здравствуйте уважаемые посетители «Малаток». Сегодня нашел немного времени для того, чтобы рассказать вам о подключении LCD (liquid crystal display, далее ЛСД) экрана от NOKIA 3310 к MSP430. В статье будет представлена схема, программа для конвертации картинки в массив байт, описание и работающие исходники.

  • Пролог – можно пропустить, если спешите.

  Как то я игрался с контроллерами 7-сегментных LED дисплеев типа PT6961, довольно хорошая 

вещь! Хотя отображаемая информация выглядит бедновато, зато есть возможность подключения кнопок. Такой вариант у моих поделках меня не совсем устраивал, да и охота как то нагляднее отобразить процесс выполнения работы и вывод данных не давали мне спокойствия. Перебрав в голове все возможные варианты, я решил, что буду юзать какой ни будь ЛСД дисплей от мобильного телефона, так как он имеет хорошие размеры и параметры, питается от батарей – то есть имеет низкое энергопотребление. Такое мне и нужно! Я когда-то занимался ремонтами мобильных телефонов и у меня осталось много запчастей да и самих мобилок. Недолго думая, я прошвырнулся по коробкам и выбрал несколько мобильных, которые, на мой взгляд, имели неплохие с виду ЛСД экраны . Так как я использую 20-ти пиновый MSP430G2553DIP и помимо ЛСД дисплея будет подключено еще что-то, то важен каждый программно доступный изнутри пин, поэтому мне нужен был ЛСД экран с последовательным интерфейсом и для начала с хорошо известным чипом.

Немного погуглив, я решил, что буду юзать LCD от НОКИА 3310, как довольно распространенное, последовательное и несложное устройство вывода информации со всеми возможными даташитами и прочей инфой.

  • Интерфейс, распиновка.

Пин

Назначение

Описание

1

VDD

+ питания (2.7-3.3В)

2

SCK

Serial Clock

3

SDIN

Serial Data

4

D/C

Data/Command

5

CS

Chip Select

6

GND

Земля

7

VOUT

Выход питания ЖКИ

8

RESET

Сброс

 Итак, наш дисплей питается от источника на 2.7-3.3 вольта, также входные логические уровни не должны 

превышать этой планки, ибо результат не предсказуем. 1,6,7 пин - пины питания, на 7 пин нужно поставить конденсатор емкостью от 100 nF для «выравнивания» внутреннего напряжения.  В оригинальных версиях применяются металлизированные коннекторы и пара керамических конденсаторов, можно использовать их. Дисплей использует SPI интерфейс – это наиболее простой и легкореализуемый интерфейс, которому для функционирования необходимо всего 4 провода – CLK, MOSI, MISO, CS.

CLK (SCK) – вывод тактовой частоты.

MOSI (SDIN) – выход данных из мастера.

MISО – вход данных в мастер.

 CS – выборка чипа или строб.

Поскольку данные передаются только в дисплей, то MISO отсутствует. Вывод D/C отвечает за режим работы дисплея, логическая «1» - передаются данные, «0» - передаются управляющие команды. RESET – сброс дисплея на начальное состояние, важно сразу после включения дернуть этот пин, иначе возможно вывести ЛСД из строя (это некий маразм, который пишут на других сайтах), хотя RESET можно оставить висящим на резисторе и конденсаторе без подключения к МК и он автоматически «ресетнится» при включении, + у вас останется свободный пин МК)).  Ниже приведен фрагмент осциллограммы работы с ЛСД.

 Я реализовал программный SPI так, как мне не всегда удобно будет использовать хардовый, да и он может быть использован для других более быстрых периферийных девайсов. Максимальная скорость обмена по SPI с дисплеем равна около 4 Мбит/сек.  Нормальное для восприятия число обновлений за 1 сек. составляет 10..15 FPS. Да и сама технология данного ЛСД не рассчитана на большое количество обновлений за секунду, впрочем, это не столь важно. На фотографии представлена программная реализация SPI. Где первый параметр – восьмибитовое значение, что отправляется, второй – параметры отправки, а это нужна ли выборка чипа и что передается(команда/данные). Использовано максимально оптимизированный алгоритм отправки. Общий алгоритм:

Выставляем Data/Command.

Выставляем SCE(Strob).

Передаем байт данных старшим битом вперед.

Выставляем SCE(Strob).

 

  • LCD NOKIA 3310 (PCD8544)

Контроллер этого дисплея - PCD8544, который может адресовать до 6 строк по 84х8 пикселей. То есть минимально доступный блок памяти дисплея – это столбец размером 1х8 – 1 байт. Весь экран разбит на сегменты и имеет возможность как вертикальной, так 

 

и горизонтальной адресации. При горизонтальной адресации пойнтер передвигается по возрастанию от начальной позиции в ряду вправо до конца и на следующий ряд. 

А при вертикальной - каждый следующий байт будет под начальным, так до конца и переход вправо на следующий столбец. Важно помнить, что доступ к дисплею ограничен только записью, мы не можем считать данные с дисплея, поэтому организовать рисование примитивов, не задев ничего лишнего (отображенного ранее) возможно только с использования кучи сложных алгоритмов, или  созданием промежуточного буфера дисплея – это 504 байта. Да, довольно большой объём, при том, что на нашем 2553 всего-то 512 байт ОЗУ, 

можно еще выкрутиться путем создания буфера в ПЗУ, но мы теряем быстродействие, лишаемся на некоторое время обработки прерываний, при разряженной батарее работа устройства будет невозможна, + тратим лишний ресурс флэш-памяти и заряда батареи. Поэтому я не стал реализовывать промежуточный буфер.

  • Библиотека, регистры.

  Дисплеем управляет всего 13 регистров, из которых 3 резервных, 1 «главный»,  и 504 байта ДДРАМа. Резервные регистры могут понадобиться в поздних версиях этого контроллера, например: китайские производители часто используют версию с расширенными регистрами управления. В любом случае более подробную информацию можно найти в даташите  в конце статьи.

  Проект создан в Code composer studio v5. Чтобы можно было легко организовать управление несколькими дисплеями и не путаться с одинаковыми именами функций, я написал класс «LCD» и не стал утруждать текст кучей непонятных дефайнов и тд. Вам достаточно просто использовать функции конфигурации пинов. Например, для конфигурации любого пина предусмотрена функция конфигурации:

LCD->CONFIG_DC(&P2DIR,&P2OUT,BIT0); // конфигурация пина Дата/Команда

Первый параметр – адрес регистра направления порта, второй – адрес регистра выхода порта, а третий параметр – вес пина в выходном регистре порта.

Инициализация ЛСД. Чтобы запустить наш дисплей необходимо сконфигурировать регистры – провести инициализация экрана (CAS означает, что отправляется команда и генерируется сигнал выборки чипа). У меня она имеет следующий вид:

  1. Нужно подать лог «0» на RES, подождать 100 милисек. и подать лог «1».
  2. this->SEND(0x21,CAS);  // настроить главный регистр в «Расширенные настройки»
  3. this->SEND(0x06,CAS);  // установить температурную компенсацию
  4. this->SEND(0x13,CAS);  // настроить BIAS
  5. this->SEND(0xc5,CAS);  // установить контраст
  6. this->SEND(0x20,CAS);  // настроить главный регистр в «Стандартные настройки»
  7. this->SEND(0x08,CAS);  // Display control register, очистить дисплей
  8. this->SEND(0x0C,CAS);  // Display control register, включить стандартный режим

Все это  прописано в функции LCD-> INIT(). Значения, что написаны выше действительно рабочие и вам нет необходимости их изменять, но если все же сильно охота, то ниже приведена таблица, по которой можно ориентироваться что вы именно изменяете. Но перед инициализацией нужно обязательно сконфигурировать пины.

  • Таблица ASCI , возможности библиотеки

Данная библиотека рассчитана на контроллеры MSP430, но с легкостью может быть переделана под другие семейства МК путем редактирования файла “BASIC.h”.

 В принципе, таблицу символов вы можете создать сами, используя программу LCD Composer, ссылка на которою приведена в конце этой статьи. Но я поступил иначе, я просто скачал полную версию АСКИ из интернета. Конечно размер внушительный – 256*6 – 1536 байт, но если вам нет необходимости выводить русский текст, псевдографику, то вы можете отключить ненужную часть таблицы, закомментировав «#define font_ads» в файле “SETS.h”, или же сэкономить 256 байт, путем создания автоматических пропусков после каждого символа. Также при инициализации дисплея, можно включить вывод приветствия или логотипа устройства путем объявления «#define extended_mode» в том же файле “SETS.h”. Значительный вес занимает библиотека с плавающей точкой, которою компилятор включает автоматически, если есть хотя бы одно объявление типа float  или double, если вам нет необходимости выводить числа с плавающей точкой, то вы можете отключить закомментировав «#define FL_OPERATIONS» в том же файле “SETS.h”.

У возможности библиотеки входит:

  1. Вывод изображения.
  2. Вывод чисел.
  3. Вывод HEX
  4. Вывод текста.
  5. Вывод текста с командами(\b , \r , \n).
  6. Вывод символа из таблицы.
  7. Вывод смещенного текста – бегущая строка.
  8. Вывод изображения.
  9. Точная позиция курсора, при работе в текстовом режиме.
  10. Тест ЛСД экрана.

В любом случае в файле “lcd.h” есть все прототипы функций и небольшое описание параметров, которые задаются при вызове этой функции.

Функции инициализации порта и выводов МК:

  void CONFIG_STB ( uvchar *, uvchar *, uchar);

  void CONFIG_CLK ( uvchar *, uvchar *, uchar);

  void CONFIG_DATA( uvchar *, uvchar *, uchar);

  void CONFIG_DC  ( uvchar *, uvchar *, uchar);

  void CONFIG_R   ( uvchar *, uvchar *, uchar);

  • Базовые функции:

  void SEND(uchar , uchar );                    // Отправка данных на ЛСД

  void INIT(void);                              // Инициализация

  void LCD_OFF(void);                           // Отключение ЛСД

  void Put_XY(uchar , uchar );                  // Переместить курсор в текстовом* режиме на позицию

  void Move_XY(uchar, uchar );                  // Переместить курсор в обычном** режиме на позицию

  void CLEAR();                                // Очистка экрана

  void LOAD();                                                       // Логотип при загрузке - "MALATOK PROJECTS"

  • Вывод на экран:

  void Test(void);                              // Вывод на экран таблицы АСКИ

  void Put(char);                               // Вывод символа на экран

  void Print(char*);                            // Вывод строчки

  void Print(char*, uchar,uchar);               // Вывод строчки с указанием начальных координат

  void Print_sh(char*, int , uchar);                                 /* Вывод смещенной строки(«бегущей»). Параметры: 1 - текст, смещение относительно х в пикселях, и 3 параметр y координата (0-5). */

  void PRINT_HEX(int);                                               // Вывод HEX

  void PRINT_HEX(int,uchar,uchar);                                   // То же, только с начальными параметрами

  void IMAGE(const unsigned char*, uchar, uchar, uchar, uchar);      /* Вывод изображения, 1 параметр – адрес начала массива,2 и 3 параметры x и y координаты, смещение относительно х,у (высота должна быть кратна 8,16,24,32 и т.д.)*/

  void PRINT_DEC(int);                         // Вывод числа в 10

  void PRINT_DEC(int,uchar,uchar);             // Вывод числа с начальной позицией

  void PRINT_FL(float,unsigned char);                                /* Вывод float числа, преобразуется в инт, поэтому максимальное число от -32768…+32767, со вторым параметром, что означает кол. цифр после запятой*/

  void PRINT_FL(float,unsigned char, uchar, uchar);                  /* То же, только с парметрами начала курсора в текстовом*/

 

  • Указания по оптимизации

Чтобы оптимизировать работу библиотеки необходимо убрать классы вообще, постараться не использовать указатели, где это возможно. Ну и можно немного переделать некоторые функции (вывод чисел с запятой).

Эта библиотека не претендует на роль идеальной библиотеки для данного экрана, но большинство функций она поддерживает и делает это довольно хорошо! Данная библиотека распространяется бесплатно. Автор не несет ответственности за последствия ваших экспериментов!  

Ссылки на материалы:

Скачать библиотеку - 121.6 Кб.

Скачать даташит на контроллер - 154.66 Кб.

Программа для работы с дисплеем(рисование, конвертация).

 

 

 

Просмотров: 5490 | Добавил: Дмытрохан | Теги: экран от нокии 3310, MSP430, монохромный дисплей, PCD8544, LCD 3310 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Яндекс.Метрика
24 log 24 LOG statistick
счетчик посещений
Если вы видите это,
то ваш браузер устарел
и не поддерживает технологий
CSS 3.0