Просмотр полной версии : Безвейтовый контроллер PS/2 клавиатуры на AVR + CPLD для ZX Spectrum и клонов
andykarpov
03.04.2019, 00:36
Уважаемые коллеги,
Вашему вниманию предлагается очередной контроллер PS/2 клавиатуры для ZX Spectrum совместимых компьютеров и многочисленных клонов.
Построен данный контроллер на базе Atmega328p и CPLD Altera EPM7128STC100.
http://i.piccy_.info/i9/2ed5228d4fd22075314bd59a8bde4a94/1554240933/82515/1291044/IMG_20190403_001947_800.jpg (http://piccy_.info/view3/13084018/23c17afd9bc058d718dbd0752f208d9e/1200/)http://i.piccy_.info/a3/2019-04-02-21-35/i9-13084018/755x566-r/i.gif (http://i.piccy_.info/a3c/2019-04-02-21-35/i9-13084018/755x566-r)
Детали проекта: https://github.com/andykarpov/ps2_cpld_kbd/
За основу была взята идея отсюда: http://www.jrok.com/project/speckey/spec_key.html
Принцип работы:
AVR слушает события от PS/2 клавиатуры, заполняет некую внутреннюю матрицу состояний 40-кнопочной клавиатуры и по SPI протоколу передает эту матрицу в CPLD, которая, в свою очередь, слушает адресные линии клавиатуры и моментально отображает результат в порт клавиатуры ZX Spectrum.
Исходники железной и софтовой части проекта открыты, можно ознакомиться с принципом работы и внести коррективы, если потребуется :)
Кроме стандартных 40-кнопок также реализованы клавиатурные комбинации ZX Spectrum, включая курсор.
Из дополнительных плюшек:
- сигнал RESET по Ctrl+Alt+Del (формируется короткий импульс сброса)
- сигнал TURBO по Scroll Lock (переключается 2 состояния с запоминанием выбора в EEPROM меги)
- сигнал MAGICK по F2 (формируется короткий импульс)
- сигнал SPECIAL по Print Screen (также как и в TURBO, переключается между двумя состояниями)
- индикация TURBO и SPECIAL, а также активности устройства на светодиодах, расположенных на плате
Работоспособность проверялось вместе с ZX Max 128 и ZX 128 Spider.
SoftLight
03.04.2019, 09:24
Сразу нубский вопрос. В чем принципиальное отличие от аналогов на atmega без epm? Более простое подключение A8-A15 + KB0-KB7 + GND?
- - - Добавлено - - -
Запитывать платку через J4?
marinovsoft
03.04.2019, 09:33
Принципиальное отличие в том, что контроллеры только на атмеге без плисины в турбо-режимах нифига не успевают без вайта.
Принципиальное отличие в том, что контроллеры только на атмеге без плисины в турбо-режимах нифига не успевают без вайта.При правильном турбировании время обращения к устройствам ввода/вывода надо оставлять неизменным в самом компе.
marinovsoft
03.04.2019, 11:18
А есть список правильно турбированных клонов и неправильно турбированных клонов?
solegstar
03.04.2019, 11:30
А есть список правильно турбированных клонов и неправильно турбированных клонов?
ну один я знаю точно - Профи 5. :) в нем, на верхней плате, есть узел на одновибраторе АГ3, который по спаду /IORQ генерит wait длительностью 400нс для удлинения /IORQ, /WR, /RD. этого достаточно для отклика дешифраторов и БИС.
andykarpov
03.04.2019, 11:48
Сразу нубский вопрос. В чем принципиальное отличие от аналогов на atmega без epm? Более простое подключение A8-A15 + KB0-KB7 + GND?
Запитывать платку через J4?
Все верно, A8-A15, KB0-KB4, GND, VCC. Этого достаточно в минимально рабочем варианте :)
Принципиальное отличие - безвейтовость, ибо в турбо-режимах в отечественных клонах, говорят, атмега не успевает. Ну и требование к самой прошивке упрощаются, многие закидают камнями, наверн, но скетч написан в Arduino IDE :) Теоретически, если б Atmega8 имела CKOUT, можно было бы и на ней собрать, по размеру точно входит...
Д, запитывать через J4.
В любой турбированный комп на Z80 встраиваем один из вариантов схемы и по сигналу /TURBO = '0' получаем удлиненный цикл обращения к устройствам ввода/вывода:
68678
В любой турбированный комп на Z80 встраиваем один из вариантов схемы и по сигналу /TURBO = '0' получаем удлиненный цикл обращения к устройствам ввода/вывода:
Да ,но тогда например в турбо MOD player будет неправильно играть , в нем все посчитано по тактам , и постоянно опрашивается клава и мышь , при опросе будут тормоза ,что выльется в неправильный звук.
Да ,но тогда например в турбо MOD player будет неправильно играть , в нем все посчитано по тактам , и постоянно опрашивается клава и мышь , при опросе будут тормоза ,что выльется в неправильный звук.Не понимаю, что значит постоянно опрашивается и зачем это делать слишком часто.
Если опрос идет по кадровому прерыванию, то задержка будет мизерной.
Но лучше конечно проверить всё это на реальном железе.
PS. Посмотрел исходник MODPLAY - опрос кэмпстон маус происходит по кадровому прерыванию :)
PS. Посмотрел исходник MODPLAY
Есть исходник , какой версии ? Выложи если не сложно.
Если опрос идет по кадровому прерыванию, то задержка будет мизерной.
Но лучше конечно проверить всё это на реальном железе.
Да вот и хочется поэтому для пентагона полностью безвайтовый во всех режимах )
Есть исходник , какой версии ? Выложи если не сложно.Очень старая версия, но думаю принцип работы с мышкой и клавиатурой не изменился.
68681
Очень старая версия
А откуда она у тебя ? Много раз тут искали , ни кто не откликался. Это именно исходник нашей Харьковской версии от Cobra (Enigma) или уже дизасмил кто то ?
Самая первая версия есть у меня , она нигде не публиковалась до недавнего времени , я ее допилил и относительно недавно выложил , это единственная версия у которой самый классный звук , она молотит выборку 31 кГц.
- - - Добавлено - - -
Вот первая версия - https://zx-pk.ru/threads/26977-pentagon-obshchaya-plata-dorabotok.html?p=887844&viewfull=1#post887844
А откуда она у тебя ? Много раз тут искали , ни кто не откликался. Это именно исходник нашей Харьковской версии от Cobra (Enigma) или уже дизасмил кто то ?Нашел в своем архиве FIDO 1997 года в папке DMASOUND
25.02.2000 19:40 60*375 DMA.ZIP
27.02.2000 21:33 8*287 DMAHLPC.ZIP
26.02.2000 22:34 9*642 DMAREAD.ZIP
01.06.1997 14:07 37*479 DMASND.APX
16.06.1997 21:07 7*441 DMASND2.DSC
16.05.1997 09:52 17*884 DMASOUN1.RAR
23.06.1997 15:09 26*840 DMASOUN1.SCM
23.06.1997 15:10 26*230 DMASOUN2.SCM
24.06.1997 10:12 24*229 DMASOUND.RAR
17.07.1999 14:27 16*803 DMA_TXT.ZIP
13.09.1999 08:03 21*504 DMA_TXT1.CP
13.09.1999 08:03 14*592 DMA_TXT2.CP
16.05.1997 09:58 21*497 MODPLAY.RAR
17.07.1999 16:12 26*129 READ_ME!.$B
17.07.1999 14:28 8*933 SCHEME.ZIP
13.09.1999 08:03 26*112 SCHEME1.C
19.07.1999 11:07 26*270 SCHEME2.C
Нашел в своем архиве FIDO 1997 года в папке DMASOUND
Круто , значит это промежуточная версия. Если есть еще какие интересные исходники дай знать !
Сорри ОФФ
caro, еще вопрос , чем ты смотрел исходник ?
Разобрался при помощи Solegstar , в ZASM. И это не наш исходник , кто то дизасмил и комментировал. А нигде истоков не найти кто это мог делать ? , это же история , это круто и интересно.
juka1868
28.04.2019, 19:16
К стати по самому девайсу, являюсь счастливым обладателем. Работает совместно с Карабасом, для которого и брался. Проблем ноль, просто подключил и сразу заработало.
Автору спасибо за отличную разработку :)
andykarpov
14.07.2019, 14:20
UPD: обновил прошивку atmega328, несколько кнопок работала не так, как надо :)
Это кнопки на клавиатуре "[", "]", "" и "Ё", символы с которых нужно было, как оказалось, передавать как "макросы": CS + SS - SS + соотв буква на клаве спектрума (A,S,D,F,G).
Последняя версия в git'е.
А кто-то занимается производством?. Хочу себе на скорп 1024. Будет работать? Ещё бы кемпстон мышь сюда воткнуть!
Demige Тестил на двух пентагонах 1024 то все работало.
Подключал 2 разные клавиатуры, длина проводов была порядка 2м.
solegstar
10.02.2020, 18:37
Подключил данный контроллер к Профи 3.2. Задействовал сигналы TURBO и SPECIAL. TURBO подключил через диод, катодом к 19 выводу разъема IDC20 контроллера, а анодом к выводу 2 микросхемы U25. Сигнал SPECIAL также подключил через диод, катодом к 18 выводу разъема IDC20 контроллера, а анодом к выводу 12 микросхемы U46. Он предназначен для имитации нажатия кнопки "ON/OFF", т.е. блокировки памяти выше 128кб. Эти сигналы включаются с помощью кнопок Scroll Lock (TURBO) и PrintScr (SPECIAL). Сигналы с фиксацией состояния и с запоминанием в еепром меги. RESET подключен на колодку клавиатуры Профи 3.2. Сигнал MAGIC пока не подключал. Питание контроллера подал отдельно на ближайшие точки +5В и GND на нижней плате. Работает контроллер отлично! Свел всё в таблицу.
71486
многие закидают камнями, наверн, но скетч написан в Arduino IDE :) Теоретически, если б Atmega8 имела CKOUT, можно было бы и на ней собрать, по размеру точно входит...
Скетч под 168 атмегу скомпилился. Наверное будет работать?
andykarpov
19.05.2020, 23:18
Скетч под 168 атмегу скомпилился. Наверное будет работать?
Думаю - будет :) Фьюзы только залить те, что активируют CKOUT.
А шить альтеру USB бластером типа этого https://aliexpress.ru/item/32831280653.html?spm=a2g0o.productlist.0.0.30b535e 7GdlDnT&algo_pvid=81aaa062-1798-47b3-ae1e-bd12e1228dd7&algo_expid=81aaa062-1798-47b3-ae1e-bd12e1228dd7-0&btsid=0b8b034a15899557059744776e177d&ws_ab_test=searchweb0_0,searchweb201602_,searchweb 201603_ ?
Либо есть что-то другое качественное?
andykarpov
20.05.2020, 11:07
А шить альтеру USB бластером типа этого https://aliexpress.ru/item/32831280653.html?spm=a2g0o.productlist.0.0.30b535e 7GdlDnT&algo_pvid=81aaa062-1798-47b3-ae1e-bd12e1228dd7&algo_expid=81aaa062-1798-47b3-ae1e-bd12e1228dd7-0&btsid=0b8b034a15899557059744776e177d&ws_ab_test=searchweb0_0,searchweb201602_,searchweb 201603_ ?
Либо есть что-то другое качественное?
Таким бластером будет достаточно :)
andykarpov, А если установить контроллер можно пользоваться обычной клавиатурой?
andykarpov
20.05.2020, 11:59
andykarpov, А если установить контроллер можно пользоваться обычной клавиатурой?
Если ШД контроллера (KB0-KB4) запустить через диоды в спектрум - то должно :)
Попробую на досуге сделать так, чтоб CPLD отдавала Z-состояние вместо 1, тогда диоды будут не нужны.
UPD: обновил и вылил прошивку в github, теперь по-идее диоды не нужны.
На выходе KB0-KB4 теперь Z-состояние когда ничего не нажато.
Должно норм работать в связке с физической клавиатурой.
PS: Не проверял, просьба протестировать.
Добрый день.
Собрал этот контроллер. Работает лучше чем KEYB&SINC от ZXkit, в том плане что не проскакивают обычные символы при нажатии бэкспэйс и курсорных клавиш. Как получу колпачки для чери, проверю со спектрумовской клавой.
- - - Добавлено - - -
efuse:w:0xfd не получилось выставить, оставил по умолчанию (05 если не ошибаюсь), оно на что влияет?
Evgeny Muchkin
21.07.2020, 20:11
А где сабж доступен к приобретению?
andykarpov
21.07.2020, 20:43
А где сабж доступен к приобретению?
Чистые платы вроде были у Павла Рябцова в магазине :)
А где сабж доступен к приобретению?
Я платы заказывал сам на https://jlcpcb.com/, детали купил в чип и дип.
А каким образом устранены проскоки цифр на курсоре? Ведь даже стандартные клавы с расширенными клавишами периодически дают такое. Задержки в макросы введены? Типа CS+20ms+6?
Подключил механическую клаву, замечательно работают вместе и контроллер с ps/2 и механическая клава.
А почему по кнопке TAB бьётся I а не cshift 2? В zeus как табулятор используется cshift 2. Других программ с табуляцией я и не припомню.
SoftLight
25.07.2020, 08:07
А почему по кнопке TAB бьётся I а не cshift 2? В zeus как табулятор используется cshift 2. Других программ с табуляцией я и не припомню.
Например много коммандеров, типа conver comander.
а кое-где для табуляции используется ExtMode. На всех не угадаешь.
Почему бы не сделать на более дешевом и доступном Max3000 EPM3128?
andykarpov
24.10.2020, 11:42
Почему бы не сделать на более дешевом и доступном Max3000 EPM3128?
Исходники все открыты, включая дизайн платы :)
Поэтому вопрос, я считаю, излишен :)
Добавить 3.3В стабик на плату - пустяковое дело, имхо, кому очень захочется.
Исходники все открыты, включая дизайн платы
Поэтому вопрос, я считаю, излишен
Видимо неудачно сформулировал вопрос.
Имел в виду: почему изначально не было сделано на EPM3128?
andykarpov
24.10.2020, 23:03
Видимо неудачно сформулировал вопрос.
Имел в виду: почему изначально не было сделано на EPM3128?
;) ну, изначально, на момент разработки, оба этих чипа стоили одинаково и были доступны у китайцев по адекватным ценам. Не знаю, как сейчас. Раз вопрос возник - значит 3128 легче достать? :)
у 7128 5-вольтовые уровни, у 3128 3.3в cmos, входы толерантны к 5в, и у 3128 на 4 i/o меньше.
ну, изначально, на момент разработки, оба этих чипа стоили одинаково и были доступны у китайцев по адекватным ценам.
Тема открыта в апреле 2019. Мне кажется уже тогда 3128 были существенно дешевле.
Сейчас на али 7128 цена от 1,89 + 0.73 почта (если от 1 штуки)
3128 - от 0,85 + те же 0,73 почта
Хотя да, на эту модификацию разница не слишком большая. Обычно между 7000 и 3000 серией она существеннее.
IvanKoc87
21.11.2025, 20:51
Можно как то проверить исправность платы без клавиатуры ? При подачи питания горит светится диод PWR кратковременно светится ACT и больше признаков не каких не светится
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot