Подключаем «крысу» от ЕС ПЭВМ к современному ПК

в 8:05, , рубрики: apple, arduino pro micro, ATtiny85, cga, Digispark, GM-6, HID, idc, intel, timeweb_статьи, usb, ЕС ПЭВМ, ПК, эвм
Приветствую всех!
Этот шедевр советской компьютерной промышленности знаком любому интересующемуся компьютерной историей. А некоторые из тех, кому довелось с ним работать, называли его не иначе как «крысой». И вот спустя много десятилетий после его выпуска я задумался: а что, если подключить этот девайс к обычному компьютеру? Именно этим мы сегодня и займёмся.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 1

Итак, в сегодняшней статье поговорим про мышь от советского персонального компьютера ЕС1841. Узнаем, как заставить её работать и так ли она сурова, как можно подумать. Традиционно будет много интересного.

Суть такова

Немного про сами ПЭВМ

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 2

Как и другие машины «Единой системы», ЕС1841 очень круто выглядит и отличается такой же суровостью. Компьютер сильно отличается от привычных нам ПК — вместо материнки тут кросс-плата, в которую втыкаются модули (они же типовые элементы замены), вместо шлейфов — жгуты проводов, кулеры работают от 220 вольт.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 3

Характеристики по меркам ретрокомпьютеров внушают уважение: процессор К1810ВМ86 (отечественный функциональный аналог Intel 8086), возможность установки до полутора мегабайт памяти, CGA-видеоадаптер.
Увы, ввиду не слишком высокой надёжности и большого количества дорогих радиодеталей внутри, выжило раритетных ЭВМ совсем немного. От этого рабочие экземпляры очень ценятся среди любителей.

Обзор оборудования

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 4

А вот и мышь. Саму ПЭВМ уже не достать, а вот крысу — запросто. Она оснащена тремя кнопками, причём все нажимаются как-то по-разному. Скорее всего, это особенность конкретного экземпляра, новая мышь таких косяков иметь не должна.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 5

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

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 6

Разъём. Он тут очень редкий, ответную часть к нему найти не удалось. Но с ним мы разберёмся чуть позже. К нему подходит кабель, представляющий собой жгут проводов в трубке из ПВХ.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 7

Маркировка на разъёме.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 8

Шарик снят. Видны три ролика — два рабочих и один вспомогательный, прижимающий шарик к двум другим. Во всех мышах, что я видел, шарик и ролики были немного ржавыми, эта — не исключение. Ролики внутри корпуса сидят на маленьких шарикоподшипниках, которые в моей мыши даже умудрились дожить до наших дней. Впрочем, вскрывать её я не буду — стало жалко отковыривать всё ещё сохранившуюся пломбу, благо хранилась мышь в хороших условиях и обслуживания не требует.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 9

Шарики. Справа наш, слева для сравнения лежит от обычной COM-мыши. В нашей он больше и тяжелее. Некоторые считают, что этот шарик от подшипника, но это не так, он тут фрезерованный (следы обработки видны при детальном осмотре) специально для этой мыши.

Контрольное взвешивание

В интернете полно всякой ерунды про то, что эта мышь весит чуть ли не килограмм и может использоваться как предмет самообороны. Точных данных об её массе сходу не нашёл, так что самое время выяснить всё самому, а заодно и провести сравнение, навсегда закрыв все неточности.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 10

Итак, кладём подопытный экземпляр на весы. Масса мыши без кабеля — всего 186 граммов. Ни о каких килограммах речи даже не идёт.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 11

Целиком она весит тоже не так уж и много. Кабель достаточно мягкий и гибкий, хотя и более толстый, чем у импортных собратьев.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 12

А вот для сравнения популярная в первой половине девяностых мышь GM-6, по форм-фактору похожая на эту.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 13

И, напоследок, типичная COM-мышь из поздних девяностых.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 14

Масса шарика отдельно — 67 граммов, считай, треть от всего манипулятора.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 15

Как можно видеть, грызун несколько тяжелее своих собратьев, но не настолько, насколько может показаться. Иные современные игровые мыши (особенно те, куда вставляются специальные дополнительные грузики) запросто могут быть ещё массивнее и тяжелее. Да и размер у неё тоже вполне «мышиный», без существенных отклонений. Так что увы, но все подобные рассказы про её свойства — не более чем красивая байка.

Внутренности

Как я уже говорил, разбирать мышь я не стал. Так что будем довольствоваться фото с просторов.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 16

Внутри неё две платы — с кнопками и с оптопарами. Из микросхем только триггер Шмитта К561ТЛ1, служащий для формирования правильных фронтов сигналов от фотодатчиков роликов.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 17

Плата отдельно (фото отсюда). Отчётливо видны суровые отечественные ИК-светодиоды и фотодиоды. Также справа внизу заметны те самые шарикоподшипники.

Bus mouse и всё об этом

Теперь очередь интерфейса. Сразу приведу распиновку разъёма мыши:

image

Нумерация контактов на картинке отвратительного качества, поэтому продублирую её у себя:

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 19

Как видно, мышь не подключается ни по COM, ни по PS/2, ни по какому-то иному стандартному интерфейсу. С некоторой натяжкой её и вовсе можно назвать аналоговой (хотя, конечно, это не так, выходы у неё таки цифровые).

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 20

Она принадлежит к семейству так называемых «шинных мышей», они же Bus mouse (не путать с Apple Desktop Bus). Внутри такой мыши нет ничего кроме кнопок и датчиков, взаимодействием с компьютером же занимается специальный контроллер (как нетрудно догадаться, его-то мы и будем сейчас разрабатывать). Именно это мы и могли видеть в нашей мышке. Так что самое время попробовать её подключить и узнать, работает ли она вообще.

Разъём

Как я уже говорил, ответную часть к её штекеру достать довольно таки тяжело. Но выход всё-таки есть.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 21

Для этого нам понадобится копеечная деталь — разъём PBD-12, который надо подвергнуть нескольким нехитрым модификациям.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 22

С той стороны, где у мыши находится ключ, выдёргиваем один контакт и делаем в этом месте пропил для ключа (с осторожностью, первый разъём в ходе этих манипуляций у меня треснул). Дальше немного дорабатываем напильником — разъём, рассчитанный на дюймовую систему вместо метрической, в это прокрустово ложе лезет с трудом. Модифицированный экземпляр прекрасно насаживается и обеспечивает рабочий контакт, что нам и было нужно. Видел, кто-то просто разобрал этот разъём на мышке, выкинул внутренности и вставил туда вилку IDC типа BH-10, но это не наш путь.

Про подключение

Чтобы заставить мышь работать с современным компьютером, нужен МК с поддержкой USB HID.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 23

У меня уже давно лежала плата Digispark на чипе ATTiny85 (давным-давно экспериментировал с Bad USB), которую хотелось использовать в каком-нибудь проекте. Одна проблема: выводов у неё маловато. Но этот нюанс я предполагал исправить при помощи чипа 74HC165, понадеявшись, что шариковая мышь работает достаточно медленно и скорости опроса этого регистра будет достаточно.

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 24

Для тестов даже собрал на макетной плате схему с разъёмом и этим регистром. Но, как показали опыты, надежды не оправдались, работало оно так себе. Поэтому эту плату отложим до лучших времён, а для мыши придумаем что-то более надёжное.

Что же выберем?

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 25

Координаты

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

Тестовый скетч

#define Xa      5
#define Xb      6
#define Ya      7
#define Yb      8

bool XmotionDetected = false, YmotionDetected = false;
int counterX = 0, counterY = 0;
bool CW_X, CW_Y;

void setup() {
  // put your setup code here, to run once:
  pinMode(Xa, INPUT);
  pinMode(Xb, INPUT);
  pinMode(Ya, INPUT);
  pinMode(Yb, INPUT);
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  updateCounters();
}

void updateCounters()
{
  if (!digitalRead(Xa) && !digitalRead(Xb) && XmotionDetected ) //in a detent and just arrived
  {
    if (CW_X)
    {
      counterX++;
    }
    else
    {
      counterX--;
    }
    XmotionDetected = false;
    Serial.print("X: ");
    Serial.print(counterX);
    Serial.print(" Y: ");
    Serial.println(counterY);
  }

  if (!digitalRead(Xa) && digitalRead(Xb) && !XmotionDetected ) // just started CW
  {
    CW_X = true;
    XmotionDetected = true;

  }

  if (digitalRead(Xa) && !digitalRead(Xb) && !XmotionDetected )  //just started CCW
  {
    CW_X = false;
    XmotionDetected = true;
  }

  if (!digitalRead(Ya) && !digitalRead(Yb) && YmotionDetected ) //in a detent and just arrived
  {
    if (CW_Y)
    {
      counterY--;
    }
    else
    {
      counterY++;
    }
    YmotionDetected = false;
    Serial.print("X: ");
    Serial.print(counterX);
    Serial.print(" Y: ");
    Serial.println(counterY);
  }

  if (!digitalRead(Ya) && digitalRead(Yb) && !YmotionDetected ) // just started CW
  {
    CW_Y = true;
    YmotionDetected = true;

  }

  if (digitalRead(Ya) && !digitalRead(Yb) && !YmotionDetected )  //just started CCW
  {
    CW_Y = false;
    YmotionDetected = true;

  }
}

Загружаем его, и теперь при движении мыши в последовательный порт отправляется примерно следующее:

Подключаем «крысу» от ЕС ПЭВМ к современному ПК - 26

Отлично, работает именно так, как я и думал.

Управление мышью

Теперь, убедившись, что всё работает, добавляем работу с HID, получая вот такой скетч:

#include "Mouse.h"

#define LBUTTON 2
#define MBUTTON 3
#define RBUTTON 4
#define Xa      5
#define Xb      6
#define Ya      7
#define Yb      8

#define X_STEP 7
#define Y_STEP 7

bool XmotionDetected = false, YmotionDetected = false;
int counterX = 0, counterY = 0;
int dirX = 0, dirY = 0;
bool CW_X, CW_Y;

void setup() {
  // put your setup code here, to run once:
  pinMode(LBUTTON, INPUT_PULLUP);
  pinMode(MBUTTON, INPUT_PULLUP);
  pinMode(RBUTTON, INPUT_PULLUP);
  pinMode(Xa, INPUT);
  pinMode(Xb, INPUT);
  pinMode(Ya, INPUT);
  pinMode(Yb, INPUT);
  Mouse.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  updateCounters();
  if (dirX || dirY) {
    Mouse.move(dirX * X_STEP, dirY * Y_STEP, 0);
    dirX = 0;
    dirY = 0;
  }
updateButtons();
}

void updateCounters()
{
  if (!digitalRead(Xa) && !digitalRead(Xb) && XmotionDetected ) //in a detent and just arrived
  {
    if (CW_X)
    {
      dirX = 1;
      counterX++;
    }
    else //CCW
    {
      dirX = -1;
      counterX--;
    }
    XmotionDetected = false;
  }

  if (!digitalRead(Xa) && digitalRead(Xb) && !XmotionDetected ) // just started CW
  {
    CW_X = true;
    XmotionDetected = true;

  }

  if (digitalRead(Xa) && !digitalRead(Xb) && !XmotionDetected )  //just started CCW
  {
    CW_X = false;
    XmotionDetected = true;
  }

  if (!digitalRead(Ya) && !digitalRead(Yb) && YmotionDetected ) //in a detent and just arrived
  {
    if (CW_Y)
    {
      dirY = 1;
      counterY--;
    }
    else //CCW
    {
      dirY = -1;
      counterY++;
    }
    YmotionDetected = false;
  }

  if (!digitalRead(Ya) && digitalRead(Yb) && !YmotionDetected ) // just started CW
  {
    CW_Y = true;
    YmotionDetected = true;

  }

  if (digitalRead(Ya) && !digitalRead(Yb) && !YmotionDetected )  //just started CCW
  {
    CW_Y = false;
    YmotionDetected = true;

  }
}

void updateButtons() {
  if(!digitalRead(LBUTTON)) {
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.press(MOUSE_LEFT);
    }
  }
  else {
    if (Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.release(MOUSE_LEFT);
    }
  }
    if(!digitalRead(RBUTTON)) {
    if (!Mouse.isPressed(MOUSE_RIGHT)) {
      Mouse.press(MOUSE_RIGHT);
    }
  }
  else {
    if (Mouse.isPressed(MOUSE_RIGHT)) {
      Mouse.release(MOUSE_RIGHT);
    }
  }
    if(!digitalRead(MBUTTON)) {
    if (!Mouse.isPressed(MOUSE_MIDDLE)) {
      Mouse.press(MOUSE_MIDDLE);
    }
  }
  else {
    if (Mouse.isPressed(MOUSE_MIDDLE)) {
      Mouse.release(MOUSE_MIDDLE);
    }
  }
}

Прост он настолько, насколько это возможно: при сдвиге мыши в нужном направлении курсор на компе двигается на заданное число пикселей.
Заливаем скетч и пробуем. Невероятно! Работает с первого раза!

Что же в итоге?

Как оказалось, подключить мышь оказалось проще простого — запустил я её буквально за час, двадцать минут из которого я паял разъём и зачищал МГТФ. Работает она также беспроблемно.
Конечно, тут могла бы быть фраза про то, что с тех пор я подключил эту мышь к компу и использую её как основную… но ничего подобного не будет. Главной проблемой её оказалось очень низкое разрешение, из-за которого приходится либо сильно задирать расстояние одного шага, отчего курсор при движении начинает пропускать пиксели, либо мириться с тем, что указатель едет плавно, но очень медленно, как будто увязая. Всё же эпоха шариковых мышей с их довольно таки неточными энкодерами безвозвратно ушла.

Но вот что было действительно приятным в этой штуке, так это шариковые опоры. Благодаря ним мышь очень плавно и с приятным звуком катается по столу и никогда не перестанет заедать.
Такие дела.


Читайте также:

Автор: MaFrance351

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js