Не спешите выбрасывать устаревший компьютер.

Компьютерный век короток: не прошло и полгода, а уже требуется апгрейд. А если упустить время и не провести модернизацию вовремя, может случиться так, что и апгрейд не поможет. Тогда придется покупать новый компьютер, а старый или продавать по бросовым ценам, или оставить для игр. Но рано или поздно наступает момент, когда старые игры надоедают, а новые "старичок" не тянет. Тогда ему прямая дорога в далекий темный угол - обрастать пылью. Причем вышесказанное относиться не только к системным блокам, которые олицетворяют собственно компьютер, но и к мониторам, принтерам, мышам и тараканам. Сколько такой устаревшей оргтехники валяется по подвалам, гаражам и подсобкам! И выбросить жалко, и пользы никакой. Можно попробовать сдать ее начинку на драгметаллы, но выручка от этой операции будет столь ничтожна, что занятие становится бессмысленным. Но ведь в большинстве случаев 286-й (к примеру) компьютер, хоть и безнадежно устарел, но работоспособен. Надо только задуматься: чем кроме вычислительной и печатной машины может быть компьютер? Если машина 486-я, ее можно, конечно, использовать как проигрыватель компакт-дисков или установить ТВ-тюнер и приспособить на кухне под просмотр сериалов. Но согласитесь, загромождать и так небольшую (как правило) кухню монитором, колонками, системником, плюс кучей кабелей - это слишком. Проще купить небольшой телевизор (а если он уже есть, то зачем вам их два?). А что делать с "двушкой" или ХТ? И тут надо вспомнить, что компьютер обладает одной особенностью, которой лишены почти все бытовые приборы - он может быть машиной управляющей. Управляющие возможности компьютеров используются в настоящее время весьма широко. У всех на слуху выражение: "автомобиль с бортовым компьютером", однако ни в салоне, ни под капотом, ни в багажнике автомобиля мы не найдем ни монитора, ни клавиатуры, ни мышки - бортовой компьютер автомобиля представляет собой спрятанный под приборной панелью блок с кучей проводов. Более правильно его надо было бы назвать: "управляющий микропроцессорный контроллер". Но если микропроцессорный контроллер может быть "компьютером", почему бы компьютеру не выполнять функции управляющего контроллера? Управляющий контроллер (компьютер) сам в реальном времени управляет оборудованием или процессом, он "знает", когда и какое воздействие необходимо оказать, отслеживает параметры процесса и выдает необходимую информацию оператору. Достигается это при помощи специально написанных программ и механизма обратной связи. В промышленности для таких целей широко используют программируемые микропроцессорные контроллеры, при необходимости работу которых координирует центральный компьютер. Для выполнения функций центрального управляющего компьютера быстродействия и АТ и ХТ для большинства процессов более чем достаточно. Попробуем приспособить их для нужд управления. Для связи с внешним миром компьютер использует порты асинхронного последовательного адаптера (порт RS-232) и параллельный адаптер (порт принтера). Большинство управляющих компьютеров для связи с нестандартным оборудованием (а контроллеры производственных процессов - для компьютера оборудование нестандартное) используют асинхронный последовательный порт. Последовательная передача данных предполагает, что данные передаются с использованием одной линии. При этом биты байта данных передаются по очереди с использованием одного провода. Для синхронизации используется специальный бит. Существуют специальные микросхемы, предназначенные для организации связи по последовательному порту. На их основе строятся специальные процессоры связи, не уступающие по сложности материнской плате компьютера. Для этих же целей пишется специальное, программное обеспечение для управления любым процессом. В силу всего этого задача осуществления управления через последовательный порт довольно сложна. Поэтому далее будем рассматривать построение управляющего компьютера на основе связи через параллельный "принтерный" адаптер. Но вначале немного теории (которую изучить желательно, но не обязательно).

Разъем и порты параллельного адаптера.

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

Контакты разъема адаптера Контакты разъема принтера Назначение Вход/выход
1 1 Строб Выход, инверсия
2 2 Данные бит 0 Выход
3 3 Данные бит 1 Выход
4 4 Данные бит 2 Выход
5 5 Данные бит 3 Выход
6 6 Данные бит 4 Выход
7 7 Данные бит 5 Выход
8 8 Данные бит 6 Выход
9 9 Данные бит 7 Выход
10 10 ACK
Подтверждение
Вход инверсия
11 11 BUSY
Занято
Вход
12 12 PE
Конец бумаги
Вход
13 13 SLCT
Выбор
Вход
14 14 Автомат. перевод строки Выход инверсия
15 32 ERROR
Ошибка
Вход инверсия
16 31 INIT
Сброс
Выход инверсия
17 36 SLCTIN
Принтер выбран
Выход инверсия
18-25 15-30, 33 Земля -

Каждый параллельный адаптер обслуживается несколькими портами ввода/вывода.

Порт 378Н
Доступен для чтения и записи. Предназначен для вывода данных.

