С некоторых пор в интернет-магазине Алиэкспресс появились жидкокристаллические дисплеи с диагональю 2,2 дюйма и разрешением 240RGBx320 по очень соблазнительной цене. Я оказался в числе соблазнившихся и приобрел парочку таких изделий по 90 руб. за штуку. Забегая наперед, могу сказать, что авантюра оказалась удачной: несмотря на мягкую упаковку, фальшивый трек-номер и несоответствие модели дисплея, товар дошел без повреждений, экранчики удалось подключить, протестировать и никаких дефектов выявлено не было. Но, как говорится, скоро сказка сказывается...

Подключение такого рода экранчиков не является суперсложной задачей. Но, правда, при одном условии - наличии технической документации, которая в самом минимальном виде должна содержать назначение выводов LCD, список команд и алгоритм инициализации. В некоторых случаях требуются и еще некоторые "секреты". Чтобы не оказаться "счастливым" обладателем, хотя и не дорогого, но бесполезного хлама, я заранее нашел в интернете и скачал документацию. Но, получив на почте конвертик, как и многие "братья по счастью", я с удивлением обнаружил в нем... не совсем те LCD, какие были в описании у продавца. Единственное, что совпадало - это диагональ и разрешение. Впрочем, проверить разрешение удалось позднее - только после включения. Различия же начинались уже с количества выводов - их было 32 вместо обещанных 26. Пришлось искать информацию теперь уже на реальный дисплей. Не скажу, что поиск был долгим и трудным, но это лишь благодаря тому, что на одном из форумов уже была открыта подобная тема: http://forum.easyelectronics.ru/viewtopic.php?f=9&t=22577 Мужики, оказавшиеся в аналогичной ситуации, раздобыли нужную информацию.

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



Настолько простой, чтобы вероятность ошибки в ней стремилась к нулю. Она также должна быть максимально открытой, чтобы ее работу легко можно было проверить, например, в пошаговом режиме, измеряя напряжения на выводах LCD. Нужно было выбирать: собирать схему на микроконтроллере или без него. Предпочтение было отдано второму варианту. Во-первых, при этом отпадала необходимость писать программу для контроллера и возиться с ее отладкой. Во-вторых, для организации пошагового режима не нужно было ничего специально выдумывать. В-третьих, при внесении изменений в программу не требовалась перепрошивка чего-либо - достаточно было сохранить изменения в текстовом файле, и - можно снова запускать программу. Недостаток же у этого метода, пожалуй, всего один - низкая скорость записи информации в LCD. Но с этим недостатком решено было смириться, учитывая назначение данной схемы. Я не собирался постоянно использовать LCD с таким способом подключения. Мне нужно было лишь удостовериться в исправности экранчиков, разобраться с алгоритмом их инициализации, поэкспериментировать, потестировать. Описываемая ниже схема отлично справилась с этими задачами. Заполнение всего экрана графической информацией с ее помощью длится, конечно, довольно долго - нужно передавать в LCD большой объем информации при том, что интерфейс LCD реализован путем его программной эмуляции, да еще и через сдвиговые регистры, управляемые также программно. Однако длительность инициализации, как и длительность настройки режимов LCD, не столь велика и укладывается в приемлемые рамки. Это объясняется тем, что для инициализации или настройки достаточно выполнить максимум нескольких десятков операций записи.

2. Схема устройства

Рассмотрим подробнее порядок подключения LCD, несущего на себе загадочные надписи TC220-85-C-P4-J-E и TFT8K0291FPC-A1.

Рис. 2.


1 . О назначении первого вывода я могу лишь строить предположения. Возможно, он сигнализирует о физическом присутствии LCD в системе. Во всяком случае, без него можно обойтись.
2
3 . Питание +2.8V
4 . Выбор кристалла. Активный уровень - низкий. Его полноценное задействование имеет смысл в том случае, если шина данных используется более чем для одного устройства. В простейшем случае достаточно подать на него константу - логический "0".
5 . Обязательно должен быть подключен и программно доступен. Этот сигнал принимает разные уровни в зависимости от того, что записывается в LCD: команда (0) или данные (1). Здесь можно запутаться. Дело в том, что в концепции разработчиков микросхемы вместо понятия "команда" используется понятие записи в "индексный регистр". Это почти то же самое, но с указанием на архитектуру кристалла. Индексный регистр является указателем адреса того регистра, куда будут записываться данные. Иначе говоря, команда - это номер в адресном пространстве регистров, предназначенных для записи данных. В качестве данных могут быть как настройки режимов, так и графическая информация.
6 . Строб записи. Активный уровень низкий. Подключать обязательно. Когда записываемая информация на шине данных сформирована, этот сигнал должен быть переведен в активное состояние и обратно. При этом происходит запись информации в LCD.
7 . Строб чтения. Активный уровень низкий. Можно не использовать, подав на него константу - логическую единицу. Нужен только в том случае, если предполагается читать что-либо из LCD.
8
9,10,11,12 . Выводы сенсорной панели, которой нет.
13 . Общий анод светодиодов подсветки. Соответственно, подключается к плюсу источника питания подсветки.
14,15,16,17 . Катоды светодиодов подсветки. Подключаются к минусу источника питания подсветки. Причем, вместе их лучше не соединять из-за разброса параметров светодиодов.
18 . На этот вывод лучше подать константу, а вот какую - это дело личных предпочтений. Я решил подать логическую единицу. Нет, не от того, что к единицам больше тяготею, чем к нулям. Дело в том, что при этом возможности данного дисплея раскрываются по-максимуму. Надо отметить, что разработчики очень "постарались" с разрядностью шины данных и внутренних регистров. Так вот, подав логическую единицу на этот вход, мы получим аж 9-разрядную шину данных и максимальный набор цветовых и яркостных градаций. При нуле на этом входе становится ненужным вывод 19 (DB9), а шина данных превращается в 8-разрядную.
19...27 . Шина данных DB9...DB17. Без нее не обойтись.
28 . Аппаратный сброс. Активный уровень - низкий. Он нужен, но в самом простом случае к нему можно подключить даже обычную кнопку с подтягивающим резистором.
29 . Питание +2.5...3.3 V.
30 . Питание +2.8V.
31 . Подключается к общему проводу.
32 . Этот вывод сделан для красоты. Подключения не требует.

