Работа с дисплеем lph8731-3c от телефонов siemens

Работа с дисплеем 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 применялись три типа дисплея — LPH87313C, LM15SGFNZ07 (контроллер Hynix HM17CM4101) и реже — LM15SGFNZ04. Разрешение всех данных дисплеев составляет 101х80 пикселей, что, при использовании библиотеки символов разрешением 5х8 пикселей, даёт возможность выводить текстовую информацию на 10 строк по 16 символов.

Дисплеи LPH87313C и LM15SGFNZ07:

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

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

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 – вывод питания подсветки.

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

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

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

Библиотека работы с LPH87313C разрабатывалась для работы с компилятором 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.

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

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

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

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

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

Версия библиотеки для LPH87313C обновлена до версии v 1.1.

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

Сообщества › Arduino для автомобиля › Блог › Доброго времени суток

В общем, сам достаточно далёк от ардуино, но появилось желание повторить поделку в виде вольтметр на основе экрана от старого телефона и ардуино, столкнулся с проблемой, вообще не могу понять как его подключить к ардуино уно, если не сложно подскажите

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

Оооо. Эт ты точно зря здесь спрашиваешь. Я тут как то попытался выяснить непонятный момент, так обосрали с ног до головы. Тут же все бл. Специалисты невъеб… Е., космические коробли строят. И из себя целочек строят. Подсказать тут для них, как без яиц остаться. Так что дружище, учи, учи, учи, ищи думай и воплощай.

Самое интересное что сам подключил все и работает

Ищешь такие картинки — пинмаппинг ардуино. И сравниваешь. Типа А0 к А0, D1 k D1 и так далее. Но может выйти что не будет нужных пинов на этой плате. Например А6, А7 на уно нет. Тогда править код надо.

Круто чё…
«достаточно далёк от ардуино»
«на основе экрана от старого телефона»

Я вижу дисплей от телефона Siemens M55 и т.п.
Два вопроса :
«нахрена?» и
«как?» (без опыта и разбираться в библах,
эт ещё если они есть стабильные на такой дисплей)
У Вас что-то уперлось в использование
именно этого дисплея ?
Ответ «просто он есть!» Не вариант.
Цена вопроса 150 руб в Китае
и дисплей будет лучше.
Указанный дисплей представляет из себя единственную ценность, если он в телефоне сименс м55, который в отличном состоянии, будет раритетный телефон для коллекции.

Очень интересная критика, а теперь по фактам,
1Нахрена? Нужно, поскольку езжу в слепую
2 Как? Очень просто, есть человек который напишет готовый код, на этот экран, есть ардуино, есть экран и желание, проблема только в подключении пинов
3 Дисплей с Китая ждать месяца полтора, времени такого нет
4 Готовые вольтметры с Китая, как по мне выглядят ущербно и куда куда, но в свою машину я это не поставлю.
Спросил здесь поскольку в сети есть и коды и то что это работает с ардуино нано и прочими аналогами, но найти распиновку не получилось.

Читайте также  Рекомендации по очистке лазеров в проигрывателях cd

1. — Не принято.
(столько ездить, можно и подождать 2-3 недели с китая нормальный дисплей.)
2. Если Вы не имеете опыта и не понимаете о чём речь,
зачем Вам задавать подобные вопросы,
ответы на которые Вам ничего не скажут?
Не проще ли просто сразу озадачить
«того человека, который будет делать»

Вот, пользуйтесь
(мне не лень было поискать, а Вам видимо лень)
Работа с дисплеем LPH8731-3C от телефонов Siemens
cxem.net/mc/mc218.php

Но имейте ввиду, этот дисплей — какашка, по сравнению с современными.
Он интересен только в комплекте с тем телефоном,
откуда его вытащили и не более,
чтобы передавать атмосферу мобильных телефонов того времени.
Возьмите к примеру ST7789 на Али,
он даст 500% форы этому «динозавру»
ru.aliexpress.com/item/32…0&ws_ab_test=searchweb0_0, searchweb201602_5, searchweb201603_60

Или такая зарядка в прикуриватель. Показывает напряжение в сети, температуру в салоне и силу тока при зарядке мобильника.

Микроконтроллер управляет дисплеем от телефона Siemens!

