LCD Nokia 3410
Давно собирался рассказать об "удобном во всех отношениях средстве отображения информации", т.е. о LCD дисплее от Nokia3410. Это графический чёрно-белый ЖК дисплей, с разрешением 96х65 точек, имеет последовательный интерфейс SPI с максимальной скоростью обмена 4 мбит/с. Напряжение питания +2.7в...+3.6в, потребляемый ток меньше миллиампера. Есть возможность программного перевода в режим низкого энергопотребления (отключение).
Непосредственно на стекле экрана находится управляющий контроллер. В сотовом телефоне экран помещается в пластмассовую рамку: Рамка не является обязательным элементом конструкции, экран работает и без неё :). Но пластмассу рамки можно использовать для крепления дисплея, например просверлив где удобно соответсвующие отверстия. Всё лишнее, естественно, надо будер обрезать, например так: На втором рисунке видна планка с контактами, красной точкой отмечен первый вывод. Чуть левее красной точки находится пластмассовый штырёк, который в телефоне используется для позиционирования разъёма. Для подсоединения проводов к контактам надо постараться сделать (найти) разъём, но в крайнем случае можно припаять проводки прямо к контактам. При этом нужно быть крайне осторожным дабы не перегреть контакты и не испортить стекло. ИнтерфейсДля управления экраном требуется 5 линий. Обозначения выводов приведены в таблице:
Между выводом 7 VOUT и землёй дожен быть подключен конденсатор ёмкостью 1..10 мкФ(керамика или электролит) - фильтр для внутреннего источника питания LCD. Сразу после подачи питания экран необходимо сбросить, подав на вывод RES "0". Это нужно сделать обязательно, иначе можно повредить контроллер! После сброса (перевод RES "0"->"1") контроллер готов к записи. Чтение из контроллера не предусмотрено. Применяется стандартный SPI протокол: на вывод SCE подаётся активный низкий уровень, и по линии SDIN вводятся биты данных. Защёлкивание бита осуществляется по переднему фронту SCLK, сдвиг по заднему, данные передаются старшим битом вперёд (MSB). Если во время передачи последнего бита из восьми на выводе D/C логическая "1", то запись производится в память данных, иначе в управляющие регистры. Дисплей и память данныхВ контроллере реализована матрица памяти 102x??? бит (так и не сосчитал), но на экран выводится только 96х65 точек. Всё поле экрана поделено по вертикали на 8 строк по 8 пикселей каждая (всего 64 точки) плюс девятая строка, которой оставлен только 1 пиксель.Каждому столбцу (Xi) данной строки (Yj) соответствует 1 байт памяти, причем верхнему пикселю соответствует нулевой бит (LSB). Выбрав номер строки и столбца (см.ниже), передаём байт в память данных, и он отображается на экране столбиком 8х1. После записи байта автоматически увеличивается на единицу указатель адреса столбца или (строки), в зависимости от настройки (Function Set, бит H). Если снова отослать байт в память данных, то он отобразится в той-же строке (том-же столбце) но со сдвигом на 1 пиксель вправо (8 пикселей вниз). Если при записи достигнут конец строки y=yi; x=101 то происходит переход на следующую строчку y=yi+1; x=0. Аналогичное правило работает и для столбцов. Чтобы быть уверенным, что запись произойдёт в нужную область экрана, вышеуказанный автоматический перевод строк (столбцов) лучше не применять, а следить за позицией программно. В частности, это позволит писать программы, быстро перекомпилируемые для Nokia3310, у которого только 84х48 точек. РегистрыДля задания режима работы служат несколько управляющих регистров. Запись в них происходит при "0" на выводе D/C.
Первая команда - просто передача байта в память экрана, dddd dddd - просто байт данных. Команда Function Set изменяет 3 управляющих бита контроллера:
Команда Display Control включает следующие режимы отображения:
Значение и аргументы команд с H=1 объяснять долго и сложно, поэтому предлагаю воспользоваться чисто дилетанским приёмом. Ставьте: TT=00, BBB=011, VVVVVVV=100 1000, и всё будет! Тем, кто с таким подходом не согласен - читайте даташиты. Не приведённые выше коды команд являются резервированными и их использование недопустимо. ИнициализацияСледующий код на псевдо-С показывает алгоритм инициализации дисплея:bit_dc=0; bit_cs=1; bit_reset=0; // сброс delay(500); // в микросекундах bit_reset=1; delay(500); bit_cs=0; bit_dc=0; // запись в регистры Send_SPI(0x21); // включить питание, расшир. команды Send_SPI(0x13); // bias=3 Send_SPI(0xC8); // включить внутренний источник, Vop=0x48; Send_SPI(0x20); // обычный набор инструкций Send_SPI(0x0c); // нормальный режим отображения D=1 E=0 bit_cs=1; /* После сброса X=0 и Y=0, а в памяти - случайный мусор */ bit_cs=0; bit_dc=1; // запись в память экрана for(i=0;i<909;i++) Send_SPI(0); // Очиска от случайного мусора. bit_cs=1; // далее следует выбрать X и Y и можно начинать рисование ... ЗаключениеДаташит на экран я так и не нашёл, но есть документация на кристалл PCD8544, который стоит в экранах от 3310. Разница в числе точек, и, вероятно, в расширенных командах, но в целом интерфейс очень похож. Если кто найдёт даташит к "родному" для 3410 кристаллу - прошу писать мне. |