Для связи с компьютером использован простенький конвертер USB-RS232TTL на микросхеме PL-2303. Вовсе не обязательно применять именно такой конвертер, но у этого есть свои преимущества. Главное из них заключается в отсутствии необходимости подключать дополнительное питание. Все питающие напряжения можно получить прямо от этого модуля. Кроме обычного для USB напряжения +5V, данный модуль имеет выход +3.3V. Зачем создателям микросхемы PL-2303 понадобилось утруждаться формированием этого напряжения, я не очень понимаю. Казалось бы, питание подключенных к модулю устройств - не их забота, но раз такое напряжение уже сформировано, было бы грех этим не воспользоваться. С помощью диода VD1 и резистора R29 напряжение 3.3V снижается примерно до 2.8V и используется для питания LCD. В качестве VD1 подойдет любой кремниевый диод.

Микросхемы DD2 и DD3 питаются напряжением 5V, которое также снимается с модуля преобразователя интерфейса. С помощью этой же цепи питания формируется ток питания светодиодов подсветки. Величина этого тока ограничивается резисторами R30...R33. Соединять катоды светодиодов подсветки между собой не рекомендуется.

На резисторах R3...R26 собраны делители напряжения. Они нужны для понижения уровня логической "1" сигналов, поступающих с выходов микросхем DD2, DD3 на входы LCD. Если этого не сделать, на входах LCD будет появляться напряжение логической "1", значительно превышающее напряжение питания LCD, что недопустимо.

Эмуляция интерфейса LCD выполняется путем последовательного наполнения сдвиговых регистров DD2 и DD3. Благодаря наличию в этих микросхемах дополнительного регистра хранения, процесс их наполнения не меняет состояние выходов до тех пор, пока не будет подан сигнал параллельной загрузки на выводы 12. Это позволяет управлять логическим уровнем любого разряда на выходах Q0...Q7 указанных микросхем, оставляя неизменными состояния остальных выходов.

Для наполнения сдвиговых регистров (74595) на вывод 14 микросхемы DD2 последовательно подаются вводимые данные, начиная со старшего разряда. Сдвиг выполняется положительным фронтом синхроимпульса на выводах 11 обеих микросхем. По окончании наполнения регистров на выводы 12 микросхем DD2 и DD3 подается импульс логической единицы, по фронту которого происходит одновременное (параллельное) отображение накопленных последовательным способом данных на выходах регистров. Передача сдвигаемых данных от DD2 к DD3 выполняется при помощи вывода 9 микросхемы DD2, который отражает состояние старшего разряда сдвигового регистра, минуя параллельный регистр хранения. В общей сложности для управления сдвиговыми регистрами как описано выше требуется три сигнала: данные, сдвиговый синхроимпульс и синхроимпульс параллельного вывода.

Указанные сигналы формируются программно на выходах DTR, RTS и TXD конвертера USB-RS232TTL. Сигналы DTR, RTS и TXD в данном случае используются нестандартно, но никакого "криминала" в этом нет, и, как показывает опыт, такой метод достаточно надежен. Задействованный в данной схеме конвертер не имеет удобно выведенных выходов DTR и RTS, поэтому пришлось прорезать окно в термоусадочной оболочке и припаять проводники напрямую к выводам микросхемы PL-2303. У данной микросхемы на выводе 1 формируется сигнал TXD, на выводе 2 - DTR, на выводе 3 - RTS. Но такой метод получения доступа к необходимым сигналам подойдет не всем - пайка мелкая. Расстояние между первым и четырнадцатым выводами микросхемы PL-2303 составляет всего 8,8 мм. Можно пойти другим путем - применить конвертер USB-RS232TTL в виде шнура-переходника. Тогда все необходимые сигналы можно снять с обычного разъема, как у COM-порта. Питание схемы в этом случае придется организовывать другим способом. При замене конвертера USB-RS232TTL на другую модель необходимо учитывать возможность инвертирования (или его отсутствия) некоторых сигналов в зависимости от модели конвертера. Нет никаких требований по инвертированию, которые влияли бы на выбор конвертера. Нужно лишь иметь в виду, что может потребоваться внести соответствующую поправку в программу (в самом начале скрипта, где описаны настроечные константы).

В цепи питания 5 В и 2,8 В полезно добавить конденсаторы емкостью 0,1...1 мкф, чтобы снизить вероятность сбоя из-за помех по питанию.

3. Программная часть

Аппаратная часть подключения данного LCD не содержит в себе ничего особенного, если не обращать внимания на девятиразрядность шины данных, что, впрочем, не страшно. А вот с точки зрения программирования данного дисплея можно сказать, что его создатели намудрили основательно: все внутренние регистры считаются 18-разрядными (даже индексный, использующий всего 7 разрядов), запись из-за этого всегда выполняется двумя операциями (сначала - старшие 9 бит, затем - 9 младших), инструкции в то же время 16-разрядные (что вызывает особый "перекос" с 18-разрядным внутренним регистром записи), а графические данные используют все 18 бит при условии, что шина данных работает в 9-разрядном режиме. Причем три элементарных цветовых пикселя в одной триаде передаются также за две операции записи: сначала 6 бит красного и 3 старших бита зеленого, затем 3 младших бита зеленого и 6 бит синего. Ко всему в придачу алгоритм инициализации придуман как будто с расчетом "чтобы враги не догадались" - для запуска данного LCD требуется обилие замысловатых настроек и команд.

