Меню

 

Форум

Список форумов :: ЖК-индикаторы :: 16S2D по двум проводам
prikupets
23 ноября 2005 17:31

Id сообщения: 1028
16S2D по двум проводам
Уважаемые разработчики!
С помощью форума и замечательной переписки г-на Петухова и Pa5ha, я запустил 16S2D в 4 bit режиме. Это требует 6 ног контроллера. Но все равно ножки контроллера на ветер бросать не хочется, а ограничится двумя ногами. Я пытался сделать 2-wire интерфейс по мотивам статьи Mike Predko:

http://www.rentron.com/Myke1.htm
или
http://www.myke.com/lcd.htm

но это не заработало. Верхняя строка дисплея заполняется черными квадратиками.
Это должно работать или какая-то особенность индикатора мешает этому (напр. фича с удержанием A0 - иначе сброс, о которой Вы писали). Если нет, может Вы порекомедуете свой способ 2-wire подключения. Если ничего не поможет, буду делать I2C соединение с отдельным контроллером, отвечающим за LCD.

Петухов
23 ноября 2005 18:30

Id сообщения: 1029

В 4-х битном режиме, действительно вмешивается фича обнуления счётчика полубайт в индикаторе. Я бы рекомендовал подключить индикатор в 8-ми разрядном режиме, удлинив сдвиговый регистр (потребуется вероятно две микросхемы регистра).

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

PS. Сдвиговый регистр должен быть с выходами типа "открытый коллектор", иначе возможен выход регистра из строя в процессе сдвига информации (на объединённых пинах будут разные уровни напряжений).
Петухов
23 ноября 2005 18:37

Id сообщения: 1031

Кажется я не просёк какой там регистр применялся. Замыкания не будет. На примечание в предыдущем сообщение внимания не обращать :-)
Совет удлинения регистра до 10-ти (8 данных + A0 + E) бит остаётся в силе.
Гость
24 ноября 2005 00:47

Id сообщения: 1033

спасибо, попробую. А что если сделать по 3-wire (CLOCK, DATA, A0) - будет работать ? Т.е. A0 выставляем сразу, а затем вдвигаем E с D4-D7 ? Лишний провод конечно, но теоретически работает такая схема или я не все фичи учел ?
Петухов
24 ноября 2005 14:19

Id сообщения: 1034

Если не дёргать A0 (и RW) между записью двух полубайтов - будет работать.
prikupets
02 декабря 2005 18:30

Id сообщения: 1054

Попробывал отдельно A0 - не работает(вылезает мусор, буквы "я" при инициализации), потом верхняя строка закрашивается контрастной полосой. А вот если E вывести отдельно, то работает. Задержки большие, по 1 сек. для отладки делал.

Кажется проблема с тем, что когда E(1) вдвигается в регистр, DATA еще активен, и выход E от LCD становится 1. LCD пытается зафиксировать полубайт, а состояние D4-D7 от регистра еще не установилось.

Может скажете, в чем дело м.б. ?
prikupets
02 декабря 2005 18:32

Id сообщения: 1055

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

Петухов
03 декабря 2005 04:12

Id сообщения: 1056

Ну что же, у меня выдалось полчаса скуки, давайте потратим их на анализ применяемой Вами схемы. Вообще-то это должны были сделать Вы когда решили применить эту схему. Или тот парень, который так неосмотрительно посоветовал её всем :-)
Всё дальнейшее рассуждение строится для схемы "http://www.myke.com/lcd.htm" с доработкой: пин A0 - напрямую на процессор.

Итак.
1. Очевидно, процесс обнуления регистра никаких сложностей не таит: E=0, индикатор не активен.

2. Процесс записи всех битов в регистр, кроме последнего (который разрешает E) - аналогично пункту 1, ничего интересного.

3. Рассмотрим подробнее процес записи в регистр бита, разрешающего сигнал E.
В момент записи/сдвига информации в регистре на входе Data может быть как уровень 0, так и уровень 1 (это младший бит записываемого в индикатор полубайта). В случае 0 всё работает по плану - сигнал E остаётся заблокированным, индикатор не активен. А вот в случае записи 1 всё сложнее:
после перепада 0->1 на входе Clock информация в регистре начинает сдвигаться;
этот процесс (сдвига) занимает всегда немного разное время и, более того, для всех выводов регистра это время чуть разное;
уровень 1 на входе Data регистра обычно необходимо удерживать какое-то время (по спецификации на регистр сдвига, иногда оно равно 0, но не всегда);
далеко не все управляющие процессоры могут снять уровень 1 с вывода Data достаточно быстро (для чего - см. чуть далее).
Значит может возникнуть ситуация, когда на выводе Data всё ещё 1, на выводе регистра с диодом уже 1, а процесс сдвига в регистре ещё не завершён. Т.е. возникает импульс записи в индикатор совершенно произвольных данных!! (На диаграмме на той страничке этому моменту отвечает момент начала последнего импульса Clock. Хотя там и не нарисован импульс E, но, как я указал выше, он может быть!)
Более того, учитывая конечную скорость управления регистром и индикатором, такой импульс будет всегда при записи в индикатор младшего бита в полубайте =1! Этот импульс можно убрать только мгновенно (существенно быстрее времени сдвига в регистре) переключив Data в 0 сразу же после перепада 0->1 на Clock, что невозможно (и часто недопустимо для управления регистром).
Далее, при выдаче потом нормального импульса E=1 через вывод Data, он окажется вторым!!
Итак, при записи в индикатор любого полубайта с 1 в младшем разряде реально произойдёт запись двух полубайт, первый из которых может быть произвольным и для которого совершенно не соблюдаются временные требования по работе с индикатором.

Согласитесь, о нормальной работе говорить не приходится.

4. Формирование сигнала E=1 с линии Data трудностей не вызывает (за исключением учитывания влияния интегрирующей цепочки из резистора 1кОм и входной ёмкости индикатора).

5. Дальнейшие записи в регистр (обнуление) - это повтор пункта 1, опять никаких сложностей.

Что имеем в результате.
При записи в индикатор любого полубайта с 1 в младшем разряде реально произойдёт запись двух полубайт, первый из которых может быть произвольным и для которого совершенно не соблюдаются временные требования по работе с индикатором.
Вердикт: схема тухлая.

Решений как всегда несколько.
1. Писать в индикатор только полубайты с 0 в младшем бите :)
2. Понавесить на резистор и диод всяких замедляющих цепей, чтобы убрать паразитный импульс на выводе E индикатора.
3. Освободить младший бит регистра, чтобы в него всегда можно было писать 0 (продвинув шину данных ближе к разрешению E и удлинив регистр при необходимости).
4. Не мучиться и перевести индикатор в 8-ми битный режим работы (удлинив регистр).
Можно и ещё придумать, но последние 2 способа вроде оптимальные, не находите?


PS. Учтите, я ведь даже не схемотехник (которому всё вышенаписанное должно быть очевидно), а программист. Ну почему все так любят использовать "левые" схемы, не умеют их анализировать/разрабатывать, а потом удивляются что они не работают?!
Это не претензия к Вам, уважаемый "prikupets", конечно.


Код подтверждения:
Для зарегистрированых:
Логин
Пароль
Забыл пароль Регистрация Поиск


Телефоны офиса компании МЭЛТ:
тел: (495) 662-4414
e-mail: sales@melt.com.ru
ICQ: 221-319-648
Skype имя: melt-mos

Фактический адрес: 111024, Москва, Андроновское шоссе, д.26

Adress: 111024, Moscow, Andronovskoe highway, 26.

Адрес для корреспонденции: 109145, г. Москва, а/я 37, ООО "МЭЛТ".

Address for mail:  109145, Moscow, post box 37, MELT Ltd..

Продукция | Печатные платы | Сборочно-монтажные услуги | Документация | Цены | Новости | Контакты | Купить | Форум
создание - prorock web-soft