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

User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 28

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

  1. #11
    Master
    Регистрация
    02.03.2015
    Адрес
    г. Санкт-Петербург
    Сообщений
    800
    Спасибо Благодарностей отдано 
    340
    Спасибо Благодарностей получено 
    71
    Поблагодарили
    56 сообщений
    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, система, как успевает, по последовательному интерфейсу опрашивает мк.

  2. #12
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,929
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    230
    Поблагодарили
    114 сообщений
    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 сделать переключение на русские символы. Но это мелочи. В целом - полет нормальный.

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

    По умолчанию

    Сделал общение в сторону клавиатуры, теперь лампочки NumLock, CapsLock и ScrollLock зажигаются. На этом решил остановится, так как основная цель достигнута - могу управлять Поиском, у которого не работает родная клавиатура. На всякий случай выложу схемку - она немножко поменялась в отличии от SD-контроллера. Схема нарисована тяп-ляп, считайте это просто черновиком в тетрадке. Ну и сорцы прошивки для PIC-контроллера и сорцы дополнительного BIOS.
    Вложения Вложения

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

    По умолчанию

    Сегодня еще попробовал прикрутить Real Time Clock по i2c. Взял какой был под рукой RTC, им оказался PCF8563 в корпусе soic8. Сделал паучка:


    В целом почти отладился, написал обработчик для int 1a. Но еще есть глюки, буду постепенно поправлять.



    Пока только читаю-записываю время через свою программу...

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

    По умолчанию

    Усе, сделал часики. Написал int 1ah обработчик. Долго невкуривал, почему у меня дата в DOS устанавливается согласно RTC, а время - всегда начинает с 12:00. Оказывается, нужно системные тики самому устанавливать согласно RTC. Ну сделал и теперь у меня всегда актуальные дата/время на Поиске

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

    По умолчанию

    Цитата Сообщение от Tronix Посмотреть сообщение
    Усе, сделал часики.
    Возможно ли эти часики сделать(распаять) прямо на системной плате, т.е. внутри Поиска, не занимая отдельного слота ?

    P/S: Или может можно прицепить внутрь отдельное устройство к системной плате, вроде этого: http://www.ebay.com/itm/Real-time-Cl...AAAOSwHnFV1vGj ?
    Последний раз редактировалось Quest; 06.01.2016 в 00:45.
    Scorpion ZS-256, ZX Spectrum +3, ZX-Evolution & NeoGS, Поиск-1, Scorpion ZS 1024 Turbo+

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

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

    По умолчанию

    Цитата Сообщение от Quest Посмотреть сообщение
    Возможно ли эти часики сделать(распаять) прямо на системной плате, т.е. внутри Поиска, не занимая отдельного слота ?

    P/S: Или может можно прицепить внутрь отдельное устройство к системной плате, вроде этого: http://www.ebay.com/itm/Real-time-Cl...AAAOSwHnFV1vGj ?
    Увы, просто это сделать не получится. Нужна какая-то прослойка между параллельной 8 битной шиной Поиска и последовательной шиной i2c такого типа RTC. В качестве такой прослойки у меня выступает микроконтроллер, хотя можно сделать и на ПЛИС, например на EPM7064 или есть даже отдельные микросхемы-конвертеры типа
    PCA9564. PCA9564 и похожие - труднодостоваемо. ПЛИС - дорого. Микроконтроллер - более-менее дешево и достоваемо, но нужно писать прошивку для него. Также туда нужен отдельный дешифратор адреса в случае с микроконтроллером или с PCA9564. В случае с ПЛИС дешифратор можно внутрь упрятать (если места хватит). В итоге для подключения девайса нужно в любом случае подпаиваться к шине данных (8 проводов), шине адреса (~6 проводов), сигналам IORD (один провод) ну и питание (два провода). Итого внутри Поиска будет висеть паук из ~20 проводов по всей плате.

    Тут если уж и встраивать внутрь, то попытаться найти часы с параллельным интерфейсом сразу. Тогда отпадает надобность в конвертере (МК, ПЛИС, спец микруха), но все остальное остается на месте - отдельно дешифратор и клубок проводов.

  9. #18
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Tronix, если DOS с часиками работает только через Int 1A, то паук на ~20 проводов - лишний. Если сигналы на шине примерно как здесь, то потребуется только сигнал #RD и сигнал AD7. При чтении на шине микроконтроллер должен отслеживать бит D7 и искать ключевую последовательность. При совпадении ключа микроконтроллер принимает еще несколько бит команды, а далее либо выдаёт данные, либо принимает в зависимости от команды. Чтобы выборка кода BIOS не мешала обмену, код можно поместить в блок с A7=0, а бит D7 микроконтроллер будет анализировать только при A7=1. Для выдачи ключа, команды и данных в блок с A7=1 кладутся две константы - 0 и 128, а BIOS читает либо одну, либо другую в зависимости от того, какой бит нужно выдать. Для приёма данных BIOS читает ячейку с A7=1 из какой либо дыры в памяти и смотрит старший бит, который микроконтроллер формирует если принял ключ и соответствующую команду. Ну и делать это всё нужно естественно при запрещённых прерываниях.

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

    По умолчанию

    Цитата Сообщение от blackmirror Посмотреть сообщение
    При чтении на шине микроконтроллер должен отслеживать бит D7 и искать ключевую последовательность. При совпадении ключа микроконтроллер принимает еще несколько бит команды, а далее либо выдаёт данные, либо принимает в зависимости от команды.
    Все это так, все это верно... Кроме одного нюанса - микроконтроллер должен работать на частоте не меньше 200 MHz, что бы успевать что-либо смотреть на шине. И если смотреть в сторону ARM'ов и STM32 в частности - нет у них стандартного средства для ведомого параллельного интерфейса. Ведущий - пожалуйста, DCMI, FSMC. А ведомый - нет. Если в ручную ногами дергать - ARM для ногодрыга плохо подходит, ибо у него кеши, префечи, очереди в нутри, что по сути означает - неведомо за сколько выполнится та или иная операция. Один раз может за столько, а на другой уже не за столько а за столько, потому что очередь внутри переполнилась и он задумался или просто в кеш не попали и тд и тп. А успеть надо переключить порт с input на output, выплюнуть данные и уйти быстренько опять в input, дабы не случилась коллизия на шине данных. Поэтому если кто знает 8-битный микроконтроллер, работающий на ~200 MHz тактовой, то идея имеет право на жизнь. Иначе - очень через костыли и не факт.

  11. #20
    Member
    Регистрация
    25.11.2015
    Адрес
    г. Москва
    Сообщений
    192
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    14 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Tronix, частота ПОИСКа 5 МГц, если взять AVR с частотой 20 МГц, и после выдачи битика поставить команды SBIC PORT,RD_PIN / OUT PORT_DIR,IN_MODE в количестве покрывающем длину цикла, то мы сможем снять данные с шины за 100нс, то есть за пол такта поиска. С циклом ожидания немного похуже, может тут SLEEP поможет, но здесь еще нужно думать А STM32F0 имеет встроенные часики, частоту до 48 МГц, дёргать ногами каждый такт тоже умеет, но с выборкой команд там действительно нужно быть аккуратней.

Страница 2 из 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

Ваши права

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