Рис. 4. Каждый из этих симпатичных квадратиков нарисован на фоне цветового шума при помощи следующего алгоритма:

Y=128;
a=1;
while a begin
Инд="20"; SetIndex(); Дан="0040"; SetData();
Инд="21"; SetIndex();
Дан=Str.SetLen.Right(Str.DecToHex(Y),4,"0"); SetData();
Инд="22"; SetIndex();
b=1;
while b begin
if (a20) then

if (b20) then
Точка="000000000000000000" else
Точка="111111000000000000"; //красный
OutToGRAM();
b=b+1;
end;
Y=Y+1;
a=a+1;
Sys.PM();
end;

С учетом вышесказанного, рассматриваемый LCD трудно назвать простым для программирования. Делаю такой вывод, имея возможность сравнивать: в прошлом довелось "поиграться" с похожим экранчиком, имеющим также разрешение 240x320 и такую же диагональ. Но тот LCD удалось запустить в буквальном смысле голыми руками - схема подключения состояла только из батареек (питание), проводов, кнопок и не содержала никаких микросхем! Шина данных там была 8-разрядная. Каждая запись в LCD состояла из одной операции записи. Элементарные цветовые пиксели кодировались каждый своим целым байтом. Команды для инициализации приходилось набирать перемычками. Всего команд для запуска дисплея нужно было штуки три и это было не трудно. И все получилось! С описываемым в данной статье LCD такой фокус бы не прошел.

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

Теперь подробнее об особенностях данного LCD, которые необходимо учитывать при его программировании. Прежде всего необходимо знать, что запись любой информации в данный LCD выполняется в два этапа. Это позволяет передать 18 бит через 9-разрядную шину данных. Никаких специальных переключателей, позволяющих отличить первую половину данных от второй, не предусмотрено. "Склеивание" 18-разрядного слова происходит внутри дисплея автоматически. Нужно лишь соблюдать последовательность - первыми идут старшие биты, затем - младшие. Далее, чтобы избежать путаницы, будем называть такую двойную запись полным циклом записи (ПЦЗ).

Различают передачу в LCD команд и данных. Аппаратно эти два вида ПЦЗ четко разделены при помощи сигнала "RS" (вывод 5 дисплея). Данные тоже различаются: в зависимости от ранее переданной команды это могут быть установки режимов и настроек, либо отображаемые на экране графические данные. Во втором случае данные можно передавать многократно, не повторяя ввод команды, - внутренний счетчик адреса LCD после каждого ПЦЗ автоматически увеличивается на единицу, что выглядит на экране, как переход к следующей RGB-триаде элементарных пикселей.

Что бы мы ни пытались сообщить дисплею, первым всегда идет ПЦЗ команды. По-другому это еще называют записью в индексный регистр. Код, который мы заносим в этот регистр по сути является номером одного из регистров, предназначенных для приема данных. Это значит, что заполняя индексный регистр (передавая команду), мы сообщаем тому или иному регистру данных, что последующая запись данных будет производиться в него. После ПЦЗ команды выполняется один или множество ПЦЗ данных. LCD различает запись данных и запись команд с помощью своего 5-го вывода (RS), устанавливаемого в состояние логического нуля при записи команд, и в состояние логической единицы - при записи данных. Вот, собственно, и все, что касается общего подхода к программированию LCD, но есть свои особенности в распределении разрядов 18-разрядного слова внутри ПЦЗ.

Возьмем, к примеру, ПЦЗ в индексный регистр. Этот регистр в действительности использует всего 7 бит. Обратите внимание на рисунок, показывающий соответствие между передаваемой информацией и записываемой в регистр.


Данные для той или иной команды являются 16-разрядными (кроме графических). На следующем рисунке показано, как передаваемые за один ПЦЗ 18 разрядов "упаковываются" в 16-разрядный регистр данных.


И, наконец, передача в LCD одного полного RGB-пикселя (триады) также не лишена особенностей. Данные одной триады передаются за один ПЦЗ. На рисунке показано кодирование триады (18 бит = 6 бит "R" + 6 бит "G" + 6 бит "B").


Желающие могут . Написана она в виде скрипта (файл "Тест LCD 240RGBx320.pms" в папке "PMS"), для исполнения которого требуется интерпретатор, входящий в состав программы "Перпетуум М". также можно по прямой ссылке. Таким образом должно получиться два архивных файла. Установка программного обеспечения сводится лишь к созданию новой папки на жестком диске и распаковке в нее содержимого обоих архивов. После этого можно запускать файл perpetuum.exe

Программа (скрипт) содержит функции эмуляции интерфейса LCD, алгоритм инициализации дисплея и тесты, два из которых заполняют экран черными и белыми полями, а третий выводит картинку. Просматривать и изменять данную программу можно с помощью обычного текстового редактора. Перед первым запуском программы уточните в диспетчере устройств Windows имя используемого порта и, при необходимости, внесите соответствующую поправку в текст скрипта (строка: "ИмяПорта="COM4";" - вместо цифры 4 может стоять другая цифра). Также при использовании другой модели конвертера USB-RS232TTL может потребоваться изменение настроек инвертирования сигналов (строки скрипта, начинающиеся со слова "Высокий"). Проверить инвертирование сигналов конвертером USB-RS232TTL можно с помощью одного из примеров, содержащегося в инструкции к программе "Перпетуум М" (раздел функций для работы с портом).

Здесь также можно найти . Эта таблица поможет разобраться в режимах и настройках дисплея.

Кроме PL-2303 существуют и другие микросхемы, на которых создаются конвертеры интерфейса, подобные использованному в данной разработке. Читайте описание ещё одного преобразователя и о его доработке до полноценного USB-RS232TTL.

Взаимозаменяемость матриц, это частый вопрос, который возникает в процессе ремонта ноутбука.
Разберём всё подробно и по пунктам.
Всё это косается современных матриц с LVDS управлением. Начиная с 1999 года производитель наконец то начал стандартизировать свои матрицы и на сегодня мы имеем следущее документы по матрицам.

Последнего стандарта 4.0 от 2007 года я не имею, но всё ясно по последнему доступному документу

1. ЕЕПРОМ НА МАТРИЦЕ
На матрице как правило устанавливают микросхму памяти (еепром) в которой прописаны характеристики матрицы, т.е. указание ноутбуку, какая стоит матрица и как с ней работать. Еепром на матрице может стоять, а может и не стоять (все современные матрицы имеют установленный еепром согласно стандартизации, а старые матрицы могут еепром не иметь).
Большенство ноутбуков использует еепром матрицы, а в части ноутбуков матрица выставляется джамперами или перемычками на шлейфах. Прошу обратить внимание, на то, что на некоторых матрицах, гдее еепром отсутствует все контакты выводов еепром могут быть подключены на массу и при подключении такой матрицы в ноутбук, где еепром опрашивается, возможно повреждение материнской платы, а именно выгорание видеочипа или канала питания еепром. Если у вас есть матрица без еепрома, то можно установить в неё еепром с разбитой или неисправной матрицы.

2. КРЕПЛЕНИЕ МАТРИЦ
Даже похожие матрицы могут иметь разницу в креплениях.
17" матирицы , боковые крепления идентичные, но может возникнуть проблемы с плоскостными креплениями (наличие и отсутствие "ушей" рис. ниже) , также как исключение ACER 17xx series, где стоит матрица от настольного лсд монитора. (Есть несколько вариантов и китайских буков, а так же какой то ровер, но это мы не рассматриваем)
В случае, если они лишние, как правило, решается их демонтажём.
16" матрицы , бывают двух типов, HITACHI и SHARP,
15.4" матрицы боковые крепления идентичные, но может возникнуть проблемы с плоскостными креплениями (наличие и отсутствие "ушей") Исключение составляют 2х ламповые матрицы
15.2" матрицы выпускались только одной фирмой и уникальны
15" матрицы

standart 1 это A=12,5 B=169,5
standart 2 это A=21,5 B=196,5
(см. рисунок)
Исключения состовляют несколько моделей старых матриц HITACHI, где хоть и отверстия расположенны согласно стандарту но рамка матрицы заметно смещена в сторону правого края и в вверх, и несколько моделей старых китайских производителей того же типа, что и hitachi
14" обычные (НЕ широкоформатные матрицы)
Существует 2 основных типа с креплениями находящимися в разных местах, тоесть расстояние от края до первого отверстия это обозначим А , а от первого отверстия до второго В
14 standart 1 это A=15 B=69
standart 2 это A и B имеют другие значения, нет под рукой.
(см. рисунок)
Исключения состовляют несколько моделей старых матриц HITACHI, где хоть и отверстия расположенны согласно стандарту но рамка матрицы заметно смещена в сторону правого края и в вверх
Так же исключения составляют матрицы предназначеные под тачскрин, крепления совершенно другие даже по форме.
14" WIDE (широкоформатные матрицы)
Существует 2 основных типа с одинаковыми креплениями, но отличающиеся размерами самого экрана. Вот тут внимание, они не взаимозаменяемы , более того имеют различные размеры, т.е. первый тип шире и ниже, а второй уже и выше. Сам попадал на это не раз.
Как пример:
13.3" обычные (НЕ широкоформатные матрицы) которые попали под стандартизацию идентичны по креплениям, более старые имеют столько вариантов, что учитывая древность, даже и не буду тут упоминать.
13.3" WIDE (широкоформатные матрицы) имеют идентичные крепления, но иногда различную (хоть и небольшую) толшину рамки, к примеру в sony ставят гораздо тоньше чем в прочие аппараты (как пример тонких матриц sharp lq133k1la4a и ltd133ex2x )
12.1" обычные (НЕ широкоформатные матрицы) идентичны по креплениям, исключения составляют матрицы имеющие фронтальные отверстия в виде ушей сбоку.
12.1" WIDE (широкоформатные матрицы) имеют идентичные крепления

3. РАЗЬЁМ ЛАМПЫ
Разьёмы на лампах могут быть 4 типов (см. рисунок)
разьём A используется практически на всех матрицах
разьём С используется гораздо реже и в основном на ноутбуках toshiba
разьём В используется на очень старых матрицах или матрицах от настольного монитора
разьём D используется очень редко на экзотических матрицах

4. РАЗЬЁМ ПОДКЛЮЧЕНИЯ МАТРИЦЫ
Наиболее часто используемые в матрицах разьёмы для подключения на рисунках ниже.
Обычный 20и пиновый разьём ставится на матрицах старого образца, так же как и 14 пиновый, который используется очень редко.
20и пиновый разьём slim, он же гребёнка, уже экзотика и встречается, как правило на старых аппаратах.
Повсеместно сейчас используют 30и пиновые разьёмы на матрицах от 14" до 20" дюймов и 20и пиновые new standart на матрицах меньше 14 и дюймов, которые заявленны в современной стандартизации.

Стандартный разьём 20pin

Стандартный разьём 30pin

Стандартный разьём 14pin

Разьём pin slim он же гребёнка

Рассматриваемый шилд представляет собой плату с встроенными модулями индикации и управления. Индикация осуществляется с помощью LCD-дисплея TC1602, управление – через встроенные кнопки. Есть возможность регулировки яркости дисплея прямо на плате с помощью подстроечного резистора. Плата снабжена разъемами, в которые могут быть подключены другие устройства, например, датчики. Для работы с экраном используются пины 4-10, для определения нажатия кнопок – только один аналоговый пин A0. Свободными являются цифровые пины 0-3, 11-13 и аналоговые пины A1-A5.

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

