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

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Безвейтовый контроллер PS/2 клавиатуры на AVR без CPLD для ZX Spectrum и клонов

  1. #1
    Member
    Регистрация
    29.11.2006
    Адрес
    Москва
    Сообщений
    99
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Безвейтовый контроллер PS/2 клавиатуры на AVR без CPLD для ZX Spectrum и клонов

    По примеру соседней темы, представляется ко вниманию. Вдруг, кому пригодится, если не будет CPLD на 5V IO под руками. Вместо CPLD используются 8 сдвиговых регистров 74HC595, в остальном принцип работы идентичен варианту контроллера с CPLD (даже прошивка подошла с минимальными изменениями). Может быть, конечно, тут уже была такая реализация, но я не нашёл.

    Схема: ps2zx.pdf

    Собрал это дело на макетной плате





    И заказал на jlcpcb печатную плату,



    если никаких ошибок в разводке нет и оно заработает, - дополню пост материалами с гербер файлами и модифицированной прошивкой AVR. Спасибо за внимание


    обновление сообщения:

    Cхема для Rev3: ps2zx.pdf
    Файлы для изготовления платы Rev3: ps2zx_rev3.zip
    Прошивка c исходниками (фьюзы нужно лить такие High=0xDA Low=0xFF Ext=0x05) : firmware.zip

    заметки о плате Rev3 в сообщении
    Последний раз редактировалось oistalker; 14.03.2021 в 00:24.
    ZX-Spectrum +2
    ZX-UNO 4.1
    Sizif512
    ZX-Evolution
    Harlequin 128

  2. Эти 6 пользователя(ей) поблагодарили oistalker за это полезное сообщение:

    andykarpov (22.11.2020), Evgeny Muchkin (23.11.2020), IanPo (21.11.2020), Mor-Da (21.11.2020), stepmotor (21.11.2020), Trol73 (23.11.2020)

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

  4. #2
    Master
    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    725
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    75
    Поблагодарили
    34 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Идея интересная, я бы только сигналы D0-D4 переименовал в KL0-KL4 или типа того.
    ZXM-Phoenix rev.01 2048K, VG93 hw emulator

  5. #3
    Master
    Регистрация
    19.12.2013
    Адрес
    г. Никополь, Украина
    Сообщений
    997
    Спасибо Благодарностей отдано 
    339
    Спасибо Благодарностей получено 
    667
    Поблагодарили
    177 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Прикольно! А как работает джойстик?

  6. #4
    Veteran Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,004
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    250
    Поблагодарили
    230 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от oistalker Посмотреть сообщение
    По примеру соседней темы, представляется ко вниманию. Вдруг, кому пригодится, если не будет CPLD на 5V IO под руками. Вместо CPLD используются 8 сдвиговых регистров 74HC595, в остальном принцип работы идентичен варианту контроллера с CPLD (даже прошивка подошла с минимальными изменениями). Может быть, конечно, тут уже была такая реализация, но я не нашёл.

    Схема: ps2zx.pdf
    есть один момент - в случае когда для опроса клавиш одновременно падают в 0 больше одного адреса - в такой схеме возникнет конфликт выходных уровней у активных регистров. чтобы этого избежать - нужно либо регисиры с выходами ОК, либо по диоду в разрыв каждого выхода каждого регистра (40 штук).

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  7. #5
    Master
    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    725
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    75
    Поблагодарили
    34 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно заменить на 74xx596 (открытый коллектор или сток) и добавить 5 резисторов.
    ZXM-Phoenix rev.01 2048K, VG93 hw emulator

  8. #6
    Veteran Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,004
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    250
    Поблагодарили
    230 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от IanPo Посмотреть сообщение
    Можно заменить на 74xx596 (открытый коллектор или сток) и добавить 5 резисторов.
    резисторы должны быть в самом компе, так что не обязательно.

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  9. #7
    Master
    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    725
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    75
    Поблагодарили
    34 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вы правы, резисторы уже в спеке есть.

    Похоже, 596 не очень-то и найдешь, а, если найдешь, то по какой цене?
    А 40 диодов - это жуть
    Последний раз редактировалось IanPo; 22.11.2020 в 16:10.
    ZXM-Phoenix rev.01 2048K, VG93 hw emulator

  10. #8
    Member
    Регистрация
    29.11.2006
    Адрес
    Москва
    Сообщений
    99
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Serg6845 Посмотреть сообщение
    есть один момент - в случае когда для опроса клавиш одновременно падают в 0 больше одного адреса - в такой схеме возникнет конфликт выходных уровней у активных регистров. чтобы этого избежать - нужно либо регисиры с выходами ОК, либо по диоду в разрыв каждого выхода каждого регистра (40 штук).
    Не очень понятно к каким последствиям это ведёт. Если я правильно понимаю, то в этом случае при наличии на одном регистре 1, а на другом 0 на том же разряде, ток просто потечёт через OD вход (или не потечёт, по идее там встроенный диод в самом полевом транзисторе на выходе есть). Я эту схему на макетке собрал и проверил на самопальном клоне, ничего не греется вроде и видимых глюков нет. 596 от 595 отличается только тем, что 595 есть 3 состояние, а по даташиту от TI выходы у них по одной и той же схеме сделаны.


    Цитата Сообщение от andykarpov Посмотреть сообщение
    А как работает джойстик?
    Это на перспективу было, вообще-то, но сел - припаял 5 проводов к джойстику от Dendy и его тоже завёл. Просто вычитываю 8 бит состояния кнопок и подмешиваю их при выводе в регистры, на кнопки 6,7,8,9,0,Enter,L,SPC. Точно так же можно джойстик от Super Nintendo подключить, там внутренний регистр на 16 бит.

    Код:
    void init_gamepad(int pin_data, int pin_latch, int pin_clock)
    {
        pinMode(pin_data, INPUT_PULLUP);
        pinMode(pin_clock, OUTPUT);
        pinMode(pin_latch, OUTPUT);
    
        digitalWrite(pin_clock, HIGH);
    }
    
    int get_gamepad_state(int pin_data, int pin_latch, int pin_clock)
    {
        digitalWrite(pin_latch, HIGH);
        delayMicroseconds(JDELAY);
        digitalWrite(pin_latch, LOW);
    
        int keys_state = 0;
    
        for (int i = 0; i < JSER_COUNT; ++i) {
            delayMicroseconds(JDELAY);
            digitalWrite(pin_clock, LOW);
    
            keys_state <<= 1;
            keys_state |= digitalRead(pin_data);
    
            delayMicroseconds(JDELAY);
            digitalWrite(pin_clock, HIGH);
        }
    
        return keys_state;  
    }
    
    void fill_gamepad_matrix(int jstate)
    {
        
      gamepad_matrix[GP_K_A] = (jstate & 0x80)>0 ? false : true;
      gamepad_matrix[GP_K_B] = (jstate & 0x40)>0 ? false : true;
      gamepad_matrix[GP_K_SEL] = (jstate & 0x20)>0 ? false : true;
      gamepad_matrix[GP_K_START] = (jstate & 0x10)>0 ? false : true;
      gamepad_matrix[GP_K_U] = (jstate & 0x08)>0 ? false : true;
      gamepad_matrix[GP_K_D] = (jstate & 0x04)>0 ? false : true;
      gamepad_matrix[GP_K_L] = (jstate & 0x02)>0 ? false : true;
      gamepad_matrix[GP_K_R] = (jstate & 0x01)>0 ? false : true;
       
    }
    Последний раз редактировалось oistalker; 22.11.2020 в 20:44.
    ZX-Spectrum +2
    ZX-UNO 4.1
    Sizif512
    ZX-Evolution
    Harlequin 128

  11. #9
    Veteran Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    1,004
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    250
    Поблагодарили
    230 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от oistalker Посмотреть сообщение
    Не очень понятно к каким последствиям это ведёт. Если я правильно понимаю, то в этом случае при наличии на одном регистре 1, а на другом 0 на том же разряде, ток просто потечёт через OD вход (или не потечёт, по идее там встроенный диод в самом полевом транзисторе на выходе есть).
    в случае с 595 - тот регистр где "кнопка нажата" - будет тянуть в 0, остальные (где "не нажата") - в 1. что в итоге получится на выходе - это как повезет. ну и "неаккуратно как-то"...

    Я эту схему на макетке собрал и проверил на самопальном клоне, ничего не греется вроде и видимых глюков нет. 596 от 595 отличается только тем, что 595 есть 3 состояние, а по даташиту от TI выходы у них по одной и той же схеме сделаны.
    может мы разные даташиты смотрим? я у TI нашел 596 только в варианте 74LS596

    https://www.ti.com/lit/gpn/sn74ls596
    и там совершенно четко видна разница между 595 и 596, на стр. 1 внизу.

    Зверинецъ

    Специалист (был когда-то "совсем стандарт") - 1988-2023
    Ленинград1 +256К +AY+BDI+VGA выход +Ethernet (Speccyboot) +Xmodem (115200)+divmmc
    Ленинград2 + CF карта
    Платформа 8085+Z80+CPLD (Специалист МХ2 +SD +FDD +PS/2kbd)
    БК0010-01 стоковый
    [свернуть]

  12. #10
    Member
    Регистрация
    29.11.2006
    Адрес
    Москва
    Сообщений
    99
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Прошло несколько месяцев, этап сборки первой версии - выяснилось, что такой "концепт" работает в 48к бейсике, но перестаёт подавать признаки жизни, если активируется AY-3. Сел и нарисовал вариант схемы с защитными диодами и даже развёл, но вовремя одумался и не стал заказывать этого монстра. И в итоге пришёл к третьему варианту, в котором конфликт на выходах регистров решается с помощью приоритетного шифратора 74HC148, - при таком подходе, ситуации когда будут активированы несколько регистров, исключаются. На неделе приехали платы и шифраторы (второй раз заказывал, т.к. в первый раз китаец забыл их отправить вместе с другими микросхемами) - я это дело собрал и всё заработало, без каких либо доработок прошивки. Позапускал демки, игрушки, видимых проблем не заметил. Проверял, правда, только на Harlequin 128.

    Если кому интересно, то

    вот схема для Rev3: ps2zx.pdf
    вот файлы для изготовления платы Rev3: ps2zx_rev3.zip
    вот прошивка c исходниками (фьюзы нужно лить такие High=0xDA Low=0xFF Ext=0x05) : firmware.zip

    Немного фоток:

    Как это выглядело на рендере KiCad



    Как это выглядит после сборки







    Подключал в стандартный коннектор для плоских шлейфов (сами шлейфы, по разумной цене, найти у меня не получилось вообще нигде) с помощью сочинённой из гребёнки 2.54 и ответной части, для них же, с плоскими контактами "под золото" - они отлично фиксируется между металлической частью и корпусом коннектора



    PS.
    - Формирование низких уровней на RESET и NMI сделано по нажатию CTRL+ALT+DEL и F5 (как у ZX-UNO)
    - Джойстик использовал стандартный, от китайской NES c разъемом DB9, клавиши забиты 6,7,8,9,0 на крестовину и A, M на B, Sel на L, START на Enter
    - Резисторы на линии данных джойстика не распаивал и прошивка пока поддерживает лишь геймпад от NES. Планирую в дальнейшем добавить поддержку геймпада от SNES и возможность переключать тип пада на лету
    - Есть неприятный момент, контактные площадки для резисторов в KiCad делали жадины (а handsoldering - транжиры, видно по площадкам для ll4148), места под нанесение припоя с краёв практически нет. Поэтому красиво и надёжно запаять у меня получилось только с дополнительной помощью фена
    ZX-Spectrum +2
    ZX-UNO 4.1
    Sizif512
    ZX-Evolution
    Harlequin 128

  13. Эти 3 пользователя(ей) поблагодарили oistalker за это полезное сообщение:

    andykarpov (14.03.2021), Helbr (22.10.2021), Trol73 (14.03.2021)

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

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

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

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

Похожие темы

  1. Ответов: 281
    Последнее: 12.03.2024, 20:01
  2. Ответов: 40
    Последнее: 24.10.2020, 23:45
  3. Схемы WAIT для различных клонов ZX Spectrum
    от ARTi в разделе Несортированное железо
    Ответов: 0
    Последнее: 28.04.2008, 16:57
  4. безвейтовый контроллер AT-клавы на МК
    от boo_boo в разделе Устройства ввода
    Ответов: 23
    Последнее: 07.03.2007, 13:17

Ваши права

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