[<] [>] ZXkit-029. "SUPER JOYSTICK PORT 2".
(проект приостановлен)
SUPER JOYSTICK PORT 2 - два перенастраиваемых SEGA джойстика и вход PS/2 клавиатуры.


Данное устройство позволяет подключить к ZX SPECTRUM-у два SEGA джойстика, которые можно настроить на работу как:
SINCLAIR1/SINCLAIR2/KEMPSTON/CURSOR/QAOPM/ELITE джойстики. Выбор производится двумя соответствующими кнопками.
Также имеются еще 4 режима (ROW1-ROW4), в которых можно сформировать нажатие любой из 40 кнопок клавиатуры.


NO WAIT - аппаратное преобразование данных из последовательного вида в формат механической клавиатуры
и KEMPSTON джойстика позволяет выдавать данные на Z80 без его торможения.
Вместо PS/2 клавиатуры возможно подключение USB клавиатуры с помощью конвертера USB TO PS/2.

ZXkit-029. SUPER JOYSTICK PORT 2. Спаянная плата со шлейфами = 1350 руб. (в наличии: 2)

ZXkit-029. SUPER JOYSTICK PORT 2. Конструктор (печатная плата + детали) = 950 руб. (в наличии: под заказ)

Покупая конструкторы "ZXkit" по цене выше стоимости комплектующих,
вы поддерживаете разработчика аппаратуры для компьютеров типа "ZX Spectrum" в текущих и новых разработках !



Ниже приведено описание интерфейса PS/2 клавиатуры и подключение PS2 к AVR ATMEGA48.


Размер печатной платы устройства SJP-2 равен 54х54 мм. К плате припаяны разъемы для подключения двух SEGA джойстиков, шлейфов IDC для подключения к компьютеру типа ZX SPECTRUM с разъемами для механической клавиатуры и KEMPSTON джойстика.

По сравнению с  первой версией, аппаратурой управляет не ПЛИС, а микроконтроллер ATMEGA.
Это позволило более гибко настраивать режимы работы, подключить два джойстика.

Предусмотрена возможность расширения функций устройства:
Имеется разъем WF-04M (
PS2 ) для подключения через дополнительный кабель PS2 клавиатуры.
Имеется разъем WF-04M (UART) для подключения USB клавиатуры через дополнительный кабель и микроконтроллер с функцией USB-HOST.
Через UART также возможно подключение к ZX-SPECTRUM других устройств типа REMOTE KEYPAD.

Для обновления программы микроконтроллера на плате предусмотрен разъем по стандарту ATMEL. Прошивка заливается с помощью LPT программатора ByteBlaster MV  или USB программатора FT232 AVR PROG.

При разработке было сделано все, чтобы была совместимость с очень популярным копьютером ZX-EVO. Разъемы сделаны с одинаковой распиновкой из описания к ZX-EVO. Но в ZX-EVO логика работы разъема механической клавиатуры оказалось обратной логике работы оригинального ZX SPECTRUMA - входы и выходы сделаны наоборот.
Цитата:
by Sergey78 » Fri, 12.07.2013 08:19:10
...
Посмотрел исходники АВР. Так оказывается мех.клавиатура наоборот опрашивается. 0 выдается на ZXCOL, нажатие читается с ZXROW.
Информация взята с форума TS-Labs (http://tslabs.info/forum/viewtopic.php?f=6&t=231).
Поэтому без доработки прошивки ZX-EVO SUPER JOYSTICK PORT 2 на ZX-EVO работать не будет !


Пока совместимость остается с компьютерами, у которых стандартная логика работы разъема механической клавиатуры: SCORPION, PENTAGON, KAY, LENINGRAD.

Изготовлен первый экземпляр. Написана прошивка для 10 раскладок SEGA джойстика.
Дописывается процедура опроса PS/2 клавиатуры. Текущая прошивка и описание процесса разработки тут.


К контроллеру можно подключить два таких SEGA джойстика (МАГИСТР 16 BIt).

Команды переключения типа джойстика:

Select + A = SINCLAIR1
Select + B = SINCLAIR2
Select + C = KEMPSTON
Select + X = CURSOR
Select + Y = QAOPM
Select + Z = ELITE

Раскладки кнопок SEGA джойстика для разных режимов.

  
Схема устройства SUPER JOYSTICK PORT 2.

Управляя только одним джойстиком, мы сможем:
  • Выбрать нужный тип джойстика, который нужно эмулировать с помощью контроллера "Super Joystick Port 2".
  • Выполнять сброс компьютера
  • Запускать нажатием двух кнопок команду типа LOAD " " ENTER.
Более подробно можно почитать на форуме

Как подключить PS/2 клавиатуру к микроконтроллеру ATMEGA48PA-AU. Подборка информации для освоения.

Сигналы на разъеме. Распиновка разъема для подключения PS/2 клавиатуры.

На клавиатуру подается питание +5В и GND. С клавиатуры на PC или микроконтроллер поступают сигналы CLOCK и DATA. Эти выходы клавиатуры с открытым коллектором. Обычно на входе микроконтроллера нужно подтянуть их к +5В резисторами по 10 кОм.

Последовательность данных с PS/2 клавиатуры.

Данные передаются пакетами по 11 бит:

1. START. Стартовый бит, всегда равен 0.

2. D0. Младший бит данных.

3. D1.

4. D2.

5. D3.

6. D4.

7. D5.

8. D6.

9. D7. Старший бит данных.

10. PARITY. Контрольный бит.

11. STOP. Стоповый бит, всегда равен 1.

Между пакетами сигнал DATA = 1.

Частота тактовых импульсов PS/2 клавиатуры.

Частота импульсов CLOCK во время передачи пакета около 10 кГц (10 - 16.7 кГц).

Между пакетами CLOCK = 1.

В какой момент читать данные с PS/2 ?

Последовательные данные со входа DATA нужно читать по спаду сигнала CLOCK

(при смене уровня с 1 на 0).

Как рассчитывается контрольный бит PARITY ?

Если число единичных битов в переданном байте четное (0,2,4,6,8), то бит PARITY = 1. Если число единичных битов в переданном байте нечетное (1,3,5,7), то бит PARITY = 0.

Какой интервал таймаута при приеме данных с PS/2 клавиатуры ?

Интервал таймаута, достаточный для передачи данных от стартового до стопового бита выбран равным 1,5 мс. Если за это время не пришел стоповый бит — обнуляем все переменные для работы с клавиатурой и буфер нажатых кнопок.

Как передается информация при нажатии кнопки ? (В пояснении все коды - шестнадцатиричные)

Обычная PS/2 клавиатура может передавать информацию о шести одновременно нажатых клавиашах. При нажатии кнопки передается ее код. Если первый байт от 0 до 7F, значит нажата клавиша из основного набора. Если сначала передается код E0, а затем байт от 0 до 7F, значит нажата кнопка из дополнительного набора в раскладке клавиатуры с префиксом E0.

При одновременном нажатии второй кнопки передается ее код с или без префикса $Е0. Если одна или несколько кнопок нажаты долго - повторяется код последней нажатой кнопки до ее отпускания или нажатия другой.

Обработка странных скан-кодов. (В пояснении все коды - шестнадцатиричные)

Скан-код клавиши F7.

Во всех таблицах Code Scan 2 в интернете у клавиши F7 код равен 83, хотя все остальные коды от 0 до 7F. Встретил только одно сообщение, что вместо 83 клавиатура выдает код 02. Даже если это не так, лучше предусмотреть замену при приеме кода 83 на код 02. Если клавиша F7 не нужна — ее код 83 можно обрабатывать как ошибку приема.

Скан-код клавиши PrintScr.

Код нажатия: E0 12 E0 7C. Код отпускания: E0 F0 7C E0 F0 12.

Если провести аналогию с другими скан-кодами, то эти последовательности можно разложить на несколько простых:

E0 12 нажатие клавиши 12 из дополнительного набора с префиксом E0.

E0 7C нажатие клавиши 7C из дополнительного набора с префиксом E0.

E0 F0 7C отпускание клавиши 7C из дополнительного набора с префиксом E0.

E0 F0 12 отпускание клавиши 12 из дополнительного набора с префиксом E0.

Возможный способ обработки — как обычные коды с префиксом E0.

Скан-код клавиши Pause.

Код нажатия: E1 14 77 E1 F0 14 F0 77. Код отпускания: нет.

Если провести аналогию с другими скан-кодами, то эту последовательнось можно разложить на несколько простых:

E1 14 нажатие клавиши 14 из дополнительного набора с префиксом E1.

77 — нажатие клавиши NUM из основного набора без префикса.

E1 F0 14 — отпускание клавиши 14 из дополнительного набора с префиксом E1.

F0, 77 отпускание клавиши 77 из основного набора без префикса.

Возможный способ обработки — заменять префикс Е1 на E0. Только при этом нельзя будет использовать кнопки R.Ctrl и NUM.

Параметры PS/2 клавиатуры после включения.

После включения через время около 1 секунды клавиатура перадает дайт АА. Затем начинает передачу данных о положении клавиш в режиме Code Scan 2. Время между нажатием клавиши и отправкой кода 500 мс. Время повтора кодов при удержании клавиши около 92 мс.

Полее подробно про интерфейс PS/2 описано там.