Технические характеристики

  • Тип дисплея: LCD 1602, символьный, 4-х битный режим.
  • Разрешение: 16×2 (две строки по 16 символов каждая). Знакоместо 5×8 точек.
  • Цвет дисплея: синий (возможны варианты с желтым и зеленым цветом). Буквы белого цвета.
  • Технология: STN, Transflective, Positive.
  • Контроллер дисплея: HD44780U.
  • Предельная частота обновления экрана: 5Гц
  • Питание дисплея: 5 Вольт
  • Кнопки: 6 кнопок (5 кнопок управления и Reset).
  • Дополнительные элементы: регулировка яркости подсветки (потенциометр).
  • Рабочая температура экрана: от -20 °С до +70 °С;
  • Температура хранения экрана: от -30 °С до +80 °С.

Распиновка LCD shield для подключения к Arduino

ПИН 30 PIN 1LVDS 30 PIN 2LVDS 20PIN STANDART 20PIN STANDART + EEPROM 14PIN STANDART 20PIN NEW STANDART вар. А 20PIN NEW STANDART вар. В
1 Ground Ground Pover suppli , 3,3V Pover suppli , 3,3V Pover suppli , 3,3V Ground Pover suppli , 3,3V
2 Pover suppli , 3,3V Pover suppli , 3,3V Pover suppli , 3,3V Pover suppli , 3,3V Pover suppli , 3,3V Pover suppli , 3,3V Pover suppli , 3,3V
3 Pover suppli , 3,3V Pover suppli , 3,3V Ground Ground Ground Pover suppli , 3,3V Ground
4 DDS 3V POVER DDS 3V POVER Ground Ground Ground DDS 3V POVER Ground
5 Reserved for LCD supplier test point - LVDS differential data input, R0 - R5, G0 - LVDS differential data input, R0 - R5, G0 Reserved for LCD supplier test point - LVDS differential data input, R0 - R5, G0
6 DDC Clock DDC Clock + LVDS differential data input, R0 - R5, G0 + LVDS differential data input, R0 - R5, G0 DDC Clock + LVDS differential data input, R0 - R5, G0
7 DDC Data DDC Data Ground Ground DDC Data Ground
8 - LVDS differential data input, R0 - R5, G0 - LVDS differential data input, R0 - R5, G0 - LVDS differential data input, G1 - G5, B0 - B1 - LVDS differential data input, G1 - G5, B0 - B1 - LVDS differential data input, R0 - R5, G0 - LVDS differential data input, G1 - G5, B0 - B1
9 + LVDS differential data input, R0 - R5, G0 + LVDS differential data input, R0 - R5, G0 + LVDS differential data input, G1 - G5, B0 - B1 + LVDS differential data input, G1 - G5, B0 - B1 + LVDS differential data input, R0 - R5, G0 + LVDS differential data input, G1 - G5, B0 - B1
10 Ground Ground Ground Ground Ground Ground
11 - LVDS differential data input, G1 - G5, B0 - B1 - LVDS differential data input, G1 - G5, B0 - B1 - LVDS differential data input, B2 - B5, HS/VS/DE - LVDS differential data input, B2 - B5, HS/VS/DE - LVDS differential data input, G1 - G5, B0 - B1 - LVDS differential data input, B2 - B5, HS/VS/DE
12 + LVDS differential data input, G1 - G5, B0 - B1 + LVDS differential data input, G1 - G5, B0 - B1 + LVDS differential data input, B2 - B5, HS/VS/DE + LVDS differential data input, B2 - B5, HS/VS/DE + LVDS differential data input, G1 - G5, B0 - B1 + LVDS differential data input, B2 - B5, HS/VS/DE
13 Ground Ground Ground Ground Ground Ground Ground
14 - LVDS differential data input, B2 - B5, HS/VS/DE - LVDS differential data input, B2 - B5, HS/VS/DE - LVDS differential clock input - LVDS differential clock input Ground - LVDS differential data input, B2 - B5, HS/VS/DE - LVDS differential clock input
15 + LVDS differential data input, B2 - B5, HS/VS/DE + LVDS differential data input, B2 - B5, HS/VS/DE +LVDS differential clock input +LVDS differential clock input _ + LVDS differential data input, B2 - B5, HS/VS/DE +LVDS differential clock input
16 Ground Ground Ground Ground _ Ground Ground
17 - LVDS differential clock input - LVDS differential clock input _ DDS 3V POVER _ - LVDS differential clock input DDS 3V POVER
18 +LVDS differential clock input +LVDS differential clock input _ Reserved for LCD supplier test point _ +LVDS differential clock input Reserved for LCD supplier test point
19 Ground Ground Ground DDC Clock _ Ground DDC Clock
20 _ - LVDS differential data input, even pixels, R0 - R5, G0 Ground DDC Data _ Ground DDC Data
21 _ + LVDS differential data input, even pixels, R0 - R5, G0 _ _ _ _ _
22 Ground Ground _ _ _ _ _
23 _ - LVDS differential data input, even pixels, G1 - G5, B0 - B1 _ _ _ _ _
24 _ + LVDS differential data input, even pixels, G1 - G5, B0 - B1 _ _ _ _ _
25 Ground Ground _ _ _ _ _
26 _ - LVDS differential data input, even pixels, B2 - B5, HS/VS/DE _ _ _ _ _
27 _ + LVDS differential data input, even pixels, B2 - B5, HS/VS/DE _ _ _ _ _
28 Ground Ground _ _ _ _ _
29 _ - LVDS differential clock input, even pixels _ _ _ _ _
30 _ + LVDS differential clock input, even pixels _ _ _ _
Контакт дисплея LCD 1602 Описание Контакт на LCD Shield
Пины LCD экрана
GND Земля
VDD Питание 5В
Contrast Управление контрастом Потенциометр
RS Команды/Данные 8
R/W Чтение/Запись
Enable Включение (активирование) 9
DB0 Не используется
DB1 Не используется
DB2 Не используется
DB3 Не используется
DB4 Дата 1 4
DB5 Дата 2 5
DB6 Дата 3 6
DB7 Дата 4 7
Back LED + Включение подсветки 10
Back LED – Питание подсветки
Пины для кнопок
Кнопка UP Управляющая кнопка A0
Кнопка DOWN Управляющая кнопка A0
Кнопка LEFT Управляющая кнопка A0
Кнопка RIGHT Управляющая кнопка A0
Кнопка SELECT Управляющая кнопка A0
Reset Reset
ICSP ICSP для перепрошивки встроенного микроконтроллера HD44780U
UART Контакты для UART соединения 0, 1

