PDA

Просмотр полной версии : (USB, AT)PS/2-ASCII адаптер на PIC16F684



rw6hrm
27.12.2018, 10:49
В рамках проекта Аюша-Z80 (https://www.qsl.net/rw6hrm/html/z80.htm) выкатываю новогодний подарок - адаптер ASCII для клавиатур АТ и PS/2 (и некоторых типов USB-клавиатур). Основа - конструкция Себастиана Кинцля (http://knzl.de/ps2-keyboard-for-apple-ii/).
Схема ну очень простая:
https://qsl.net/rw6hrm/pics/schem_adap.png
Используется 14-ножечный контроллер PIC16F684/688 с минимумом обвески. Нагрузочные резисторы могут для большинства PS/2-клавиатур не понадобиться, однако всё решается опытом (для АТ однозначно нужны).
В этой ревизии сделано:
- конвертация первой половины ASCII-таблицы во всех видах (прописные, строчные, с капсом и шифт-капсом);
- конвертация второй половины в кодировке кириллицы СР866 (альтернативная ДОС, прописные, строчные, с капсом и шифт-капсом);
- конвертация всех управляющих символов Ctrl-*** в любой раскладке;
- индикация раскладки (капс или кириллица). Переключение рус/лат осуществлено клавишей ScrollLock;
- подключена цифровая клавиатура (без "стрелок");
- строб негативный.

Далее чистое ИМХО.
Достоинства:
- малые размеры (меньше, чем на ардуине :));
- практически отсутствует внешняя обвеска;
- не занимает обработкой основной процессор.
Недостатки:
- чип не относится к ультрадешёвым, хотя в продаже присутствует (UPD: уже есть возможность выбора наличествующего чипа в продаже из двух вариантов);
- некоторый народ к выбранному типу контроллера относится холодно.
Я не считаю себя кульным программером пиков, плохо разбираюсь в сишном коде, посему если кто-то может код поправить/подчистить - не возражаю.
Если кто-то:
- желает изменить кириллическую кодировку,
- использовать иной тип контроллера,
в архиве есть небольшой текстовый файлик, указывающий куда нужно приложить ручки. Основной код насколько возможно откоментил.
К чему применить: к самодельным компьютерам уровня 80-х годов, Apple I/II, возможно к "Ирише", "Океану-240",.. (разумеется, что где-то надо кодировку поменять, где-то строб инвертировать, что не составляет сложности)
Такое же краткое описание выложено на моей страничке (https://www.qsl.net/rw6hrm/html/adapter.htm), а вы пока тестируйте, проверяйте, выносите жалобы...
UPD от 14.01.2019: оказывается возможным применение некоторых типов USB-клавиатур, которые не содержат внутри USB-хаб и имеют двухстандартный USB-PS/2 чип. Для подключения достаточно пассивного PS/2-USB переходника.

Далее ссылки на прошивки. Если внезапно найден баг, то изменённый архив выкладывается вместо предыдущего.

1. Описанную выше прошивку CP866 и сорцы со справочными данными можно качать тут (http://www.qsl.net/rw6hrm/zips/ASCIIadaptor.zip). (обновлено 19.01.19)
2. Прошивку КОИ-8 и сорцы для компьютера "Ириша" и частичной замены отечественной клавиатуры 15ВВВ-97-005/006 можно качать тут (http://www.qsl.net/rw6hrm/zips/KOI_8.zip). Схема немного изменена и вложена в архив. (обновлено 19.01.19)
3. (готовится)

rw6hrm
28.12.2018, 08:11
Если использовать этот адаптер с Apple I, то имеем в виду следующее:
- вывод RA5-D7 не подключаем;
- ЕМНИП инвертируем строб;
- вручную переводим адаптер в режим Капс, поскольку первояблоко не понимает маленьких буковок.

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

tnt23
28.12.2018, 23:15
Возможно ли использовать пин 4? у "Океана-240" хост подтверждает принятие байта от клавиатуры сигналом ACK, получив который, клавиатура снимает сигнал STROBE. В принципе и без него может сработать, но с подтверждением надежнее.

rw6hrm
29.12.2018, 07:44
Возможно. Пин 4 работает только на вход. Тогда в последней секции main.c:

// assert strobe
P_STROBE = 0;
// DelayUs( 15 ); // это закомментить или убрать
// а тут поставить цикл ожидания сигнала АСК и как только подтверждение получено снимать строб
P_STROBE = 1;

Разумеется, что в начале кода нужно определить пин, нужен ли ему TRIS и т.п. Ну и с полярностью строба определиться, чуть выше стоит его определение. Места в памяти хватит, там ещё 35% свободно.
Есть ещё и железный вариант, использовать внешний триггер (как D18.2 в одноплатном варианте моей конструкции (https://www.qsl.net/rw6hrm/pics/z80new.gif)), но это разве что для проверки ибо плюс ещё один корпус.

HardWareMan
29.12.2018, 11:07
Если АСК в машинках снимается автоматом (не нужно ждать именно фронт), то просто запилите обработку АСК как сказано выше. Тем, кому он не нужен будут просто подтягивать его на активное состояние (вечный АСК).

rw6hrm
29.12.2018, 11:24
Оно несложно доделать прошивку, там от силы пять строчек добавить, всё равно подобные машинки используют КОИ-8 или ещё какой-нить треш, поэтому всё равно перетранслировать весь проект. А там глядишь - и иришеводы подтянутся, у них вроде что-то подобное использовалось.

Anubis_OD
29.12.2018, 12:53
Надеюсь скоро попробовать это на Ирише.
как раз приступил с наладке..
там правда КОИ-8 надо а не CP866.. но поправить думаю не сложно будет.
и там еще сигнал IBF - заполнение буфера клавы, вроде логика его похожа с ACK а Океане.

rw6hrm
29.12.2018, 13:29
Если что - пишите в личку, разберёмся вместе. На праздниках попробую сделать черновую версию, хотя бы таблицу перебью, а пока мне сообщите полярность нужного строба и АСК-заменяющих сигналов (а то книжку по Ирише дома найти не могу).

Anubis_OD
29.12.2018, 14:02
67470

Извиняюсь что картинкой... на бегу всё..

rw6hrm
29.12.2018, 15:40
Да, спасибо. За выходные попробую сделать.

- - - Добавлено - - -

tnt23, жду описание сигнала АСК, строба и нужной кодировки.

tnt23
29.12.2018, 16:31
Да, спасибо. За выходные попробую сделать.

- - - Добавлено - - -

tnt23, жду описание сигнала АСК, строба и нужной кодировки.

Отписал в личку, дублирую тут :)

ACK и STB в "Океане" прямые, активному состоянию сигналов соответствует уровень логической 1 пятивольтовой логики (>2.5в). Клавиатура, сформировав байт символа на линиях К7..К0, взводит ACK. Компьютер, обнаружив ACK, считывает байт и в ответ формирует короткий строб STB (длительностью несколько микросекунд, насколько я успел замерить и насколько следует из дизассемблированного кода).

Кодировка кириллицы КОИ-7, в таблице знакогенератора "Океана" присутствуют большие и маленькие символы латиницы и кириллицы. Возможно ли переключение раскладки LAT/РУС с клавиатуры, я пока не знаю. Как минимум ESC последовательность 1B 37 00 включает латиницу, 1B 37 01 кириллицу, а 1B 36 02 смешанное отображение. Можно привесить на Scroll Lock переключение и посмотреть, что выйдет.

(Я преклоняюсь перед этим проектом, но свой контроллер буду делать на AVR :))

rw6hrm
29.12.2018, 18:57
Ага, значит с Иришей сигналы полностью инверсны... Просто так на переключение не повесить тройные секвенции, там только карты символов переключаются, но подумаю, что бы сотворить...

rw6hrm
01.01.2019, 21:52
Прошивку КОИ-8 и сорцы для компьютера "Ириша" и частичной замены отечественной клавиатуры 15ВВВ-97-005/006 можно качать тут (http://www.qsl.net/rw6hrm/zips/KOI_8.zip). Схема немного изменена и вложена в архив.
В существующем варианте обеспечивает преобразование скан-кодов с (AT)PS/2-клавиатур в восьмибитный параллельный ASCII код. Кириллица зашита в формате КОИ-8.
Поддерживаются функциональные клавиши F1-F5 и стрелки курсора (только сами стрелки, на цифровой клавиатуре поддержка не гарантируется!).
ВК = Enter, ПС = Shift+Enter.
ГТ = Shift+TAB (код 0х09). При этом код ТАВ 0х18.
Информация о кодах клавиатуры взята из книжки про "Иришу".
Строб негативный. Вход сигнала /IBF негативный.
Клавиша Старт/Лок.Сброс - нормально замкнутая, прерывает питание контроллера (см. схему в архиве). Клавишу Сброс компьютера необходимо перенести на корпус.
Светодиод NumLock аналогичен светодиоду ПРД., зажигается при наличии символа на выходе конвертера, погасает при возврате сигнала /IBF в неактивное состояние.
Замечена память на 1-2 нажатых символа, требуется проверка.

Все прошивки (если они внезапно будут плодиться ;)) будут выложены в первый пост.

Anubis_OD
01.01.2019, 23:25
Спасибо за труды, обязательно проверю. Сейчас как раз плату процессора Иришы запускаю.

CodeMaster
01.01.2019, 23:39
и частичной замены отечественной клавиатуры 15ВВВ-97-005/006
А полная замена возможна или у этого МК уже ног не хватит?

rw6hrm
02.01.2019, 00:14
А ног более и не нужно кмк, все нужные сигналы уже использованы, а остальные не особо важны. Для программы ещё есть 22% памяти, так что если надо ещё какие клавиши сделать - должны уместиться. Ну это как я понял из описания клавиатуры.
Если чего упустил - говорите.

CodeMaster
02.01.2019, 10:09
все нужные сигналы уже использованы, а остальные не особо важны
Для Иришы может и не нужны, а для терминала 15ИЭ-00-013 (для которого она создавалась) нужны все.

rw6hrm
02.01.2019, 10:23
нужны все
Посмотрел слепую дежавюшку. Часть сигналов реально не нужна или можно заглушить терминаторами, остальные "нужные" делаются парой элементов ТМ2. Но спорить не буду, поскольку не ДВКшник нифига, можно призвать @MM для консультации.
Ну а клавиши - да, использованы далеко не все, но это ерунда.
И вообще - в чём проблема попробовать железку на реале? ;)

CodeMaster
02.01.2019, 10:39
И вообще - в чём проблема попробовать железку на реале?
Пока не понимаю как, ибо смотрю на схему клавиатуры (https://forum.maxiol.com/index.php?act=Attach&type=post&id=7871) и вижу переключатели (ЛИН, РЕД, ПЧ и пр.) используемые для управления терминалом идущие на разъём клавиатуры. Или подразумевается делать гибрид - ПЦ клава выдающая KOI-8 + механические кнопки для остального?

rw6hrm
02.01.2019, 15:09
ЛИН, РЕД, ПЧ и пр.
Упомянутые клавиши не принимают участия в формировании кодов передаваемых с клавы символов, посему и тратить ноги МК на них нет смысла, П2К наше всё ;). А вот с переключателем чётности - тут у меня серьёзный вопрос, что с ним делать - не представляю даже...

Anubis_OD
05.01.2019, 14:02
Собрал контроллер для Иришы. Работает.
Вот пара фоток:

https://i107.fastpic.ru/thumb/2019/0105/ba/_d836cfec8bcd7e47588f6183db767dba.jpeg (https://fastpic.ru/view/107/2019/0105/_d836cfec8bcd7e47588f6183db767dba.jpg.html)

https://i106.fastpic.ru/thumb/2019/0105/d1/_ee562d92d95d43097ef0797840f74ed1.jpeg (https://fastpic.ru/view/106/2019/0105/_ee562d92d95d43097ef0797840f74ed1.jpg.html)

Пригодился заводской PS/2 хвостик..Вынес кнопку RESET.

Вот так стал на плату.

https://i107.fastpic.ru/thumb/2019/0105/2a/_0fa0ead440f664ad420fda1664005f2a.jpeg (https://fastpic.ru/view/107/2019/0105/_0fa0ead440f664ad420fda1664005f2a.jpg.html)

https://i107.fastpic.ru/thumb/2019/0105/ad/_5ac3741f7448814f3f0b82f4905d6cad.jpeg (https://fastpic.ru/view/107/2019/0105/_5ac3741f7448814f3f0b82f4905d6cad.jpg.html)

Всё работает, Но не удалось переключится на русский.
Скрол лок. меняет раскладку. Вот например 6 клавиш qwerty и.. они же но с нажатой скролок. те. выходит JCUKEN. большими буквами.

https://i106.fastpic.ru/thumb/2019/0105/11/_00d3046f98c9a0b74e084e8c45d10911.jpeg (https://fastpic.ru/view/106/2019/0105/_00d3046f98c9a0b74e084e8c45d10911.jpg.html)

rw6hrm
05.01.2019, 16:47
Всё работает, а вот отображается почему-то в семибитной кодировке..., с клавы символы выходят правильно. Ещё раз проверил по опубикованным прошивкам - всё сходится...

Anubis_OD
05.01.2019, 17:05
Возможно в отладчике так..запущу редактор Иритекст - проверю в нём..Ещё раз спасибо за проект.

rw6hrm
05.01.2019, 17:09
Проверьте тестером соединение между 2-й ножкой адаптера и 9 ножкой D37 (по книжке), 589ИР12 (линия КВ7). Очень похоже, что она в обрыве, только в этом случае будут передаваться 7-битные коды, заменяя большими латинскими маленькую кириллицу. А также, вполне возможно, что кириллица в системном состоянии не отображается. Скажете, что там в редакторе получилось...

Anubis_OD
05.01.2019, 17:14
На бит 7 сразу подумал, но проверил. Он доходит. С ним всё ок. С редактором не так всё просто. У меня его пока нет. Чтобы его загрузить в комп надо сначала контроллер fdd собрать..но когда всё сделаю - отпишусь

rw6hrm
05.01.2019, 18:50
Андрей, не забудьте ещё вспомнить о таблицах 9.4 и 9.6 из книжки :), там не так всё просто с переключением отображаемых символов. Что-то там как-то сначала ESC E, затем Ctrl+N/Ctrl+O...

Походу доделал базовую прошивку, внеся в неё полный список комбинаций Ctrl+*** (а то как-то потребовалось ввести 1F...), а также активировал цифровую клавиатуру - только цифры. Введение "стрелочек" затруднительно в связи с применённым упрощённым алгоритмом декодирования, да и не нужны они, поскольку не стандартизованы (в СР/М используем комбинацию Ctrl+H/J/K/L, но программы требую часто иного). Архив первой прошивки обновлён.

Anubis_OD
06.01.2019, 14:01
Проверил Ctrl+N/Ctrl+O. Переключает наборы символов.

- - - Добавлено - - -

А может в прошивке для Иришы сделать чтобы по ScrollLock передавались Ctrl+N/Ctrl+O ?
Иначе смысла нет в скроллоке.

rw6hrm
06.01.2019, 15:35
Надо подумать как... Хотя и в книжном варианте в клаве имелись клавиши рус/лат, а комбинации Ctrl+N/Ctrl+O влияют только на видеоадаптер. Они же, как я понял, в некоторых режимах переключают ширину символов...
В общем, пока разберёмся с управлением, а я подумаю про выдачу последовательности символов...

Anubis_OD
06.01.2019, 17:51
Наверно не стоит так делать.комп задуман как задуман. Значить такой был замысел авторов.

rw6hrm
06.01.2019, 20:27
Вот и надо бы понять этот замысел, чем авторы руководствовались и почему разделили поле символов на несколько блоков. Мож, конечно, в то время это было естественным, но для нас это нонсенс и требует некоего системного патча...
Возьмём паузу. Походу с Иришей Вы на форуме в единственном числе остались, так что лучше для начала разобраться с управлением компом, а потом будем думать, как совершенствовать конструкцию и юзабельность ;)

tnt23
07.01.2019, 17:55
почему разделили поле символов на несколько блоков

Может, не совсем в кассу, но в "Океане-240" есть рабочая ячейка, в которой задается режим отображения символов (0 - LAT, 1 - RUS, 2 - заглавная латиница 40h..5fh, заглавная кириллица 60h..7fh). И есть ESC-последовательности для переключения режима.

Anubis_OD
07.01.2019, 19:31
Да..в Ирише тоже так. По адресу FF50 хранится текущий адрес группы отображаемого знакогенератора.

rw6hrm
10.01.2019, 19:45
...итак, кто меньше? ;)

Xrust
11.01.2019, 20:10
- чип не относится к ультрадешёвым, хотя в продаже присутствует
Блин, если 42р за дип корпус не ультрадешево, то я не знаю.

Anubis_OD
11.01.2019, 23:19
В Украине вналичии в радиомаге по 50грн. (1.8$)

rw6hrm
14.01.2019, 09:15
...я подозреваю, что будете смеяццо и тыкать в меня пальцАми ;), но вроде не 1 апреля, а упомянутый адаптер оказывается прекрасно работает с USB-клавиатурами,.. разумеется с теми, что не содержат встроенный хаб. Для меня это было приятной неожиданностью, хотя и в курсе, что многие USB-клавы содержат двухстандартный USB-PS/2 чип.
Сделал просто: взял пассивный PS/2-USB переходник от мышки зелёного цвета и первую попавшуюся USB-клаву, подключил.., и заработало! Если не торопитесь, чуть позже прикреплю хреновенькое видео для подтверждения своих слов.
Так что USB-хост для клавы изобретать не требуется, экономим от 14 до 200 долларов (краткое гугление на тему USB to ASCII). Очередной староновогодний подарок, так сказать...

MacBuster
14.01.2019, 10:09
...итак, кто меньше?
Обратную сторону можно посмотреть?

rw6hrm
14.01.2019, 11:57
Обратную сторону можно посмотреть?
..да что там смотреть.., МГТФ, залитый поверх полиэтиленом ака китайские сопли, чтобы не развалилось. Вот на этом фото видно, https://pp.userapi.com/c852136/v852136717/8ce1f/UoEu3jSM1i8.jpg

rw6hrm
14.01.2019, 14:55
Как и обещал, видеоподтверждение, если кому интересно. Так что с полным основанием можно говорить, что адаптер поддерживает ТРИ типа современных клавиатур :D

https://youtu.be/EfoUngu_RRw

tnt23
14.01.2019, 16:35
...итак, кто меньше? ;)

Определенно не меньше, но зато сразу с неонкой USB программатором унутре, и писать можно практически на C, и прошивать за доли секунды :)

rw6hrm
14.01.2019, 16:43
Ну неонка - это святое ;) У меня ж тоже код на Сях писан. А такие малышки у меня в контроллерах пневмоподвески и адаптере ДМРВ работают.

Xrust
15.01.2019, 11:54
Определенно не меньше, но зато сразу с неонкой USB программатором унутре, и писать можно практически на C, и прошивать за доли секунды :)

А где сие творение? Уже работает?

tnt23
15.01.2019, 12:18
А где сие творение? Уже работает?

Работает его старший брат на полновесной ардуине: https://zx-pk.ru/threads/29718-quot-okean-240-quot-podklyuchenie-klaviatury.html?p=986144&viewfull=1#post986144

Соберусь с духом и сделаю переходник под сие творение тоже.

rw6hrm
19.01.2019, 20:42
Нашел пару косяков в кириллической раскладке, причём в обеих версиях. Перезалил прошивки.
Всё-таки хорошо, что машинка делалась для работы, а не ради попаять ;)

rw6hrm
15.04.2019, 10:57
Уважаемый barick использовал для своей конструкции чип 16F688 - можно использовать оригинальную прошивку. Пост с картинкой теста тут, https://zx-pk.ru/threads/29372-ayusha-z80-sr-m-sovmestimyj-kompyuter.html?p=1007804&viewfull=1#post1007804

rw6hrm
15.04.2019, 14:59
Подновил текст первого поста и страничку с описанием адаптера в связи с возможностью применения ещё одного варианта микроконтроллера.