Nokia lcd 1100 arduino

Используем экран Nokia 1100 в своих целях

Сегодня мы расскажем о том, как использовать экран телефона Nokia 1100 в своих DIY-проектах, но сперва мы поделимся небольшой историей об этом телефоне.

Nokia 1100 — самый популярный телефон в мире, который посчастливилось сделать именно нам. С момента старта продаж в конце 2003 года телефон Nokia 1100 был распродан в количестве свыше 250 млн штук — это не только самый продаваемый продукт среди телефонов, но и среди вообще всей потребительской электроники.

Рассчитанный на широкую географию аудитории телефон имел крайне простой, но удовлетворяющий потребности жителей всех континентов практичный дизайн. Nokia 1100 имел монолитную силиконовую клавиатуру и ребристые не скользящие края, защищающие телефон от повреждений во влажных и пыльных климатических условиях, а также встроенный фонарик, предназначенный специально для жителей стран с недостаточным уличным освещением. Внешний вид телефона был разработан в калифорнийском Nokia Design Center болгаро-американским дизайнером Мики Механджийский (Miki Mehandjiysky).

«Единственный способ прийти ко всем этим функциям — это проводить много времени с потребителями, общаться с ними, смотреть на то, как они живут. Возьмём, например, функцию фонарика. Скорее всего вы подумаете „Да кому он вообще нужен?!“, но для потребителей, скажем, из Индии или Африки, где электричества либо нет вовсе, либо оно не всегда доступно, наличие фонарика крайне важно» — вспоминает о разработке Nokia 1100 Алекс Ламбик (Alex Lambeek), вице-президент Nokia, ответственный за сегмент бюджетных телефонов.

В Nokia 1100 использовался недорогой монохромный графический экран с зеленой светодиодной подсветкой, обеспечивая полную читаемость даже на очень ярком солнце. Разрешение экрана составляло 96×65 точек, отображая одну служебную и три пользовательских строки. Некоторые умельцы даже научились использовать дисплей Nokia 1100 в своих целях, и сейчас мы расскажем, как это делается.

Разбираем и пользуемся

В Nokia 1100 применялся дисплей от Philips с IC-драйвером PCF8814, который, несмотря на поддержку протокола I2C, не использовал последний. Вместо этого применялся простой механизм обмена битами.


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

Для работы с дисплеем можно использовать практически любой микроконтроллер, например, PIC, AVR, MSP 430, 8051, но мы прибегнем к микроконтроллеру на основе микрочипа PIC 18F458. Программное обеспечение для проекта напишем на чистом C в MPLAB IDE.

Об экране

Графический дисплей от Nokia 1100 выполнен по технологии монтажа контроллера на стекло COG (chip-on-glass) с 9 входами (последний не используется) на задней стороне. Если интересно, вы можете ознакомиться с описанием контроллера от производителя. Мы же обсудим несколько важных моментов, необходимых для реализации нашей задумки.

Размеры данного составляют 96×65 пикселей, к которым можно обратиться напрямую через RAM-память, как показано на изображении снизу:

Типичный пример RAM изображен ниже. По вертикальной оси отображены ячейки от 0 до 8 с восемью битами на каждый адрес при совмещении с горизонтальной осью. По горизонтальной оси отображена адресация от 0 до 95, и каждый бит отвечает за соответствующий пиксель по оси X.

Режимы адресации

У данного дисплея существует два режима адресации: горизонтальная и вертикальная.

Режим вертикальной адресации

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

Режим горизонтальной адресации

Каждая инструкция будет увеличивать адрес в направлении X и затем возвращаться к начальному адресу.

Набор инструкций PCF8814


Последовательная коммуникация

Биты отправляются на LCD следующим образом:

  1. Установить SC в GND
  2. Установить SCLK в GND
  3. Отправить D/C бит (данные или команда) в SDA
  4. Установить SCLK в 1
  5. Установить SCLK в 0
  6. Отправить бит данных в SDA
  7. Установить SCLK в 1
  8. Повторить шаги 5,6 и 7 для оставшихся семи бит.
Последовательность инициализации дисплея

