Автор Тема: LCD Displays  (Прочетена 18559 пъти)

Xenion

  • Робо-Новак
  • *****
  • Публикации: 15
    • Профил
LCD Displays
« -: Август 31, 2009, 12:43:14 pm »
Здравейте искам да ви попитам дали някой знае как точно работат LCD-tata и да разясни и да каже откъде мога да си закупа и колко стурват.
Никой въпрос неможе да устой на постоянното мислене!

Vexorian

  • Заклет Роботостроител
  • *****
  • Публикации: 305
    • Профил
LCD Displays
« Отговор #1 -: Август 31, 2009, 05:45:23 pm »
Какъв?
Графичен или обикновен с редове?
И с двата вида съм работил, като от текстовия съм използвал 2x16 Alpha Numeric(2 ред с 16 символа). Можеш да си закупиш от Комет Електроникс.
Моят беше AC-162BYILY-H от Ampire. Управляват се доста лесно. Обикновенно на 1во и 2ро краче се подават 5V(1во е маса), на трето с напрежение се управлява видимостта. На 4то се избира типа данни(дата или инструкция),  на 5то се избира четене или запис на данни, 6то се използва за вкарване на данни(подават се няколко положителни сигнала за определено време. От 7-14 се подават 8-битови данни. На 15 и 16, опционално се подават 5V ако имаш подсветка. Ако данните са символи, то те се записват на съответния ред, и се показва буква или цифра, и минава на следващата(курсора). Функцийте обикновено променят местоположението на курсора, посоката, изтриват дисплея и т.н.
http://home.comet.bg/datasheets/LCD/AC-162B.pdf
Разгледай подробно този datasheet. Тук са описани функциите и начина на инициализация на дисплея.
Графичния се управлява горе-долу по същия начин, с тази разлика, че се нуждае от допълнително отрицателно напрежение, което обикновено е вградено в самия дисплей (-10V). Аз си бях взел ето този дисплей http://home.comet.bg/datasheets/LCD/AC-162B.pdf
Принципа на управление на този дисплей е "попълване" на редове(Y) и колони(X). Попълват се хоризонтално, като един байт, попълва един ред от колоната(8 точки), и минава на друга. Z е разположението на курсора, или откъде да започва попълването.
Самата памет е разделена на две части - лява и дясна с 64x64 точки. Съответната част се избира, като се подаде високо ниво на CS1 или CS2. Инструкциите са горе-долу същите.
Бих ти показал код, но е на асемблер и е на PC-то... и е за ПИК :-D Ще видя ако някои в София може да ми го прати и да го преведа на C :) Засега разгледай описанията, и потърси малко в нета, има много проекти свързани с това :)
Викторио Семир Ел Хаким, София 20г.
Аналогова/Цифрова електроника, програмиране
I\'m watching your ass! :D

Xenion

  • Робо-Новак
  • *****
  • Публикации: 15
    • Профил
LCD Displays
« Отговор #2 -: Септември 01, 2009, 12:05:48 pm »
Добре може ли да ме светнеш.Тези въпроси много ме търмозят за това ти ги задавам тъй като си се занимавал.
1.Какво означава да се записва и чете от дисплея ,не трябва ли само да се записва?
2.Трябва ли да се сложат ограничаващи резистори на захранването и входовете за данни.
3.Входовете за данни се управляват с аски код?
4.Възможно ли е да се изчиства екрана без да се използва инструкция.
5.Възможно ли е да се слагат картинки?
6.Как се преминава от режим на инструкция в другият режим?
PS. Благодаря за информацията :) :clap:  :clap:  :D
Никой въпрос неможе да устой на постоянното мислене!

Vexorian

  • Заклет Роботостроител
  • *****
  • Публикации: 305
    • Профил
LCD Displays
« Отговор #3 -: Септември 01, 2009, 03:08:18 pm »
1. Естествено, че може да се чете. Примерно може да искаш да знаеш състоянието на дисплея, или да разбереш позицията на курсора, или да прочетеш кода на съответния символ.
2. Не
3. Да, стандартни ANSI 8-битови символи
4. Не, защото самият процес нулира всяка точка от дисплея и той се командва от контролера, вграден в дисплея.
5. В графичния да.... ако го накараш  :lol: Тоест, това си е твое задължение да измислиш алгоритъма
6. Чрез крачето RS. 0V за инструкции, високо ниво за данни (Umax; 1ца)

