Введение

PC-ОС

БП

Дисплей

Координатор

Обобщение алгоритмов работы управляемых подсистем

Исходный текст управляющего кода можно взять здесь.

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

Индикатор

Информация принимается по интерфейсу rs232 в модифицированной версии КОИ-8, посылка должна содержать 16 байт и быть передана менее чем за 0.1с. В противном случае считается, что при передаче произошел сбой и принятая строка игнорируется. Также можно сбросить буфер приёма, передав специальный код 0xFF.

Правильно принятая строка копируется в видеобуфер.

Процедура обновления индикатора работает по таймерным прерываниям 2000 Гц. Каждое прерывание вызывает переключение группы анодов (матрица символа - 7x5 точек - пять групп по семь анодов в каждой).

Аноды включаются в соответствии со знакогенератором (находится в памяти программ) и данными в видеобуфере.

Если для данного знакоместа все пять групп анодов уже были отображены, происходит переход к следующей сетке. Таким образом, сетки переключаются 2000 / 5 = 400 раз в секунду.

Если имел место переход от последней сетки к первой, на внешний счётчик сеток подаётся сигнал сброса. Это позволяет, даже в случае сбоя внешнего и внутреннего счетчика сеток, вновь синхронизовать их. Полное обновление индикатора происходит 400 / 16 = 25 раз в секунду. Т.е. мерцание хотя и заметно, но картинка получается целостной. Эксперименты с данной схемой показали, что частоту обновления снижать нельзя, но повысить (без заметного снижения яркости индикатора) можно еще раз в 100 (по видимому, дальше начинает сказываться инерционность ключей, управляющих сетками и анодами).

Для экономии выводов контроллера, переключение групп анодов реализовано через дешифратор к155ид4 - на его три входа подаются сигналы с P3.0..P3.2, пять выводов используются для коммутации P1.7..P1.1 с соответствующими ключами анодов, восьмой подключен к счетному входу счетчика сеток - комбинация P3.0 = P3.1 = P3.2 = 1 переключает сетки.

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

ИК-приёмник

Принятый от ИК ДУ сигнал дешифруется и выделенный из него код клавиши сразу же отправляется по интерфейсу rs232.

Итоговая схема (без блока питания)

Транзисторы-драйверы анодов в моём экземпляре конструкции - разные. Там есть всё подряд: мп25, мп25а, мп26б, мп39, мп40, мп42а, поэтому на схеме конкретная марка не указана.

На схеме не показаны также линии питания 155-х микросхем, но это не значит, что они не нужны :).

Конденсатор сброса (между лапками 1 и 20 контроллера) можно сильно уменьшить. 0,1...1,0 мкф - хороший выбор.

Отладка управляющего кода

Как пишется в умных журналах: "правильно собранная схема из исправных деталей настройки и регулировки не требует". Но собрать все правильно с первого раза сложно, а к тому же, вероятно, вы будете использовать другой пульт ДУ и, следовательно, вам придется переписывать соответствующую процедуру. Ну и отлаживать потом, конечно. Поэтому набросаю план отладки схемы и кода по шагам:

  • Прежде всего, надо убедиться в работе блока питания индикатора. Накал индикатора должен слегка светиться в темноте, питание ключей сеток и анодов должно присутствовать. Вольтметр вам в помощь.
  • Затем выясняем работоспособность контроллера: RESET должен быть близок к потенциалу "земли", а генератор тактов давать нужную частоту. Если не найдете такой же кварц, как использовал я - потребуется пересчитать процедуры задержек для rs232 и ИК ДУ. Проверить работу кварца можно простой программой:
    .org 0
    inc p1
    ljmp 0
    На лапках P1.2..P1.7 получится много разных частот. Если есть только вольтметр - он должен показать на них около 2.5 в (половину питания). Иначе - кварц или конденсаторы вокруг него или контроллер неисправны.
  • Теперь логичнее всего добиться работы индикатора. В коде предусмотрен self-test, его прохождение указывает на работоспособность дисплея. Если есть неясности в работе развертки - можно попробовать временно убрать кварц, а на вход процессора подать низкую частоту - от отдельного генератора или хотя бы пульсации сетевого напряжения 50 Гц (конечно, с ограничением - чтобы вход процу не спалить). Увидите замедленное переключение анодов-сегментов.
  • Используя индикатор можно добиться самоконтроля ИК-приёмника. Ищите метку Debug и связанную с ней закоментированную lcall.
  • Наконец тест интерфейса rs232. Если с Linux вы знакомы не слишком хорошо, можно попробовать hyperterminal из винды или что нибудь аналогичное. Не забудьте, что проблема может быть как аппаратной так и программной !

Конечно, если что-то не получается, можно написать мне, но удалённое консультирование не слишком часто приводит к положительным результатам. Лучше просто помнить: схема пытается вас обмануть, все глюки прячутся не там, где вы ищите, ничему нельзя верить, если что-то кажется - в этом ещё нужно убедиться. Долгие поиски ошибок в расчёте - ничто, в сравнении с последующими ощущениями, когда причина оказывается в обрыве провода питания :) А уж флюс, который неожиданно оказывается электропроводящим - это просто хит неожиданностей, о которых я слышал :))

P.S. Редактор шрифтов

Тут вас поджидают некоторые сложности. Во первых, я сначала паяю схему, а потом пишу под неё софт. Поэтому у меня нет ясной схемы соединений анодов индикатора и лапок порта P1. Схемы рисовать лень: теория есть в голове, а детали практики можно скорректировать програмно. Редактор шрифтов сразу генерирует asm-текст с определением шрифта с учётом реально получившейся схемы соединений. Схема задается в виде таблицы в процедуре BuildAsm.

Во вторых: я люблю разные языки программирования: код контроллера написан на асме, код управления PC - на C, а редактор шрифтов собирается Free Pascal'ем, да ещё и под *NIX с библиотеками X11. Если возиться с этим лень, можно просто использовать мой шрифт из исходника, но тогда придется соблюдать моё же соответствие анодов и лапок порта P1 - из процедуры BuildAsm.

Тут лежит это творение (исходники + собранный для FreeBSD 6.1 бинарник).

Владимир