Применение дисплея от nokia1100

Дисплей – удобное средство вывода разнообразной информации. На них можно не только выводит различную необходимую информацию, но и визуализировать процессы работы приборов. Большую пользу они могут принести на стадии отладки или диагностики устройства. Но стоимость специализированных дисплеев зачастую велика, а возможностей семисегментных индикаторов и знакогенерирующих дисплеев может не хватать, здесь на помощь, приходя маленькие компактные дисплеи от сотовых телефонов.

Дисплей от Nokia 1100

Дисплей от Nokia 1100

В этой статье расскажу о том, как подключить к микроконтроллеру и использовать в текстовом режиме дисплей от сотового телефона nokia 1100.

В ранних статьях уже рассматривался дисплей от nokia 3310. По сравнению с ним у этого дисплея есть небольшой недостаток – меньший размер (35×35 мм), но есть свои плюсы.

Плюсы дисплея:

  • Маленький дисплей с относительно большим разрешением 96х65 (символами размера 5х8 можно заполнить 8 строк по 16 знаков)
  • Встроенная подсветка
  • 4 линии управления
  • Дешевый – 40 рублей

Минусы дисплея:

  • Маленький размер
  • 3,3 В линии связи и питание (при использование 5В)

Как уже упомянул в плюсах – для подключения к контроллеру достаточно 4-х линий (SCLK, SDA, CS, Reset), что существенно экономит выводы МК.

Распиновка

Распиновка

Из упомянутых минусов (при работе от 5В) это 3,3В питание и логические уровни, поэтому была разработана небольшая плата переходник.

Сопряжении с МК

Для подключения к контроллеру, с питанием от 5В, предлагаю следующий вариант:

Схема сопряжения

Схема сопряжения

С цепи стабилизации, выполненной на стабилитроне, одновременно запитан сам дисплей и его подсветка. Связь с дисплеем используется только односторонняя, поэтому делители напряжений на линиях управления состоят из резисторов по 4,7кОма. Такой вариант включения считаю не идеальным, но рабочим.

Печатка

Печатка

Плата сопряжения

Плата сопряжения

Подключение к PIC16F628A

Дисплей был подключен к микроконтроллеру PIC16F628A следующим способом

Дисплей от Nokia 1100

Схема подключения к PIC16F628A

Как видно на схеме, выводы сопрягаются следующим образом: RES – RB4, CS – RB5, SDA – RB6, SCLK – RB7.

Прошивка

Как было сказана в начале статьи, работа с дисплеем реализована только в текстовом режиме. За основы были взяты наработки, полученные при работе с экраном от nokia 3310.

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

  • lcd_init() – инициализация дисплея
  • lcd_clear() – очистка дисплея
  • lcd_test() – функция проверки дисплея (заполняет весь экран символами)
  • lcd_putch(char) – функция вывода символа размером 5х8
  • lcd_puts(const char *s) – вывод строки при помощи функции lcd_putch(char)
  • lcd_gotoxy(int X, int Y) – переход к символу расположенному в Y строке, на X позиции

Из предыдущего проекта так же перекочевала таблица символов, содержащая английский и русский алфавиты, цифры и специальные символы, т.е. почти вся ASCII во всей своей красе:

ASCII

ASCII

ещё 31 строчная буква Великого и Могучего, к сожалению, не влезли.

Для работы понадобятся следующие дефайны:

#define SetBit(x,y) (x|=(1< <y))
#define ClrBit(x,y) (x&=~(1<<y))

#define SCLK_on 	SetBit(PORTB,7)
#define SDA_on 		SetBit(PORTB,6)
#define CS_on 		SetBit(PORTB,5)
#define RST_on 		SetBit(PORTB,4)
#define SCLK_off 	ClrBit(PORTB,7)
#define SDA_off 	ClrBit(PORTB,6)
#define CS_off 		ClrBit(PORTB,5)
#define RST_off 	ClrBit(PORTB,4)

#define lcd_CMD		0
#define lcd_DATA	1

которые сопоставляют выводы контроллера с выводами дисплея.

Пример вывода текста по середине экрана будет выглядеть следующим образом:

lcd_gotoxy(2, 3);
lcd_puts("Hello, World");

Hello, World

Hello, World

Относительно большие размеры дисплея 96х65 точек, позволяют выводить до 128 символов, размера 5х8, одновременно, в 8 строчках по 16 букв:

Текстовые возможности дисплея

Текстовые возможности дисплея

К сожалению, проект получился очень весомым и занял 77,8% памяти микроконтроллера PIC16F628A, а это целых – 1593 байта. Но не забывайте, что большую часть занимает массив шрифта – lcd_fonts, который вмешает 159 5-ти байтных символа, а это 795 байт. Для облегчения проекта можно исключить русскую или английскую кодировку.

Для демонстрации возможностей дисплея была написана небольшая демка, содержащая 4 сменяющееся кадра: информация о проекте (первая фотография), возможности дисплея (последняя картинка), частично влезавшая таблица ASCII, выводимая функцией lcd_test() (4 фото) и наконец простой пример работы – «Привет, Мир» (предпоследний скрин экрана).

Скачать исходник, прошивку и печатку в SP5

При написании статьи использовались материалы с сайта www.sunbizhosting.com

Используемый компилятор – Hi-Tech 9.70

30 комментариев »

Alex_EXE | 05.10.2011 | Микроконтроллеры | 32 434 просмотров

30 комментариев на « Применение дисплея от nokia1100»

  1. atac13 пишет 23.12.2013 в 17:33 #

    atac13 пишет 09.12.2012 в 23:26 #

    собрал специацельно для проверки 1100,такая же байда как у чела раньше,
    1100 не заработал!
    1110i — РАБОТАЕТ (только зеркально)
    1202 ——РАБОТАЕТ (тоже зеракльно)

    ну хоть остальные проверил…
    спасибо за статью.

    Alex_EXE пишет 10.12.2012 в 20:17 #

    Можете попробовать инициализацию из статьи про дисплей 2760.

    доброго времени суток! запоздал я что то на год…..работы навалилось…
    пожалуйста если Вам не сложно скинте файл (HEX) для прошивки с этой инициализацией (для дисплея 2760),
    прошить то я могу ,а вот куда вставлять эту инициализацию ….
    Просто пришло время проверить 1100 с помощью вашей схемки (сам дисплеё 100% рабочий проверял на устройстве) а вот ещё тогда ,год назад не захотел светиться в вашей схеме для проверки.
    счас хочу попробовать победить!!!

  2. Виктор пишет 29.12.2013 в 12:32 #

    Подключение дисплея к микроконтроллеру это что-то.
    Фантастика, все так просто делается. Очень нравится.

  3. Chettus пишет 31.03.2014 в 22:57 #

    Аппаратный SPI никто не пробовал подключать… с изысками для 9-го бита?

  4. Shad пишет 08.05.2014 в 03:39 #

    На мк AVR использую аппаратный spi, все прекрасно работает (причем ощутимо быстрее чем при использовании полностью программной реализации).
    Первый бит передаю программно (как здесь в исходниках) предварительно отключив аппаратный spi, далее включаю аппаратный spi и передаю оставшиеся 8 бит с помощью него.

  5. Chettus пишет 24.05.2014 в 17:51 #

    А USART ни кто не пользовал в качестве 9-bit SPI?

    И ещё вопрос, подскажите где можно узнать поподробнее как работает декодирование символа?
    (unsigned char lcd_symbol_decode(unsigned char c)
    ) Я не могу понять как работает эта функция и почему например вместо «А» она не декодирует например «,»? Или это заложено в возможности компилятора?

  6. Alex_EXE пишет 31.05.2014 в 00:45 #

    По первому вопросу не подскажу.
    По второму вопросу: в ASCII есть цифры, латиница, кирилица, знаки и куча служебных и редко используемых символов. Так же в микроконтроллерах, тем более 8-ми битных, ограниченное количество памяти и что бы её сэкономить были исключены из выводимой таблицы не отображаемые символы, но что бы сохранить соответствие с ASCII символами было введено смещение по основным группам символам, чем и занимается функция lcd_symbol_decode.

  7. Chettus пишет 10.06.2014 в 00:32 #

    Попытался использовать аппаратный SPI, команда/данные выводил вручную, остальное — аппаратным способом. Дисплей так и не запустился. Микроконтроллер PIC16F887.
    Автор, по Вашим ощущениям — дисплей от 1100 слишком медленный или мне так показалось?
    Я, даже используя программный SPI, был вынужден уменьшать тактовую частоту МК — дисплей просто ен запускался на более высоких частотах.

  8. Chettus пишет 18.06.2014 в 13:22 #

    Не выходит у меня запустить 1100 аппаратным способом на PIC16F887. Видимо причина где то в протоколе.
    По даташиту на драйвер допускается 6,5 МГц на SCLK. Или у китайцев свои параметры.

  9. Alex_EXE пишет 18.06.2014 в 17:50 #

    Данный дисплей на высоких частотах не гонял.
    Возможно несколько причин:
    *В конфигурации дисплея нужно сказать ему, что он высокоскоростной
    *Неправильно настроен SPI
    *или 6.5МГц это только для оригинальных дисплеев

  10. Роман пишет 18.09.2014 в 23:12 #

    У кого не запустился код для 1100 — пробуйте инициализацию от Nokia 2760, у меня заработало!
    CS_LCD_RESET;
    RST_LCD_RESET;
    delay_ms(20);
    RST_LCD_SET;
    delay_ms(2);
    nlcd_SendByte(CMD_LCD_MODE,0xE2);
    delay_ms(10);
    nlcd_SendByte(CMD_LCD_MODE,0xAF);
    nlcd_SendByte(CMD_LCD_MODE,0xA4);
    nlcd_SendByte(CMD_LCD_MODE,0x2F);
    nlcd_SendByte(CMD_LCD_MODE,0xB0);
    nlcd_SendByte(CMD_LCD_MODE,0x10);
    nlcd_SendByte(CMD_LCD_MODE,0x00);
    nlcd_Clear();
    delay_ms(10);
    nlcd_SendByte(CMD_LCD_MODE,0xA6);
    delay_ms(10);

Комментарии RSS

Оставьте отзыв