Комп'ютерний вік короткий: не минуло й півроку, а вже потрібно апгрейд. А якщо втратити час і не провести модернізацію вчасно, може статися так, що і апгрейд не допоможе. Тоді доведеться купувати новий комп'ютер, а старий або продавати за мізерними цінами, або залишити для ігор. Але рано чи пізно настає момент, коли старі ігри набридають, а нові "дідок" не тягне. Тоді йому пряма дорога в далекий темний кут – обростати пилом. Причому вищесказане ставитися не тільки до системних блоків, які уособлюють власне комп'ютер, але і до моніторів, принтерів, мишам і тарганам. Скільки такий застарілої оргтехніки валяється по підвалах, гаражів і підсобках! І викинути шкода, і користі ніякої. Можна спробувати здати її начинку на дорогоцінні метали, але виручка від цієї операції буде настільки нікчемна, що заняття стає безглуздим. Але ж у більшості випадків 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 – вхідних, як показано на структурній схемі МС.
Структурна схема Рис.1. Структурна схема

На підставі схеми структурної будуємо схему електричну принципову.

Електрична принципова схема Рис.2. Електрична принципова схема МС підключається до паралельний порт ПК стандартним "принтерні" кабелем 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 $, плюс ще спеціальне ПЗ.
Кілька зауважень по темі. Перетворення комп'ютера в універсальний контролер не вичерпується одним системним блоком. Всі периферійні устроиство зв'язуються з комп'ютером через відповідні порти і программіровніе їх полягає в програмуванні звернення до портів. Тому виходячи з розглянутого вище, можна зробити висновок про те, що:
Принтер є ні що інше, як спеціалізований друкує контролер. Не становить майже ніяких труднощів перетворити його на контролер багатофункціональний.
Насправді, візьмемо, наприклад, матричний шістнадцяти голчастий принтер. Що ми маємо?

  • 16 виходів-голок
  • 1 вихід – дзвінок
  • 1 вихід – управління кареткою
  • 1 вихід – прогін листа
  • 1 вхід – наявності папери
  • 1 вхід – положення каретки

Отже, у нас майже готовий універсальний контролер 2 х 19 Це тільки те, що видно неозброєним поглядом. А якщо ще почитати інструкцію?! 🙂 І якщо на всі 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-х розрядний лічильник, і через дешифратор управляти вибором індикаторів. Таким чином, можна отримати світлове табло "рядок, що біжить" з восьми символів. Використовуючи сегментацію, довжину "рядка" можна нарощувати. У загальному випадку можливості нестандартного застосування комп'ютера обмежені лише фантазією.