Порт 37АН
Доступен для чтения и записи. Предназначен для управления принтером

Таблица значений разрядов порта 37АН
Разряд Описание
0 Строб данных; принимает значение 1 при выводе байта
Выход
1 AUTO
Автоматический перевод строки
Выход
2 INIT
Сброс; активный уровень - 0
Выход
3 SLCT IN
Принтер выбран
Выход
4 IRQ
Разрешение прерывания
Вход
5-7 Не используются, соединены с нулем

Порт 379Н
Доступен для чтения.

Таблица значений разрядов порта 379Н
Разряд Описание
0-2 Не используются, соединены с нулем
3 ERROR
Ошибка
Вход
4 SLCT
Выбор
Вход
5 PE
Конец бумаги
Вход
6 ACK
Подтверждение
Вход
7 BUSY
Занято
Вход

Байты данных для вывода устанавливаются в порт 378Н. Затем через 0,5 мс линия СТРОБ переводится с высокого в низкий уровень, после чего происходит запись информации во внешнее устройство. Входные сигналы удобно считывать с порта 379Н.

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

Исходя из низкой нагрузочной способности параллельного адаптера, логично построить некий Модуль Согласования (МС), который будет принимать, хранить, усиливать управляющий сигнал и осуществлять управление. Одновременно МС может принимать внешние входные сигналы, их преобразовывать и передавать в компьютер. Очевидно, что простейшая схема МС будет иметь конфигурацию 8 выходных сигналов (каналов управления), 6 - входных, как показано на структурной схеме МС.

На основании схемы структурной строим схему электрическую принципиальную.

МС подключается к параллельному порту ПК стандартным "принтерным" кабелем Cetronix, обозначен на схеме - А1, с указанием контактов разъема адаптера. Датчики К1-К5 работают на замыкание. Микросхема К155ЛН4 служит для некоторой защиты адаптера от неблагоприятных внешних воздействий (в случае чего, проще заменить одну микросхему, чем весь адаптер). Можно использовать и другие элементы типа ЛН той же серии, например 155ЛН1, 155ЛН2, но в таком случае при обработке сигнала надо будет учитывать инверсию. При замыкании одного из ключей К1 на соответствующем входе логического повторителя высокий уровень сменяется низким, и на вход адаптера поступает сигнал изменения внешнего воздействия и заносится в порт 379Н, либо в 37АН (сигнал "разрешение прерывания") и затем обрабатывается программой. В ответ на внешние воздействия компьютер в соответствии с алгоритмом вырабатывает управляющие сигналы. Управляющая информация записывается по шине данных в регистр RG после прохождения стробирующего сигнала на вход С микросхемы КР1533ИР23. ТТЛ выход регистра защищен диодами КД522Б и резистором номиналом 130 Ом. Затем сигнал усиливается блоком усиления БУ0-БУ7, собранным в виде транзисторного ключа на элементах Т1,Т2. Напряжение питания на транзисторный ключ подается в зависимости от применяемого реле от +5 до +24В. Реле РП21 или аналогичные. Напряжение питания микросхем +5В. Вот и вся аппаратная часть. Можно приступать к программному обеспечению.

При программировании управляющего сигнала нужно иметь в виду, что управление осуществляется сразу по всей шине данных. Например, если вначале был включен бит DАТА 0 (десятичный код 1, двоичный- 000000001), а затем возникла необходимость включить бит DАТА 1, не выключая DАТА 0, то надо подавать управляющий сигнал = 3 (00000011 двоичный). При управляющем сигнале=2 (00000010) произойдет отключение бита DАТА 0. Нужно также иметь в виду, что некоторые языки на прямую не поддерживают двоичный формат, поэтому, например в BASIC, все необходимые управляющие сигналы надо привести к десятичному формату. Входной сигнал считывается из МС в порт 379Н. Значимыми являются 4,5,6,7,8 биты порта. Опять же при необходимости надо привести входной сигнал к двоичному формату.

Управление портами осуществляется по алгоритму:

  1. Загрузить в 378H управляющий сигнал
  2. Загрузить в 37АH 1 (единицу- 00000001)
  3. Очистить 37АH - 00000000
  4. Загрузить в 37АH 1 (единицу- 00000001)

Чтение пришедших сигналов:

  1. Прочесть 379H
  2. Проанализировать биты 3,4,5,6,7

Вот как реализован этот алгоритм на языке BASIC:

10 REM ************* Обнуление констант и портов**************
g = 0 'выходной (управляющий) сигнал'
b = 0 'входной сигнал'
OUT &H378, 0: OUT &H379, 0: OUT &H37A, 0 'обнуление портов'
GO TO 100
20 REM ******** Выдача управляющего сигнала *************
OUT &H378, g
OUT &H37A, 1: OUT &H37A, 0: OUT &H37A, 1
RETURN
30 REM ********* Чтение входных сигналов ****************
b = INP(&H379)
REM *** b число десятичное его необходимо перевести в двоичное***
FOR n = 0 TO 7