5мс.

  • Установить RST в high.
  • Записать команду 0x20 в LCD по последовательной шине. Записать Vop-регистр
  • Записать команду 0x90 в LCD по последовательной шине.
  • Записать команду 0xA4 в LCD по последовательной шине. Установить дисплей в обычный режим
  • Записать команду 0x2F в LCD по последовательной шине. Управление питанием (включить/выключить подкачку зарядов (charge pump))
  • Записать команду 0x40 в LCD по последовательной шине. Установить начальный адрес строки = 0
  • Записать команду 0xB0 в LCD по последовательной шине. Задать адрес по оси Y = 0
  • Записать команду 0x10 в LCD по последовательной шине. Задать адрес по оси X, младшие 3 бита
  • Записать команду 0x00 в LCD по последовательной шине. Задать адрес по оси X, старшие 3 бита
  • Записать команду 0xC8 в LCD по последовательной шине. Отразить ось Y (относительно оси X)
  • Записать команду 0xA1 в LCD по последовательной шине. Инвертировать экран в горизонтальной оси
  • Записать команду 0xAC в LCD по последовательной шине. Выставить начальный ряд (R0) дисплея
  • Записать команду 0x07 в LCD по последовательной шине.
  • Записать команду 0xF9 в LCD по последовательной шине.
  • Записать команду 0xAF в LCD по последовательной шине. Включить/выключить дисплей
  • Очистить дисплей
  • Записать команду 0xA7 в LCD по последовательной шине. Инвертировать дисплей
  • Подождать примерно 500 мс
  • Записать команду 0xA7 в LCD по последовательной шине. Вернуть дисплей в нормальное состояние
  • Очистка дисплея: после инициализации нужно установить SCE в Ground для включения дисплея. Установить D/C в High, чтобы послать данные на дисплей. Повторить операцию «write byte 0x00» для записи на дисплей 864 раза для очистки всех пикселей.

    Собираем схему

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

    Программное обеспечение

    Программное обеспечение написано на C при помощи MPLAB и компилятора Microchip C18. Исходные коды и уже скомпилированную прошивку можно по ссылке.

    Всё, теперь вы можете использовать экран Nokia 1100 в своих целях. Правда, разбирать один из самых ударостойких телефонов за всю историю, вам придется уже без наших подсказок.

    Источник

    Arduino.ru

    Подключение дисплея nokia 1100

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

    Доброго дня, извиняюсь за возможно глупый вопрос, в общении с ардуиной еще совсем новичек, но не найдя на него ответа решил написать сюда, есть в наличии arduino uno и дисплей nokia 1100 хотелось бы их подружить, для начала просто вывести пару строчек текста, сейчас идет шилд реального времени и как придет хочу сделать часы :) Интересует в первую очередь схема подключения, а то сколько не искал в интернетах там для 3310

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

    схема подключения, а то сколько не искал в интернетах там для 3310

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

    Спасибо, видимо правда плохо искал

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

    отвечу сам на свой же вопрос :) нашел схемку, прикреплю сюда, вдруг еще кому понадобится

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

    Подскажите что компелятору тут не нравится?

    почти в каждой функции указывает на этот оператор и пишет:

    . \nokia1100_lcd_lib.c:88: error: ‘for’ loop initial declaration used outside C99 mode

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

    hugoboss317, а зачем unsigned при верхнем пороге значений в 864?

    И зачем 865 раз делать одно и то же событие, не зависящее от инкременируемой переменной (может я чего-то не знаю?)?

    Что твориться в 88-й строке в файле библиотеки nokia1100_lcd_lib.c? Ну говорит, не по-феншую (не по-стандарту С99) используется вызов nlcd_SendByte (скорее всего что-то в передаче параметров), но работать дожен.

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

    Подскажите что компелятору тут не нравится?

    почти в каждой функции указывает на этот оператор и пишет:

    . \nokia1100_lcd_lib.c:88: error: ‘for’ loop initial declaration used outside C99 mode

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

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

    Это не я. Скачал готовую (ну вроде как готовую) библиотеку. Достаточно функциональную. И в ней ничего не менял (кроме разрешения 68 на 65)

    88-ю строку я показал. Она такая не одна. Как я сказал, в каждой функции где этот оператор выполняет подобное действие.

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

    Но не только в это функции: ‘nlcd_SendByte’, ‘nlcd_Putc’, ‘nlcd_PutcWide, ‘nlcd_Print’,

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

    проскочил глюк браузера. 3 одинаковых сообщения. Удалил.

    Источник

    kashapovd/PCF8814-Nokia-1100-LCD-library

    Use Git or checkout with SVN using the web URL.

    Work fast with our official CLI. Learn more.

    Launching GitHub Desktop

    If nothing happens, download GitHub Desktop and try again.

    Launching GitHub Desktop

    If nothing happens, download GitHub Desktop and try again.

    Launching Xcode

    If nothing happens, download Xcode and try again.

    Launching Visual Studio Code

    Your codespace will open once ready.

    There was a problem preparing your codespace, please try again.

    Latest commit

    Git stats

    Files

    Failed to load latest commit information.

    README.md

    PCF8814 LCD LIBRARY

    This is an arduino library for monochrome LCD based on PCF8814 driver. This library provides just hardware application layer functions. Most graphic features are provided by Adafruit GFX library.

    PCF8814 supports I²C, 4-wire and 3-wire SPI interfaces to communicate. In this library used 3-wire SPI (just software by bitbanging). My LCD version (from the legendary Nokia 1100) doesn’t have 4-wire SPI and I²C outputs.

    Tested with SPI fps
    Atmega328 based arduinos software about 14
    ESP8266 based platforms software about 39

    PCF8814 library depends by Adafruit GFX library and you must install Adafruit GFX for your IDE.

    Источник

    Подключение дисплея от Nokia 1100. Часть 2.

    Итак, контроллер PCF8814 позволяет выводить на экран 96 пикселей по горизонтали и 65 пикселей по вертикали. Отсчет начинается от верхнего левого угла.

    Данные об изображении записываются побайтно во внутреннюю память (DDRAM) контроллера PCF8814. Адресация по горизонтали (X) идет попиксельно и изменяется от 0 до 95, а по вертикали (Y) задается номер банка, который изменяется от 0 до 8. Адреса вне этих диапазонов не допускаются. Всего есть 9 банков по 96 байт. В девятом банке используется только 1 пиксель. В зависимости от включенного режима значащим является либо старший бит передаваемого байта, либо младший.

    Адресация памяти может работать в двух режимах — горизонтальном и вертикальном. В горизонтальном режиме при записи каждого байты в память счетчик X увеличивается на единицу. При достижении предела по горизонтали (95) он сбрасывается в 0, а счетчик Y увеличивается на единицу.

    При вертикальном режиме адресации при каждой записи байта в память на единицу увеличивается счетчик Y, при достижении предела (8) он сбрасывается в 0, а горизонтальный счетчик увеличивается на единицу. Картинка, приведенная ниже, подробно описывают способы адресации.

    Контроллер PCF8814 может подключаться к микроконтроллеру с помощью:

    1. SPI по трем линиям
    2. SPI по четырем линиям
    3. шины I2C
    4. последовательного 3-х проводного интерфейса

    В дисплее от Nokia 1100 реализовано подключение по 4-проводному SPI. В принципе, это неплохо, так как хоть и не экономит выводы микроконтроллера, но немножко разгружает программу работы с дисплеем. При подключении используются сигналы:

    1. SCLK — линия тактирования
    2. SDA — линия передачи данных и команд
    3. CS — линия, определяющая передачу команды или данных
    4. RST — линия аппаратного сброса

    Дисплей от Nokia 1100 позволяет только записывать данные в память (DDRAM) контроллера дисплея. Чтение из памяти не реализовано, хотя сам контроллер PCF8814 это позволяет. Поэтому, что бы определить, что у вас записано в памяти дисплея, необходимо в микроконтроллере организовывать буфер с данными для дисплея и отслеживать то, что записано, по нему.

    В общем, настоятельно рекомендую ознакомиться с даташитом на контроллер PCF8814 (в материалах к статье). Там описано много нюансов и режимов работы с контроллером, приведена система команд и т.д.

    Я долго искал библиотеку для работы с этим контроллером, но ничего путного и работающего сразу не нашел. Поэтому пришлось слепить свою библиотеку из найденных кусков, адаптировав под AVR-GCC. В итоге дисплей заработал практически сразу же:

    Работа экрана Nokia 1100

    На фотке выше показана работа демонстрационной программы работы с дисплеем. Сама программа никаких сложностей не представляет. Вся работа реализована в библиотеке.

    Библиотека позволяет выводить на экран только символы размером 5×8 пикселей. Зазор в 1 пиксель между символами добавляется автоматически. Поэтому, на экран можно вывести 8 строк по 16 символов. Работа с графикой в библиотеке не реализована (пока не возникало необходимости). В будущем, возможно напишу следующую версию библиотеки, в которой будут функции для работы с графикой. Но это в перспективе.

    Особенность моей библиотеки в том, что линии управления дисплеем должны быть подключены к одному и тому же порту микроконтроллера, хоть и к любым пинам порта. В исходниках демонстрационного проекта — это PortC. Настройка библиотеки осуществляется в заголовочном файле nokia1100_lcd_lib.h. Укажите порт подключения управляющий линий и куда они подключены. Все прокомментировано, поэтому сложностей составить не должно.

    Пример настройки библиотеки из демонстрационного проекта:

    В библиотеку входит файл nokia1100_lcd_font.h, в котором, как следует из названия, содержится шрифт. В нем реализована таблица ASCII с кодами символов от 30 до 127, т.е. специальные символы, цифры и латинский алфавит.

    Если вы в своем проекте применяете кириллицу, то нужно раскомментировать дефайн FULL_CHARSET . Это включит в прошивку дополнительные символы шрифта с кириллицей, но и потребление памяти программ увеличится. Частично включенные символы от символа «А» до символа «п» соответствуют кодировке CP866, далее — несоответствие ниодной кодировке. Поэтому при работе с кириллицей следует уделить внимание кодировке символов кириллицы.

    ASCII-таблица с кодировкой CP866

    Вот прототипы реализованных в библиотеке функций:

    Из названий функций, я думаю, понятно что они делают.

    На этом, пожалуй все. Если есть вопросы, буду рад ответить в комментариях к посту.

    Ну, и напоследок небольшое видео с демонстрацией работы.

    Вливайтесь в обсуждение

    &nbsp 83 комментария

    как можно сделать из этого экрана тестер?

    Chiper

    Igorexa92

    «В вертикальном режиме при записи»
    обратите внимание, опечатка.

    Igorexa92

    «В горизонтальном режиме при записи»

    Chiper

    Да, спасибо, действительно опечатка. Сейчас поправлю.

    Спасибо за исходники. Как появится дисплей опробую

    Chiper

    -Валера-

    Приветствую.
    Пробую скомпилировать проект — Winavr-20100110 — «вываливает» под 20 ошибок.Вопрос: в чем грабли?

    Chiper

    У меня более новый toolchain стоит. Может быть по этому?
    У меня компилится вообще без единой ошибки или варнинга.

    Приведи лог ошибок, попробуем разобраться…

    -Валера-

    Связь есть — это уже хорошо 🙂 Поскольку программист я хоть куда — возникает вопрос КАК снять лог ошибок ?

    Chiper

    Перейди в студии в ту часть, где выводятся ошибки, нажми Ctrl+A, клацини правой кнопкой мыши и выбери пункт Copy. После этого вставь в коммент. Помоему все просто… 🙂

    -Валера-

    NOKIA1100_demo.c:21: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness
    NOKIA1100_demo.c:22: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness
    NOKIA1100_demo.c:23: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness
    NOKIA1100_demo.c:24: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness
    NOKIA1100_demo.c:25: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness
    NOKIA1100_demo.c:26: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness
    NOKIA1100_demo.c:27: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness
    NOKIA1100_demo.c:37: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness

    -Валера-

    Это не все-продолжение следует..

    -Валера-

    Linking: main.elf
    avr-gcc -mmcu=atmega8 -I. -gstabs -DF_CPU=8000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=NOKIA1100_demo.o -std=gnu99 -MMD -MP -MF .dep/main.elf.d NOKIA1100_demo.o —output main.elf -Wl,-Map=main.map,—cref -lm
    NOKIA1100_demo.o: In function `main’:
    NOKIA1100_demo.c:11: undefined reference to `nlcd_Init’
    NOKIA1100_demo.c:14: undefined reference to `nlcd_GotoXY’
    NOKIA1100_demo.c:19: undefined reference to `nlcd_GotoXY’
    NOKIA1100_demo.c:21: undefined reference to `nlcd_PrintF’
    NOKIA1100_demo.c:22: undefined reference to `nlcd_PrintF’
    NOKIA1100_demo.c:23: undefined reference to `nlcd_PrintF’
    NOKIA1100_demo.c:24: undefined reference to `nlcd_PrintF’
    NOKIA1100_demo.c:25: undefined reference to `nlcd_PrintF’
    NOKIA1100_demo.o:NOKIA1100_demo.c:26: more undefined references to `nlcd_PrintF’ follow
    NOKIA1100_demo.o: In function `main’:
    NOKIA1100_demo.c:32: undefined reference to `nlcd_GotoXY’
    NOKIA1100_demo.c:33: undefined reference to `nlcd_Print’
    NOKIA1100_demo.c:36: undefined reference to `nlcd_GotoXY’
    NOKIA1100_demo.c:37: undefined reference to `nlcd_PrintF’
    make.exe: *** [main.elf] Error 1

    > Process Exit Code: 2
    > Time Taken: 00:00

    Chiper

    Попробуй вот этот блок:
    nlcd_PrintF(PSTR(» Hello, world! «));
    nlcd_PrintF(PSTR(«—————-«));
    nlcd_PrintF(PSTR(» DigitalChip.ru «));
    nlcd_PrintF(PSTR(» present «));
    nlcd_PrintF(PSTR(» NOKIA 1100 LCD «));
    nlcd_PrintF(PSTR(» demonstration «));
    nlcd_PrintF(PSTR(«—————-«));
    заменить на
    nlcd_Print(» Hello, world! «);
    nlcd_Print(«—————-«);
    nlcd_Print(» DigitalChip.ru «);
    nlcd_Print(» present «);
    nlcd_Print(» NOKIA 1100 LCD «);
    nlcd_Print(» demonstration «);
    nlcd_Print(«—————-«);

    Chiper

    У тебя просто не подключена библиотека. Подключи ее к проекту.

    -Валера-

    Ошибок стало меньше, но все же. По поводу подключения библиотеки- создал проект, затем Makefile, дальше к проекту добавляем драйвера LCD — 2 файла, библиотека шрифтов и саму демо-программу. Ессно все находится в одной папке. Я так понимаю фото прикрепить нельзя ?

    Compiling C: NOKIA1100_demo.c
    avr-gcc -c -mmcu=atmega8 -I. -gstabs -DF_CPU=8000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./NOKIA1100_demo.lst -std=gnu99 -MMD -MP -MF .dep/NOKIA1100_demo.o.d NOKIA1100_demo.c -o NOKIA1100_demo.o
    NOKIA1100_demo.c: In function ‘main’:
    NOKIA1100_demo.c:15: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness
    NOKIA1100_demo.c:37: warning: pointer targets in passing argument 1 of ‘nlcd_PrintF’ differ in signedness

    Linking: main.elf
    avr-gcc -mmcu=atmega8 -I. -gstabs -DF_CPU=8000000UL -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=NOKIA1100_demo.o -std=gnu99 -MMD -MP -MF .dep/main.elf.d NOKIA1100_demo.o —output main.elf -Wl,-Map=main.map,—cref -lm
    NOKIA1100_demo.o: In function `main’:
    NOKIA1100_demo.c:11: undefined reference to `nlcd_Init’
    NOKIA1100_demo.c:14: undefined reference to `nlcd_GotoXY’
    NOKIA1100_demo.c:15: undefined reference to `nlcd_PrintF’
    NOKIA1100_demo.c:19: undefined reference to `nlcd_GotoXY’
    NOKIA1100_demo.c:21: undefined reference to `nlcd_Print’
    NOKIA1100_demo.c:22: undefined reference to `nlcd_Print’
    NOKIA1100_demo.c:23: undefined reference to `nlcd_Print’
    NOKIA1100_demo.c:24: undefined reference to `nlcd_Print’
    NOKIA1100_demo.c:25: undefined reference to `nlcd_Print’
    NOKIA1100_demo.o:NOKIA1100_demo.c:26: more undefined references to `nlcd_Print’ follow
    NOKIA1100_demo.o: In function `main’:
    NOKIA1100_demo.c:32: undefined reference to `nlcd_GotoXY’
    NOKIA1100_demo.c:33: undefined reference to `nlcd_Print’
    NOKIA1100_demo.c:36: undefined reference to `nlcd_GotoXY’
    NOKIA1100_demo.c:37: undefined reference to `nlcd_PrintF’
    make.exe: *** [main.elf] Error 1

    > Process Exit Code: 2
    > Time Taken: 00:00

    Chiper

    Строка: NOKIA1100_demo.c:11: undefined reference to `nlcd_Init’
    означает, что не подключена библиотека, и соответственно, вызываемая функция неопределена.

    Надо подключить библиотеку. Я это делаю так:

    В дереве проекта (справа со списком файлов проекта) в строке Source Files щелкаю правой кнопкой, выбираю пункт меню Add Existing Source Files и выбираю файл nokia1100_lcd_lib.c.

    Теперь щелкаю в строке Header Files, выбираю пункт меню Add Existing Header Files и выбираю файл nokia1100_lcd_lib.h. Повторяю процесс и добавляю файл nokia1100_lcd_font.h.

    Все, все работает.

    -Валера-

    -Валера-

    У меня в дереве проекта после щелчка правой кнопкой кнопкой мыши — нет строк Add Existing Source Files, Header Files, Add Existing Header Files но в дереве проекта ВСЕ файлы прикрепленны. Но… ПРИЧИНА НАЙДЕНА .
    Достаточно было в файле программы заменить расширение библиотеки с .h на .с ( строка 5) как — все заработало. Большое спасибо за помощь, на сегодня все — буду отбиваться ( на работу однако:)).

    Chiper

    У меня в дереве проекта после щелчка правой кнопкой кнопкой мыши — нет строк Add Existing Source Files, Header Files, Add Existing Header Files но в дереве проекта ВСЕ файлы прикрепленны.

    Странно… А вы точно в AVR Studio програмите?

    -Валера-

    Приветствую.
    У меня компилятор — Winavr , не студия. Пробовал ее установить-по умолчанию файлы проекта Assembler, а мне нужно Си. Знаю что как-то можно приаттачить и Си, но … Установил Winavr и успокоился:)
    Дисплея у меня нет-попробовал запустить его в Протеусе- чегой-то тормоза ужасные — от момента запуска симуляции до момента инициализации дисплея проходит 22 сек. и до момента инициализации на экране мусор, затем начинается отрисовка текста — НО зеркально и с нижнего левого угла. Может модель в Протеусе глючная (других-нет).

    Отсюда вопросы: пробовали в симуляторе «прогнать» LCD ? Какие есть соображения по данной проблеме ?

    В любом случае завтра поеду за дисплеем-попробую в железе.

    Chiper

    У меня компилятор — Winavr , не студия. Пробовал ее установить-по умолчанию файлы проекта Assembler, а мне нужно Си. Знаю что как-то можно приаттачить и Си, но … Установил Winavr и успокоился:)

    Я сначала установил AVR Studio, а потом WinAvr. Все зацепилось автоматом. Теперь, когда создаешь новый проект, на выбор предлагается создать проект на ASM или на AVR C.

    Отсюда вопросы: пробовали в симуляторе «прогнать» LCD ?

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

    Какие есть соображения по данной проблеме ?

    Так как Протеусом пользуюсь очень редко, то даже и не знаю, что предложить.

    -Валера-

    Приветствую.
    Небольшой отчет о проделанной работе-приобрел пару дисплеев Nokia 1100 ( а заодно и парочку 1110i — оригинал и китай — есть мысль использовать ИХ, цена смешная + есть разъем + подсветка).
    На 1100 распаялся прям на шлейфе-ничего не отвалилось, все надежно держится, в общем все сразу заработало. Есть вопросы — а как без них 🙂

    — при включении происходит очистка экрана ( прибл. 14 сек) затем отображается текст ( все корректно), можно ли это время уменьшить ? От чего оно зависит ? Понимаю, что можно выкл. LCD чтобы мусор на наблюдать, но 14 сек прийдется выждать. Пробовал поиграть с частотой тактирования от 1 до 16 мГц-от частоты зависит время очистки и вывода текста. Какова причина ? Ведь _delay_ms(); указывает на количество милисек., а не кол-во тактов ?

    — на демонстрационном видео обновление экрана происходит сверху вниз-ПОСТРОЧНО, а у меня «построчно —> банками». Вопрос: где в программе это реализованно ? ( Реализованно ли? Если не сложно-дайте пример реализации).

    — на какой частоте у Вас работает МК ?

    P.S.
    Даташит на PCF8814 «курить» начал, но пока не в затяжку, да — 1110i работает, хотя где-то слышал, что контроллер там только схож по командам с PCF8814, а какой именно 🙁

    Chiper

    при включении происходит очистка экрана ( прибл. 14 сек) затем отображается текст ( все корректно), можно ли это время уменьшить ?

    Даже и не знаю. У меня не получилось, хотя я долго пытался.

    Понимаю, что можно выкл. LCD чтобы мусор на наблюдать, но 14 сек прийдется выждать.

    У меня очистка занимает порядка 6 сек.

    Пробовал поиграть с частотой тактирования от 1 до 16 мГц-от частоты зависит время очистки и вывода текста. Какова причина? Ведь _delay_ms(); указывает на количество милисек., а не кол-во тактов?

    Дисплей очищается по «8-пиксельно» в «банках». Т.е, очищается 8-пиксельный столбец 0-го банка, затем первый столбец, затем 3, и т.д. И так до 96-го. Потом повторяем туже процедуру для 1-го банка, затем для 2 и т.д.

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

    Курил даташит, но встроенной команды очистки экрана не нашел.

    на какой частоте у Вас работает МК ?

    8Мгц от встроенного генератора.

    на демонстрационном видео обновление экрана происходит сверху вниз-ПОСТРОЧНО, а у меня «построчно —> банками». Вопрос: где в программе это реализованно ? ( Реализованно ли? Если не сложно-дайте пример реализации).

    В смысле где реализовано? в библиотеке — файл nokia1100_lcd_lib.c в нем функции
    void nlcd_Putc(unsigned char c) -вывод символа в текущее место
    void nlcd_Print(char * message) — вывод строки на основе nlcd_Putc

    Chiper

    да — 1110i работает, хотя где-то слышал, что контроллер там только схож по командам с PCF8814, а какой именно

    хз. за неимением 1110i как он работает и из чего состоит не могу сказать…

    Проверил в протеусе все работает А чтоб работало быстрее задержки в программе надо уменьшить

    Chiper

    Протеус не отображает реальной обстановки. То что работает в Протеусе, далеко не всегда работает в реале. И наоборот.

    -Валера-

    Проблема решена-действительно нужно уменьшить программно задержку тактирования LCD и все работает, инициализация дисплея проходит за 2 секунды 🙂

    Chiper

    Это в отклонение от даташита…

    -Валера-

    Полностью согласен, но ждать 22 сек. инициализации LCD — это слишком, а так работает .

    Chiper

    У меня не пошло. Если уменьшить задержку, то вообще ничего не выводится… 🙁

    -Валера-

    Уменьшил задержку для

    Chiper

    Я понял. Я тоже пытался уменьшать эту задержку. У меня, если ее установить менее 2 мс, то на экран уже ничего не выводится… Поэтому, если у тебя можно установить меньшую задержку, то это гуд…

    P.S.: Вот одна из ситуаций, где Протеус показывает нормальную работу даже при нулевой задержке, а на реальном железе все работает несколько иначе…

    -Валера-

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

    Chiper

    -Валера-

    Привет.
    Что-то с выводом графики у меня «засада» — прошу помочь (если есть желание 🙂 — дать,так сказать, небольшой ликбез). С Выводом великого русского языка на дисплей -полный порядок — от А до Я.

    Chiper

    Помогу чем могу. В чем проблема возникает?

    -Валера-

    Привет. Извиняюсь за задержку в ответах-не всегда хватает свободного времени на хобби 🙂 . С выводом графики в данный момент ситуация такова: задача №1-вывести на экран графический значок произвольной формы 20х30 .
    Код:
    static const char antena[] =
    < 0x03,0x0F,0x3C,0xF0,0xC0,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xC0,0xF0,
    0x3C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x3C,0x70,0xFF,0xFF,0xFF,0x70,
    0x3C,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00>;

    Chiper

    Дас-с-с… Надо подумать…

    Chiper

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

    Chiper

    Блин, не могу отладить вторую версию библиотеки с графическими функциями… экран глючит безбожно. Не сгорел ли.

    Но процесс написания идет полным ходом.

    Кстати, ты в Протеусе этот экран отлаживал? В моем Протеусе (7.7 Sp2) этого экрана нет. Есть от Nokia 7110, но там немного все по другому…

    -Валера-

    Вывел графику 16х240 — этим разрешением все и ограничилось, я так понимаю, что нужно изменить тип переменной с unsigned char на unsigned int ?! И массив с изображением нужно переносить как минимум в программую память ( если разрешение больше 16х250 — ОЗУ переполняется) , а вообще есть мысль использовать внешнюю память на 24С64 и ей подобных, но это пока в перспективе 🙂 Рад, что создание библиотеки сдвинулось с мертвой точки, со своей стороны могу оказать посильную помощь например в тестах на железе. Или могу выслать, так сказать — для расширения кругозора, LCD Nokia 1110i с коннектором ( есессно-безвозмездно, только не знаю куда и как )
    По поводу экранов — остался еще один 1100 — пока лежит (первый сгорел по причине запитывания его от 3,3 в — на 1100 питание выше 2,9 v -подавать нельзя!) , а юзаю 1110i — мне в нем все нравится 🙂 и программу тестирую на нем. У меня тоже стоит Proteus 7.7 -модель на Nokia 1100 для него качал отдельно, по-моему с kazus.ru, сейчас проверил-все работает, есть небольшое подтормаживание временами, но это терпимо.

    Chiper

    я так понимаю, что нужно изменить тип переменной с unsigned char на unsigned int ?!

    Зачем? Ничего не надо.

    И массив с изображением нужно переносить как минимум в программую память ( если разрешение больше 16х250 — ОЗУ переполняется) , а вообще есть мысль использовать внешнюю память на 24С64 и ей подобных, но это пока в перспективе 🙂

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

    Рад, что создание библиотеки сдвинулось с мертвой точки

    Сегодня вечером доработаю вторую версию библиотеки. Уже реализована работа с пикселями.

    Или могу выслать, так сказать — для расширения кругозора, LCD Nokia 1110i с коннектором ( есессно-безвозмездно, только не знаю куда и как )

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

    первый сгорел по причине запитывания его от 3,3 в — на 1100 питание выше 2,9 v -подавать нельзя!

    Ну не знаю, мой пока работает (тьфу-тьфу) от 3.3V, по схеме, что я выше приводил. Контакт плохой был. Сейчас переделал конструкцию немного.

    модель на Nokia 1100 для него качал отдельно, по-моему с kazus.ru, сейчас проверил-все работает, есть небольшое подтормаживание временами, но это терпимо

    Понял, щас поищу…

    Максим

    У меня возникла некоторая проблема с использованием библиотеки.
    Цель устройства — отображать текст, пришедший в пакете из 128 байт по сети на экран и порождать цветомузыку с пищанием и проч. (мониторинг состояния серверов). Решил сделать на V-USB как устройство HID и передавать данные через FEATURE REPORTS. Оптимально для пересылки 128 байт в репорте + на экране nokia 1100 с Вашей библиотекой отображается как раз 128 символов.
    Подключил LCD к atmega16, текст выводится, но медленно. Согласно комментариям выше, уменьшил задержки в init до минимума + в nlcd_SendByte до 130us (дальше действительно срывается). Пишу и тестирую только в железе. Стало работать на порядок быстрее.
    Далее настроил V-USB HID (по аналогии с примером hid-data), устройство определяется в системе без проблем. Написал на delphi хост программу, используя freeware hid component, которая без проблем пишет и читает eeprom моего устройства. По крайней мере, со скоростью 1 раз в секунду (быстрее мне точно не нужно, хотя по спецификации, должно работать раз в миллисекунду 🙂 ).
    Далее начинаются проблемы. Поскольку, USB весьма требователен к задержкам (не смог найти реальные цифры таймаутов, но факт), при попытке вывести текст на экран сразу по принятию фрейма, устройство выпадает на как минимум период 16.64 ms (130us * 128 bytes). Визуально это еще дольше (до двух-трех секунд). Выпадает — в смысле, в это время я не могу послать еще пакет данных, мне возвращается ошибка (79) SET FEATURE ERROR. Согласно USB шине, устройство еще не успело отсоединиться или отсоединилось, но не прошла переэнумерация (не срабатывает событие на отсутствие устройства). После того, как текст отображен, устройство снова доступно для использования, хендл не теряется. Если в программе происходит задержка еще на 10ms (например, моргнуть светодиодом), устройство тупо отваливается от хоста и после переэнумерации его не видно. На хост системе Windows XP 32-bit SP3.
    Попробовал запустить таймер по переполнению чтобы выводить текст асинхронно от передачи данных, раз в 10 секунд из eeprom. Работает абсолютно также, до тех пор, пока не отобразятся все 128 символов, устройство недоступно для следующей передачи данных (из-за _delay_us(130).

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

    1. Не использовать HID, подвесить FT232 и гнать данные через виртуальный COM порт. Там вроде нет таких проблем с задержками.
    2. Использовать более «быстрый» дисплейчик (посоветуйте?). Возможно, дисплеи с аппаратным SPI будут быстрее работать.
    3. Использовать отдельный МК для вывода текста на дисплей, подключив оба по USART или через RF-Link. В этом случае, аналогично 1, исчезнут проблемы с задержками, просто асинхронно пару раз в секунду сливать полученный фрейм отдельному контроллеру (например, tiny2313).
    4. Другие варианты.

    Буду очень признателен за ответ.
    Спасибо!

    Chiper

    Интересная проблема. Но вот ее решение зависит от многих параметров.

    Наиболее бюджетный способ решения — это приведенный вами пункт 1. Если у вас есть уже дисплей от Nokia 1100 и вы очень ограничены в бюджете, то применение FT232 будет выходом из положения.

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

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

    Кстати, практически во всех более менее крупных проектах, которые используют V-USB обратил внимание, что для работы с шиной USB применяется отдельный контроллер (обычно ATMega8 — его ресурсов вполне хватает, а стоит он довольно дешево), а для всей остальной работы — другой, не обязательно даже из той же серии.

    Поэтому выбор способа решения вашей проблемы — это учет кучи факторов.

    Про дисплеи… Что посоветовать применить я не знаю. У меня в наличии только два типа дисплея: от Nokia 1100 и на базе HD44780. Вполне возможно вам подойдет бюджетный дисплей от Nokia 3310, он побыстрее будет.

    В свое время присматривался к вот такому дисплею: http://lcut.us/11n и вот такому http://lcut.us/11o. Правда, пока не приобрел ни один из них и что либо конкретное по их работе сказать не могу.

    Так что как поступить — решать вам. Я бы скорее всего поступил так: по уменьшению приоритетности):
    — применил отдельный контроллер для работы с V-USB и другой для всего остального
    — применил FT232
    — применил другой экран
    — применил более мощный контроллер (ARM например)

    Максим

    Спасибо за ответ.
    В принципе, в средствах не ограничен, хотя, отмечу, что FT232 стоит около 230 руб в Питере (чувствую, надо пачку из Китая заказать), а дисплей от nokia 3310 — 80-90 руб 🙂 ARM, мне кажется, для этих целей будет излишен, да и jtag у меня отсутствует. Скорее всего, остановлюсь сейчас на втором контроллере, благо tiny2313 штук 5 еще есть. Если не поможет, подцеплю дисплейчик 3310. Раз уже написан код для HID, буду дожимать проект до конца в этом виде 🙂

    Источник

    Adblock
    detector