Главная » Микроконтроллеры
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей


Двухканальный усилитель звука, 3 Вт

Работа с дисплеем LPH8731-3C от телефонов Siemens

В процессе приобретения новых навыков и расширения сферы своих интересов, новоявленный специалист по встраиваемым системам, а попросту - разработчик схем на микроконтроллерах, сталкивается с необходимостью отображения большого количества разноплановой информации. Первые радостные впечатления при освоении алфавитно-символьных индикаторов на основе HD44780 и графических индикаторов WG12864A постепенно угасают, т.к. первые обладают лишь минимумом возможностей, а вторые, несмотря на их "продвинутость", обладают излишней громоздкостью и являются монохромными, да и цена на них тоже немаленькая.

Также и меня когда-то посетили такие мысли, и я стал искать альтернативу, пока не попался на глаза форум, где такие же радиолюбители рассматривали вопросы по применению различных дисплеев от мобильных телефонов.

Когда-то, самым первым моим телефоном был Siemens A50, вторым -  Siemens A60, и если первый ещё в здравом уме и доброй памяти, от второго остался только корпус и дисплей, который было решено приобщить к делу. Анализ данной проблемы показал, что в многочисленных любительских конструкциях хит-парад держат экраны от Nokia и от телефона Siemens S65, другим же дисплеям, которые ещё несложно найти (по сравнению с тем же Siemens S65) и применить для своих целей, уделено недостаточно внимания.

Являясь одно время владельцем двух телефонов Siemens, решил уделить внимание дисплеям этой некогда популярной фирмы. Основным критерием выбора типа дисплея стали: 1) дисплей должен быть цветным; 2) простота применения в электронных конструкциях; 3) доступность и относительная низкая стоимость.

После поиска и изучения информации о типе применяемого дисплея, способа его управления и анализа разных кодов была написана библиотека на С, полностью удовлетворяющая мои скромные запросы.

Итак, целью данной статьи является рассмотрение вопроса применения дисплея LPH8731-3C (контроллер EPSON S1D15G14), который применялся в телефонах Siemens A60, C60, М55, MC60, S55, и которые ещё не сложно найти на барахолках или в центрах ремонта мобильной связи. Контроллер, применяемый в данном дисплее, присутствует также в дисплее LPH 9116-1 (телефоны Siemens A75), из чего следует, что команды для работы с данным индикатором идентичны.

Вообще, в телефонах Siemens A60, C60, М55, MC60, S55 применялись три типа дисплея - LPH8731-3C, LM15SGFNZ07 (контроллер Hynix HM17CM4101) и реже - LM15SGFNZ04. Разрешение всех данных дисплеев составляет 101х80 пикселей, что, при использовании библиотеки символов разрешением 5х8 пикселей, даёт возможность выводить текстовую информацию на 10 строк по 16 символов.

Дисплеи LPH8731-3C и LM15SGFNZ07:

 
   

LPH8731-3C.jpgLM15SGFNZ07.jpg

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

Распиновка дисплея LPH8731-3C:

LPH8731-3C - рас�%B

1 - CS – Chip Select. При установке в «0» контроллер дисплея принимает информацию;
2 - RESET – вывод для сброса контроллера;
3 - RS – вывод для определения типа передаваемых данных («0» - команда, «1» - данные);
4 - CLK – вывод тактового сигнала для передачи данных;
5 - DAT – вывод передачи данных;
6 - VDD – к источнику питания от +1.6V до +3.6V;
7 - GND – общий провод (земля);
8 - LED_1A – вывод питания подсветки;
9 - LED_К – вывод катодов светодиодов подсветки (к GND);
10 - LED_2A – вывод питания подсветки.

Сопряжение дисплея с микроконтроллером можно сделать следующим образом:

LPH8731-3C - схе�%B

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

DSCN0016.jpgDSCN0022.jpg

Кому пришлась по душе такая конструкция, в архиве может найти чертёж печатной платы в формате PCB Layout.

Печатн�%

Библиотека работы с LPH8731-3C разрабатывалась для работы с компилятором CVAVR и содержит следующие пользовательские функции:

1. void LCD_init ()

Инициализация дисплея.

2. void Put_Pixel (char x, char y, unsigned int color)