Многие радиолюбители собирают для себя какие-то конструкции. Иногда простейшие, иногда очень сложные и превосходящие заводские аналоги по всем возможным характеристикам.

Единственное, с чем постоянно возникают проблемы, так это с внешним оформлением. Изготовить тот же корпус в домашних условиях — задача не из простых.
Или, сделать дисплей, на который можно было бы выводить разнообразную информацию. Тут промышленность может предложить нам большое количество всевозможных ЖК и вакуумных индикаторов, но стоят они дороговато, например, цифробуквенный LCD 4х40 (4 строки по 40 символов) в нашей местности стоит порядка 800 деревянных. Да и характеристиками они не блещут. А при их размерах — место им, разве что, в большом стационарном корпусе. Ну а если нам нужно что-то красивое и компактное?

Фоткал на телефон, поэтому выглядит не очень. На самом деле, картинка очень четкая и контрастная. Как на телефоне

В очередной раз столкнувшись с этой проблемой, провел ревизию трупиков сотовых телефонов, которые скопились за годы работы.
Среди всего прочего внимание привлек дисплей от Siemens S65 (такие же дисплеи устанавливают на Siemens CX65/CX70/CX70v/CXI70/CXT65/CXT70/CXV65/CXV70/M65/SX65/SK65/S65/SP65)

176х132 точки, 65к цветов, встроенный контроллер, питание 2.4-3.9 Вольт , цена в среднем 150-200 рублей.

Поискав по интернету, наткнулся на очень интересный сайтик S65 Displays

Как видно на этом сайте, существует 3 разновидности дисплея с разными контроллерами. Системы комманд у всех разные, но для всех дисплеев в общих чертах известны.
Мне, по закону подлости, попался самый не изученный — LPH8836.

В этом архиве исходники тестовой программы для этого дисплея с названного выше сайта
▼ lph_display4_v03.zip 74,49 Kb ⇣ 356

Особенность этого дисплея состоит в том, что в нем не используется сигнал RS (выбор команда/данные), а режим задается стартовым байтом.
Это всё не так уж и страшно, но для нормальной работы дисплея нужно его правильно проинициализировать (послать определенную последовательность команд с определенными интервалами)

Как-то громоздко и довольно странно. Мне сразу показалось, что тут слижком много лишних команд, но об этом позднее.

Переписал исходник под CVAvr, немного подправил и решил опробовать.

Результат не обнадежил. Изображение было с «кривой» контрастностью. Цвет был только серый, «белый» был только немного светлее, чем «черный».
Сначала подумал, что угробил дисплей, но, после проверки на телефоне, стало ясно, что проблема в командах инициализации.
Пришлось снова лезть в поисковики.

Ценой немалых усилий, нашел информацию о том, что этот дисплей построен на контроллере hd66766 о Hitachi.

Вот тут то всё и сдвинулось с мертвой точки.

Почитал даташит на этот контроллер, стал исключать ненужные команды.
В результате, инициализация свелась к пяти командам и занимает примерно 300 миллисекунд.

Основная часть исходников, конечно, сохранена, но всё это прилично доработано.

Добавил функцию put_string() и возможность писать строки разным цветом, немного оптимизировал.
Единственное, до чего пока не доходят руки — написать массив русских символов. Это будет позже (особенно буду признателен, если кто-нибудь поможет!)

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

Для проверки написал программу со счетчиком, значение которого выводится в центре экрана, а по нажатию на кнопку, выводится 4 строки в разных местах.

Думаю, разобраться в ней будет не очень сложно. Возникнут вопросы — спрашивайте!

Вот несколько фоток моего эксперимента.

Питание на схему брал из компьютера: +3.3V, а на подсветку +12V, через резистор на 300 Ом.

А вот небольшое пособие по использованию дисплея типа LS02*, принцип действия тот же, только команды различаются. А вот распиновка совпадает!
▼ using_the_siemens_s65_display.pdf 283,15 Kb ⇣ 475
Этот дисплей мне не попадался, поэтому точность команд гарантировать не могу!

Требуются соратники.

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

Еще есть задумка сделать сигнализацию с обратной связью и таким же дисплеем. На него будут выводиться всевозможные температуры, напряжение АКБ, запас топлива, состояние дверей и т.п. Управление автозапуском, замками и приборами. Думаю даже интегрировать туда MP3-плеер

Единственное, боюсь не осилить это в одиночку.
Поэтому ищу единомышленников. Кто желает поучаствовать в развитии этих проектов — пишите на нашем форуме!
:laughing:
Кто желает поучаствовать в развитии этих проектов — пишите на нашем форуме!

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Куплено и опробовано читателями или в лаборатории редакции.

Простенькие часики на MSP430

Начитавшись огромным количеством статей про Arduino/LaunchPad захотелось приобрести подобную игрушку. Выбор пал на MSP430, так как его цена намного более привлекательна для старта в мир микроконтроллеров.
После томительных 5 дней ожидания, волшебная коробочка оказалась в моих руках. Поиграв минут 10 со светодиодами, захотелось сделать что-нибудь более интересное… Например часики!

Под рукой оказался старенький Siemens A65, который стал донором для моего небольшого проекта. Вытаскиваем из него экранчик и думаем, как бы его подключить. После недолго гугления, я успешно попал на ветку форума РадиоКот, где обсуждались распиновки и инициализации экранов. Если кто сталкивался с задачей подключения экранчиков к микроконтроллеру то знает, что мало узнать схему подключения, так как в экране стоит контроллер, для общения с которым нужно знать команды. Например для включения экрана и отображения мусора из памяти, некоторым контроллерам нужно послать несколько десятков команд, а некоторым хватает и меньше 10. Так вот, зачастую даташиты на контроллеры не найти, и в таком случае помогает только считывание инициализации экрана во время его работы на телефоне. Но мне повезло, инициализацию и команды для моего экранчика (в моем случае LPH8731-3C c контроллером EPSON S1D15G14) не только разобрали, но и даже нашелся на него даташит.

И так, смотрим распиновку, припаиваем проводки и подключаем к микроконтроллеру.

Заводим «шарманку»

Теперь надо разобраться, как же общаться с контроллером. Для контроллера экрана существует 2 типа принимаемых данных — команда или данные. Для выбора типа данных используется отдельный пин. В остальном же, процедура передачи данных одинакова.

Процедура передачи данных на контроллер, взятая из даташита. Тут почему-то не указано состояние пина RS/CD. Кстати, если во время передачи данных состояние CS изменится Low -> High, прием данных приостановится. А вот в конце передачи данных, дергать CS вверх не обязательно (но рекомендуется).

Код приведен для CSS (TI’s Code Composer Studio).
Тут он не полностью, а только кусками для примера. Комментарии на английском, так как мне больше нравится так:)

Теперь мы знаем, как отправить данные на контроллер (ну или хотя бы имеем представление). К счастью в даташите не только описаны все команды, но и имеется даже пример первоначальной инициализации экрана. В целом ее можно разделить на 3 этапа: делаем ресет контроллера (hardware & software reset), задаем первоначальную настройку параметров, включаем дисплей.

В принципе большинство параметров задаются как есть, но некоторые вещи можно менять. Например то, в каком порядке будут записываться значения в память (сверху вниз — справа налево/ снизу вверх — справа налево/ и тд), контраст, а так же глубина цвета (256 цветов или 4096).

Наш адрес не дом и не улица, наш адрес такой.

Включив дисплей, мы увидим либо мусор, либо белый/черный экран. Все потому, что контроллер изменяет состояние матрицы относительно внутренней памяти, и включив его, он отобразит все, что он «помнит». Для отображения какой-либо информации (либо ее изменения) достаточно изменить память и контроллер обновит дисплей (обновляет он дисплей постоянно с определенной частотой, задаваемой в первоначальной настройке, по умолчанию частота обновления 85Hz). Например, для смены цвета пикселя нужно просто записать новое значение в память. Но для начала нужно задать адрес, куда записывать новое значение. Если в компьютере просто задается адрес ячейки памяти и записывается новое значение, то тут надо указать диапазон памяти, в который можно последовательно отправить данные.

Например, для заливки всего экрана нужно выбрать начало записываемой области (x0, y0) и конец (x101, y80). А если нужно поменять цвет только одного пиксела, то соответственно задаем область [x, y][x+1, y+1].

Выбрав область, мы можем теперь просто отправлять данные и они последовательно будут записываться в память (а как именно (слева на право, сверху вниз или наоборот) будет зависеть от первоначальной настройки). Например выбрав область 40х40px, нам нужно будет отправить последовательно 1600 значений (правда это не совсем так, но об этом по порядку), которые будут внесены в память и эта область будет полностью обновлена. А если продолжить отправлять значения, то обновление продолжится со следующего пиксела (в данном случае с первого).

Читайте также  Частичная замена проводки в квартире

Вам письмо! Правда на Китайском.

Мы уже разобрались как включить дисплей и даже как выбрать область для рисования, но как цвет то отправлять? Дисплей может работать с 2 цветовыми палитрами:

  • 8bit (256 цветов)
  • 12bit (4096 цветов)

В случае 8 битного цвета все просто — достаточно отправлять 8 бит на каждый цвет (а именно R2R1R0G2G1G0B1B0, где R2R1R0 — 3 бита красного цвета и тд. На красный и зеленый по 3 бита, а на синий 2 бита).
А вот в случае 12 битного цвета все немого сложнее. Тут уже для каждого оттенка дается по 4 бита. Приведу картинку из даташита.

Как видите, для отправки одного цвета используется полтора байта. Если надо изменить только 1 пиксел, то отправляется 2 байта информации, где во втором байте D3-D0 не будут использоваться. А если надо изменить 2 пиксела, то достаточно отправить 3 байта (где D3-D0 второго байта будут началом, а D7-D0 третьего байта продолжением цвета для второго пиксела ).

Пример функции заливки всего экрана.

А где обещанные часики?

А теперь самое сложное — нарисовать часики. Как вы могли заметить, они стилизованы под сегментный индикатор, так что для отображения часов достаточно нарисовать 2 типа сегментов (вертикальные и горизонтальные) в разных местах.
Для начала надо определиться с дизайном. Спасибо великой программе от MS — Paint, очень уж она мне помогла с этим;).

Вот что у меня получилось. Каждый сегмент размером 12х4px (а вертикальные соответственно наоборот — 4x12px).

А теперь вспомним про выбор области для рисования. Можно же задать область 12х4 в нужном месте и отрисовать сегмент, не перерисовывая весь экран. Если повнимательнее взглянуть на сегмент, можно заметить, что он почти полностью заливается одним цветом, за исключением углов. Так что алгоритм рисования сегмента довольно простой: начинаем заполнение памяти с пустого цвета (к сожалению тут нет прозрачности, так что заполняем цветом фона), добавляем проверки для верхнего правого и нижнего левого угла, и последний пиксел тоже заполняем цветом фона. Точно так же и для вертикальных. А уж как нарисовать точечки я даже не буду рассказывать:).

Пример функции для отображения горизонтального сегмента. greenBright — константа «яркого» цвета (для активного сегмента), greenDim — константа цвета для неактивного сегмента. BG0, BG1, BG2 — константы битов для зарисовки фона.
А если заметите __delay_cycles — это необъяснимая магия, без которой не работает (хотя скорее всего не успевает хардварный SPI отправлять данные, так как они отправляются не за один такт (но намного быстрее, в отличии если реализовать отправку своими силами)).

Теперь надо превратить цифру в набор сегментов (например для отображения 1 надо нарисовать только правые вертикальные сегменты). Я это решил довольно просто — создал массив значений сегментов для различных цифр (от 0 до 9). Подставляя в него цифру, я получаю массив со значениями 1/0, которые управляли отрисовкой сегментов. Например 1 означала, что сегмент нужно отрисовывать, а 0 — что не надо (или отрисовать его «неактивным»). А зная что и где надо рисовать, сделать функцию не составит труда.

И вот мы подошли к концу статьи. Надеюсь я смог максимально подробно объяснить принцип их работы:) И на закуску небольшое видео, как они работают и мигают «точками».

Подключение 7-дюймового экрана с тачскрином (Waveshare) к Arduino

Появилась у меня задача сделать один проект с экраном 7 дюймов с тачскрином. До этого я работал только со стандартными экранчиками под ардуинку не более 4.5 дюймов, которых много есть различных моделей в магазинах. А вот с экранами побольше выбора почти нет, да и информации мало. После долгих изучений я нашел 3 варианта:

1) делать проект на Raspberry, но выйдет намного дороже по комплектующим

2) использовать дисплей Nextion, но он тоже не дешевый и я хочу сделать проект на ESP32 с возможностью удаленной прошивки контроллера по воздуху, а с Nextion такое, как я понял, не получится.

3) с использованием контроллера RA8875

Первые два варианта я оставил как запасные, если не удастся с третим. По поводу RA8875 — есть отдельно готовый модуль от Adafruit https://www.adafruit.com/product/1590 , но стоит он тоже многовато, а с учетом того, что нужно еще и экран покупать, то выйдет дороговато. А есть уже готовые модули с этим контроллером и экраном с тачскрином (резистивным или емкостным). Я остановился на таком варианте https://www.waveshare.com/7inch-capacitive-touch-lcd-c.htm

И вот приехал мне этот дисплей с алишки за 47$ как раз перед Новым годом. Сразу же запаял штырьки в правый нижний блок (2х7), так как подключать я его собирался по SPI, а слева выводы под паралельный интерфейс. Библиотеку взял https://github.com/adafruit/Adafruit_RA8875 Но сразу ничего не получилось. Пришлось изучать даташити на этот контроллер и искать информацию в интернете. И вот я наткнулся на одну статью ( https://github.com/sumotoy/RA8875/wiki/Various-RA8875-based-. ), где написано, что на этом дисплее не выведен SPI и подключить его не получится. Я уже расстроился и подумал, что придется пилить на Raspberry, но продолжил изучать даташиты. Сравнив схемы этого модуля и модуля Adafruit я увидел, что все сходится и SPI там выведен. Но тут выведены еще контакты PS, SIFS0,1, I2CA0,1. Изначально я их не подключил, но в даташите написано, что есть несколько режимов работы контроллера RA8875 — паралельный интерфейс, SPI 3-wire, SPI 4-wire, I2C. И в зависимости от того, какой режим используется надо эти контакты завести на VCC или GND.

И так в случае SPI 4-wire схема подключения такая:

CS — любой цифровой выход

LCD_RST — любой цифровой выход

RS_INT — любой цифровой вход

После такого подключения экран заработал:

