Гость 30 августа 2007 21:18
Id сообщения: 4671 |
МТ-12232B Помогите новичку У меня совсем нет опыта работы с графическими ЖКИ. Смотрю PDF ку и не могу понять в какой последовательности давать управляющие сигналы чтоб хоть что-то отобразить.
Если можно какой нибудь независимый от языка программирования пример. Как инициализировать устройство и как начать туда хоть что-нибудь выводить.
У меня есть небольшой опыт программирвоания микроконтроллерров C51 на компиляторе С.
Заранее спасибо!
|
|
|
Петухов 30 августа 2007 21:54
Id сообщения: 4672 |
Вот пример программы по выводу полной картинки на данный индикатор на языке С: http://melt.com.ru/work/display/330#programms
|
|
|
Гость 31 августа 2007 12:11
Id сообщения: 4685 |
Почитал, но возник вопрос. а для какого компилятора написано, и как то управляющее устройство подключается к интерфейсу данного индикатора и что вообще из себя оно представляет?
|
|
|
Петухов 31 августа 2007 14:03
Id сообщения: 4689 |
Пример должен компилиться любым компилятором языка С, никаких специальных или редких возможностей в примере не используется.
Управляющее устройство может из себя представлять что угодно (в том числе и микроконтроллер С51), лишь бы для него был компилятор с языка С. И возможность управлять десятком выводов, подключаемых к индикатору. Как именно подключать индикатор к управляющему устройству в примере не описано по причине наличия множества вариантов такого подключения. Вот как выберите как подключать индикатор, так и опишите структуру LCD - как раз она описывает как именно подключен индикатор.
Вы же сами просили максимально абстрактный пример ;) Этот пример не совсем абстрактный, но язык С Вы сказали что понимаете.
|
|
|
Гость 31 августа 2007 18:00
Id сообщения: 4698 |
Ок, а ваш вариант описание структуры LCD взглянуть где-нить можно? и еще, там применяется некая процедура Delay() которую не понимает мой компилятор uVision.
просто в коде нигде явно ссылок на другие файлы заголовков или других файлов нет. Вот я и думаю, откуда-нибудь берется структура LCD и процедура Delay?
|
|
|
CAHTA_1939 01 сентября 2007 14:54
Id сообщения: 4711 |
предоставляемый МЭЛТ"ом пример программы, является кодом написанный на псевдо языке. похожим на С. для того чтобы усе работало нужно обозначить переменные и ф-цию Delay...
я только вчера закончил переделку этого кода для микроконтроллера msp430f149... но он пойдет для любого мк семейства msp430...
|
|
|
Гость 02 сентября 2007 13:02
Id сообщения: 4738 |
Ну вот у меня такая сложность. после сброса, на экране появляется произвольная картина. преимущественно заполненния пикселями, и редкие пиксели не засвечены. Я так полагаю - надо сбросить содержимое ОЗУ. Как это сделать?
И вот еще другая сложность: допустим, я вывожу подряд 10 байтов в любой странице. Допустим с нулевого ее столбца. Получается такя картина: может вывестись например не 10 последовательных байт, а 11, причем один из байтов самопроизвольно дублируется. Происходить это может в такой ситуации: например я вывел 5-й байт и теперь начинаю цикл вывода 6-го. Перед непосредственно отображением 6-го у меня дублируется еще раз 5-й, становясь фактически 6-м а шестой уже выводится седьмым по очереди. Я не устанавливаю каждый раз перед выводом очередного байта номер столбца а расчитываю на автоинкремент счетчика стобцов. Что это может быть и как с этим бороться?
|
|
|
CAHTA_1939 02 сентября 2007 17:12
Id сообщения: 4742 |
у меня при инициализации весь экран закрашен... хотя былобы очень удобно иметь команду очистки каждого кристала... =)
|
|
|
Петухов 02 сентября 2007 18:20
Id сообщения: 4744 |
После включения индикатора (и инициализации) содержимое ОЗУ может быть любым - его никто не очищает. Вот Вы и видите его как произвольную картинку. Запишите свою информацию - и всё. Специальной команды для очистки ОЗУ индикатора нет. Ну не предусмотрели разработчики кристаллов такую команду, тут уж ничего не поделаешь.
Дублирование байтов скорее всего из-за несоблюдения временных параметров сигналов (особенно сигналов E1 и E2). Проверьте ещё раз. Ещё возможна инверсная подача сигналов E1 и E2 - при этом тоже может возникать дублирование байтов. Автоинкремент в индикаторах работает. Не забывайте сбрасывать режим ReadModifyWrite, если его используете - при включенном режиме некоторые команды не выполняются.
|
|
|
Гость 02 сентября 2007 19:52
Id сообщения: 4747 |
судя по таблице времен времена для записи имеют ограничения по минимуму. т.е. я могу практически выставлять задержки сколь угодно большие. так вот у меня индикатор делает все тоже самое как при критически малых временах так и при абсюлютно большим. скажем задержку могу ставить хоть секунду. будет все тоже самое делать что в случае скажем 20 нсек. тем самым я перекрываю все минимумы. по Е1 и Е2 экспериментировал, что так, что этак все одно. На самом деле, очень солабо документированые изделия. Т.е. начиркано пару диаграмм, и оставлено на энтузиазм и ползания по форумам в поисках истины которую вот уже которрый день никак не найду. Просто объективно, сравнивая с документацией любого иностранного производителя, документация по этим индиаторам - ребус.
|
|
|
Петухов 02 сентября 2007 20:16
Id сообщения: 4748 |
Про времена Вы совершенно правы.
Последовательность подачи сигналов тоже соблюдается? И необходимые сигналы правильно удерживаются всё время цикла? Тогда пока больше мыслей у меня нет.
Про документацию, не ввязываясь в спор, скажу только, что нашей документации по моему мнению достаточно для работы с индикатором. Для данного индикатора вполне можно пользоваться любой иностранной документацией - индикатор является полным аналогом импортных (таблица аналогов здесь: http://melt.com.ru/work/371/430).
|
|
|
Гость 02 сентября 2007 20:44
Id сообщения: 4749 |
последовательность скопирована из вашего примера на С. сигналы удерживаются все время и даже больше, в некоторых экспериментах существенно дольше (до 1-й сек). специально максимально замедлил процессы все, чтоб отследить я мог бы грешить на порт, но по этому же порту у меня стоит другой микроконтроллер, который сообщается с моим основным устройством, которе в свою очередь управляет ЖКИ. т.е. сбоев в работе микроконтроллера нет. Вся схема работает идеально. фактически на ЖКИ наблюдается не что инное как дребезг. или что-то подобное.
|
|
|
Гость 02 сентября 2007 21:03
Id сообщения: 4750 |
дааааа. должен признать, у китайцев совсем плохои дела с документацией. хотя на то они и китайцы... очень надеюсь, что мир ожидает что-нибудь альтернативное более доделанное чем все китайское.
|
|
|
Гость 02 сентября 2007 22:08
Id сообщения: 4755 |
И всеж таки вопрос. Вот смотрю я на программу-пример и удивляюсь вашему ранее заданному вопросу относительно правильной последовательности команд. В примере на С вы выставляете данные на шину до выставления строба Е1 или Е2. Но в документации, на временной диаграмме однозначно видно - данные выставляются после строба записи. Как это следует понимать? учитывая, что программа не делает то чего от нее требуется, встает вопрос: ошибка в ней? но я заменил последовательность на ту, что в диаграмме указана и все равно не работает.
|
|
|
Петухов 02 сентября 2007 22:33
Id сообщения: 4758 |
Данные (с шины данных) пишутся в индикатор по спаду сигнала E1(E2). Но перед этим моментом они должны быть стабильны на шине как минимум 160нс. Длина импульса E1(E2) минимум 250 нс. Значит данные можно выставлять на шину данных как до фронта E1(E2), так и после (на 90нс после, если импульс максимально короткий =250нс). Но сигналы управления (A0 и R/W) должны быть выставлены до фронта сигнала E1(E2). На диаграмме нарисовано всё правильно: данные выставляются за время tDS до спада сигнала E1(E2), а уж после фронта это будет или до - не важно.
Так что и диаграмма и пример - правильны. Хоть и разные немного ;) Просто в примере мне показалось удобным данные выставить раньше формирования импульса E1(E2). Формально имею право, и Вы это понимаете, сами же выше сказали про времена.
|
|
|
Гость 03 сентября 2007 00:58
Id сообщения: 4764 |
парадокс заключается в том, что дребезг возникает из-за того, что оба фронта Е1(Е2) иногда выводят выставленные данные.т.е. это даже не дребезг. проверил я это таким образом, что до фронта выставил одни данные на шину сразу после фонта другие. выводятся либо вторые либо и первые и вторые. почему иногда оба фронта (подъем и спад) обновляют содержимое памяти при том что и автоинкрементный счетчик столбцов меняет значение столбца? единственное, что приходит в голову - переходной процесс при восхождении фронта строба дает большой перепад, что воспринимается как двойной фронт. однако я сомневаюсь, что быстротечный переходной процесс может быть больше времен требуемых для полного цикла обновления памяти.
так вот в голову приходит вариант о неисправности... но тогда обоих кристаллов контроллера? ибо как понимать такое поведение на обоих кристаллах?
|
|
|
Петухов 03 сентября 2007 01:16
Id сообщения: 4765 |
Смахивает на переколебание на фронте сигнала. Или на отражение фронта от дальнего конца цепи и опять таки колебательный процесс. Нет осциллографа чтоб посмотреть на фронт и спад сигнала? Или может быть провода длинные до индикатора? При 20нс временах даже 10 см может быть много. Попробуйте на сигналы E1 и E2 повесить конденсаторы пик по 300 (вторым выводом на GND), может помочь.
|
|
|
Гость 03 сентября 2007 02:00
Id сообщения: 4766 |
конденсаторы пробовали. от 56 пик и выше, не помогало. Видимо провода все таки. потому что щас упростил программу дальше некуда, при статических установках даю управляемый импульс. на Е2 все равно наблюдается дребезг. осцилограф есть, боюсь он не покажет такие колебания. по крайней мере их продолжительность на глазок никак не зафиксируется. а какого-то хтрого цифровика записывающего легенду процесса нет.
|
|
|
Гость 03 сентября 2007 15:31
Id сообщения: 4783 |
в итоге, укорачивание проводов дало результат. но всеж таки некоторые артефакты остались. будем работать. в любом случае, всем за содействие спасибо!
|
|
|