Функция вывода точки (пикселя). x и y – координаты экрана, где будет отображён пиксель цветом color.

3. void LCD_Putchar (char symbol, char x, char y, int t_color, int b_color, char zoom_width, char zoom_height, int rot)   

Функция вывода одного символа ASCII-кода. Данная функция рассчитана на вывод символов размером 5х8 пикселей, библиотека которых находится в файле Symbols.h. symbol – выводимый на экран символ в ASCII-кодировке; x и y – начальная координата вывода символа; t_color – цвет пикселя; b_color – цвет фона; переменные zoom_width и zoom_height увеличивают символ на экране в указанное число раз;  rot – угол поворота текста (0º , 90º, 180º, 270º).

4. void LCD_Putchar_Shadow (char symbol, char x, char y, int t_color, char zoom_width, char zoom_height, int rot)

То же, что и 3, только без цвета фона.

5. void LCD_Puts(char *str, int x, int y, int t_color, int b_color, char zoom_width, char zoom_height, int rot)

Функция вывода строки, расположенной в ram-памяти микроконтроллера. x и y - координаты пикселя начала вывода строки. .

6. void LCD_Puts_Shadow (char *str, int x, int y, int t_color, char zoom_width, char zoom_height, int rot)

То же, что и 5, только без цвета фона.

7. void LCD_Putsf(flash char *str, int x, int y, int t_color, int b_color, char zoom_width, char zoom_height, int rot)

Функция вывода строки, расположенной во flash-памяти микроконтроллера.

8. void LCD_Putsf_Shadow (flash char *str, int x, int y, int t_color, char zoom_width, char zoom_height, int rot)

То же, что и 7, только без цвета фона.

9. void LCD_FillScreen (unsigned int color)

Функция заливки экрана цветом color.

10. void LCD_Output_image (char x, char y, char width, char height, flash char *img, int rot)

Функция вывода картинки. x и y начальная позиция выводимого на экран изображения; width и height – ширина и высота изображения (в пикселях); *img – указатель на массив данных, составляющих изображение; rot – угол поворота изображения (0º , 90º, 180º, 270º). Данная функция предполагает, что массив данных изображения расположен во flash-памяти микроконтроллера. Для преобразования необходимого вам изображения в массив, содержащий цвет пикселей, можно воспользоваться программами Image2Lcd или Nokia Image Creator, которые несложно найти на просторах интернета. Единственное требование – направление вывода массива изображения должно выполняться слева-направо, сверху-вниз! При использовании 12-ти битной палитры, при преобразовании изображения в массив типа char, обязательно старший байт должен идти первым!

11. void LCD_DrawLine (char x1, char y1, char x2, char y2, int color)

Нарисовать линию. x1 и y1 – начальная позиция линии; x2 и y2 – конечная позиция линии.

12. void LCD_DrawRect (char x1, char y1, char width, char height, char size, int color)

Нарисовать рамку. size - толщина рамки.

13. void LCD_FillRect (char x1, char y1, char width, char height, int color);

Нарисовать прямоугольник.

14. void LCD_DrawCircle (char xcenter, char ycenter, char rad, int color);

Нарисовать окружность. rad – радиус окружности в пикселях.

15. void LCD_FillCircle (char xcenter, char ycenter, char rad, int color);

Нарисовать круг, заполненный цветом color.

16. void LCD_DrawTriangle (char x1, char y1, char x2, char y2, char x3, char y3, int color)

Нарисовать контуры треугольника.

17. void LCD_FillTriangle (char x1, char y1, char x2, char y2, char x3, char y3, int color)

Нарисовать треугольник, заполненный цветом color.

 

Дисплей LPH8731-3C даёт возможность работать с двумя цветовыми палитрами – 256 цветов и 4096 цветов. В первом случае цвет одного пикселя задаётся 8 битами, во втором - 12 битами.

В самом начале библиотеки, если объявлен макрос _8_BIT_COLOR, то цветовая палитра дисплея будет составлять 256 цветов, иначе - 4096 цветов. Макрос _GEOMETRICAL позволяет использовать функции вывода линии, рамки, прямоугольника и окружности.

Дисплей в составе работы COM-терминала:

mc218_photo.jpg

DSCN0241.jpgDSCN6956.jpg

 

