Просмотр полной версии : Контроллер PS/2 клавиатуры на КР580ВВ51А (i8251a) ?
alex-eller
16.02.2016, 14:58
Не понимаю почему никто до сих пор не пробовал создать подобную реализацию, ведь интерфейса по сути очень похожи. Почему всегда для этого обязательно используется МК, с последовательным ВВ !? Почему нельзя использовать одну микруху последовательного ВВ О_О
В подтверждении своей идеи привожу схему переходника PS/2 мышей на СОМ разъём. Который собственно и есть выход оригинальной i8251 (КР580ВВ51А). И никаких микроконтроллеров там не потребовалось, прямое переназначение контактов!
http://pinoutsguide.com/InputCables/MousePs2Serial_pinout.shtml
Опять же и цена у одной 51-ой тупой меньше чем у МК. И программировать гораздо проще. Не понимаю...
И куда цеплять такой агрегат? С каким компом его можно использовать?
В подтверждении своей идеи привожу схему переходника PS/2 мышей на СОМ разъём. Который собственно и есть выход оригинальной i8251 (КР580ВВ51А). И никаких микроконтроллеров там не потребовалось, прямое переназначение контактов!
http://pinoutsguide.com/InputCables/MousePs2Serial_pinout.shtml
По ссылке не то, там описан вариант с мышью которая может работать в двух режимах - PS/2 и COM.
Очень давно я подключал PS/2 клавиатуру к ВВ51 (в составе КСМ от ДВК) вместо MC7004, но там использовался синхронный режим приема (и перепаялось кое-что на плате) - у ВВ51 есть отдельный вход для тактового сигнала. Не помню, удалось ли послать данные обратно на клавиатуру, это необходимо чтобы настроить режимы (параметры автоповтора) и управлять светодиодами.
alex-eller
16.02.2016, 16:58
И куда цеплять такой агрегат? С каким компом его можно использовать?
В идеале на любой 8-ми битник. Если получится конечно. Вопрос в простоте, дешевизне и удобстве. Для МК нужен отдельный программатор. Да и выглядит глупо, когда периферийный контроллер в восьмиибитнике, чуть ли не на порядок мощнее чем собственно ЦПУ.
- - - Добавлено - - -
По ссылке не то, там описан вариант с мышью которая может работать в двух режимах - PS/2 и COM.
Очень давно я подключал PS/2 клавиатуру к ВВ51 (в составе КСМ от ДВК) вместо MC7004, но там использовался синхронный режим приема (и перепаялось кое-что на плате) - у ВВ51 есть отдельный вход для тактового сигнала. Не помню, удалось ли послать данные обратно на клавиатуру, это необходимо чтобы настроить режимы (параметры автоповтора) и управлять светодиодами.
Я в курсе что там применялась двухрежимная мышь, но имхо с этим можно разобраться. Насчёт синхронного режима, насколько я понимаю ВВ51 - универсальный, то есть синхронно / асинхронный, если что пусть меня поправят. А насчёт обратной связи и светодиодов на клаве... да и пёсс ними)
Приняли сканкод со сдвигового регистра ВВ51, дальше-то что с ним делать?
Преобразовывать? Если да, то чем?
А если нажаты несколько клавишь?
Не помню, удалось ли послать данные обратно на клавиатуру, это необходимо чтобы настроить режимы (параметры автоповтора) и управлять светодиодами
Вот это вот совсем не нужно. В качестве "шашечек" - да, но ехать - лучше без этого :)
- - - Добавлено - - -
Да и выглядит глупо, когда периферийный контроллер в восьмиибитнике, чуть ли не на порядок мощнее чем собственно ЦПУ.
Да ладно... Уже смирились с этим, аутентичную клавиатуру не только трудно найти/сделать, но она еще и менее удобная, чем китайская-ПЦ.
Можно себя поуспокаивать тем, что подключение USB потребует не на порядок более мощного контроллера, а на пару порядков :)
alex-eller
18.02.2016, 13:50
Приняли сканкод со сдвигового регистра ВВ51, дальше-то что с ним делать?
Преобразовывать? Если да, то чем?
А если нажаты несколько клавишь?
В формате PS/2 - при нажатие клавиши выставляется скан код нажатой клавишы, а при отпускании сначало код 0F0h, а потом скан код отпущенной клавишы. Насколько я понимаю, именно это позволяет обрабатывать одновременное нажатие нескольких кнопок, даже на чисто на символьной раскладке. В играх же мы нажимаем одновременно W,A,S,D в разных комбинациях.
Насчёт чем обрабатывать не понял. Да как обычно подпрограммой монитора, или драйвером, называйте как хотите. Насколько я понимаю вы интересуетесь как это подключать к существующим восьмибитникам. Ну естественно потребуется программная инъекция) Как и для любой пристыковываемой железки.
ЗЫ. радует что пока никто не развенчал моей задумки. Видимо она всё таки реализуема) Хотя повторюсь, совершенно непонятно, почему никто ранее так не делал.
Хотя повторюсь, совершенно непонятно, почему никто ранее так не делал.Потому так и не делают:
1) Для начала протокол RS232 не совместим с протоколом PS/2;
2) Программная инъекция, как вы говорите, не подойдет, нужна железная эмуляция, поскольку
программы в таких компьютерах работают не через драйверы железа, а чаще всего напрямую с железом.
alex-eller
18.02.2016, 22:29
1) Для начала протокол RS232 не совместим с протоколом PS/2;
Можете уточнить почему именно? Возможно вы имеете ввиду гальваническую развязку порта RS232. Но ведь собственно микруха имеет TTL выходы. А для согласования напряжения с внешним интерфейсом применяется отдельная микросхема.
s_kosorev
18.02.2016, 23:11
http://www.computer-engineering.org/ps2protocol/waveform3.jpg
особое внимание на квитирование
alex-eller
19.02.2016, 02:14
http://www.computer-engineering.org/ps2protocol/waveform3.jpg
особое внимание на квитирование
Вы демонстрируете режим передачи данных от хоста к устройству, в данном случае от компа к клаве. Который я в данном случае вообще не рассматриваю. Имхо можно и пренебречь световой индикации на клаве.
Но спасибо за замечание, хотя я его и не понял. Поясните если можно)
s_kosorev
19.02.2016, 09:51
от устройства к хосту тоже есть квитирование, линии данных ОК, хост тоже должен подтверждать примем данных от клавиатуры, так же он линией Data может сигнализировать устройству что он занят и устройство будет ждать освобождения
Насчёт чем обрабатывать не понял. Да как обычно подпрограммой монитора, или драйвером, называйте как хотите.
Ну вот на этом месте всё и развалилось.
Софт , как правило, упорно лезет работать напрямую с портом клавиатуры.
В формате PS/2 - при нажатие клавиши выставляется скан код нажатой клавишы, а при отпускании сначало код 0F0h
Верно, местные ёжики про это осведомлены :)
Так кто именно будет копить инфу о нажатых/отпущенных кнопках и сублимировать это в некое подобие ответа порта?
- - - Добавлено - - -
радует что пока никто не развенчал моей задумки. Видимо она всё таки реализуема)
А зачем развенчивать? Пускай человек порадуется, понадеется....:)
Error404
19.02.2016, 12:34
В идеале на любой 8-ми битник. Если получится конечно. Вопрос в простоте, дешевизне и удобстве. Для МК нужен отдельный программатор. Да и выглядит глупо, когда периферийный контроллер в восьмиибитнике, чуть ли не на порядок мощнее чем собственно ЦПУ.
Таких разработок имеется. И даже не обязательно городить дополнительную ВВ51, можно воспользоваться любыми портами в т.ч. и параллельными (например, магнитофонными входами-выходами, как в известной древнючей реализации интерфейса с PS/2 на ВВ55). Проблема только в том, что на платформах ретроПК почти не осталось программирующей публики, а значит нет нового софта (ну, несравнимо по количеству), и ценность имеет только старый - из которого половина лазит в клавиатуру мимо BIOS, и который никто не перепишет. Посему - только эмуляция старого аппаратного решения на выводах куда подключаются механические кнопки, а для этого ВВ51 слишком примитивна.
Посему - только эмуляция старого аппаратного решения на выводах куда подключаются механические кнопки, а для этого ВВ51 слишком примитивна.ВВ51 в данном случае не примитивна, а просто не подходит.
Надеюсь автор темы на основе той информации, что он уже получил, посидит, подумает и поймет что он ошибается.
alex-eller
20.02.2016, 12:52
Забавно, один говорит что для эмуляции PS/2 достаточно двух битного регистра. А другой что ВВ51, которая явно на порядок сложнее 2-ух бит, для этого слишком примитивна. Прям когнитивный диссонанс )
Просто не хотелось бы лепить отсебятину. Хотелось бы использовать типовое решение.
Хотелось бы использовать типовое решение.
типовое решение для приёма с клавиатуры - обычный сдвиговый регистр ...
alex-eller
20.02.2016, 22:56
Тоже вариант. Но тогда придётся отдельно лепить квитирование, квантование и проверку чётности. Это что за монстр в результате получится(
Можно себя поуспокаивать тем, что подключение USB потребует не на порядок более мощного контроллера, а на пару порядков
На самом деле, опен сорс настолько крут, что и это победили. http://wiki.amperka.ru/projects:keylogger Тут не полноценная usb точка, а перехватчик. Используют модифицированную V-USB, чтобы успеть за скоростью передачи. А про полноценный программный HID на самом маленьком из AVR (ATtiny45) наверное все давно слышали, с помощью той же библиотеки V-USB. Так что вот, восемь бит и 16 мегагерц для побед по теме клавиатуры должно быть достаточно. Хотя и сложно.
Осталось задаться вопросом, где взять кардиограмму хотя бы 16 мгц, и куча пинов ввода-вывода на старых чипах. :)
На моей рк-шке 1,78. :) Да и к тому же кристалл совсем не AVR. :)
s_kosorev
21.02.2016, 02:44
так avr надо обрабатывать еще и виртуальную матрицу клавиатуры, тут по таймингам гораздо сложнее чем usb хост
alex-eller
21.02.2016, 11:41
Вопрос как раз в том и состоит чтобы обойтись без МК. Уж лучше россыпуха или программная реализация. Сам склоняюсь к рассыпухе, имхо проще и дешевле.
s_kosorev
21.02.2016, 18:45
Сам склоняюсь к рассыпухе, имхо проще и дешевле.
ну взять к примеру клавиатуру ориона, 12х8 это нужно 12 регистров ИР23 или что то в духе, только на эмуляцию матрицы, что уже дороже avr
Люди, сделать в "лоб" на ВВ51А не представляется мне возможным. Протокол PS/2 он как бы нифига не UASRT, не SPI. То есть в стандарт он не ложится. Можно сдвиговыми регистрами играться, но ВВ51А не подходит точно. Вообще для таких целей лучший вариант - обычная восьмибитка любая - MSP430, PIC, AVR, 8051, etc... ARM сюда то же мало подходит, хотя можно и его.
Вот, в бутике 72 руб http://www.chipdip.ru/product/pic12f629-i-p/ или atmega такую-же еще дешевле. Достаточно чуть более, чем полностью и еще место останется. Где за ~70 рублей взять ВВ51А?
alex-eller
22.02.2016, 08:10
... Где за ~70 рублей взять ВВ51А?
Там же за 27
http://www.chipdip.ru/product/kr580vv51a/
Причём эта лавочка имхо самая дорогая.
- - - Добавлено - - -
ну взять к примеру клавиатуру ориона, 12х8 это нужно 12 регистров ИР23 или что то в духе, только на эмуляцию матрицы, что уже дороже avr
Да в топку все эти ваши Орионы и иже с ними. Я уже не знаю как донести свою элементарную мысль. Я не хочу не какую клееную на коленках дрянь. Я хочу нормальную клаву, которая продаётся на каждом углу и стоит копейки!
Я уже не знаю как донести свою элементарную мысль.
Фигня в том, что ты так и не донес ее.
Вроде как ты пытался сказать, что МК-адаптер для связки ПЦ-клава=>Ретрокомп - это дорого и не православно, лучше использовать ВВ51А.
Народ прикинул, что кроме ВВ51 понадобится еще чемодан микросхем для полной эмуляции родной механической клавы (ибо иначе оно не будет работать) и категорически не согласен с тобой. И профита не видит.
В качестве примера дали Орион. Ты его отправил ф топку. Почему - непонятно...
Так что же ты имел ввиду своим предложением/вопросом?
- - - Добавлено - - -
Я не хочу не какую клееную на коленках дрянь.
А что это такое???
Народ давно пользует любую "продается на каждом углу" ПЦ-клаву, посредством МК-адаптера. А что хочешь ты предложить?
alex-eller
22.02.2016, 12:30
Народ прикинул, что кроме ВВ51 понадобится еще чемодан микросхем для полной эмуляции родной механической клавы (ибо иначе оно не будет работать) и категорически не согласен с тобой. И профита не видит.
Тема моего вопроса, буквально и строго однозначна указанна в его заголовке. Сколько раз вам надо его прочитать что понять что там нет никаких упоминаний о "родных клавиатур", "клавиатур Орина", и всего прочего что неким необъяснимым для меня образом, приходит вам в голову.
Вот теперь всё понятно. Твоя идея - устройство контролирущее PS/2 клавиатуру. Ну например, что бы не потерялась :)
Тема моего вопроса, буквально и строго однозначна указанна в его заголовке
Я уже боюсь что-либо спрашивать...
Тебя интересует сам вопрос "а если подключить клаву к ВВ51, то получим ли что-либо на выходе, не применительно к какому-то ретрокомпу, а вообще и глобально"? :)
Прямой такой формулировки небыло, ибо было сравнение с микроконтроллерными схемами для конкретных машин, отсюда и недопонимание.
- - - Добавлено - - -
Ну например, что бы не потерялась
Веревочка, привязанная к ножке стула и клаве - не даст ей потеряться :)
s_kosorev
22.02.2016, 12:58
В идеале на любой 8-ми битник. Если получится конечно. Вопрос в простоте, дешевизне и удобстве. Для МК нужен отдельный программатор.
речь шла о любом "8-ми битник", не понятно к чем эта реплика
Да в топку все эти ваши Орионы и иже с ними. Я уже не знаю как донести свою элементарную мысль.
в монитор влезть можно но смысла нет, есть софт который напрямую работает с ВВ55, то есть выход один, нужно эмулировать матрицу, и подключать её к стандартному разъему клавиатуры, либо совсем круто, эмулировать в том числе и ВВ51 и вставлять в панельку вместо онной
Идею развенчивали как просил, реакция неадекватная в итоге
alex-eller
22.02.2016, 13:55
Я уже боюсь что-либо спрашивать...
Тебя интересует сам вопрос "а если подключить клаву к ВВ51, то получим ли что-либо на выходе, не применительно к какому-то ретрокомпу, а вообще и глобально"? :)
Меня интересует то что указанно в названии темы "Контроллер PS/2 клавиатуры на КР580ВВ51А".
Не "клаву к ВВ51", а ""клаву PS/2 к контроллеру клавы на ВВ51"
Не получим что либо бы на выходе, а на выходе контроллера PS/2 клавиатуры на ВВ51, получим скан код нажатой клавишы.
Не "применительно к какому-то ретрокомпу", а втопку ваши ретро компы, потому что когда начинаешь говорить об этом, вылазят "начальники транспортных отделов" которые липнут с вопросами "а к Ориону например". Ещё ничего нет, а его уже видетили интересует как "это" подключить к "Ориону". Да мне по барабану как "это" подключить к "Орину", или любому другому БК. Потому что никакого "это" пока НЕТ! Опять же потому что вместо обсуждения протокола PS/2 и особенностей программирования ВВ51-ой, что меня изначально интересовало, и о чём однозначно я указал в названии темы, лезут со всякой ахинеей.
s_kosorev
22.02.2016, 14:38
топик стартер понимает разницу между PC/XT и PS/2 ?
топик стартер понимает разницу между PC/XT и PS/2 ?
Принципиальной разницы нет.
обсуждения протокола PS/2 и особенностей программирования ВВ51-ой, что меня изначально интересовало,
Там протокол не требуется - обычный сдвиговый регистр 10/11 бит.
Сам пробовал делать, но преобразователь PS/2 матрицы в ZX больно дорого выходит.
На простой логике ...
Если очень надо 580ВВ51, то можно использовать 580ВМ80 на 5В.
Не пригодится для клавиатуры, так ЮТ88 собрать можно :)
s_kosorev
22.02.2016, 16:43
Принципиальной разницы нет.
в точку, если учесть что PS/2 устройство спокойно относиться к отсутствию квитирования
можно тупо принимать 8 бит после стартового, но это не PS/2, но и не XT, будет электрический протокол XT, сканкоды PS/2
alex-eller
22.02.2016, 16:46
Принципиальной разницы нет.
Там протокол не требуется - обычный сдвиговый регистр 10/11 бит.
Что значит не требуется!? А стартовый бит, а стоповый, а проверка чётности, а синхронизация. Фигасе - ниочём О_О А 51-ая всё делает на автомате. Только режим выстави и скан коды получай.
Сам пробовал делать, но преобразователь PS/2 матрицы в ZX больно дорого выходит.
Что значит PS/2 матрицы?
- - - Добавлено - - -
топик стартер понимает разницу между PC/XT и PS/2 ?
А топик флудер хоть знает что такое PS/2? Уж мерится так мериться)
А стартовый бит, а стоповый, а проверка чётности, а синхронизация
Итого: 10(11) бит. Клавиатура передаёт коды вне зависимости от наличия/отсутствия приёмника.
Строки/столбцы РС клавиатуры не совпадают с ZX ...
alex-eller
22.02.2016, 18:50
Итого: 10(11) бит. Клавиатура передаёт коды вне зависимости от наличия/отсутствия приёмника.
Ну и что что передаёт, пускай передаёт. Во первых 51ая обеспечит хоть какой то контроль, за передаваемые от клавы кодами, благодаря контролю чётности. Мелочь конечно, но почему не взять, если дают) Во вторых она определяет конец передачи, что позволяет формировать прерывание по концу приёма скан кода. Не бог весть что, но в противном случае это всё корпуса корпуса. Остаётся только добавить обвес на начало передачи. Но там совсем просто, Clock и Data должны быть в единице, и не вестись приём очередного скан кода. Бог даст одним дополнительным корпусом обойдётся.
Строки/столбцы РС клавиатуры не совпадают с ZX ...
В который раз повторяю, меня это совершенно не интересует. Если кто то хочет добавить себе эффективный контроллер PS/2 клавиатуры, для использования полноценной, удобной, качественной и чрезвычайно распространённой клавы, которую не надо лабать на коленке и лепить кривую отсебятину. Пусть используют. Если нет - скатертью дорога. Я лично эту идейку, для себя готовлю.
offtop, но видел у своего друга в 1994...5 году клавиатуру от ДВК3/МС0585 на спектруме! (их тогда на свалку везли тоннами, она же МС7004). Подключалась через самопальный контроллер на ~10...15 микрух (по-моему РУ10 использовалась). Причем плата была "в разработке", т.е. все как бы работало, но иногда сами клавиши нажимались, был видать какой-то глюк или наводка шла откуда-то. Там правда обычный serial протокол, что по идее делает эту клаву идеальной для подключения через ВВ51. Токо раз уж про serial протокол речь то нафиг нужен такой мутный чип как ВВ51? Его надо как-то программировать для того чтоб он начал принимать\передавать данные? По-моему надо а иначе по сбросу он не готов к работе. Обычный КР581ВА1А каких наклепали тонны еще до появления ВВ51 может сходу работать с serial протоколом. Что еще интересно на заре самосбора всяких клонов PC и того же atm turbo ходила по fido инструкция переделки МС7004 на XT-протокол, так как достать оригинальную PC клавиатуру было раза в 3 дороже.
CodeMaster
24.02.2016, 02:26
Не понимаю почему никто до сих пор не пробовал создать подобную реализацию, ведь интерфейса по сути очень похожи.
Если кто то хочет добавить себе эффективный контроллер PS/2 клавиатуры, для использования полноценной, удобной, качественной и чрезвычайно распространённой клавы, которую не надо лабать на коленке и лепить кривую отсебятину.
Аккуратненько попробую ещё один заход для перевода мысли топикстартера на русский: "Почему до сих пор никто не создал компьютер собственной конструкции, в котором для подключения PS/2 клавиатуры используется ВВ51А?".
"А?" - как бескомпромиссно спрашивает моя 4-х летняя дочка, когда она не сомневается в своей правоте ;-)
alex-eller
24.02.2016, 10:28
...
Токо раз уж про serial протокол речь то нафиг нужен такой мутный чип как ВВ51? Его надо как-то программировать для того чтоб он начал принимать\передавать данные?
Что вы так этого боитесь. А в данном случае и этого не надо, там всего то один регистр состояния из восьми бит. Вот и всё программирование.
Обычный КР581ВА1А каких наклепали тонны еще до появления ВВ51 может сходу работать с serial протоколом.
Не с ходу, просто у него режим работы, коей в ВВ51 задаётся регистром состояния, здесь обычными джамперами, а можно и намертво запаять)
Имхо разницы никакой, а за наводку на ВА1А спасибо)
- - - Добавлено - - -
"А?" - как бескомпромиссно спрашивает моя 4-х летняя дочка, когда она не сомневается в своей правоте ;-)
Я рад за вас, но выкладывать сюда её фотки имхо всё таки не стоит, так на будущее.
Наткнулся на эту тему, ища подробное описание кр580вв51. Раз уж решил ее подробно изучить, то и задался вопросом, можно или нет. Вот (https://electronix.ru/forum/index.php?showtopic=48578&st=0&p=421014&#entry421014) самое подробное описание синхронного режима работы этой микросхемы. К сожалению, пока не удалось реализовать подключение клавиатуры. ВВ51 ни в какую не хочет считывать данные в режиме с внешней синхронизацией. К сожалению, нигде нет подробного описания ее программирования с пояснением всех нюансов. Некоторые вещи описаны до обидного поверхностно. Может у кого есть техническое описание и инструкция по эксплуатации? Даже отрывок из этого документа по ссылке выше многое прояснил. Пока затык с формированием сигнала SYNDET, но я не оставляю попыток решить этот кроссворд.
ВВ51 ни в какую не хочет считывать данные в режиме с внешней синхронизацией
Будет время, обратите внимание на древнюю разработку под названием Bit Boffer. Изначально она применялась для считывания цифровой информации с магнитной ленты, но для протокола клавы также подходит. Описание было в журнале Byte, March, 1976, p. 30. Кратко: из последовательного потока выделяются тактовые импульсы для уарта, т.е на уарт подаются два сигнала - сам поток и выделенный из него такт.
rw6hrm, клавиатура посылает и такт и данные. Необходимости в выделении такта из потока данных нет. Тут вопрос весь сводится к программированию вв51.
Первый результат получен. ВВ51 запрограммирована на нужный режим и читает данные. Насколько они корректны - еще неясно. По крайней мере RxRDY выдает сигнал, что данные приняты. Теперь надо писать обработчик.
Сломал себе мозг. Работает, но через раз. Не могу понять, почему. Если включать "на холодную", то всегда работает с ошибками. Если сбрасывать через reset, тоже всегда дает ошибки, даже если до этого работало нормально. Без ошибок работает если после небольшого прогрева передернуть по питанию. При этом все сканкоды читаются и распознаются правильно. Даже если выдернуть клавиатуру из разъема и снова воткнуть. Но стоит нажать ресет - и снова прут ошибки. Плохо то, что сброс по питанию помогает не всегда.
61651
Правильный MAKE 'Q' Внизу состояние выхода RxRDY, от которого работает прерывание процессора.
61652
Правильный BREAK 'Q'
61653
61654
А это то же самое с ошибкой контроля четности
Подключена ВВ51 просто. RxC и RxD к клавиатуре, RxRDY на вход INT процессора, /CS к A15, /WR и /RD/ к /IOWR и /IORD системного контроллера, вход /C/D к A0/, на CLK идет 2,4576 с ГФ24. Настроена ВВ51 на работу асинхронный режим с внешней синхронизацией. Вход SYNDET подтянут к +5. Для отображения сканкодов используется LCD 2004а, подключенный напрямую к шине данных.
Вопрос: где может быть косяк? Почему так нестабильно запускается ВВ51?
Разгрыз я этот орешек. Клавиатура работает, сканкоды читаются. Осталось попробовать настроить отправку команд на клаву. Но теперь немного подробностей о том, с чем пришлось столкнуться. Как я уже говорил, представленный выше код работал нестабильно. Более того. Когда я попробовал менять ВВ51 выяснилось, что только одна единственная микросхема работала с ним после "прогрева". Остальные всегда принимали данные с ошибками и никак не хотели синхронизироваться. Что я еще испробовал? Инвертировать импульсы, сдвигать их одновибратором. Потом я подумал, а почему я стремлюсь использовать синхронный режим? Да просто потому, что кто-то где-то ляпнул, что интерфейс PS/2 на него похож. На самом деле все наоборот. Синхронный режим заточен под передачу массивов данных, а у нас одиночные байты. Значит с этой точки зрения асинхронный режим больше подходит. А откуда мы возьмем тактовую частоту на RxC? Правильно, с клавиатуры. При этом на внутреннем делителе устанавливаем коэффициент 1:1, длина - 8бит, контроль четности - нечет или odd parity, стоп байт - 1. Код этой команды - 05Dh. С такой настройкой все заработало!
...а я сразу удивился выбору синхронного режима, но скромно решил промолчать и подождать ;) Суммируя с получением INT из RxRDY получаем на выходе сканкод со стробом. Далее таблично получаем ASCII-код.
А вот для обратного - передачи инфы в клаву - кмк ВВ51 уже будет не хватать. Во-первых небольшая обвеска понадобится для тактовой на передачу, во вторых, чтобы переключить клаву в режим приёма, нужно подсадить CLOCK на 100мкс на массу, и затем делать передачу в клаву, http://ru.osdev.wikia.com/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:PS2_host-to-dev.jpg. Боюсь, что ВВ51 на такой выкрутас не способен... Либо делать просадку внешней схемой, суммируя "проволочным ИЛИ" её выход с тактовым сигналом.
rw6hrm, зачем обвеска на передачу? RxC и TxC и так вместе спаяны. Осталось только какой-нибудь выход незадействованный подключить на clock клавиатуры. Они там вроде все с ОК, сложностей быть не должно.
Вот пока пример программы для считывания скан кодов.
Написано на fasmg. За качество не ругайте.
include "8085.inc"
;----Програма чтения ps/2 клавиатуры с--------------------------
;---использованием ВВ51 и обработчиком---------------------
;---прерываний------------------------------------------------------------------
init: di
lxi sp,ramtop
call initlcd
call initusart
ei
main: hlt
jp main
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
hextab: db '0123456789ABCDEF'
nop
nop
nop
nop
nop
nop
nop
nop
;----процедура обработки прерываний-------------------------------------------------
int: di
push psw
push d
push h
in dusart
call hexout
mvi a,068h
out dlcd
call delay
mvi a,20h
out dlcd
call delay
pop h
pop d
pop psw
ei
ret
;---Установка ВВ51 в исходное состояние---------------------------------
initusart: xra a
out cusart
out cusart
out cusart
mvi a,ir ;Сброс
out cusart
mvi a,ps2 ;Установка режима работы порта
out cusart
mvi a,rxe
out cusart ;Запись команды
call delay
in dusart
call hexout
call delay
ret
;-Установка LCD2004b в исходное состояние------------------------
initlcd: mvi a,0ffh
call delaya ;ожидание
mvi a,0ffh
call delaya ;ожидание
mvi a,lcdinit ;
out clcd
call delay
mvi a,lcdinit ;
out clcd ;инициализация
call delay
;-------------------------------------------------------------------------------------------------
mvi a,lcd8bit ;
out clcd ;режим 8бит
call delay
;--------------------------------------------------------------------------------------------------
mvi a,lcdon ;
out clcd ;включение
call delay
;---------------------------------------------------------------------------------------------------
mvi a,lcdcls ;
out clcd ;очистка
mvi a,d5ms
call delaya
;----------------------------------------------------------------------------------------------------
mvi a,06h ;
out clcd ;режим
call delay
;----------------------------------------------------------------------------------------------------
mvi a,070h ; p
out dlcd
call delay
mvi a,073h ; s
out dlcd
call delay
mvi a,02Fh ; /
out dlcd
call delay
mvi a,032h ; 2
out dlcd
call delay
mvi a,020h ;
out dlcd
call delay
ret
;----печать HEX байта из аккумулятора--------------------------------------------------------
hexout: push psw ; сохраняем аккумулятор
rrc ; сдвиг на 4 разряда
rrc
rrc
rrc
call lhout ; выводим старшие разряды
pop psw ; восстанавливаем значение
call lhout ; выводим младшие разряды
ret
lhout: lxi d,hextab ; загружаем адрес таблицы
ani 0Fh ; оставляем младший полубайт
mov l,a ; загружаем в L
dad d ; получаем адрес символа в HL
mov a,m ; загружаем символ из таблицы
out dlcd ; выводим символ
call delay
ret
;-----------задержка 100us-------------------------------------------------------------------------------
delay: mvi a,0Fh
delay1: dcr a
nop
nop
jnz delay1
ret
;-----------задержка а*100us----------------------------------------------------------------------------
delaya: mov c,a ;в а содержится время задержки
call delay
mov a,c
dcr a
jnz delaya
ret
;------------------Константы и указатели--------------------------------------------------------
ramtop= 87FFh ;
d5ms= 030h ;задержка 5ms
;---Адреса регистров УСАПП----------------------------------------------------------------------
dusart= 00h ; регистр данных
cusart= 01h ; регистр команд
;---Режимы УСАПП--------------------------------------------------------------------------------------
v9600= 04Eh ;1/16_8_no_1
v2400= 04Fh ;1/64_8_no_1
ps2= 05Dh ;1/1_8_odd_1
;---Команды УСАПП------------------------------------------------------------------------------------
txen= 01h ; Передатчик включен
dtr= 02h ; Устройство готово
rxe= 04h ; Приемник включен
sbrk= 08h ; Прерывание передачи
er= 10h ; Сброс ошибок приема
rts= 20h ; Передача разрешена
ir= 40h ; Программный сброс
eh= 80h ; Режим Hunt
;---Регистр состояния УСАПП-----------------------------------------------------------------------
txrdy= 01h ; Передатчик готов
rxrdy= 02h ; Приемник готов
txe= 04h ; Передача закончена
pe= 08h ; Ошибка четности
oe= 10h ; Ошибка переполнения
fe= 20h ; Ошибка формата
syndet= 40h ; Синхросимвол найден
dsr= 80h ; Передатчик терминала готов
;------Адреса регистров LCD----------------------------------------------------------------------------
clcd= 80h ;регистр команд
dlcd= 81h ;регистр данных
;------Команды LCD----------------------------------------------------------------------------------------
lcdon= 0Ch
lcdoff= 08h
lcdcls= 01h
lcd8bit= 038h
lcdhome= 02h
lcdinit= 030h
Передача команд тоже получилась. Понадобилось задействовать выходы /DTR и /RTS, пару транзисторов для ОК и пару инверторов для красоты.
61797
В данном случае при нажатии клавиши Q происходит сброс клавиатуры с подтверждением.
Позже обещаю выложить схему подключения и программки на ассемблере. (Хотя скажу честно, кодер из меня тот еще, не будем уточнять. Так что если вдруг кто желает помочь с написанием драйвера, буду только рад и помогу отладить на своем железе.)
Если клавиатура правильная и поддерживает набор 3, то можно довольно гибко настроить её. Например, отключить брейк-коды для большинства клавиш, оставив их только для шифтов и т.п. В этом случае написание драйвера существенно упростится, хотя и неудобно будет в играх.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot