Используем дисплей Siemens C55/A55/A52

Всё-таки семён самый народный телефон. В этом я в очередной раз убедился, когда на халяву намутил себе аж целых три нерабочих сименса с монохромными экранами. Взять из них почти нечего разве что светодиоды, моторчик вибровызова и экран. Всё остальное малопригодно для использования в конструкциях (если конечно вы не конструируете сотовый телефон). Дисплей от сименса хорош. Хорош в первую очередь свой доступностью и наличием даташита на контроллер стоящий в нем и изобилием готовых библиотек и документации на него же. Все библиотеки которые попались мне на глаза имели два недостатка: написаны на Си, нет русского шрифта. Так как я люблю изобретать велосипеды, на свет появилась библиотека для работы с данным дисплеем лишенная двух вышеперечисленных недостатков.


Данный дисплей я решил использовать как альтернативу популярным знакосинтезирующим дисплеям на базе контроллера HD44780. На экране убирается 14 на 8 букв русского алфавита или 17 на 8 букв латинского. Дисплей имеет разрешение 101 х 64 точки, каждая из которых либо горит либо нет, градации серого отсутствуют. Выводы дисплея пронумерованы следующим образом:

Паять выводы надо крайне осторожно. Где-то под ними расположен кристалл контроллера дисплея. Не думаю что ему бы понравился перегрев, всё-таки этот дисплей не для пайки. Ни какой обвязки за исключением одного конденсатора этому дисплею не надо. Я подключал этот дисплей к своей отладочной плате так:

С внешним миром контроллер дисплея общается посредством одностороннего SPI интерфейса, т.е. из дисплея ничего прочитать не получится, и это очень плохо (ниже объясню почему). В дисплее стоит (если верить интернетам) контроллер PCF8812 или какой то подобный ему. Контроллер мало на что способен, поэтому всякие штуки типа вывода текста и рисования графических примитивов придётся реализовывать программно. Но тут есть один маленький нюанс который портит всю малину. Как я писал выше — из дисплея нельзя ничего прочитать, можно только записать. Причем запись производится сразу по байту. Установить отдельной взятый пиксель дисплея нельзя! А что было в соседних пикселях мы не знаем поэтому рискуем затереть часть уже отрисованной картинки. Из сложившейся ситуации есть выход: выделить 808 байт под видеопамять. Тогда можно будет без труда изменять любой пиксель или считывать его состояние. После изменения содержимого видеопамяти просто записывать её всю в дисплей. Но к сожалению выделить почти 1кб для этих целей очень расточительно, и поэтому  идея с видеобуфером у меня отпала. Именно поэтому данная библиотека не содержит графических функций, только текстовый вывод. Да и с текстовым выводом пришлось не легко. Нарисовать в paint’е 33 русских буквы с разрешением 6 на 8 пикселей, а потом перенести это побитно в микропаскаль – аццкий труд. И это я еще не делал строчные буквы, а только заглавные. Буквы латинского алфавита и цифры я потырил из нарытого исходники на Си, рисовать их не пришлось. Цифры и латинские буквы меньше на один пиксель в ширину чем русские. Это связанно с тем что ни как я не мог изобразить некоторые русские буквы в разрешении 5х8. Вся библиотека крайне проста в эксплуатации.

1) Копируем все её процедуры в новый проект
2) Указываем к каким пинам подключен дисплей
3) Используем

В библиотеке есть такие процедуры:
InitPort() — настраивает  должным образом ноги контроллера к которым подключен дисплей.
INIT_LCD() — инициализирует дисплей. После инициализации, на экране появляется случайный мусор.
CLEAR_LCD() —  очистка дисплея от всего что в нем есть. Рекомендуется вызывать после инициализации.
LCD_GOTO (х, y) — устанавливает координаты для вывода текста. Аргумент х может принимать значения от от 0 до 100, y от 0 до 7
WriteText (‘текст’) — выводит строку в позицию заданную предыдущей процедурой. Если строка не убирается то происходит перенос на следующую строку ниже. Текст должен быть написан в нижнем регистре! Это важно.
LCD_RESET() — сбрасывает дисплей. Комментарии излишни.
SendToLcd (DataByte, dc) — отправляет в дисплей байт. Если dc=0 то байт будет передан как команда. Если dc=1 то как байт будет передан как данные.
LCD_INVERT() — Отображает пиксели в инвертированном виде.
LCD_NORMAL() — отображает пиксели в нормальном виде.
LCD_HIDE_ALL() — Выключает все пиксели на экране. Видеопамять дисплея не очищается. Что-бы увидеть картинку нужно вызвать любую из двух предыдущих процедур.
LCD_SHOW_ALL() — Зажигает все пиксели на экране. Видеопамять дисплея так же не изменяется.
LCD_POWER (mode) — управляет питанием дисплея. Если mode=0 — дисплей в режиме энергосбережения. В этом режиме дисплей способен принимать данные и команды. Когда эта процедура вызывается с mode=1, контроллер дисплея включает питание жк экрана.

