Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 28

Тема: [Поиск 1] Контроллер PS/2 или USB клавиатуры

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию [Поиск 1] Контроллер PS/2 или USB клавиатуры

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

    Поэтому подумываю как бы подключить обычную клаву. Наверное придется модифицировать BIOS, или грузить драйвер/резидент после старта DOS. Ни у кого идей нет, как бы попроще реализовать? На чем вообще USB клавы делают для новоделов всяких? Что за контроллер?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Master Аватар для Quest
    Регистрация
    10.12.2012
    Адрес
    г. Петрозаводск
    Сообщений
    607
    Спасибо Благодарностей отдано 
    15
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Контроллер PS/2 или USB клавиатуры

    Про usb не слышал. У Поиска ведь обычная механическая клавиатура как у Спектрума... Для Спектрумов есть контроллеры, позволяющие подключить IBM клавиатуру вместо механической.
    Вот например: http://zx-pk.ru/showthread.php?t=17270
    Последний раз редактировалось Quest; 10.08.2014 в 23:23.
    Scorpion ZS-256, ZX Spectrum +3, ZX-Evolution & NeoGS, Поиск-1, Scorpion ZS 1024 Turbo+

  4. #3
    Master
    Регистрация
    02.03.2015
    Адрес
    г. Санкт-Петербург
    Сообщений
    801
    Спасибо Благодарностей отдано 
    341
    Спасибо Благодарностей получено 
    72
    Поблагодарили
    57 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Скажу идею - кидайте тапками
    У Поиска есть разъём магнитофона, в котором найдутся 3 свободных вывода + есть земля.
    У Поиска есть свободные линии портов КР580ИК55.
    Добавить на макетке транзистор, для линии данных, защиту от статики на обе линии и
    можно сделать PS/2 мышь или клавиатуру.
    Я прав, или что-то помешает так сделать?

  5. #4
    Moderator
    Регистрация
    23.01.2011
    Адрес
    Донецк
    Сообщений
    793
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как минимум, нужно ведь совместимость с клавой IBM PC обеспечить. Т.е. оно должно в порт 60h писать, в BDA где-то символы храниться должны. Ну и существующий механизм опроса клавы вырубить надо Т.е. сделать можно, и может быть даже нужно, но геморройно
    Поиск-1, Поиск-2, Парус ВИ-201, Олимпик-С, Электроника МК61

  6. #5
    Master
    Регистрация
    02.03.2015
    Адрес
    г. Санкт-Петербург
    Сообщений
    801
    Спасибо Благодарностей отдано 
    341
    Спасибо Благодарностей получено 
    72
    Поблагодарили
    57 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я уже прикинул. Не получается с аппаратной точки зрения.
    Если бы частоту обмена только процессор генерил, тогда возможно,
    а так, когда клавиатура выдавать стробы будет - не успеет.
    А программно, так у нас много чего эмулируется и клавиатура тоже.

  7. #6
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не, ну в принципе, тут имхо два пути:
    1) Дополнительный контроллер на шине. Можно на чем угодно, хоть на PIC, хоть на ARM, хоть на 8042 (если разобраться, как оно работает). Она общается с клавой - как только символ поступил - генерируется IRQ, которое обрабатывает резидент или дополнительный BIOS-rom. По IRQ символ забирается из из контроллера.
    Минусы - чтение напрямую из портов ввода-вывода (60h чтоле) по прежнему остается в системной плате, проги которые работают напрямую с портами - в пролете. Если сделать дешифрацию портов на контролере, то будет конфликт с системной платой. Плюс в биосе по прежнему сидит подпрограмма сканирования родной клавиатуры, жрущая процессорное время.
    Плюсы - не нужно лезть в нутрь Поиска - вставил контроллер и пошел.

    2) Подключить клаву к штатному разъему Поиска на материнке. Для этого собрать маленький переходник на микроконтроллере (PIC/Arm).
    Плюсы - все проги работают как и раньше, все так же софтово идет опрос клавы. Программная составляющая не меняется.
    Минусы - отключается штатная клавиатура. Подпаиваются провода на материнскую плату, дополнительно устанавливается небольшой переходник куда-то в корпус. Так же в корпусе вырезается дырка под провод или под PS/2 разъем (в случае если контроллер держит USB-host, под USB-разъем).

  8. #7
    Master
    Регистрация
    02.03.2015
    Адрес
    г. Санкт-Петербург
    Сообщений
    801
    Спасибо Благодарностей отдано 
    341
    Спасибо Благодарностей получено 
    72
    Поблагодарили
    57 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Но, есть нюансы.
    Да, я ведь ещё про совместимость 3/5 вольт не подумал.
    Общение по ISA шине, для высокоскоростного STM32 не проблема - на прерываниях сделать.
    -------------------------------
    Цитата Сообщение от Tronix Посмотреть сообщение
    2) Подключить клаву к штатному разъему Поиска на материнке. Для этого собрать маленький переходник на микроконтроллере (PIC/Arm).
    Плюсы - все проги работают как и раньше, все так же софтово идет опрос клавы. Программная составляющая не меняется.
    Может всё-таки такой вариант?
    Берётся 5-вольтовый контроллер- PIC или ATMЕЛ - в мелком корпусе DIP, который легко можно подпаять поверх.
    Через свободные выводы разъема магнитофона соединяется с PS/2, а ещё 3 (но можно и 2) вывода на свободные ноги 580ВВ55.
    мк, соблюдая времянки, опрашивает внешнюю клавиатуру, через PS/2, система, как успевает, по последовательному интерфейсу опрашивает мк.

  9. #8
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем сегодня на основе старой платформы неудавшегося SD-контроллера провел ряд экспериментов. Припаял выкушенный из материнки PS/2 разъем:



    Контроллер вместо бывшего PIC18F452 (уехавшего в часы на газоразрядных индикаторах) поставил PIC18F4620. Я его для эмулятора дисковода покупал, но не отважился, с тех пор так и лежит. Конечно контроллер - из пушки по воробьям, можно было бы каким-нибудь PIC16F877A обойтись, но что было под рукой 40-ко ногое. Прокинул дополнительно кабель от какой-то ноги до IRQ7, чтоб дергать его по мере накопления символов. Внутре контроллера идет преобразование AT - XT, имеется кольцевой буфер. Как только сканкод готов на отправку - дергается IRQ7, обработчик которого читает из порта 0x3b0 сканкод, записывает его в порт 60h и вызывает родной int 9. Вот и вся история.

    Работает как и задумано:



    Аппаратное сканирование родной клавиатуры прекрасно выключилось через Interrupt Mask Register контроллера прерываний 8259 вышеупомянутой конструкцией:

    Код:
    in al,21h
    or al,64      ; установить шестой бит в единицу (IRQ6 = disable)
    out 21h,al
    Если его не выключать - работает и родная клавиатура и PS/2 совместно. Набросал быстренько свой дополнительный BIOS, который устанавливает новый обработчик на прерывание 0x0f (IRQ7). Все прерывание:

    Код:
    KB_INT	PROC	NEAR
    	PUSH	AX	
    	PUSH	DX
    	mov	dx,03b0h		; PIC18F data port
    	in	al,dx
    
    	out	60h,al			; port 60h, keybd data write
    	int	9			; Keyboard
    
            MOV     AL,20H         		; контроллер прерываний 
            OUT     20H,AL 
    	POP	DX
    	POP	AX
    	IRET
    KB_INT	ENDP
    В контроллере осталось только сделать общение в сторону клавиатуры, чтоб светодиоды зажигать Num Lock, Scroll Lock, Caps Lock в зависимости от. И в дополнительном BIOS сделать переключение на русские символы. Но это мелочи. В целом - полет нормальный.

  10. #9
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все-таки думаю, что можно отдельный контроллер клавы сделать, вставляемый в слот расширения. Поиск постоянно (приблиз 18.2 раза в секунду) производит опрос родной матричной клавиатуры. Схематически делается это с помощью программного интервального таймера 8253 (ви53), канал 1 которого формирует меандр ~18.2 Hz. Канал 1 заведен сразу на контроллер прерываний 8259, на запрос прерывания 6 (IRQ 6).



    По высокому уровню контроллер прерываний пытается (в зависимости от текущих приоритетов) передать управление на обработку IRQ 6, то есть int 0eh. В обработчике прерывания int 0eh и производится уже программный опрос ВВ55, который дергает линиями матрицы на клавиатуре и в зависимости от расшифровывает символы. Дальше этот же обработчик запихивает код символа в порт 0x60, или если это дополнительный код, то 0xE0 и вызывает программно int 9h.

    Таким образом, нужно перепрограммировать интервальный таймер 8253, чтобы на выходе канала 1 всегда был логический "ноль". Тем самым мы программно выключим аппаратное сканирование родной клавиатуры (перестанет вызываться IRQ6/int 0eh). Осложняет ситуацию наличие постоянного высокого уровня на GATE, поэтому я не знаю как точно это сделать. По быстрым прикидкам - перевести 8253 в режим 0 (прерывание терминального счета), загрузить счетчик, на выходе будет 0, пока счетчик уменьшается, а затем сразу перезагрузить только младший байт счетчика, не давая ему старший байт. По идее счет должен остановится, на выходе OUT должен быть по прежнему низкий уровень. Это можно в протеусе проверить, проверю как-нибудь.

    Ну а дальше берем микроконтроллер который может PS/2 парсить, организуем какой-нибудь свой левый порт ввода-вывода, заводим с ножки микроконтроллера сигнал на какой-либо свободный IRQ, например на IRQ7. Микроконтроллер как получил от PS/2 клавиатуры байт - распарсил его и выдал в порт, дернув при этом IRQ 7. Поиск свалился в обработчик прерывания IRQ7, где мы взяли байт из нашего левого порта ввода-вывода и кинули его в порт 0x60h, передали управление int 9h.

    Контроллер можно сделать со своим BIOS, а можно просто грузить небольшой резидент. Дополнительный BIOS конечно лучше, так как тогда можно на Поиск верхнюю крышку вообще не надевать - клава всегда работает сразу после старта машины.

    Вот такие мысли у меня...

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

    Либо, можно отключать аппаратное сканирование родной клавы через контроллер прерываний 8259 - у него есть Interrupt Mask Register. 8 бит маска, если бит установлен в 0 - прерывание разрешено, если 1 - прерывание запрещено. Таким образом что-то вроде:
    Код:
    in al,21h
    or al,64      ; установить шестой бит в единицу
    out 21h,al
    должно запретить вызывать IRQ6.

    Можно скомбинировать - а) попытаться все-таки настроить таймер 8253, что бы на OUT1 был всегда ноль б) запретить обслуживать IRQ6 в контроллере прерываний через IMR б) поставить заглушку в обслуживающее прерывание int 0eh (mov al,20h; in 20h,al; iret).

  11. #10
    Master
    Регистрация
    02.03.2015
    Адрес
    г. Санкт-Петербург
    Сообщений
    801
    Спасибо Благодарностей отдано 
    341
    Спасибо Благодарностей получено 
    72
    Поблагодарили
    57 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Контроллер PS/2 делают на небольших контроллерах ATMEGA, даже в местных проектах вроде видел.
    Другое дело, что PS/2 клавиатура и мышь уже дефицит.
    Может имеет смысл, подумать про USB?
    Скажем взять контроллер STM32F.
    И сделать на нём сразу контроллер клавиатуры и мыши, который возвращает код кнопки и движение мыши.
    По тому же таймеру 1, писать в буфер клавиатуры код кнопки и мышиное прерывание INT33 поддержать, напрямую, без COM-порта.
    А вот тут вопрос, много свободного места в штатном ПЗУ остаётся?

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Конвертер USB -> PS/2 для клавиатуры
    от Ewgeny7 в разделе Устройства ввода
    Ответов: 118
    Последнее: 02.01.2022, 23:39
  2. [Поиск 1] Контроллер IDE
    от CHRV в разделе Поиск
    Ответов: 25
    Последнее: 02.10.2020, 16:07
  3. Контроллер USB клавиатуры
    от andreil в разделе Устройства ввода
    Ответов: 99
    Последнее: 24.02.2019, 17:25
  4. USB контроллер матрицы клавиатуры.
    от fan в разделе Устройства ввода
    Ответов: 2
    Последнее: 25.07.2007, 00:43

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •