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

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

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

Поиграв минут 10 со светодиодами, захотелось сделать что-нибудь более интересное… Например часики!

Под рукой оказался старенький Siemens A65, который стал донором для моего небольшого проекта. Вытаскиваем из него экранчик и думаем, как бы его подключить.

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

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

Но мне повезло, инициализацию и команды для моего экранчика (в моем случае LPH8731-3C c контроллером EPSON S1D15G14) не только разобрали, но и даже нашелся на него даташит.

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

Распиновка для LPH8731-3C
Распиновка для LPH8731-3C. (Взято с форума РадиоКот)
Где:

  • CS — Chip Select. Когда находится в состоянии Low, чип готов принимать информацию.
  • RESET — ножка для сброса контроллера. Сигналом сброса служит переход из High -> Low -> High (по спецификации контроллера минимальное время 5мс).
  • RS — Служит для определения типа передаваемых данных (в даташите и у меня обозначается как CD). Для отправки команды должен быть в состоянии Low, для передачи данных — High.
  • CLK — служит тактовым сигналом для передачи данных.
  • DAT — для передачи данных.
  • VDD — по спецификации от +1.6V до +3.6V.
  • GND — надеюсь вы сможете сами угадать?;)
  • LED_A — оба разъема для подачи питания на подсветку. Тут лучше давать напряжение через резистор (можно без него, но в моем случае один из светодиодов начинал перегреваться, от чего получался засвет на экране).
  • LED_K — это к GND.

Кстати, некоторые уже могли заметить, что тут для передачи данных используется SPI, так что CLK и DAT можно подключить к SPI пинам MSP430.

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

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

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

А вот в конце передачи данных, дергать CS вверх не обязательно (но рекомендуется).

Немного злобного кода

Источник: http://savepearlharbor.com/?p=159011

Aвтомобильные телефоны стандарта GSM. Часть 2 Siemens P1 — Сообщество «Телефон в Автомобиле» на DRIVE2

Данный телефон встречается также под индексами: Telecom D1 314, Mannensman D2 Car 2021/3021, Ascom SE 923t, AT&T 3230, ABB Veriphone D45-1P, Italtel

Siemens P1 относится к первому поколению GSM автотелефонов (начало производства в 1992 году) и является единственной моделью SIEMENS пригодной для автомобильной установки, начало.

В дальнейшем в компании отказались от такого форм фактора и выпускали обычные носимые телефоны, которые устанавливались в авто при помощи установочных комплектов (car kit) выпускаемых и Siemens и сторонними производителями.

Как и Motorola International 1000 Siemens P1 выпускался в двух версиях, для автомобильной установки и в носимом варианте. Модульная конструкция позволяла легко переконфигурировать телефон из автомобильного вносимый и наоборот.

Вес устройства составлял 2,2 кг, а встроенного аккумулятора хватало на 2 часа работы устройства в режиме разговора или на 12 часов в режиме ожидания. Носимая версия отлично подходит для организации связи на даче или в охотничьем домике, особенно если вынести антенну повыше. В авто такой вариант можно использовать через инвертер или обычную автозарядку.

Сверху вниз: 1. Рама (в ней установливался аккумулятор) 2. Основной блок 3. Ремень для переноски 4. Антенна 5. Трубка

В какие авто устанавливались: Siemens P1 был широко распространен практически во всех авто начала-середины 90х, но часто встречался и в более поздних моделях.

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

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

Наиболее крупный разъём для автопроводки, в носимом варианте прикрывался шторкой. Прямоугольнвый разъём- питание. Круглый разъём- трубка.

Функционал: Прием и отправка звонков. Sms и ussd запросы не поддерживаются. В данном аппарате установлен передатчик мощностью 5w, что несколько ниже чем 8w передатчики в автомобильных Nokia и Motorola, но и он обеспечивает отличное качество связи.

Комплект с автопроводкой и держателем блока.

Применимость в наши дни: Для аппаратов первого поколения возрастом 20 и более лет Siemens P1 имеет на удивление мало проблем.

Абсолютное большинство аппаратов корректно работает с современными Sim картами и лишь изредка встречаются телефоны с операторской или пользовательской блокировкой, в данном случае проще сразу поменять блок оставив трубку и проводку (раму) от старого аппарата.

От долгого хранения в неподобающих условиях, например в гараже у провода трубки может начать облезать изоляция. Внутри трубки провод закреплён на разъёме, чисто технически его можно слегка укоротить путём обрезания разлохмаченного места и перепайки разъёма на оставшуюся часть провода.

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

Пластик в идеальном состоянии, провод и пластик дисплея пришли в негодность. Стекло часто бьётся при неаккуратной доставке.

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

При покупке важно обратить внимание на маркировку трубки и блока, т.к. существует очень похожий телефон Siemens C3 работающий в сетях C-Netz. На блоке P1 идёт маркировка S24859-C2000-A-01 (у поздних S24859-C2200-A10-01) на трубке S24859-H2000-A40-01

Маркировка

Важно: Как и все ранние gsm телефоны здесь используется только стандарт gsm 900, поэтому данные трубки не работают с Tele2 и другими операторами, которые используют GSM 1800. С Российской большой тройкой проблем нет.

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

С моей точки зрения трубка может рассматриваться как альтернативаMotorola international 1000 о которой я писал ранее.

Много технической информации по этой трубке по ссылке: www.nobbi.com/siep1.html
Оригинальный проспект на немецком: www.oebl.de/D-Netz/Geraet…iemens/P1/P1_Prospekt.pdf

Пресс фото Siemens

В Jaguar XJ40

В BMW E30

В BMW E32 www.drive2.ru/r/bmw/288230376151994695/

Источник: https://www.drive2.ru/c/1626651/

Подключаем дисплей от Siemens C55/A55/A52

Источник: http://easymcu.ucoz.ru/publ/12-1-0-116

10 легендарных мобильных телефонов Siemens

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

Сегодня мы вспомним один из самых популярных в свое время брендов. Телефонами Siemens пользовалось огромное количество народу, выходила масса интересных и технологичных (по меркам того времени) моделей.

К сожалению, все рано или поздно заканчивается и история компании Siemens в телефоностроении — не исключение.

Siemens SL10

Во времена клавиатурных телефонов производители много экспериментировали с форм-факторами и выдавали иногда особо экзотические аппараты, а иногда и решения, которые становились весьма популярными. Таким является и выпущенный в 1999 году Siemens SL10.

Он стал первым представителем форм-фактора “слайдер”, который в последствии был весьма популярен и использовался (используется) многими производителями. В нем был установлен 8-цветовой экран с разрешением 97×54 на 6 строчек. Телефонная книга могла вместить 50 контактов, а в журнале вызовов отображались 10  исходящих, 10 входящих и 10 пропущенных звонков.

Для передачи данных присутствовал инфракрасный порт. Питался телефон от Li-Ion аккумулятора на 550 мАч и мог от него работать 3 часа в режиме разговора и до 46 часов ожидания.

Siemens SL45

Еще один первопроходец компании — Siemens SL45. Он стал первым мобильным телефоном с MP3-плеером и поддержкой карт памяти, в данном случае — стандарта MMC объемом до 32 МБ. В стандартной комплектации смартфон как раз с такой карточкой и поставлялся, плюс в комплекте была стереогарнитура и крэдл для зарядки.

Телефон был выпущен в 2000 году, в 2001 году была выпущена обновленная версия под названием SL45i с обновленной прошивкой, поддержкой Java и аккумулятором большей емкости. Телефон в свое время стал невероятно популярным, умельцы написали множество приложений под него и даже сумели запустить видео на нем.

Учитывая монохромный экран — сомнительное конечно удовольствие.

В телефоне был установлен 1.5-дюймовый экран с разрешением 101×80 точек, на котором помещалось 7 строк.

 Телефонная книга была рассчитана на 500 контактов, журнал вызовов на 10 исходящих, 10 входящих и 10 пропущенных звонков. Поддерживалась технология WAP 1.1, а для обмена данными был ИК-порт.

В стандартной версии использовался Li-Ion аккумулятор на 540 мАч, которого должно было хватить на 4 часа разговора.

Siemens ME45

Еще один знаковый аппарат — Siemens ME45. Выпущен был еще в 2001, но как минимум до года 2010 периодически мне встречались люди с вполне нормально функционирующими экземплярами. Уверен, что у многих и сейчас где-нибудь на полке пылятся.

Телефон был защищен от грязи, брызг и ударов, по сути — защищенный вариант Siemens S45 с некоторыми отличиями в прошивке.

Все внутренности аналогичны и прошивка от S45 благополучно становилась на ME45, что делалось с последней прошивкой для получения e-mail клиента.

В телефоне был установлен монохромный экран с разрешением 101×80 на 7 строчек, аппарат поддерживал WAP и GPRS, для подключения к ПК использовался COM-порт, а для передачи данных присутствовал ИК-порт.

Габариты составляли 109x46x21 мм, а вес — 99 г.  В телефоне использовался довольно внушительный по тем временам аккумулятор на 840 мАч, которого (в теории) хватало на 6 часов разговоров и 300 ч ожидания.

Siemens A52

Siemens A52 нельзя было назвать каким-то высокотехнологичным гаджетом даже на момент выхода в 2003 году, это была скорее рабочая лошадка, в которой было только самое необходимое (собственно, звонки и SMS). Телефон относился к бюджетному классу и стал невероятно популярным. И весьма живучим, как в последствии показала практика. У многих до наших дней остались A52 в абсолютно рабочем состоянии.

