Разъем и порты параллельного адаптера.
Описание разъема параллельного адаптера обычно есть в документации на принтер. Приведем таблицу назначения контактов разъема адаптера, а также соответствующих контактов разъема принтера. Нагрузка на выходную линию параллельного адаптера не должна превышать одного входа ТТЛ.
Контакты разъема адаптера | Контакты разъема принтера | Назначение | Вход/выход |
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Н | |
Разряд | Описание |
0-2 | Не используются, соединены с нулем |
3 | ERROR Ошибка Вход |
4 | SLCT Выбор Вход |
5 | PE Конец бумаги Вход |
6 | ACK Подтверждение Вход |
7 | BUSY Занято Вход |
Доработка компьютера до возможностей управляющего контроллера.
Исходя из низкой нагрузочной способности параллельного адаптера, логично построить некий Модуль Согласования (МС), который будет принимать, хранить, усиливать управляющий сигнал и осуществлять управление. Одновременно МС может принимать внешние входные сигналы, их преобразовывать и передавать в компьютер. Очевидно, что простейшая схема МС будет иметь конфигурацию 8 выходных сигналов (каналов управления), 6 - входных, как показано на структурной схеме МС.
На основании схемы структурной строим схему электрическую принципиальную.
МС подключается к параллельному порту ПК стандартным "принтерным" кабелем Cetronix, обозначен на схеме - А1, с указанием контактов разъема адаптера. Датчики К1-К5 работают на замыкание. Микросхема К155ЛН4 (SN7407) служит для некоторой защиты адаптера от неблагоприятных внешних воздействий (в случае чего, проще заменить одну микросхему, чем весь адаптер). Можно использовать и другие элементы типа ЛН той же серии, например К155ЛН1 (SN7404), К155ЛН2 (SN7405), но в таком случае при обработке сигнала надо будет учитывать инверсию. При замыкании одного из ключей К1 на соответствующем входе логического повторителя высокий уровень сменяется низким, и на вход адаптера поступает сигнал изменения внешнего воздействия и заносится в порт 379Н, либо в 37АН (сигнал "разрешение прерывания") и затем обрабатывается программой. В ответ на внешние воздействия компьютер в соответствии с алгоритмом вырабатывает управляющие сигналы. Управляющая информация записывается по шине данных в регистр RG после прохождения стробирующего сигнала на вход С микросхемы КР1533ИР23 (SN54ALS374). ТТЛ выход регистра защищен диодами КД522Б и резистором номиналом 130 Ом. Затем сигнал усиливается блоком усиления БУ0-БУ7, собранным в виде транзисторного ключа на элементах Т1,Т2. Напряжение питания на транзисторный ключ подается в зависимости от применяемого реле от +5 до +24В. Реле РП21 или аналогичные. Напряжение питания микросхем +5В. Транзисторы - КТ315 и КТ817. Вот и вся аппаратная часть. Можно приступать к программному обеспечению.
При программировании управляющего сигнала нужно иметь в виду, что управление осуществляется сразу по всей шине данных. Например, если вначале был включен бит DАТА 0 (десятичный код 1, двоичный- 000000001), а затем возникла необходимость включить бит DАТА 1, не выключая DАТА 0, то надо подавать управляющий сигнал = 3 (00000011 двоичный). При управляющем сигнале=2 (00000010) произойдет отключение бита DАТА 0. Нужно также иметь в виду, что некоторые языки на прямую не поддерживают двоичный формат, поэтому, например в BASIC, все необходимые управляющие сигналы надо привести к десятичному формату. Входной сигнал считывается из МС в порт 379Н. Значимыми являются 4,5,6,7,8 биты порта. Опять же при необходимости надо привести входной сигнал к двоичному формату.
Управление портами осуществляется по алгоритму:
- Загрузить в 378H управляющий сигнал
- Загрузить в 37АH 1 (единицу- 00000001)
- Очистить 37АH - 00000000
- Загрузить в 37АH 1 (единицу- 00000001)
- Прочесть 379H
- Проанализировать биты 3,4,5,6,7
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$, плюс еще специальное ПО.
Несколько замечаний по теме.
Превращение компьютера в универсальный контроллер не исчерпывается одним системным блоком. Все периферийные устроиства связываются с компьютером через соответствующие порты и программировние их заключается в программировании обращения к портам. Потому исходя из рассмотренного выше, можно сделать вывод о том, что:
Принтер есть ни что иное, как специализированный печатающий контроллер. Не составляет почти никакого труда превратить его в контроллер многофункциональный.
На самом деле, возьмем, например, матричный шестнадцати игольчатый принтер. Что мы имеем?
- 16 выходов- иголок
- 1 выход - звонок
- 1 выход - управление кареткой
- 1 выход - прогон листа
- 1 вход - наличия бумаги
- 1 вход - положения каретки
Это только то, что видно невооруженным взглядом. А если еще почитать инструкцию?!
И если на все девятнадцать выходов принтера подключить, например, елочные гирлянды и запустить печать какого нибудь текста, например, этой статьи, то гирлянды добросовестно текст отмигают, а окружающие будут любоваться неповторяющимся хаотическим переключением гирлянд.
Клавиатура - может служить прекрасным (>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-х разрядный счетчик, и через дешифратор управлять выбором индикаторов. Таким образом, можно получить световое табло " бегущая строка" из восьми символов. Используя сегментацию, длину "строки" можно наращивать. В общем случае возможности нестандартного применения компьютера ограничены только фантазией.