Ето алгоритми за текстово LCD -
Така се инициализира:
1. Изчакваш над 30 ms, за да се зареди дисплея.
2. Избираш регистъра за инструкции, т.е. ниско ниво на RS
3. Избираш колко голяма да ти е магистралата - 4 бита или 8 бита, като ипращаш съответния код (погледни в описанието инструкцията "Function Set". Това ти позволява да използваш само горните 4 крачета (DB4-DB7), или всички. Допълнително, ако използваш всички, можеш да зададеш големината на символите и броя редове, ако не, изпращаш само горните 4 бита.
4. Изчакваш над 5 ms
5. Крачето Е го даваш на високо ниво за 1 us и после го връщаш на ниско.
6. Изчакваш над 160 us
7. Повтаряш 5
8. Повтаряш 6
9. Изпращаш инструкцията "Function Set" отново, ако си избрал 4-битов вариан, като този път изпращаш и долните 4 бита, чрез специална подпрограма.
10. Изпращаш инструкцията "Display ON/OFF Control", като D,C и B са 0
11. Изпращаш инструкцияата "Clear Display"
12. Повтаряш 4
13. Изпращаш "Display ON/OFF Control", като D е 1, а другите ти си избираш

Подпрограма за изпращане на инструкция:
Ако си във 8-битов режим:
0. Избираш изпращане на данни, като подаваш 0 на R/W
1. Вкарваш данните на DB0-DB7
2. Избираш регистъра за инструкции (0 на RS)
3. Даваш Е на високо ниво за 1 us, после го връщаш 0
4. Чакаш 50 us(5ms за изчистващата инструкция)
4.1 Опционално, може периодично да проверяваш Busy флага, вместо да чакаш, като използваш подпрограма за четене на данни. 1 означава, че дисплея е зает, 0 - свободен.

Ако си във 4-битов режим:
0. Избираш изпращане на данни, като подаваш 0 на R/W
1. Избираш регистъра за инструкции (0 на RS)
2. Вкарваш горните 4 бита на DB4-DB7
3. Извършваш далаверата с Е отново
4. Вкарваш долните 4 бита на DB4-DB7
5. Повтаряш 3
6. Чакаш 50 us(5ms за изчистващата инструкция)

Подпрограмата за изпращане на данни е същата като тази за инструкциите, с тази разлика, че RS = 1

Подпрограмата за четене на иструкции(и Busy флага)
8-битов вариант
0. Избираш четене на данни, R/W = 1
1. RS = 0
2. Пак даваш сигнал на Е
3. Четеш данните на DB0-DB7

4-битов
0. Избираш четене на данни, R/W = 1
1. RS = 0
2. Пак даваш сигнал на Е
3. Четеш долните 4 бита от датата на DB4-DB7
4. Повтаряш 2
5. Четеш горните 4 бита от датата на DB4-DB7

Подпрограмата за четене на данни е същата, само RS = 1

По-късно ще напиша алгоритъм и за графичния.
Викторио Семир Ел Хаким, София 20г.
Аналогова/Цифрова електроника, програмиране
I\'m watching your ass! :D

Xenion

  • Робо-Новак
  • *****
  • Публикации: 15
    • Профил
LCD Displays
« Отговор #4 -: Септември 01, 2009, 05:57:48 pm »
Мерси много за обстойния отговор :)  :clap:   :clap:
Никой въпрос неможе да устой на постоянното мислене!

Xenion

  • Робо-Новак
  • *****
  • Публикации: 15
    • Профил
LCD Displays
« Отговор #5 -: Септември 02, 2009, 09:57:12 am »
Само още няколко въпроса  :)
1.Винаги ли трябва да се прави инициализация преди да се пише буква или само при вкл. на дисплеа?
2.Трябва ли да се дига Enable при изпращането от ДБ0-7,не може ли асинхронно да се управлява ?
3.Като  разгледах блоковата схема на инициализацията видях ,че една от стъпките показва за ,че може да се избере I/D (Increment /Decrement).
Може ли да разясниш как може да се инкрементира без всеки път да се подава съотвестващия шестнайсетичен код на информационните крачета
PS Вече май досаждам  :D
Никой въпрос неможе да устой на постоянното мислене!

Vexorian

  • Заклет Роботостроител
  • *****
  • Публикации: 305
    • Профил
LCD Displays
« Отговор #6 -: Септември 02, 2009, 01:00:32 pm »
1. Само след включване на дисплея
2. Трябва да се дига Е, иначе дисплея няма да знае кога има нови данни
3. Не разбрах много добре въпроса ти... в единия случай се увеличава адреса на курсора с всеки нов символ, в другия случай намалява..
Викторио Семир Ел Хаким, София 20г.
Аналогова/Цифрова електроника, програмиране
I\'m watching your ass! :D

Xenion

  • Робо-Новак
  • *****
  • Публикации: 15
    • Профил
LCD Displays
« Отговор #7 -: Септември 02, 2009, 04:06:07 pm »
Мерси
Никой въпрос неможе да устой на постоянното мислене!