Для тех, кто хочет выжать «все соки» из данного дисплея, для скачивания прилагается Datasheet на контроллер.

Почитать про азы управления данным индикатором можно в статье "Простенькие часики на MSP430".

Версия библиотеки для LPH8731-3C обновлена до версии v 1.1.

Просьба обновить скачанные Вами файлы библиотеки для LPH8731-3C, т.к. в новой версии исправлены ошибки в функциях работы с 12-битной палитрой и расширен функционал, аналогично библиотеке для LPH9157-2.

Прикрепленные файлы:

Теги:

Опубликована: 03.06.2013 Изменена: 24.06.2013 0 1
Я собрал 0 3
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 3 чел.

Комментарии (44) | Я собрал (0) | Подписаться

0
Kamikadza #
Спасибо за статью, полезная информация. Лежит такой дисплей, буду юзать.
Ответить
0
while(1) #
для дисплеев LPH9157-2 (Siemens C75, ME75) и LPH9135 (Siemens А31, C72, АХ72, А75, АХ75, С76).
А для STM32 можно?
Ответить
0

[Автор]
Igoryosha #
Я пока работаю только с AVR-семейством, STM32 только осваиваю, поэтому портировать смогу только через месяц-полтора!
Ответить
0
Кирилл #
Я портировал этот код Простенькие часики на MSP430 для STM32F4Discovery. Валялся у меня дисплейчик от SIEMENS A60, точнее телефон целиком. Ну и накатал на скоряк (на дисплейчик выводится температура с датчика DS18B20)
https://www.dropbox.com/s/hd1by2q27dy1w3j/main.c
Ответить
0
mrcrook #
Вот кстати картинки работы этого дисплейчика с термо датчиком
https://www.dropbox.com/s/i9j9hn13fgsshn6/IMG_20130401_171709.jpg
https://www.dropbox.com/s/v3o5bk51ub7a244/IMG_20130401_213849.jpg
Отредактирован 03.06.2013 21:18
Ответить
0
#
Отлично! Как раз валяется пару цветных дисплеев от Сименсов. Буду разбиратся в коде и портировать его на BASCOM-AVR. Спасибо огромное за статью!
Ответить
0

[Автор]
Igoryosha #
Не за что! Приятно, когда твой труд оказывается полезен!
Ответить
0
олежка #
Хорошая статья. Когда будет под дисплей LPH9135?
Ответить
0

[Автор]
Igoryosha #
Спасибо за проявленный интерес, планирую до конца этой недели выложить статью про LPH9157-2, а про LPH9135 подождите ещё недельку-другую
Ответить
0
Ринат #
Хочу данный экран подключить на МК atmega8/48, к каким выводам МК подключаются выводы дисплея? Где и как это настраивается? Может я не заметил где это написано в статье? Или где в исходнике? Кто то еще собрал этот девайс? Работает?
Спасибо за ответ!
Ответить
0

[Автор]
Igoryosha #
В самом начале исходника есть пять макроопределений #define под комментарием "Назначение выводов порта", где Вы прописываете имя порта и номер бита, однако, сконфигурировать эти порты на выход Вы должны самостоятельно в основной программе!
Ответить
0
Ринат #
Ага, кажется понял. Там стоят PORTA.0 и т.д. То есть вместо этого мы берем числовые коды портов из даташита?
Ответить
0

[Автор]
Igoryosha #
Определения типа PORTA.0 и т.д. - это макросы CodeVisionAVR, которые обеспечивают удобное управление отдельными выводами порта МК, и Вы легко можете выбрать любой бит любого порта, только самостоятельно определите порты на выход (DDRn).
Ответить
0
Ринат #
Подойдет ли стабиллитрон КС133А?
Номинальное напряжение стабилизации,В 3.3
Максимальное напряжение стабилизации,В 3.6
Ничего что у него максимальное напряжение немного выше нужного?
Ответить
0
Ринат #
Большое спасибо за ответы!
Все получилось, собрал на МК атмега8. Хочется заметить, что к МК стоит обязательно подключить внешний кварцевый резонатор на максимальную частоту, так как работа невероятно тормозит, на частоте 4 МГц ждать приходилось секунд 10 пока что-то нарисуется. Указанный мной выше стабилитрон подошел, проблем не возникло. Субъективно мне показалось, что резисторы на подсветку лучше взять поменьше, где нибудь на 200 Ом, так как экран светился слишком тускло.
Большое спасибо за столь масштабную разработку, данный код кажется очень и очень полезен как в отладке, так и в разработке готовых устройств!
Ответить
0

[Автор]
Igoryosha #
Спасибо! Сам использую графические дисплеи для отладки своих устройств. Насчёт тактовой частоты Вы правы, иначе работа с дисплеем получается очень медленной. Насчёт напряжения стабилизации: в оригинале, напряжение питания составляет 2,9 В, поэтому, чем оно будет ближе к этому значению, тем лучше, можно поставить стабилитрон и на 3,0 В.
Ответить
0
Undead #
Что-то у меня не заработала ваша библиотека на меге32, походу руки кривые. Если можно, выложите проект для проверки
Ответить
0
Undead #
ФЬюзы выставленные вот так:
CKSEL0...3 - 1000
SUT0..1 - 01
BODEN - 1
BODLEVEL - 1
BOOTRST - 1
BOOTSZ0..1 - 11
EESAVE - 1
CKOPT - 1
JTAGEN - 1
OCDEN - 1
В программе сначала идёт инициализация, потом сброс, затем заливка дисплея белым цветом и всё. В схеме не использовал подтягивающие резисторы на землю и стабилитрон (без него питание 3,2В), они обязательны?
Ответить
0

[Автор]
Igoryosha #
А как у Вас тактируется схема, т.к. судя по Вашим фьюзам, Вы используете внешний RC-генератор на 8-12 МГц? Если питание схемы 3,2 В, то, естественно, резисторы на землю и стабилитрон не нужны. Насчёт проекта для проверки - давайте e-mail!
Отредактирован 02.11.2013 13:45
Ответить
0
Undead #
Странно, но фьюзы стоят заводские кроме JTAGEN, на сколько знаю если его не отключить ничего не должно заработать. И по даташиту всё верно вроде на счёт генератора.
Ответить
0

[Автор]
Igoryosha #
Простите, не заметил порядок нумерации фьюзов, всё правильно, у вас - 1 МГц, встроенный RC-генератор. Однако для нормальной и быстрой работы с библиотекой желательно поставить внешний кварц на 16 МГц (ну, и соответственно, изменить фьюзы - http://www.engbedded.com/fusecalc).
Отредактирован 02.11.2013 19:01
Ответить
0
Undead #
Фьюзы уже сменил и поставил на 8МГц от внутреннего генератора, хочу сначала хоть какое-то изменение на дисплее получить, а там уже и внешний кварц можно поставить... У меня на PORTD 0...4 висит и диод вешал на ноги, мигает как по программе, но дисплей молчит. Изменил контраст на 100, думал может в этом проблема, но и тут тишина...
Ответить
0

[Автор]
Igoryosha #
Глупый вопрос - а Вы переопределили порты на выход? Просто у меня в библиотеке подразумевается установка выводов вручную (DDRn) до цикла while(1) основной программы.
Ответить
0
Undead #
Да DDRD=0xFF первым делом. Сегодня всю ночь буду его мучить, посмотрим что получится.
Ответить
0
Михаил #
Все подключил, библиотеки работают, символы и фигуры рисуются, однако вместо цвета заливки, шрифта, фигур, какая то ерунда, будто контрастность выставлена в ноль, что делать?
Ответить
0

[Автор]
Igoryosha #
По своему опыту: искажения текста и изображения возникали, если я задавал макросом _8_BIT_COLOR одну цветовую палитру, а данные подавал, рассчитанные на другую. Проверьте.
Отредактирован 25.11.2013 20:51
Ответить
0
Михаил #
Спасибо, а для особо одаренных можно? Пробовал в библиотеке _8_BIT_COLOR закоментить, разницы не было; передевал цвета стандартно " RED " "GREEN" "YELLOW" и так далее. Поясните пожалуйста
Ответить
0

[Автор]
Igoryosha #
Просто я иногда передаю цвета, не описанные через #define в начале кода, а беру их код из программ, наподобие NokiaImageCreator, чтобы иметь в распоряжении большую цветовую гамму...В Вашем случае мне напрашивается только мысль о качестве пайки контактов к дисплею и вообще о его работоспособности.
Ответить
0
Михаил #
Пайка нормальная, дисплей тоже, т.к. я один угробил. Единственное я уровни резисторами не согласовывал, питаю от трех вольт. А как цвета передавать не описанные в #define? Тупо в функцию подставлять вместо "RED" 0х0А0 что ли?
Ответить
0

[Автор]
Igoryosha #
Насчёт передачи цвета - да, можно подставлять и шестнадцатеричный код типа 0х0А0, а насчёт Вашей проблемы - даже затрудняюсь сказать, т.к. у меня все дисплеи данного типа (около дюжины) работают прекрасно, поэтому напрашивается единственный вывод, что ошибка - явно не в библиотеке!
Ответить
0
Алексей #
Печально, но не заводится никак. Помогите пожалуйста найти ошибку.
Вот код - https://dl.dropboxusercontent.com/u/49697996/m55/M55_LCD_test.7z
Вот биты - https://dl.dropboxusercontent.com/u/49697996/m55/Screenshot%202014-04-01%2008.34.07.png
Заранее спасибо.
Ответить
0

[Автор]
Igoryosha #
У Вас неправильно портированы битовые операции с регистрами PORT. Если необходимо установить бит в ноль, надо, например, PORTA &=~ (1 "смещение влево"PA0);, а у Вас - PORTA |= (0"смещение влево"PA0);
"Смещение влево" - это в комментариях почему-то не сохраняются сами значки!
Отредактирован 01.04.2014 17:24
Ответить
0
Алексей #
Спасибо, переписал, но результата все нет. Видимо придется поглубже в даташит закопаться.
Вот новый код - https://dl.dropboxusercontent.com/u/49697996/m55/M55_LCD_test_v2.7z
Ответить
0
Алексей #
Уже перепробовал с десяток разных инитов, в том числе один из них 1 в 1 совпадает с даташитом, а результата ноль.
Вот новые версии кода
https://dl.dropboxusercontent.com/u/49697996/m55/M55_LCD_test_v3.7z
https://dl.dropboxusercontent.com/u/49697996/m55/M55_LCD_test_v4.7z
Может с подключением намутил? Вот к примеру RESET ногу я на + через резистор и на - через кондер подкинул.
Ответить
0
Алексей #
Фотографии того как я подключал дисплей:
https://dl.dropboxusercontent.com/u/49697996/m55/my/DSC_1602.JPG
https://dl.dropboxusercontent.com/u/49697996/m55/my/DSC_1603.JPG
https://dl.dropboxusercontent.com/u/49697996/m55/my/DSC_1604.JPG
https://dl.dropboxusercontent.com/u/49697996/m55/my/DSC_1606.JPG
Может здесь где ошибки есть?
Ответить
0
Александр #
Вы не могли бы сделать тестовую прошивку для этого LCD, Atmega или PIC, для проверки модели в Протеусе?
Ответить
0

[Автор]
Igoryosha #
Уточните, пожалуйста, Вам нужен просто пример вывода какой-нибудь информации?
Ответить
0
sasha_1973 #
Если можно, обычный тест: чуть текста, чуть графики. Вопрос в том, что-бы именно на СИ!
Если надо вышлю модель и пример на Bascom, только, как?
Ответить
0
sasha_1973 #
Силами Bascom написано и проверено, интересуют другие варианты, на предмет выявления багов.
Ответить
0
MomkO_o #
Тоже не работает. Можете тестовую прошивку выложить?
Ответить
0
sasha_1973 #
Автор статьи проверял модель LCD для Протеуса, всё работает.
Отредактирован 30.05.2014 11:23
Ответить
0
Дмитрий #
А на каком языке этот h файл написан?
Ответить
0
Анатолий #
Добрый день, есть дисплеи LPH8731-3C и S602DA Siemens C65 можно ли их использовать вместо SSD1306 для приемника?
Ответить
0
zeconir #
Добрый день. У Siemens A65 и пр., встречаются три типа дисплеев: первые два описаны в статье, а еще есть с такой маркировкой: WD-X1008J-6CLWe. Так вот, он совместим с командами для LPH8731-3C. Единственное, нужно немного контраст для него подправить.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
Raspberry Pi 2 Arduino UNO
вверх