IF b = 1 THEN c(n) = 1
b(n) = CINT(b / 2 - .4)
IF b(n) = b / 2 THEN c(n) = 0 ELSE c(n) = 1
REM интересуют сигналы : c(3), c(4), c(5), c(6), c(7)
b = b(n)
NEXT n
RETURN

Связь компьютера с МС происходит при выполнении подпрограмм, начинающихся строками 20 и 30. В общем случае при написании программ на BASIC достаточно в текст программы поместить фрагмент, выделенный красным цветом и в последующем к нему обращаться как к подпрограмме ввода/вывода. Алгоритм управления конкретным процессом строится с учетом этих замечаний и написание программ больше не имеет никаких особенностей.

Таким образом мы получили вполне работоспособный управляющий микроконтроллер, совмещающий в себе собственно контроллер и компьютер верхнего уровня. Кстати почувствуйте разницу: старое "железо" уже почти ничего не стоит, а новый самый простенький микроконтроллер "потянет" не менее 200$, плюс еще специальное ПО.

Несколько замечаний по теме.

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

Принтер есть ни что иное, как специализированный печатающий контроллер. Не составляет почти никакого труда превратить его в контроллер многофункциональный.
На самом деле, возьмем, например, матричный шестнадцати игольчатый принтер. Что мы имеем?

Итак, у нас почти готовый универсальный контроллер 2 х 19

Это только то, что видно невооруженным взглядом. А если еще почитать инструкцию?! :)

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

Клавиатура - может служить прекрасным (>100 разрядов) модулем входов. Нужно только клавиши - датчики на замыкание - установить в необходимых местах. А программу настроить на считывание скан - кода клавиш.

Звуковая карта - модуль ввода - вывода аналоговых звуковых сигналов, где микрофоны могут быть датчиками шума.

Мышь - датчик перемещения.

И так далее и тому подобное. В любом случае, компьютер настолько универсальная техника, что найти ему нетрадиционное применение можно всегда.

Примеры "нестандартного" использования компьютера.

Самый простой пример - управление переключением елочных гирлянд. О применении для этих целей принтера уже говорилось. Но можно обойтись и без него - достаточно к "принтерному" разъему системного блока подсоединить Модуль Согласования и к контактам реле подключить гирлянды. Задача сводится к написанию управляющей программы. В том же BASIC для восьми гирлянд это может выглядеть так (с учетом ранее веденного кода стандартного обращения к портам):

 
50 REM ****************Таймер*************************************
i = TIMER
55 IF TIMER >= i + 1 THEN RETURN ELSE GOTO 55
100 REM *************** Задание констант*****************************
K11= 85 '01010101'
K12=170 '10101010'
K21=102 '01100110'
K22=153 '10011001'
K31=119 '01110111'
K32=136 '10001000'
K41=240 '11110000'
K42=15 '00001111'
K51=0 '00000000'
K52=255 '11111111'
110 REM ****************Чтение порта********************************
GOSUB 30
IF C(3)=1 THEN GOSUB 120
IF C(4)=1 THEN GOSUB 130
IF C(5)=1 THEN GOSUB 140
IF C(6)=1 THEN GOSUB 150
IF C(7)=1 THEN GOSUB 160
RETURN
REM *** Вкл\выкл выходов согласно заданных констант***************
120 g=K11:GOSUB 20:GOSUB 50
g=K12:GOSUB 20:GOSUB 50
GOSUB 110
GO TO 120
130 g=K21:GOSUB 20:GOSUB 50
g=K22:GOSUB 20:GOSUB 50
GOSUB 110
GO TO 130
140 g=K31:GOSUB 20:GOSUB 50
g=K32:GOSUB 20:GOSUB 50
GOSUB 110
GO TO 140
150 g=K41:GOSUB 20:GOSUB 50
g=K42:GOSUB 20:GOSUB 50
GOSUB 110
GO TO 150
160 g=K51:GOSUB 20:GOSUB 50
g=K52:GOSUB 20:GOSUB 50
GOSUB 110
GO TO 160
END.

В начале бежит один огонь, затем, два, три, четыре, затем все гаснет и снова зажигается, после чего цикл повторяется. Очередность включения может быть и другой, в зависимости от предпочтений пользователя. Описанный метод можно применить и для более серьезного использования, например, для организации световых табло. Но в этом случае программа будет сложнее, должна работать в динамике, и МС придется немного доработать. Для этих целей надо использовать выходные сигналы порта 37АН: AUTO, INIT, SLCT, организовать через них 3-х разрядный счетчик, и через дешифратор управлять выбором индикаторов. Таким образом, можно получить световое табло " бегущая строка" из восьми символов. Используя сегментацию, длину "строки" можно наращивать. В общем случае возможности нестандартного применения компьютера ограничены только фантазией.

Давидюк Юрий Аркадьевич(muraw@inbox.ru)
Опубликовано -- 21 декабря 2000 г.

Назад