В телефоне был установлен монохромный экран  с разрешением 101×64 на 5 строчек. Телефонная книга была всего 50 контактов, плюс журнал вызовов. 16-голосая полифония и пару игр. Что еще надо?

Siemens S55

Siemens S55 вышел в 2002 году и в свое время был ожидаемым аппаратом с чуть ли не топовыми характеристиками. Однако из-за того, что в итоге вышел намного позже SonyEricsson T68i со схожими возможностями, смотрелся уже не так привлекательно.

Это был один из первых цветных телефонов компании, он поддерживал WAP 1.2.1, SMS, MMS, GPRS, Email и был оснащен ИК-портом и Bluetooth. Была поддержка Java и полифонических мелодий. В качестве аксессуаров были доступны монофоническая Bluetooth-гарнитура и камера, которая подключалась к интерфейсному разъему.

Максимальное разрешение снимков составляло 640х480 точек.

Источник: https://gagadget.com/cellphones/15450-10-legendarnyih-mobilnyih-telefonov-siemens/

Работа с экраном LPH8731-3C от телефонов Siemens

Работа с экраном LPH8731-3C от телефонов Siemens

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

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

1-ые владеют только минимумом способностей, а 2-ые, невзирая на их «продвинутость», владеют лишней громоздкостью и являются монохромными, ну и стоимость на их тоже большая.

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

Когда-то, самым первым моим телефоном был Siemens A50, вторым — Siemens A60, и если 1-ый ещё в здравом уме и хорошей памяти, от второго остался только корпус и экран, который было решено приобщить к делу.

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

Являясь одно время обладателем 2-ух телефонов 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:

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

Распиновка монитора LPH87313C:

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)

Функция вывода 1-го знака 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 даёт возможность работать с 2-мя цветовыми палитрами – 256 цветов и 4096 цветов. В первом случае цвет 1-го пикселя задаётся 8 битами, во 2-м — 12 битами.

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

Экран в составе работы COM-терминала:

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

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

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

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

Прикрепленные файлы: S1D15G14.pdf (732 Кб) Плата под ЛУТ. rar (20 Кб) LPH8731-3C (LPH9116) — v 1_1.rar (8 Кб)
Микроконтроллер AVR Proteus LCD CodeVisionAVR

Источник: http://bloggoda.ru/2018/01/20/rabota-s-ekranom-lph8731-3c-ot-telefonov-siemens/

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

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

Краткое описание LCD Siemens C55/A55/A52

В дисплее стоит контроллер PCF8812, или очень на него похожий. Максимальное разрешение для контроллера – 102 х 65 точек. Разрешение LCD Siemens C55 – 101 х 64 точки.

В дисплее они используются совершенно непонятным для меня образом: вместо 102 точек отображаются только 101, а один столбец просто не использован (но при адресации памяти контроллера всё-равно существует), что при программировании вызывает некоторые ньюансы.

Отстутствие одной строки не так критично и на удобстве программирования не сказывается.

При использовании дисплея следует учесть одну тонкость, оговоренную в даташите на контроллер мелким шрифтом: сигнал сброса должен быть активизирован _ДО_ подачи питания, либо не позже, чем 1 мкс после. То есть, сначала обнуляем RST, а потом подаем VDD!

Физический интерфейс у дисплея проблем не вызывает: классический SPI, работающий только на ввод. Инициализация и вывод информации (когда уже знаешь, как оно должно быть!) тоже просты до безобразия. Картинка четко видна без подсветки. По сравнению с Nokia 3310 – точки мельче, зато их число несколько больше. 

Железо

Дисплей подключается к Arduino по следующей схеме:

Если верить даташиту на PCF8812 допустимо использование питания 5V. К выводам 7 и 6 дисплея подключается конденсатор емкостью 4.7 мкФ.

Софт

Для работы дисплея подключаем библиотеку U8glib v1.15. Она отличается от стандартной:

  • внесены изменения в инициализацию дисплея.
  • добавлен русский язык 5×7.

Для подключения используем директиву #include, а для настройки необходимо раскоментировать строку с нашим дисплеем. В данном случае U8GLIB_PCF8812. Чтобы использовать русский шрифт вставляем строку u8g.setFont(u8g_font_my5x7rus). Внутри имеются примеры. Вот один из них:

#include “U8glib.h”

U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8);

void draw(void) {

  u8g.setFont(u8g_font_unifont);   u8g.setPrintPos(0, 20); 

  u8g.print(“Hello World!”);}

void setup(void) {
}

void loop(void) {

  u8g.firstPage();     do {     draw();   } while( u8g.nextPage() );    delay(500);

}

Оригинальная версия библиотеки u8glib_arduino_v1.16