Этих функций вполне достаточно для работы с текстовой информацией и управления дисплеем. Данная библиотека успешно прошла тестирование на дисплее от сименса А52. Дисплеи в С55 и А55 идентичны этому (как говорит народ на форумах). Если не заработает, пишите попробуем разобраться. Если кто хочет посмотреть на это дело в живую то я записал коротенький видеоролик демонстрирующий работу дисплея:

Библиотека способна работать практически со всеми контроллерами обладающими аппаратным SPI интерфейсом и достаточным объемом флеш памяти. При разработке библиотеки мне очень помогли следующие ссылки:

Работаем с LCD дисплеем Siemens C55/A55/A52
Экран LCD Nokia 3410

Саму библиотеку вместе с демонстрационным примером можно тут
Программа написана на микропаскале. Его скачать можно тут

Используем дисплей Siemens C55/A55/A52: 58 комментариев

  1. Обожаю такие дисплейчики. Для микроконтроллерных проектов самое то! Я себе если вижу ломаную мобилку по бросовой цене — обязательно покупаю ради дисплея. Еще юзаю нокиевские типа 3310 и подобные.
    Покупал пару новых дисплеев для NOKIA 3310 там установлен уже новый контроллер который имеет много интересных плюшек (например попиксельный скролинг вверх/вниз). Но, к сожалению, даташита на новый контроллер ниде нет :( Метод научного тыка слабо помогает.

    1. Я тоже обожаю!
      По началу хотел его как графический использовать но потом обломался. Ну вот неужели так трудно было добавить возможность не только писать в дисплей но еще и читать видеопамять.

  2. Я в набор символов добавляю псевдографику при помощи которой получается гламурненько оформлять экранчик. При этом экономится куча памяти, так как не нужно хранить всю видеопамять, а только кода символов (кружочки и треугольнички конечно так непорисуешь, но по большому счету оно особо и не нада).

    1. Кстати о выигрыше в коде. Языки высокого уровня развращают разработчика =) Что-то так лениво на асме писать стало. У тя не было такой фигни когда Си раскурил ?

  3. Не пойму, почему надо хранить картинку 6464 байтах. Изображение-то монохромное, по биту на пиксель получается 808 байт. Конечно, опять-таки, не все имеют столько, но уже намного лучше.

  4. Графика векторная — любые менюшки (да хоть квадратики), стрелочки красивые. Всякие окошки визуальные. Ползунки разные. Да мало ли куда можно вектор применить.

    Си развращает, ага. Когда много пишу на си -тянет к си. Когда возвращаюсь на асм — прет по асму. Так и мотает туда сюда. Вот хочу написать либу мастер-слейв для i2c и не знаю на чем ее делать. На си или на асме :)

  5. «Перемножив кол-во пикселей по горизонтали на кол-во пикселей по вертикали получим общее кол-во пикселей 6464»
    Я это понимаю, всё-таки считать умею =). Я говорю, что изображение монохромное, поэтому один пиксель требует всего один бит памяти — можно хранить в одном байте по 8 пикселей. Так что смело делим 6464 на 8. Экономия очевидна.

  6. Для графики можно внешнюю микросхему памяти подключить. Я как-то тоже хотел рисовать линии на дисплее Motorola T190, с микросхемой оперативной памяти наладил кое-какую связь, но что-то с алгоритмом прорисовки линии не разобрался, так и забросил графику. Остановился на буквах, чтении и листании текста.

  7. UT62256…
    Не такая уж она и «оперативная» получилась — у нее 15 адрессных ног, так что чтобы записать/прочеть один байт требуется немалое количество тактов, так как адрес выводился у меня последовательно в два регистра сдвига.

  8. Забыл спросить ещё, у него ноги «под пайку» или сам приклеивал переходник? Ищу просто такой индикатор с возвожностью пайки, а то в основном стекляшки лежат от 3310.

  9. Как думаете, для питания подобных дисплеев подойдет ли обычный стабилитрон? Ото не очень хочется городить отдельный источник питания на 3В в своем устройстве — проще обойтись стабилитроном, ведь ток потребления не очень большой.

    1. Да вполне хватит стабилитрона. Хотя этот дисплей у меня и от пяти вольт работал без всяких проблем. Работал почти сутки без выключения. Ничего не сгорело.

  10. Спасибо.
    Еще вариант — при наличии телефона и его схемы найти микросхему, которая обеспечивает питание телефона. В Motorola T190/T191/C200, к примеру, там стоит MAX8882, линейный стабилизатор со сверхнизким падением на нем. Можно питать прямо от 5V. Эта микросхема займет места даже меньше чем стабилитрон и резистор.
    Вы питали дисплей от 5В. А яркость/контрастность не менялись? Возможно, у дислпея внутри стоит какой-то свой стабилизатор?

    1. Яркость и контрастность нормальная. Точно такая же была когда он в телефоне стоял. По идее в даташите на контроллер дисплея написано, что от пяти вольт он работать может.

  11. помогите пожалуйста привязать этот дисплей(LSD A52) к ATmega8, если у нее хватит памяти и к каким ногам подключать жки, на какой частоте должен работать МК, что надо в исходнике программы подправить под этот МК. Особо не судите за эти глупые вопросы, я в программировании новечёк, многово еще незнаю. За ранее спасибо!

  12. Можно всё же сделать второй вариант библиотеки — графический. Когда графический режим не нужен, используем легкую текстовую версию, а когда нужна графика — берем вторую. 808 байт это не так много. Почти все Меги имеют оперативку 1К и выше.

  13. всмысле мадель экрана должна быть уже в протеусе ? если так то её там нет подскажите где взять или создать пожалуйсто т.к. очень нужно именно этот дисплей в протеусе увидить можно по ICQ:404284130

  14. Здравствуйте!
    Автор, Вы не подскажете (правда если знаете или ссылкой) как подключить этот дисплей к arduino mega (1280)?
    Ответьте пожалуйста на почту если не трудно=)
    Заранее спасибо!

    1. Можно эту урезать. Без урезания она займет примерно 3/4 всего флеша.
      Так же нужно учесть что у тини2313 нет SPI и его придётся реализовывать программно. Это тоже займет место. Ну а вообще можно взять и переписать этот код на ассемблере :-) Будет компактней!

  15. Мне таки удалось подключить такой дисплейчик к 2313. SPI там есть — это трехпроводной режим USI. Правда все символы не лезут во флеш, пока запихиваю только английские. Реализована пока только инициализация, очистка и инвертирование, с выводом какой нибудь полезной инфы небольшой затык, так как кажется натупил немного с установкой координат.

  16. Пытаюсь подключить дисплей от Siemens A52 к меге16.Использовал пример из этой статьи. Изображение получается невидимым. Может ли в данном дисплее стоять другой контроллер?

    1. А хрен его знает! У нокии 3310 например бывают два вида дисплеев оригинальный и китайский, в телефоне оба работают адекватно, но если писать код самому под них то надо учитывать некоторые различия. Может и тут такая же фигня. А конденсатор к дисплею не забыл подключить? Без него нифига не выйдет! И что значит изображение получается невидимым? :-)

  17. >А конденсатор к дисплею не забыл подключить?
    Да, кондёр подключил.
    >И что значит изображение получается невидимым?
    Экран пустой. После выключения питания появляется горизонтальная полоса. Во время инициализации напряжение на 7-й ноге изменяется. При изменении Vop также меняется. Перебор Vop и BIAS ни к чему не привёл :( Уже думал что дисплей негодный, но в мобиле он завёлся. С данным же примером и малость переделанной процедурой инициализации, моник от Nokia 3310 завёлся на ура.

      1. У меня завелся только при Internal HV-gen = 2Х (S1 и S0 = 0)
        При настойках Internal HV-gen x3 = была полная заливка.
        Для этой программы SendToLcd(0x08,0); // Internal HV-gen x2 (00001000)
        Вообще с этими дисплеями все интересно. Заводятся при различных параметрах. В даташите вообще ничего толком нету по поводу рекомендуемых параметров.

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