Дополнительные элементы шилда

  • Индикаторный светодиод (включается при подключении питания к плате).
  • Контактные площадки для подключения аналоговых устройств (GND, VSS, пин данных).
  • Потенциометр для регулирования контрастностью экрана.

Подключение платы LCD Shield к Arduino

Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты.

Скетч для экрана на Arduino LCD shield

Для работы с LCD экранами обычно используют популярную библиотеку LiquidCrystal . На этапе инициализации создается объект класса LiquidCrystal, в конструкторе которого мы указываем пины с подключенными контактами экрана. Для нашего шилда требуется использовать такой вариант: LiquidCrystal lcd(8, 9, 4, 5, 6, 7); Последовательность аргументов конструктора:

  • RS (8)
  • Enable (9)
  • data(4)
  • data(5)
  • data(6)
  • data(7)

Ничего сложного в работе с объектом нет. В setup() мы инициализируем объект, указывая ему количество символов и строк:

Lcd.begin(16, 2);

Для вывода информации на дисплей используем метод print():

Lcd.print (“Arduino Master!”);

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

Lcd.setCursor(0, 0); // Первый символ первой строки lcd.setCursor(0, 1); // Первый символ второй строки lcd.setCursor(2, 1); // Третий символ второй строки

Кнопки LCD Keypad Shield

На плате присутствуют пять управляющих кнопок, работа с которыми ведется через один аналоговый пин A0. В шилде использован достаточно распространенный способ простого кодирования сигнала, при котором каждая кнопка формирует определенное значение напряжения, которое после АЦП преобразуется в соответствующее значение от 0 до 1023. Таким образом, мы можем передавать информацию о нажатии разных кнопок через один пин, считывая его при помощи функции ;

Значения уровня сигнала на пине A0 в зависимости от выбранной кнопки:

Нажатие кнопки Значение на аналоговом пине
RIGHT 0-100
UP 100-200
DOWN 200-400
LEFT 400-600
SELECT 600-800
Клавиша не нажата 800-1023

Пример скетча работы с кнопками LCD Keypad Shield:

Int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right // Выполняем какое-то действие для кнопки вправо. } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP // Выполняем какое-то действие для кнопки вверх } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN // Выполняем действие для кнопки вниз } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT // Выполняем действие для кнопки влево } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT // Выполняем действие для кнопки выбора пункта меню } else { // Все остальные значения (до 1023) будут означать, что нажатий не было }

В выбранном методе кодирования есть два главных недостатка:

  • Нельзя отслеживать одновременное нажатие нескольких кнопок;
  • Возможные искажения сигнала могут привести к ложным срабатываниям.

Нужно учитывать эти ограничения, выбирая этот шлд в своих проектах, если вы планируете использовать устройство в системах с большим количеством помех, которые могут искажать сигнал на входе A0, из-за чего АЦП может сформировать ошибочное значение и скетч в результате выполнит другие инструкции.

Пример скетча для работы с экраном и кнопками меню

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

#include LiquidCrystal lcd(8, 9, 4, 5, 6, 7); #define BTN_UP 1 #define BTN_DOWN 2 #define BTN_LEFT 3 #define BTN_RIGHT 4 #define BTN_SELECT 5 #define BTN_NONE 10 int detectButton() { int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right return BTN_RIGHT; } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP return BTN_UP; } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN return BTN_DOWN; } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT return BTN_LEFT; } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT return BTN_SELECT; } else { // Все остальные значения (до 1023) будут означать, что нажатий не было return BTN_NONE; } } void clearLine(int line){ lcd.setCursor(0, 1); lcd.print(" "); } void printDisplay(String message){ Serial.println(message); lcd.setCursor(0, 1); lcd.print(message); delay(1000); clearLine(1); } void setup() { Serial.begin(9600); lcd.begin(16, 2); lcd.print("Arduino Master"); delay(3000); lcd.setCursor(0, 0); lcd.print("Arduino Master"); } void loop() { int button = detectButton(); switch (button) { case BTN_UP: printDisplay("UP"); break; case BTN_DOWN: printDisplay("DOWN"); break; case BTN_LEFT: printDisplay("LEFT"); break; case BTN_RIGHT: printDisplay("RIGHT"); break; case BTN_SELECT: printDisplay("SELECT"); break; default: //printDisplay("Press any key"); break; } }

Краткие выводы по плате расширения LCD keypad shield

Плата расширения LCD Keypad достаточно популярная, она проста и удобна для использования в проектах Arduino. Сегодня ее можно легко купить практически в любом интернет-магазине.

Плюсы LCD Shield:

  • Упрощает подключение жидкокристаллического экрана.
  • Уменьшает общие размеры устройства, т.к. убирает выступающие провода и монтажные платы.
  • Сокращает количество ошибок, связанных с неправильным монтажом и подключением.
  • Добавляет функциональность кнопочного управления, если на плате установлены кнопки (LCD Keypad shield).

Недостатки:

  • Стоимость шилда выше, чем стоимость отдельного экрана.
  • Не всегда нужна дополнительная функциональность в виде кнопок.
  • Шилд потребляет больше энергии, чем отдельные элементы платы.