Сразу хочу уточнить, что ESP32 работает на 3.3В, но если вы захотите подключить экран к Arduino , которая работает на 5В, то нужно согласование уровней, а то можете спалить дисплей ( http://we.easyelectronics.ru/Shematech/soglasovanie-logiches. )

После этого начал разбираться с тачскрином. В этой же библиотеке Adafruit_RA8875 есть возможность работы с тачскрином, а на контроллер RA8875 должны быть заведены контакты тачскрина Y+, Y-, X+, X- Но это сработает только в случае резистивного тача. А у меня модуль с емкостным и контакты его заведены на контроллер GT811. И тут опять возникла проблема: нет ни одной библиотеки для подключения этого контроллера к ардуино. Подключается он по I2C — 4 нижних контакта на этой же колодке (2х7):

СT_RST — любой цифровой выход

CT_INT — любой цифровой вход

Пришлось опять читать даташиты и искать в интернете информацию. Была найдена библиотека на GT811 для контроллера GD32 — аналог STM32 ( https://github.com/pysco68/waveshare-hid/blob/master/src/gt8. ) Детально ее изучив, переписал на простую библиотеку под ардуино https://github.com/levkovigor/GT811

На данном тачскрине можно отслеживать до 5 одновременных касаний.

Теперь остается только откалибровать координаты тачскрина относительно координат экрана и можно пилить проект.

Найдены возможные дубликаты

Arduino & Pi

1K постов 17.8K подписчика

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте — используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

Как доделаешь, сними видео, как работает.

Забыл(( Постараюсь сделать в ближайшее время. Но, по сути, там просто клавиатура на экране и поля, где вводится текст. Это панели для квест-комнаты. Есть скриншот, когда тестировали вместе всю систему

Одно не могу понять, почему 7″ готовый планшет, где уже есть — IPS экран с тачем 1024х800, флешка на 4гига, аккумулятор, проц на 4 ядра 1.7ггц стоит в рознице ТУТ. 2.2тыс, а гребаный экран отдельно стоит 3.4тыс без доставки.

Потому что в экране планшета «сложный» для ардуинщиков интерфейс. И плюс массовость производства.

Сказали же. Для ардуинщиков

Это где же за 2200 можно купить планшет с IPS экраном?

За такие деньги у вас будет убожество с ОЧЕНЬ плохими углами обзора.

Ну и не забывайте, что за те 2200 телефон будет скорее всего залочен под сотового оператора и оператор вполне может продавать его если не ниже себестоимости, то уж точно по себестоимости. Зарабатывать при этом оператор будет на доп. услугах, которые клиент купит благодаря наличию на новом телефоне всяких трафикопожиралок типа youtube, instagramm и т.д. и т.п.

7″ Планшет FinePower E3 4 ГБ 3G черный

[1024×600, IPS, 4х1.2 ГГц, 0.5 Гб, BT, GPS, 2200 мАч, Android 4.x+] = 2 299 руб

За такие деньги у вас будет убожество с ОЧЕНЬ плохими углами обзора.

Android 4.x, 512 mb RAM, процессор 2015 года выпуска . ничего не смущает? Для «модели 2018 года» по версии DNS 😉

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

Про матрицу — сильно сомневаюсь, что там настоящий IPS с хорошим углом обзора.

Если не забуду, то попробую чисто ради интереса посмотреть на углы обзора этого IPS’а, практически уверен, что они окажутся хуже, чем у древнего монитора на TN матрице. Но если углы будут реальными, то с удовольствием куплю чисто как фоторамка или как экран для погодной станции (благо никто не мешает написать любое приложение для андроида под эти цели, либо взять одно из массы готовых) ;))

Но вообще в современных планшетах/смартфонах цена экрана может оказаться 50+% от стоимости всего устройства.

По цене отдельного экрана — это ж DIY модуль для штучных задач, цена в любом случае низкой не будет. Вот если бы кто-то заказал у производителя 10k таких экранов, да потом нашел рынок их сбыта, то и ценник бы оказался существенно ниже.

Читайте также  Контроллер заряда солнечной батареи на ltc4357

Это как с не очень давно было с мини экранчиками для всяких ардуин и просто поделок на Atmel/PIC. Либо хороший экран от нокии за 100-150 рублей в розницу в любом ларьке, либо экран в разы дороже и не факт, что лучше. В чём причина? Экраны от нокий производились миллионными партиями, выкупались оптом и массово использовались.

А нечто более специфичное — это уже штучный товар со всеми вытекающими проблемами.

Работа с дисплеем lph8731-3c от телефонов siemens

В далёком 2005 году телефоны Siemens C75 и ME75 били рекорды популярности в бюджетном секторе благодаря привлекательному внешнему виду и демократичной цене.

Привлекал внимание и TFT-дисплейчик, имеющий разрешение 132×176 пикселей и палитру в 65536 цветов.

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

Скажу сразу – данный дисплей мне очень понравился – миниатюрный, яркий и красочный, поэтому было решено продумать библиотеку для работы с ним по максимуму, т.к. при разработке своих устройств, из пары десятков индикаторов от различных старых телефонов, предпочтение отдаю именно ему.

В телефонах Siemens C75 и ME75 можно обнаружить два типа применяемых индикаторов — LPH9157-2 (с зелёным текстолитом) и некий ALPS (по крайней мере, под таким именем он фигурирует в Internet-ресурсах). Данный индикатор имеет жёлтый текстолит. В моей коллекции такой присутствует только в единичном экземпляре, поэтому написание библиотеки для работы с ним (увы!) в мои ближайшие планы пока не входит.

Распиновка дисплея LPH9157-2:

1. CS – Chip Select. При установке в «0» контроллер дисплея принимает информацию;
2. RESET – вывод для сброса контроллера;
3. RS – вывод для определения типа передаваемых данных («0» — команда, «1» — данные);
4. SYNC – вывод для синхронизации с VGA-камерой (нам он не нужен);
5. CLK – вывод тактового сигнала для передачи данных;
6. DAT – вывод передачи данных;
7. 2,9V – к источнику питания;
8. GND – общий провод (земля);
9. VBOOST – вывод анодов светодиодов подсветки;
​10. LIGHT DISP – вывод катодов светодиодов подсветки (к GND).

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

Резистор R7 подбирается с учётом необходимой яркости подсветки.

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

Оба варианта печатных плат для согласования дисплея с контроллером прилагаются в архиве.

Дисплей LPH9157-2 поддерживает три цветовые палитры: 256 цветов (8 бит на пиксель), 4096 (12 бит на пиксель) и 65536 цветов (16 бит на пиксель), в библиотеке же реализовано 2 палитры — 256 и 65536 цветов. Хотя работа с 8-ми битной палитрой предпочтительнее при небольшой частоте работы контроллера, в данном дисплее цвета в этом случае получаются очень бледными.

Datasheet на контроллер для дисплея LPH9157-2 найти не удалось, однако на глаза попался пример инициализации с подробным описанием команд, что уже было достаточно для начала экспериментов. Из команд инициализации особый интерес представляет команда Memory Access Control (36h), т.к. она позволяет задавать, с помощью следующего за ней байта данных, направление заполнения области дисплея.

В этом байте данных нас интересуют старшие 3 бита: 0bVHRXXXXX, где V – отвечает за направление заполнения по вертикали (0 — сверху-вниз, 1 — снизу-вверх), H — заполнение по горизонтали (0 — слева-направо, 1 — справа-налево), R – позволяет менять местами строки и столбцы.

Как видно из рисунка, вместе с изменением направления заполнения области дисплея, меняется и начальная позиция осей x и y.

Этого уже достаточно, чтобы при выводе текстовой информации обеспечивать программным образом поворот текста на 90º, 180º и 270º.

А почему же тогда, для правильного отображения текста, при его повороте на 90º, и 270º, не использовать возможность поменять строки и столбцы местами, чего можно добиться, устанавливая бит R в «1»?

Вот и я так подумал сначала, однако эксперимент с дисплеем показал, что фактическая область для отображения информации в этом случае ограничивается, как показано на рисунке красным цветом.

Поэтому, совместить быстрый вывод текстовой информации (предварительно задавая ту область дисплея, где предполагается изобразить символ) с возможностью изменения направления отображения текста невозможно. И, в угоду универсальности библиотеки, было решено пожертвовать скоростью вывода текстовой информации, что можно заметить при выводе большого текстового массива при малой частоте кварца микроконтроллера.

При выводе символа, функцией Send_ Symbol (задаётся цвет символа и цвет фона) предварительно задаётся та область экрана, где будет отображён один байт из пяти, формирующих изображение (в библиотеке используется шрифт 5х8 пикселей). Изображение символа с помощью функции Send_Symbol_Shadow (без задаваемого цвета фона) – попиксельное.

С целью отображения на дисплее большого объёма текстовой информации, в библиотеке я использовал шрифт 5х8 пикселей, который, при увеличении масштаба изображения, немного напоминает такое течение в изобразительном искусстве, как кубизм. Вы можете использовать любой другой шрифт большего размера , для этого вам необходимо переработать функции Send_ Symbol и Send_Symbol_Shadow под себя и учесть ширину символа в функциях LCD_Puts, LCD_Putsf, LCD_Puts_Shadow и LCD_Putsf_Shadow.

Также, при использовании библиотеки, следует иметь ввиду, что при запуске дисплея, начало адреса осей X и Y – левый верхний угол, а при изменении направления вывода текста или изображения (90º, 180º, 270º), осью X всегда будет считаться сторона над верхней частью выводимого текста или изображения.

Библиотека (для CodeVisionAVR) работы с LPH9157-2 содержит следующие функции (приведены только пользовательские функции!):

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-памяти микроконтроллера. В отличие от библиотеки для LPH8731-3C, для вывода строки задаётся не номер строки и столбца, на которые предполагаемо разбит экран, а адреса начальных пикселей 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, которые несложно найти на просторах интернета. Единственное требование – направление вывода массива изображения должно выполняться слева-направо, сверху-вниз! При использовании 16-ти битной палитры, при преобразовании изображения в массив типа 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.

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