Дисплей nokia 3310 – Урок 18. Работа с дисплеем от Nokia 3310

Ещё один метод подключения LCD от Nokia 3310 / Технологии / Сообщество EasyElectronics.ru

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

Итак, есть дисплей, как он продавался, на подложке в металлическом кожухе.

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

Всё бы хорошо, только подложка громоздская, в миниатюрные девайсы не встроить. А если её снять, то надо думать как приделать контакты.
Я предлагаю такой вариант.
Для начала разбираем подложку. Срезаем остроотточенным ножом прастмассовые выступы, заплавленные на металлический кожух.
Снимаем кожух, оттдираем кодложку с кнопками.

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

Далее, разбираем ряд контактов, их все надо снять с пластмасски. На фото хорошо видна их форма, а то что они немного пружинят — мы счас и используем. Берём зубочистку, отрезаем кончик так, чтобы его диаметр стал равен (или чуть меньше) широкой части внутреннего пространства контакта. Надеваем контакт на зубочистку и сдвигаем его так, чтобы она оказалась в узкой части. Таким образом контакт в месте соединения его половинок раздвинется. Не переусердствуйте, а то он погнётся.
Теперь ответственный момент: надеваем контакт прямо на дисплей в месте где нет напыления. Можно и на напыление, когда приноровитесь. Если прям вообще не надевается, обрежте ещё немного зубочистку и повторите с начала. Надевайте аккуратно, большое усилие там не нужно, контакт сам распружинится и наденется. При слишком большом усилии может отколоться стекло, что может привести к порче дисплея.
После того как контакт наделся, его можно аккуратно той же зубочисткой пододвинуть на место, где напыление.
Если приглядеться, видно, что на контроллере дисплея чёрная наклейка. Я её не снимал, контакты надевал прямо на неё.

Повторяем 8 раз. Спешка тут ни к чему, на всё уходит около 15 минут, если первый раз.

После установки всех контактов снова меряем их мультиметром. За одно следим, чтобы они стояли ровно и небыло межконтактного замыкания.
Следующим этапом заливаем контакты двухкомпонентным клеем. Поксипол или момент подойдут. Эпоксидка — может быть, но она схватывается долго. Я заливал снизу, чтобы подпаиваться сверху.

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

Софтверная часть работы с дисплеем в статье тут.

PS В процессе отработки технологии было убито два дисплея :(. Один раскололся, когда надевал контакты, второй, когда прижимал дисплей к плате проволокой. Ещё два прекрасно работают.

PPS Ещё один момент, про питание. Немного поэксперементировал с ним и вот что выяснил. Дисплей может питаться и от 3,3 и от 5 вольт. При этом, видимо, автоматически меняется контрастность.

Если ею управлять программно, то при питании 3,3 вольта максимум контрастности приходится на значение 96 и на выходе Vout диплея будет напряжение 8,6 вольт. Увеличение напряжения до 5 вольт к увеличению контрастности не приводит. Если подать 5 вольт, то максимум контрастности при значении 127, и на выходе Vout диплея будет напряжение 9,6 вольт. Уменьшение напряжения напрямую влияет на контрастность и на напряжение на выходе Vout.

we.easyelectronics.ru

Цифровой термометр из дисплея от Nokia 3310

Стабилизатор напряжения на 5в- 7805 или 78L05 или же аналогичный КРЕН Два электролитических конденсатора 47 mF на 16В Три резистора номиналом 4,7 кОм Три стабилитрона на напряжение 5,1 вольт, импорт или советские — не имеет значения Два транзистора кт 315 Один транзистор кт 361 Пять резисторов номиналом 1 кОм И два светодиода (какого цвета, значения не имеет: один служит для индикации питания, второй горит только в режиме программирования)

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

Для облегчения изготовления была нарисована печатная плата для программатора, которая показана на рисунке 2:

Также выложена сама печатная плата в формате *.lay. Скачать файл
program.lay

Файлы в этом формате открываются программой Sprint Layout 4.

+5v MCLR PGD PGC GND

Это выводы для подключение к контроллеру.

В нашем случае


+5v — 1 ножка микроконтроллера

MCLR — 4 ножка микроконтроллера

PGD — 7 ножка микроконтроллера

PGC — 6 ножка микроконтроллера

GND — 8 ножка микроконтроллера

Подключение программатора к COM — порту компьютера:
Pin Name Dir Description 1 CD
Carrier Detect 2 RXD
Receive Data 3 TXD
Transmit Data 4 DTR
Data Terminal Ready 5 GND
System Ground 6 DSR
Data Set Ready 7 RTS
Request to Send 8 CTS
Clear to Send 9 RI
Ring Indicator Цифры — это соответственно номера контактов COM-порта, согласно указанной выше схемы.

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

Программировать можно двумя способами:

1. Записать программу до впаивания контроллера в плату, то есть к панельке для контроллера припаять проводки.

2. Запрограммировать контроллер уже в самой плате (так называемое внутрисхемное программирование).

Как по мне, проще 1-й вариант.

Далее приступим к плате самого термометра

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

Распайка контактов дисплея есть на рисунке «Распайка дисплея»:


Распайка дисплея

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



Принципиальная схема термометра

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


Монтажная схема термометра

Есть печатная плата в формате .Lay.
Скачать termopic.lay

После того как плата готова, можно приступить к программированию контроллера.

Программирование контроллера

В этом тоже ничего сложного нет.

Нам понадобится только программа WinPic800.
Скачать WinPic800 с нашего сайта.

В настройках программы нужно указать несколько параметров:

Указать, что мы используем JDM-Programmer Указать COM порт, к которому подключен Ваш программатор Снять флаг с пункта «Blocade configuration» Далее напротив пункта DATA поставить флаг в поле -INV-

Нагляднее можно посмотреть на рисунке «Настройка программатора».


Настройка программатора

В программе необходимо выбрать тип кристалла, который программируем, в нашем случае это 12F629, и после загрузить файл прошивки.
Скачать файл прошивки.

Из настроек изменить только то, что показано на рисунке — установка фьюзов.


Установка фьюзов

И далее нажать на кнопку «Program All»

Затем подождать, пока не появится сообщение о том, что прошито успешно…

Настоятельно рекомендую контроллер в плату не впаивать, на то есть различные причины. Самая простая — это перепрошивка пика.

Осталось только подпаять дисплей.

Если все собрано правильно, то после подачи напряжения на экране появится изображение.

Джампер на плате предназначен для изменения режима отображения информации, в вернем положении джампера выводится инверсия изображения, а в нижнем положении — не инвертированное.

Минимальное напряжение, при котором у меня запустился термометр, это 2,2 вольта. Меньше пик работать не будет. Потребление данного термометра составляет максимум 0.6, максимум — 0.8 мА без подсветки. Таким образом, в качестве источника питания можно подключить литиевую батарею типа той, что стоит в биосе вашей материнской платы. Также возможно подключить в качестве источника питания два NI-MH аккумулятора емкостью 800 мА, тогда время автономной круглосуточной работы будет полтора месяца, или же использовать аккумулятор от той же Nokia 3310, как поступил я…

ВНИМАНИЕ !!! +5 вольт, которые есть на молексе компьютера, ИСПОЛЬЗОВАТЬ НЕЛЬЗЯ !!!! Этого не выдержит дисплей термометра. НЕОБХОДИМО ЗАПИТЫВАТЬ УСТРОЙСТВО НАПРЯЖЕНИЕМ МАКСИМУМ 3,7- 3,8 ВОЛЬТ !!!! Для получения необходимого напряжения идеально подходит стабилизатор LD1117. Он не является дефицитом, и я встречал его на платах винчестеров фирмы Samsung (кажется, на 40 GB моделях).

Ради интереса я зажал термодатчик между двумя пальцами, результат оправдал все мои надежды: показания термометра составили 35,6 °C, если учесть тот факт, что температура кожи рук не есть 36,6, то ему можно вполне доверять… Кстати, по поводу скорости обновления. На глаз изменения показаний происходят где-то раз в секунду. Несомненно, это медленнее, чем у терморезисторов, но зато данное устройство не нужно долго и уморительно калибровать…

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

Подключение других LCD дисплеев, не Nokia 3310

Вопрос автору: Вот, например, тебе бы сказали, сделай точно такой же термометр, но задействуй при этом телефон Самсунг или Мотороллу и т.д. Что бы ты делал?

Ответ: Я бы заплатил программисту за то, чтобы он мне написал прошивку, далее я бы подогнал это под схему и выложил бы прошивку и схему. Цены на написание прошивок у нас от 10$ up to 50$.

Вопрос автору: А можно подключить не Nokia 3310, а например Nokia 8310 ?

Ответ: К приведенной в статье схеме и прошивке — нет! ТОЛЬКО 3310! Другие не подойдут, так как у них другой контроллер дисплея. Даже от 3410 не подходит.

Вопрос автору: На каком языке программирования пишется прошивка?

Ответ: На ассемблере или на С.

Обсудить статью на форуме

Рейтинг (голосов):8.72(95)

Личная моддинг коллекция

www.modding.ru

Alex_EXE » Подключение дисплея от nokia3310 к pic16f628A (часть 2)

Написание программы.


Дисплей nokia 3310
Результат работы функции проверки дисплея.

В предыдущей статье был описан сам дисплей и его подключение к микроконтроллеру.

Был выбран микроконтроллер PIC16F628A , который содержит 2К памяти, демонстрационный проект занимает около 91% flash памяти.

Подключение:

  • RES# – RA1
  • CS# – RB4
  • D/C – RB5
  • SDI – RB6
  • CLK – RB7

Сам проект написан на C и использовался компилятор — HI-TECH 9.70 .

В данном проекте был реализован только вывод на дисплей символов т.к. в дисплей происходит запись построчно, т.е. побайтно, т.е. одной посылкой отправляются значения 8 пикселям одного столбца строки. При обычном рисование удобно закрашивать только одну точку, а не столбец, т.к. при наложении рисунков и приметивов ниже находящиеся приметивы будут искажаться. Также можно где-то хранить состояние всех точек дисплея, но внутренней памяти контролера на это не хватает, а внешнюю подцеплять не всегда возможно. Но не кто не запрещает выводить на дисплей готовые картинки, размеры которых кратны размерам символов (6х8).

Функции для работы с дисплеем в текстовом режиме:

  • lcd_init() – инициализация дисплея
  • lcd_clear() – очистка дисплея
  • lcd_test() – функция проверки дисплея (заполняет весь экран символами)
  • lcd_putch(char) – функция вывода символа размером 5х8
  • lcd_puts(const char *s) – вывод строки при помощи функции lcd_putch(char)
  • lcd_putch_big(int width, int height ,char) – функция вывода большого символа на экран, позволяет выводить символы, растянутые в 2,4,8 раза от стандартных символов 5х8, кратность задаётся отдельно по ширине и высоте
  • lcd_putch_beauty(char) – функция вывода символов размером 10х16 точек, требуется дополнительный массив шрифтов
  • lcd_gotoxy(int X, int Y) – переход к символу расположенному в Y строке, на X позиции

Также для работы понадобятся следующие дефайны:


//	логические операции
#define SetBit(x,y) (x|=(1< <y))
#define ClrBit(x,y) (x&=~(1<<y))
#define ToggleBit(x,y) (x^=(1<<y))
#define TestBit(x,y) (x&(1<<y))
//	Назначение выводов контроллера
#define LCD_CLK		RB7
#define	LCD_DATA	RB6
#define	LCD_DC		RB5
#define	LCD_CE		RB4
#define LCD_TRIS()	TRISB &= 0x00
#define	LCD_RESET	RA1
//    Режимы
#define    LCD_TCMD 0
#define    LCD_TDATA 1

И две глобальные переменные расположения курсора:


unsigned char X,Y;

Дисплей от ноки 3310 является графическим и сам не содержит библиотеки символов в отличие от знакогенерирующих. Полный массив символов размером 5х8 занимает 1/3 — 1/2 памяти используемого контроллера (PIC16F628A).
Можно воспользоваться готовыми массивами символов 5х8:

  • Цифровые и спец + латинские символы
  • Цифровые и спец + латинские + русские символы

А можно сгенерировать свой массив символов с помощью специальной программы – символьный генератор.

Для демонстрации возможностей дисплея и данной библиотеки была написана небольшая демонстрационная прошивка, которая по очереди отображает 4 страницы:
сразу после включения запускает функцию проверки дисплея, которая заполняет весь дисплей символами (как на первой фотографии), далее выводит букву «A» различных размеров, потом демонстрирует разрешение дисплея и в заключении информация о демки.



Демка

Ниже приведён сам проект, который содержит полный набор символов (5×8) и функций приведённых выше.

Скачать исходник

alex-exe.ru

Плата расширения для PBII с дисплеем nokia 3310 / Pinboard / Сообщество EasyElectronics.ru

Получил отладочную плату Pinboard II от Di Halt’а. Поигрался, решил приделать к ней дисплей от нокии 3310. Благо, на PBII есть разъём для расширения. И, в духе пинбоарда, постарался сделать плату расширения максимально универсальной. Получилось, как мне кажется, неплохо. Хотя и не соответствует концепции краевого модуля, ну да надеюсь, Ди мне это простит 🙂

Модуль я хотел сделать удобным сразу для нескольких задач. Это и эксперименты с самим дисплеем, и удобный способ проверить дисплей без пайки, и в качестве отладочного устройства отображения. Конечно, в комплекте с PBII уже идёт 16х2 символьный дисплей, вполне удобный для отладки. Но мне он не нравится. Ассоциируется с таксофонами времён моего детства, когда они стали цифровыми, с картами. Графический дисплей симпатичнее. При этом дисплей от 3310 ничуть не сложнее в использовании, не считая разве что необходимости в таблице символов.

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

Вариант 1.


Цепляемся на разъём краевого модуля правой стороной. Штатный дисплей, разумеется, придётся снять. Модуль питается от CPU PWR2, задавая уровень в 3.3В. Также задействуются линии MOSI, MISO, SCK, SS2. С дисплеем можно работать сразу после подключения, больше никаких перемычек не требуется. Левой стороной модуль опирается на 7-сегментик, но для надежности можно привинтить стойку, на пинбоарде там свободное место.

Вариант 2.


Цепляемся на разъём краевого модуля левой стороной. Аналогично первому варианту, только модуль висит справа, делая доступным 7-сегментник, шкалу светодиодов. По подключаемым линиям всё абсолютно одинаково. Для прочности модуль можно привинтить слева к штатной стойке и/или приделать ножки справа.

Вариант 3.


Цепляемся на разъем штатного дисплея. Модуль питается от Main Power (джампер LCD PWR ON должен быть установлен) через собственный стабилизатор на 3.3 вольта. Задействуются линии RS, R/W, E, D0, D1, так что их надо подключать к процессорному модулю проводками. Зато краевой разъём остаётся полностью свободным для других плат расширения. Правой стороной модуль опирается на штатную пластиковую стойку.

Вариант 4.

Ну и конечно, модуль можно использовать отдельно от pinboard’а, подключив его проводками. При желании, один разъём можно напаять на верхнюю сторону, для удобства. Или можно разъём для третьего варианта продублировать вверх.

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

Сброс дисплея.

Для упрощения подключения к краевому разъёму (варианты 1 и 2), чтобы не тянуть отдельный проводок для линии Reset дисплея, начальный импульс сброса производится конденсатором при включении питания. В дальнейшем она подтягивается к питанию. Но, при необходимости, линией Reset дисплея можно управлять через штырёк слева от дисплея. В третьем варианте можно подключить RS к пину контроллера вместе с остальными линиями.

Подсветка.


Дисплей подсвечивается четырьмя smd-светодиодами, впаиваемыми на нижнюю сторону платы вверх ногами в отверстия. Диоды желательно взять поярче и на небольшое прямое напряжение. Питаются они от 3.3В. Включается подсветка джампером справа от дисплея. Вместо джампера на нижний пин можно посадить прямое управление подсветкой и/или запитать её от другого источника. Например, для плавного управления подсветкой ШИМом. На нижнюю часть подложки желательно наклеить кусочек фольги, чтобы свет от диодов отражался в сторону дисплея и не светил в глаза.

Управление.

Для работы с модулем можно использовать любую библиотеку для n3310. Например, библиотеку от XANDER’а. Есть только один нюанс. При работе аппаратного SPI в меге 16, невозможно использовать MISO/PB6 на выход. А линия MISO используется для пина D/C дисплея, выбирающего режим команды/данные. Так что на процессорном модуле нужно соединить выход MISO с любой свободной ножкой микроконтроллера. При программном SPI, как и при подключении через дисплейный разъём, проблем нет. Линию E-SS2-SCE можно вешать хоть на SS процессора, хоть на любой другой пин.

Плата.


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



Схемы нет, плата слишком простая, рисовалась прямо в Sprint Layout’е. Разводка в аттаче.

we.easyelectronics.ru

Работа с дисплеями от Nokia3310 в Bascom-AVR (продолжение) — Как подключить — AVR project.ru

автор: Forter

 Пытаясь повторить конструкцию очередного (весьма, кстати, интересного) термометра, использующего дисплей от Nokia3310, обнаружил, что установленный в термометр дисплей, на котором слева вверху над экраном имелась надпись «Nokia», работает совсем не так, как хотелось бы. Аккуратные домики выводимой на дисплей картинки рассыпались мусором по экрану. 

 Поскольку опыт использования дисплеев от Nokia3310 был, я пришел к выводу, примененный мною дисплей имеет совсем не оригинальный контроллер, как того следовало ожидать, судя по имеющейся на нем гордой надписи «Nokia».  
В моем распоряжении находилось три вида дисплеев:
 1. куплен на ebay, как указывается, совместим с дисплеем от Nokia5110, в котором, в свою очередь, используется контроллер дисплея тот же, что и в Nokia3310. Таким образом, можно было предположить, что этот дисплей должен быть полностью совместим с родным дисплеем от Nokia3310 (как, собственно, и оказалось в жизни).
 2. куплен лет 5 назад на радиорынке дисплей с надписью «Nokia», который я пытался пристроить в конструкцию термометра.
 3. куплен 1 год назад — дисплей с двумя дугами сверху, слева и справа экрана, по его поводу ничего не было известно, кроме того, что в телефоне он с успехом заменяет дисплей №2. 

 Чтение материалов, касающихся использования данных дисплеев в различных конструкциях, еще более запутало ситуацию, тем более, что всюду утверждается, что дисплей №2 использует оригинальный контроллер. Однако, неудачная попытка его использования в упомянутой выше конструкции, навела на мысль, что надпись «Nokia» не может гарантировать совместимость этого дисплея с оригинальным дисплеем (в применении к любительским конструкциям).
 Отправным моментом можно принять тот факт, что в оригинальном дисплее используется филиппсовский контроллер PCD8544, ну, и соответственно, тот дисплей, который «заведется» с использованием библиотек дисплея (размещенных на сайте) для Bascom’а, без какой – либо их доработки, можно будет считать соответствующим оригиналу. Собственно, задача состояла не только в этом, а просто хотелось выяснить, какие изменения надо (если надо!) внести в библиотеки, чтобы каждый из имеющихся дисплеев работал КАК оригинальный.  
 Здесь следует остановиться на прояснении принципа вывода информации на экран дисплея. Итак, контроллер PCD8544 обеспечивает вывод на экран с разрешением 84х48 = 4032 точек. Вывод осуществляется побайтно (в нашем случае с горизонтальной адресацией) по 84 байта в одной строке, при общем количестве строк – 6 (48/8), таким образом, всего память контроллера дисплея рассчитана на 6х84=504 байт. При построчном выводе, после заполнения первой строки шириной 84 байта, контроллер (только этот!) автоматически начинает заполнять вторую строку и т.д. По заполнению всех 6 строк, вывод продолжится с начала первой строки. Все просто и понятно, но это только в случае контроллера PCD8544, в моем случае это был дисплей №1. Исходники и библиотека 

Фото вывода тестовой картинки с этой библиотекой на дисплей №1 ниже


 При выводе картинки (с использованием предложенной для оригинального дисплея библиотеки) на дисплеи №2 и №3, изображение «рассыпалось», да и при выводе «Hello, World» на первой строке дисплея №3, можно было видеть только нижнюю половину этой надписи. В Интернете много материалов с объяснениями этого факта, есть даже успешные попытки преодолеть эту проблему http://www.radiokot.ru/articles/29 , но это сделано на С, а вот решения этой задачи на Bascom я нигде не смог найти.
 На упомянутом Интернет-ресурсе автор предположил, что контроллер неоригинального дисплея способен отобразить 102х64 точки (104 байта по горизонтали и 8 байт по вертикали).  Дальнейшие поиски привели к тому, что был найден контроллер SD7558, который имеет те же команды и обеспечивает вывод с разрешением 6630 точек (102 точки по горизонтали и 65 – по вертикали).
 Поэтому, можно предположить, что при выводе картинки на экран, когда данные идут сплошным потоком, в памяти контроллера дисплея они размещаются по строке не в 84 ячейках памяти, а в 102! Но сам контроллер – то не знает, что при заполнении 84 ячеек памяти, нам надо продолжить вывод на дисплей с новой строки и продолжает заполнять ячейки до конца строки, т.е. до 102, а только потом, начинает прорисовывать новую строку – вот изображение и «рвется»! Отсюда вывод – доработать библиотеку так, чтобы построчный вывод производился только по 84 байта, а каждая новая строка для выводимых символов должна принудительно начинаться командой D3310position(x, y), где х=0, а y=0…5. Все это должно выглядеть, примерно следующим образом:

D3310commandout &h50                       ‘начинаем выводить первую строку с адреса y=0
D3310dc = 1
For D3310pixelloop = 0 To 83              ‘цикл вывода 84 байтов первой строки
Read D3310column
Call D3310dataout(d3310column)
Next D3310pixelloop                       ‘байты первой строки идут с 0 по 83

D3310dc = 0
D3310commandout &h30
D3310commandout &H80
D3310commandout &h51                      ‘начинаем выводить вторую строку с адреса y=1
D3310dc = 1                               ‘т.е. принудительно переводим начало строки

For D3310pixelloop = 84 To 167           ‘цикл вывода 84 байтов второй строки
Read D3310column
Call D3310dataout(d3310column)
Next D3310pixelloop                      ‘байты второй строки картинки идут с 84 по 167

 И так далее для всех оставшихся строк (байты, соответственно, со 168 по 503).

Исходники и доработанная библиотека: скачать  

Результат ниже:

 Эта библиотека с успехом была опробована с дисплеем №2, на других дисплеях – эта библиотека не работает!  
 Задача усложняется при работе с дисплеем №3. Было замечено, что в выводимой картинке исчезают 3 верхних пиксела, вывод – следует сдвинуть изображение на 5 пикселов вверх (команда контроллера &h55) и начинать вывод строк не с нулевой, а с первой строки, конечно, последняя строка в данном случае будет – шестая. Далее, естественно, необходимо начинать каждую новую строку по завершению вывода 84 байтов, как и в случае дисплея №2. Только начало символьной строки задается командой D3310position(x, y), где х=0, а y=1…6, ну и библиотека доработана для вывода картинки, а основные изменения указаны ниже:

Sub D3310init
   D3310ce = 0                          ‘Display data input enable
   D3310dc = 0                          ‘Command mode
   D3310commandout &h31                 ‘Extended command mode, horizontal addressing
   D3310commandout &HD5                 ‘ Я установил такой контраст
   D3310commandout &h55   ‘смещение картинки на 5 пикселов вверх, плюс
                          ‘первоначально имеющееся смещение на 3 пиксела,
  ‘всего, таким образом, 8 пикселов или одна целая строка, будем
  ‘выводить НЕ с Нулевой строки,  а с первой
  ‘эта команда работает только в расширенном режиме
  ‘поэтому первая команда инициализации стоит &h31 — переход в расширенный режим,
  ‘далее следует команда &HD5, у меня при
  ‘таком контрасте хорошо видно, ну и, наконец,
  ‘команда &h55, где 5 -смещение картинки
  ‘на упомянутые 5 пикселов

   D3310commandout &H06                   ‘Temperature setting
   D3310commandout &h23                   ‘Bias 1:48
   D3310commandout &h30                   ‘Normal command mode, horizontal addressing
   D3310commandout &H0C                   ‘Uninverted Screen

   D3310ce = 1                            ‘Display data input disable
End Sub
‘………………………………………………………………………
‘Подпрограмма установки курсора

Sub D3310position(byval D3310x As Byte , Byval D3310y As Byte)      

‘……………………………………………………………………………
‘Подпрограмма вывода картинки на дисплей

Sub D3310bmpout              ‘You must Restore D3310bmp* before you call D3310bmpout

   Local D3310pixelloop As Word          ‘Loop variable for the pixels
   Local D3310column As Byte             ‘Display column output

   D3310ce = 0                            ‘Display data input enable
   D3310dc = 0                            ‘Command mode
   D3310commandout &h30                   ‘Normal command mode, horizontal addressing
   D3310commandout &H80                   ‘Set RAM X address to 0
   D3310commandout &h51            ‘Здесь для вывода картинки установим RAM Y address
                                   ‘ не  0, а 1, как и отмечалось, выводим картинку
                                     ‘не с нулевой, а с первой строки

                                   ‘никаких оптимизаций кода не проводилось.
   D3310dc = 1                            ‘Go to data mode

   For D3310pixelloop = 0 To 83          ‘цикл вывода 84 байтов первой строки
      Read D3310column
      Call D3310dataout(d3310column)
   Next D3310pixelloop

   D3310dc = 0                            ‘Command mode
   D3310commandout &h30                   ‘Normal command mode, horizontal addressing
   D3310commandout &H80                   ‘Set RAM X address to 0

   D3310commandout &h52                   ‘вторая строка
   D3310dc = 1                            ‘Go to data mode

   For D3310pixelloop = 84 To 167        ‘цикл вывода 84 байтов второй строки
                                      ‘байты второй строки картинки идут с 84по 166
      Read D3310column
      Call D3310dataout(d3310column)
   Next D3310pixelloop
‘……………
‘Продолжаем вывод строк

   D3310dc = 0                            ‘Command mode
   D3310commandout &h30              ‘Normal command mode, horizontal addressing
   D3310commandout &H80                   ‘Set RAM X address to 0
   D3310commandout &h56                   ‘вывод шестой строки
   D3310dc = 1                            ‘Go to data mode
    For D3310pixelloop = 420 To 503      ‘цикл вывода 84 байтов шестой строки
      Read D3310column
      Call D3310dataout(d3310column)
   Next D3310pixelloop
   D3310ce = 1                            ‘Display data input disable

End Sub

Исходники и доработанная библиотека: скачать.
А вот — как она работает.

 В результате доработки библиотеки дисплей №3 работает так же, как и оригинал, только контраст нужно подстроить. А на других дисплеях, в свою очередь, эта библиотека не работает!
 Имеются сведения еще об одной модификации дисплея, у которого нет никакого тиснения сверху слева экрана, но такого дисплея у меня не было, поэтому на сей счет ничего не могу сказать. Но, думаю, что пользуясь представленной информацией, можно «завести» любую модификацию дисплея от Nokia3310. Комментарии смотрите в библиотеках, там все понятно…
  В экспериментах использовался клон Arduino, описанный в журнале Радио, №10 за 2010 год и имеющий название «Interduino», автором которого является С. Рюмик, его статьи в журналах, вообще, являются лучшим образцом подхода к изложению самого сложного материала.
 В целом, использование Arduino – подобных устройств очень упрощает и экономит время, особенно при программировании управляющего микроконтроллера (в моем случае ATMega168) прямо из среды разработки Bascom версией не ниже 2.0.5.0. Правда, здесь имеются свои тонкости, и мне немало пришлось повозиться с этими устройствами. Но сейчас все вопросы функционирования Arduino – устройств в среде разработки Bascom мною решены, естественно, те, с которыми я сам сталкивался (наиболее сложной проблемой оказалась «заливка» прошивки в Arduino на ATMega2560) 
 В заключение хочу сказать, что не пытался оптимизировать по размеру ни программы, ни библиотеки (задача была другая), возможно, кто – то проделает эту работу, думаю, что все интересующееся этим вопросом сообщество было бы ему за это благодарно. Более того, допускаю, что допущены и просто ошибки, за указание на которые, был бы признателен.  
Ну, и напоследок — я поставил себе задачу попытаться вывести на дисплей картинку, предварительно записанную в EEPROM I2C типа 24LC32, на экран от Nokia3310. Похожий проект я видел по ссылке http://monitor.net.ru/forum/viewtopic.php?t=274597&postdays=0&postorder=asc&start=32, автором которого является Ruslan55, который мне любезно прислал информацию (правда, все на PIC – ассемблере). Мне очень понравилась сама его идея анимации изображения, ну, а уж придумать алгоритма вывода картинок в Bascom на дисплей было делом не слишком сложным.
 В результате, на всех трех дисплеях появился танцующий человечек! Но об этом, если будет интересно – потом.

P.S. В связи с тем, что вопросы остаются (было бы странным, если это было бы не так), я провел еще ряд экспериментов по проверке работы дисплея с надписью «Nokia» (дисплей №2 в статье) в проекте, упомянутом в начале статьи. Поскольку я использовал уже упомянутый клон Arduino, чтобы не менять схему подключения, в исходном файле изменена конфигурация портов и исключены коды относящиеся к обслуживанию датчика температуры, оставлена только та часть программы контроллера, которая отвечает за вывод картинки на экран дисплея. Картинки «Bmp11» и «Bmp12» оставлены оригинальными. Ну, и переименовал название основного файла thermo3310-8-timer.bas в org_lib_duino_ thermo3310-8-timer.bas и в new_lib_duino_ thermo3310-8-timer.bas
 Дисплей подключен к порту D микроконтроллера ATMega168, а частота увеличена до 16 МГц (стандарт Arduino). В ходе эксперимента выяснилось, что требования к стеку должны быть также изменены по сравнению с оригиналом. Установлено: $hwstack = 64, $swstack = 16, $framesize = 100 (в исходном файле проекта — $hwstack = 32, $swstack = 8, $framesize = 100). 

             Рис.1                                                                   Рис.2         

 Результаты приведены на рисунках №№1-4. В первом случае (рис. №1 и №2) использовалась оригинальная авторская библиотека 3310end-new.bas (ссылка на архив)

Рис.3                                                                 Рис.4

 Во втором случае (рис. №3 и №4) использовалась моя неоптимизированная библиотека 3310end_Nokia.bas
 Различия, как видим, существенные, хотя выводимые картинки одинаковые! Скорее всего, автору замечательного термометра повезло, у него все – таки был оригинальный дисплей и этим все объясняется, ну, а надписям не всегда можно верить – лучше проверить.
 В заключение хочу еще раз поблагодарить автора проекта с термометром, ведь если бы все получилось, я бы не стал проверять ничего, и каждый раз мучился бы с этими дисплеями…
Благодарю также администрацию сайта avrproject.ru за размещение прекрасно оформленных материалов (я не о своих!), ведь только наткнувшись в сети на Ваш сайт, я понял, что можно попытаться освоить и AVR контроллеры (до этого я занимался PIC и 8051 – контроллерами).
 

avrproject.ru

Nokia 3310 (2017) — Экран

Nokia 106 (2018)

19200 пикселей (1.8 in, TFT, 120 x 160 пикселей)

Nokia 130 (2017)

19200 пикселей (1.8 in, LCD, 120 x 160 пикселей)

Nokia 109

20480 пикселей (1.8 in, TFT, 128 x 160 пикселей)

Nokia 114

20480 пикселей (1.8 in, TFT, 128 x 160 пикселей)

Nokia 130

20480 пикселей (1.8 in, LCD, 128 x 160 пикселей)

Nokia 130 Dual SIM

20480 пикселей (1.8 in, LCD, 128 x 160 пикселей)

Nokia 150

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 150 Dual SIM

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 206

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 208

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 220

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 225

76800 пикселей (2.8 in, LCD, 240 x 320 пикселей)

Nokia 225 Dual SIM

76800 пикселей (2.8 in, LCD, 240 x 320 пикселей)

Nokia 230

76800 пикселей (2.8 in, TFT, 240 x 320 пикселей)

Nokia 230 Dual SIM

76800 пикселей (2.8 in, TFT, 240 x 320 пикселей)

Nokia 301

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 3310 (2017)

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 3310 3G

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 3310 3G Dual

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 3310 4G

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 515

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia 8110 4G

76800 пикселей (2.45 in, TFT, 240 x 320 пикселей)

Nokia Asha 205

76800 пикселей (2.4 in, TFT, 240 x 320 пикселей)

Nokia Asha 210

76800 пикселей (2.4 in, TFT, 320 x 240 пикселей)

Nokia Asha 230

76800 пикселей (2.8 in, TFT, 240 x 320 пикселей)

Nokia Asha 500

76800 пикселей (2.8 in, LCD, 240 x 320 пикселей)

Nokia Asha 500 Dual

76800 пикселей (2.8 in, LCD, 240 x 320 пикселей)

Nokia Asha 501

76800 пикселей (3 in, TFT, 240 x 320 пикселей)

Nokia Asha 502

76800 пикселей (3 in, LCD, 240 x 320 пикселей)

Nokia Asha 503

76800 пикселей (3 in, LCD, 240 x 320 пикселей)

Nokia Asha 503 Dual

76800 пикселей (3 in, LCD, 240 x 320 пикселей)

Nokia Asha 309

96000 пикселей (3 in, TFT, 240 x 400 пикселей)

Nokia Asha 310

96000 пикселей (3 in, TFT, 240 x 400 пикселей)

www.devicespecifications.com

Модуль М32 с дисплеем от Nokia3310 — Проекты — AVR project.ru

 Для планируемых проектов, с использованием дисплея от Nokia3310, собрал что-то типа универсального модуля на микроконтроллере Atmega32 в корпусе TQFP. Платка получилась компактная, размерами 60х45 мм. Из периферии имеются 4 кнопки и один светодиод. Я старался задействовать для подключения дисплея и кнопок менее важные выводы микроконтроллера, чтобы оставалась возможность использовать UART, ШИМ, АЦП, внешние прерывания, внутренний компаратор и прочие ништяки. Дисплей занимает входы/выхода JTAG и подключается к выводам PortC.3-PortC.7. Для подключения кнопок отвел 4 ноги порта А, схема подключения получилась такая:

 Все оставшиеся свободные выводы микроконтроллера выведены на разъем-гребенку PLS. Под программатор вывел отдельный 6-и пиновый разъем, распиновка разъема стандартная, можно шить например вот этим программатором. 

 С обратной стороны модуля стоит кварц на 16МГц и конденсаторы по питанию.

 Как писал в этой статье, дисплей у меня отрезан от пластмаски и припаян на плату. Этот модуль с дисплеем ставится на основную плату с контроллером.

 Чтобы между модулем дисплея и модулем с контроллером был контакт без запайки я сделал хитрую вещь: продел жилку провода через отверстие и запаял с обеих сторон.

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

  

 Вот как это выглядит в сборе:

 

 
При первом программировании фьюзов микроконтроллера, необходимо отключить JTAG, чтобы можно было использовать выходы мк которые он занимает. Заодно нужно запрограммировать работу от внешнего кварца 16 МГц. Для пони-прог фьюзы можно глянуть здесь. Я шил через Khazam’y, скрин с настройками фьюзов для него:

 

  Для проверки модуля написал небольшую программку, управляющую светодиодом с помощью кнопок через простенькую менюшку: можем включать/выключать светодиод и заставить его мигать с выбираемой частотой (Slow/Fast):

 Работа с кнопками организована на Timer0, каждые 16 мс происходит переполнение таймера и вызывается прерывание. В обработчике прерывания происходит сканирование кнопок. Мигание светодиода организовано на Timer1.

 Ну и напоследок видео работы тестовой прошивки (спасибо пользователю Ruber за снятое видео;))

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

  

 

Ниже можете скачать файлы к проекту:

Исходники и прошивка

Файлы печатной платы

Проект в proteus

Статьи по теме:

UPD:

Часто у людей желающих использовать дисплей от 3310 возникает вопрос о согласовании уровней между дисплеем и контроллером, работающим от 5 вольт. На самом деле дисплеей прекрасно работает при напряжении питания 5 вольт, поэтому можно особо не заморачиваться с преобразователями. Вот к примеру мой модуль с дисплеем (дисплей подключен напрямую к контроллеру) подключен и запитан от USB программатора (5V)


Если вы решили собрать подобный модуль предлагаю собрать усовершенствованный вариант: ATmega32 Devboard

avrproject.ru