Доброго времени суток! Сегодня я вам расскажу как при помощи одной посылочки из Китая и хлама который валяется у вас дома сделать телевизор , ну или по крайней мере монитор . Дело в том, что у многих, наверное, валяются еще древние ноутбуки, какие-то испорченные мониторы, нерабочие планшеты и все это можно пустить в ход. Ну да отдельно матрицу подключить нельзя, но с помощью нехитрого устройства, а именно универсального скалера , можно подключить любую матрицу к HDMI , VGA или даже сделать телевизор.

И так, что мы имеем.

Я заказал себе довольно такой продвинутый скалер.

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

Разбираем планшет, чтоб получить доступ к матрице.

Отключаем все шлейфы и отбрасываем в сторону все, кроме матрицы.

Матрицы имеют довольно стандартное подключение , в них интерфейс LVDS и стандартизированный ряд разъёмов . Какой разъем у вашей матрицы можете посмотреть по внешнему виду либо же по даташиту . На каждый тип матрицы существует отдельный шлейф. Например у меня есть несколько шлейфов.

1 – это более старый стандарт, там где матрицы еще были с ламповой подсветкой.

2 – более новый стандарт, там где LED-матрицы идут.

3 – эти разъёмы встречаются в 7 дюймовых планшетах и разных небольших.

С другой стороны разъёмы более-менее стандартизированы и подходят в практически любой универсальный скалер.

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

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

Первое с чего стоит начать, будем смотреть слева на право. На скелере есть ряд перемычек, левая верхняя конфигурирует напряжение логики , его необходимо выбрать исходя из вашей матрицы. Как правило, матрицы ноутбуков имеют питание 3.3 вольта, в обычных мониторах 5 вольт, но здесь еще есть перемычка на 12 вольт, честно говоря, я не знаю, где такое напряжение используется. Сразу меняем эту перемычку, чтобы не спалить нашу матрицу, в моем случае логика 3.3 вольта.

Дольше идет следующий набор перемычек, это выставляется разрешение экрана. Хочу заметить, что помимо разрешения экрана еще меняется битность. На обратной стороне скалера есть шпаргалка, в которой написано разрешение и битность. Битность бывает 6-bit и 8-bit, визуально разъёмы 6-ти и 8-ми битные различаются по количеству контактов. Информацию какой битности ваша матрица опять же читаем в даташите.

Прежде чем переходить к матрице необходимо изучить даташит, его очень легко найти по наклейке, которая находится сзади матрицы. В моем случае это «LP101WX1 ». В даташите на матрицу нас интересуют 3 или 4 пункта, в зависимости от того это LED-матрица или это матрица с лампой с холодным катодом. Прежде всего, определим какое разрешение матрицы, просто листаем даташит и ищем эту запись. Здесь у нас в таблице указан формат пикселей (Pixel Fotmat) то есть это 1280×800, соответственно перемычками на сайлере необходимо выбрать это разрешение. Ширина интерфейса соответствует количеству цветов, в данном случае это 6-bit или 262 144 цветов. Этих двух параметров нам достаточно чтоб выбрать правильный режим работы матрицы.

Но для того чтобы матрица выжила нам еще нужно выставить правильное напряжение , листаем дальше. И вот у нас сводная таблица электрических характеристик. Logic, то есть питание логики, напряжение питания логики (Power Supply Input Voltage) от 3,0 до 3,6 вольт, типичное 3,3 вольта, соответственно перемычку питания матрицы выставляем на 3.3 вольта.

И на всякий случай смотрим подсветку, этот пункт нужно смотреть только в том случает если матрица с LED подсветкой. Как написано на плате, плата питается от 12 вольт, а наша подсветка работает от 5 до 21 вольта, 12 как раз будет в самый раз. Я других матриц не встречал у которых напряжение питания 5 вольт, но предполагаю, что такое может быть, если будете использовать матрицу из какого ни будь маленького планшета. Поэтому вот этот параметр обязательно смотрите, иначе можете просто испортить подсветку матрицы. Если же питание будет отличное от 12 вольт, то напрямую подключать разъем питание подсветки нельзя, нужно будет обеспечить нужное напряжение питания.

И так, настраиваем скалер в соответствии с данными из даташита. Меня интересует разрешение 1280×800 и 6-bit, для этого ставлю перемычки F и G

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

1 — первые два разъема это питание

2 – последовательный порт

3 – DC-DC преобразователь

4 – линейный стабилизатор

5 – разъемы (VGA, HDMI, RCA, звук и высокочастотное подключение антенны)

6 – управление подсветкой

7 – кнопки и всякое управление

8 – разъем LVDS, куда подключается матрица

9 — память

10 – процессор

11 – усилитель мощности

12 – TV-тюнер

Подробнее о разъёмах

Разъем управления подсветкой.

Если у вас LED-матрица , то есть светодиодная, то заморачиваться не стоит, у вас прямо в матрице установлен контролер управления подсветкой и этот разъем входит прямо в шлейф. Т.е. Просто подключаете матрицу и больше не над чем заморачиваться не нужно.

Если же матрица древняя на , определить это можно по дополнительным проводам выходящим из матрицы.

В матрице могут быть установлены такие лампы и из нее выходят провода. В ноутбуках обычно выходит 1 провод, в матрице монитора 2 или 4. Для того чтобы подключить такую матрицу можно использовать универсальный инвертор для подсветки . Он бывает на 1, 2 и 4 выхода, т.е. каждый выход это подключение одной лампы. Инвертор нужно подбирать по количеству ламп в вашей матрице, то есть нельзя подключить в инвертор с 4-мя выходами только 2 лампы, так как инвертер уйдет в защиту, потому что все выходы должны быть равномерно нагружены. Поэтому если матрица на 2 лампы, покупаем инвертор на 2 выхода, если на 1 лампу, покупаем на 1 выход. Разъемы унифицированы поэтому подходят сразу 1 в 1, просто вот так втыкаются и все.

Приступим к подключению

Для этого нам нужен шлейф, он легко втыкается, перемычки на плате уже сконфигурированы. LVDS выравниваем по первой ножке , на шлейфе это маркировка в виде пятна краски, а на плате треугольник — это первая ножка.

На всякий случай проверяем, подходит ли подсветка. Красный – плюс, черный – минус и единственный провод это включение подсветки. Переворачиваем плату на обратную сторону и сравниваем надписи возле контактов с проводами, если все сходится подключаем.

Еще нам нужно какое ни будь управление. Кстати подробнее об управлении, колодка, куда я подключил ИК-приемник это управление. Сюда идут кнопки, они все подписаны, кнопки можно приобрести отдельно или подключить свои.

В принципе это все, все что нужно подключили.

Переворачиваем матрицу и подключаем питание. Если вы собираетесь подключаться к компьютеру, то можно взять питание с БП компьютера. Включаем…

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

Ну что, попробуем подключить камеру через HDMI. В общем подключив камеру получилось, что полутона цветов отображались неправильно.

Я сначала подумал что сгорел буфер опорных напряжений в матрице, но подключив матрицу к планшету понял, что с матрицей все в порядке, она не сгорела. Покопавшись на просторах интернета, нашел сервисное меню. Оказывается нужно в сервисном меню изменить способ работы скалера с матрицей. Для этого заходим в меню и набираем код 8896, и нам открывается сервисное меню. В меню находим системные настройки (System setting) -> Настройки панели (Panel setting) -> и просто изменяем цветовую схему (Color set). Перебирая все варианты находим самый оптимальный, для меня это был 3. В других моделях скалеров может быть другой код доступа в сервисное меню и немного другой путь к настройкам цветовой схемы.

Выходим из меню и видим, что все цвета отображаются правильно.

Таким же способом можно подключить матрицу от почти любого планшета или монитора.

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

Ты конечно понимаешь, мой друг, как можно использовать этот девайс в своих хакерских (и не только) целях. Если выбрать все детальки SMD-шные, то можно получить реально небольшое устройство для вывода на экран с портом RS232. Дисплей использовал: Nokia 6100/6610/7200/7250/3100 в рамке с коннектором.

Такой экран несложно найти в Интернет-магазинах, например www.siruist.ru , www.sparkfun.com или в палатках, где продают запчасти для мобильных телефонов (стоит он 150-200 руб) . Либо просто выдрать дисплей из старого телефона. Но если такой не нашёл - не беда. Изучив эту статью и исходные коды и поразмыслив головой, ты можешь завести дисплеи от Nokia N95 или Sony PSP.

Почему я выбрал такой дисплей – он удобен в пайке. Смотри на скриншоте распиновку.

Как видно, существует коннектор на дисплее к которому тяжело подпаяться (шаг 0.5мм). Поэтому лучше ищите дисплеи с такой распиновкой как здесь.

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

    VCC-Digital (3.3V)

    VCC-Display (3.3V)

На рисунке вы можете видеть 3 дисплея:

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

У каждого контроллера своя система команд и, соответственно, софт для одного из них не будет работать для другого. Народ научился различать эти контроллеры по цвету коннектора: коричневый - Epson S1D15G10, зелёный - PCF8833.

Но это не факт. Я советую прошить микроконтроллер для 2 видов дисплеев и посмотреть результат. К примеру на скриншоте все дисплеи с контроллером PCF8833. Я писал исходный код микроконтроллера для PCF8833, но совершенно не сложно изменить его и для Epson`a!

Ну вроде с трудностями закончили, переходим к нашей схемке:

А остальное всё есть на схеме.

6.5В нам нужно на подсветку (от 6В до 7В = max). Регулируется подстроечным R8. Также ВАЖНО – разделить землю у дисплея (т.е. землю (выводы 8,9 коннектора) напрямую присоединить к входу 2 разъёма источника питания) – это нужно для защиты от помех. Желательно поставить 2 различных преобразователя из 5В в 3.3В – один для питания контроллера и периферии дисплея, второй – для непосредственно дисплея (выходы 1,6 – соответственно коннектора дисплея).

После разбора с железкой и пайкой приступаем к программированию для Atmega.

Открываем WinAVR, создаём проект, будем писать на С. Я отказался от assembler`a потому что код стал реально громоздким.

#include
#include // для задержки
#include "lcd.h" // определения для PFC8833
#include "font.h" // определение шрифта

void sendCMD(byte cmd); //послать команду на PFC8833
void sendData(byte cmd); //
послать байт данных
void InitLCD(void); // инициализация дисплея
void shiftBits(byte b); //
перестановкой выводов портов эмулируем SPI
void setPixel(byte r,byte g,byte b);
//
пишет в видеопамять дисплея 3 байта (r,g,b) с заданным цветом
…..
void PointXY(int x,int y,byte r,byte g,byte b)
//
рисует точку на экране с координатами x,y и цветом r,g,b
{
sendCMD(CASET); // column set (po x)
sendData(x);
// команда CASET – задаёт область рисования по x, от byte1 до byte2
sendData(x); // у нас byte1=byte2 , так как рисуем точку
sendCMD(PASET); // page set (po y)
sendData(y); // аналогично для y
sendData(y);
sendCMD(RAMWR);
setPixel(r,g,b); //пишем в память
}

Я привёл только часть кода. Все исходники можно найти в . У данного дисплея – 4096 цветов, следовательно 12 бит на пиксел RRRRGGGGBBBB.

Так же я написал консольную прожку для компа для рисования (исходники также есть в архиве).

В итоге наш девайс способен выводить:

  • окружность;

  • прямоугольник (закрашенный/нет);

    символ (первой половины ASCII (0x00

  • изображение (до (132 на 132)).

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