User Tag List

Показано с 1 по 10 из 13

Тема: PS/2 и RTC2 через порт клавиатуры

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,223
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    905
    Поблагодарили
    595 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb PS/2 и RTC2 через порт клавиатуры

    Доброго дня.

    В данной теме вниманию общественности предлагаю вариант подключения к ПРК "Орион-128" альтернативных клавиатуры PS/2 и часов реального времени с СОЗУ на базе м/сх DS1307. Красота данного решения заключается в простоте и минимализме.
    Оба устройства подключаются к существующему в любом Орионе самому главному порту #F4xx, параллельно штатной клавиатуре (или её эмуляции на МК). При этом функционал родной клавиатуры никак не нарушается, и она, в свою очередь, никак не влияет на работу подключенных новых устройств.

    Принципиальная схема (v1.0):




    На схеме не указан чип RTC DS1307 с кварцевым резонатором и распиновка разъёма клавиатуры PS/2, на данном этапе отображена только идея коммутации.

    Принцип работы. В штатном режиме, порт #F4xx настроен следующим образом: линии "А" на вывод, а линии "В" на ввод. Для сканирования штатной клавиатуры (формат РК86) применяется т.н. "бегущий нолик", т.е. выходы порта "А" принимают только следующие состояния:

    Код:
    0 1 1 1 1 1 1 1 
    1 0 1 1 1 1 1 1 
    1 1 0 1 1 1 1 1 
    1 1 1 0 1 1 1 1 
    1 1 1 1 0 1 1 1 
    1 1 1 1 1 0 1 1 
    1 1 1 1 1 1 0 1 
    1 1 1 1 1 1 1 0
    Т.о. одновременно двух лог."0" на выходах порта "А" не бывает. Эта особенность и используется для организации четырёх виртуальных выходов для управления новыми устройствами через занятые линии. Пары соседних линий порта с помощью элементов "ИЛИ" объединяются в одиночные, образуя новые виртуальные выходы. Для управления новыми устройствами достаточно одновременно выставлять лог."0" на соответствующих парах порта #F400. После сеанса связи с новым устройством, выходы порта "А" возвращаются в изначальное состояние (по-умолчанию, FEh), и Орион готов к работе со штатной клавиатурой, а новые устройства в режиме паузы/сна.

    Для приёма сигналов используются линии порта "В", которые, согласно схемотехнике РК'шной клавиатуры, подтянуты резисторами 2 ком к шине питания, т.о. на них сформирована лог."1", а для выставления лог."0" достаточно коммутировать на землю через транзисторный ключ или ЛЭ с ОК на выходе. В режиме "спячки" новые устройства не должны выставлять лог."0" на линиях порта "В".
    RTC изначально удовлетворяет этим условиям, а вот с клавиатурой пришлось "похимичить", сделав работу с линией CLK в инверсной логике. Дело в том, что в обычном режиме клавиатура PS/2 может сама в произвольный момент (относительно работы процедуры сканирования штатной клавиатуры) выдавать данные, и т.о. может возникнуть коллизия. Поэтому клавиатура PS/2 принудительно переводится в режим ожидания прижиманием линии CLK к земле, и только во время её опроса линия будет освобождаться драйвером и производиться обработка байтовых посылок.

    Пока разработка на стадии идеи, макетирование и написание ПО будет позже

    Конструктивно девайс можно оформить в виде переходника между штатной клавиатурой Ориона и материнской платой или наМГТФить непосредственно на выводах порта ВВ55.
    Последний раз редактировалось Denn; 17.01.2019 в 18:33.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

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

  3. #2
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    107
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Игры лазающие в порт клавиатуры очень запросто могут выдавать одновременно несколько нулевых битов для сканирования одновременно нажатых клавиш, что теоретически может привести к нарушению работы дивайсов висящих на I2C на клавиатурном порту A. Может, использовать половинку порта С работающую на вывод? На ввод можно как и есть использвать порт "В". Даже если оставить вывод на магнитофон и светодиод Рус-ЛАТ (я например не использую ни тот ни другой), то остается 2 нигде не использующихся бита порта С. Если использовать их под SCL, то оставшиеся (магнитофон и светодиод Рус-ЛАТ) можно параллельно вывести на SDA 2х устройств I2C. Не будет использоваться доп. корпус ИЛИ, все развяжется на полдюжине диодов и резисторов.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  4. #3
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,223
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    905
    Поблагодарили
    595 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Игры лазающие в порт клавиатуры очень запросто могут выдавать одновременно несколько нулевых битов для сканирования одновременно нажатых клавиш, что теоретически может привести к нарушению работы дивайсов висящих на I2C на клавиатурном порту A.
    Мысль интересная. Очевидно там могут быть только проверки на стрелки, пробел и [ВК]. Надо будет проанализировать этот момент. Возможно придётся "раскидать" сигналы не по смежным битам.


    Цитата Сообщение от Error404 Посмотреть сообщение
    Может, использовать половинку порта С работающую на вывод? На ввод можно как и есть использвать порт "В". Даже если оставить вывод на магнитофон и светодиод Рус-ЛАТ (я например не использую ни тот ни другой), то остается 2 нигде не использующихся бита порта С.
    Не использующиеся в клавиатуре уже все задействованы! РС1 и РС2 использованы для переключения банков большого ROM-диска, SROM™ и ЭД™.

    Также ампутировать магнитофон и светик РУС/ЛАТ никак нельзя, это ж святое! И, самое важное, оно поддержано в разнообразном орионовском ПО
    Последний раз редактировалось Denn; 18.01.2019 в 14:16.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  5. #4
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    107
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    Мысль интересная. Очевидно там могут быть только проверки на стрелки, пробел и [ВК]. Надо будет проанализировать этот момент. Возможно придётся "раскидать" сигналы не по смежным битам.
    Еще в адаптациях от Спектрума часто использовался "SINCLAIR-джойстик" - там их два: основной на клавишах 6, 7, 8, 9, 0 и дополнительный на 1, 2, 3, 4, 5.
    В принципе если эти варианты учесть, то даже при переназначении клавиш можно назначать "неконфликтующие варианты". Остальное покажет практика: все способы опроса (зависящие от замороченности авторов кода опроса) заранее все равно не учесть.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  6. #5
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,223
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    905
    Поблагодарили
    595 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Остальное покажет практика: все способы опроса (зависящие от замороченности авторов кода опроса) заранее все равно не учесть.
    Практика показывает, что далее приглашения Монитора дело не доходит
    А программированием под Орион нынче не занимаются, и вероятность того что будут, стремится к нулю.. ((
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  7. #6
    Activist Аватар для Stampmaker
    Регистрация
    08.02.2015
    Адрес
    г. Санкт-Петербург
    Сообщений
    240
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    13
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    А программированием под Орион нынче не занимаются, и вероятность того что будут, стремится к нулю.. ((
    особенно написанием игр с обращением напрямую к порту клавиатуры


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

  8. #7
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,223
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    905
    Поблагодарили
    595 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb PS/2, RTC и SDHC [v2]

    После детального изучения вопроса, а именно разбора Мониторных процедур опроса стандартной РК86-клавиатуры и некоторого мыслительного процесса по оптимизации, родилась вторая версия схемы подключения PS/2-клавиатуры и часов DS1307 "поверх" родной матрицы, а также добавился интерфейс для SDHC-карты:




    В случае полного отказа от РК'шной клавиатуры, схема ощутимо упрощается:

    схема



    [свернуть]



    Идеологически изменён узел обработки сигнала PS2_CLK. Дело в том, что процедуры Монитора сканирования матрицы оставляют линию порта A в состоянии 11111110 (FEh), т.е. младший бит установлен в "0". Это как раз можно использовать для "придавливания" клока к земле для блокировки передачи данных PS/2-клавиатурой, пока исполняется код вне процедуры её обслуживания (на Орионе мы работаем с клавиатурой не по прерываниям, как на писи, а по факту опроса). При этом линия PA4 выступает в роли гейта прохождения данных на вход порта PB0.
    Принцип дешифрации сигналов управления новыми устройствами сохранён, но изменены некоторые линии порта A - выполнено перемежение т.о., чтобы сигналы не складывались из соседних битов.

    К сожалению, подключиться непосредственно "поверх" реализации стандартной РК-клавиатуры на МК (от Caro), без доработки последней, не получится, т.к. выходы МК работают не в режиме ОК с подтяжкой к питанию, как это сделано в аппаратной реализации матрицы, т.о. завести внешние сигналы PBx напрямую не получится, придётся делать развязку на диодах/резисторах.


    Часть схемы относящаяся к SDHC (ниже волнистой линии) - полностью самостоятельная, и может быть опущена. В варианте "поверх РК-матрицы" преобразование 5-вольтовых лог. уровней в 3,3-вольтовые делается неявно с помощью микросхемы серии 74AC (74HC), соответственно питание последней производится не от основного питания ПРК (5в), а берётся с выхода 3,3-вольтового преобразователя!
    В отдельном варианте схемы преобразование уровней выполнено на пассивных элементах.
    Последний раз редактировалось Denn; 27.06.2019 в 15:08.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  9. #8
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    107
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Прослеживается некоторое удобство оттого что схемы РК и питерской МС7007 (пришедший от РК) используют одинаково запрограммированный порт - подключение и драйвер этой периферии получается универсальным.
    вот только в варианте МС7007 требует уточнения факт "процедуры Монитора сканирования матрицы оставляют линию порта A в состоянии 11111110 (FEh),"

    И не понятно что имелось в виду под "В случае полного отказа от РК'шной клавиатуры".

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

    Кстати, как отработает схема если вместо "бегущего нуля" туда пульнут все биты нулевыми (для проверки всех линий клавиатуры сразу)?
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  10. #9
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,223
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    905
    Поблагодарили
    595 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Arrow

    Цитата Сообщение от Error404 Посмотреть сообщение
    Прослеживается некоторое удобство оттого что схемы РК и питерской МС7007 (пришедший от РК) используют одинаково запрограммированный порт - подключение и драйвер этой периферии получается универсальным.
    Увы, универсальности тут не получается. Матрица 7007-ой совсем иначе устроена, соответствий с РК86 никаких нет. Более того, управляющие клавиши также включены в матрицу, соответственно их состояние нельзя "нахаляву" прочитать из порта "С".


    Цитата Сообщение от Error404 Посмотреть сообщение
    вот только в варианте МС7007 требует уточнения факт "процедуры Монитора сканирования матрицы оставляют линию порта A в состоянии 11111110 (FEh),"
    В нашем случае важно состояние бита PA0. Но даже если он в "свободном полёте" окажется не "0", то всего лишь "поток сознания" от PS/2 клавиатуры не будет дожидаться её опроса. Такая ситуация может быть конфликтной в случае попыток одновременной работы на двух клавиатурах, что в реальности маловероятно, ибо бессмысленно. В остальном никаких проблем.


    Цитата Сообщение от Error404 Посмотреть сообщение
    И не понятно что имелось в виду под "В случае полного отказа от РК'шной клавиатуры".
    Имеется в виду использование Ориона с новым ПО онли. Т.е. подключение старой клавиатуры изначально не предполагается.


    Цитата Сообщение от Error404 Посмотреть сообщение
    Кстати, как отработает схема если вместо "бегущего нуля" туда пульнут все биты нулевыми (для проверки всех линий клавиатуры сразу)?
    Это нестрашная ситуация, она происходит каждый раз при аппаратном сбросе, в момент настройки порта ВВ55, который, как мы помним, имеет свойство при этом скидывать все выходные линии в "0". PS/2-клавиатура останется на "паузе", т.к. линия клока будет прижата к "0". Часы никак не среагируют на одновременное обнуление линий сигналов SCL и SDA. SDHC-карта без накачки клока (он заведён с отдельно линии PC3) никак реагировать не будет.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

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

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

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

Похожие темы

  1. Ответов: 219
    Последнее: 13.03.2021, 22:31
  2. Ответов: 8
    Последнее: 01.12.2016, 02:50
  3. Ответов: 8
    Последнее: 01.05.2006, 01:38

Ваши права

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