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

User Tag List

Показано с 1 по 9 из 9

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

  1. #1
    Member
    Регистрация
    29.11.2006
    Адрес
    Москва
    Сообщений
    38
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    2 сообщений
    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. Спасибо за внимание
    ZX-Spectrum +2
    ZX-UNO 4.1

  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
    Адрес
    Москва
    Сообщений
    643
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #3
    Master Аватар для andykarpov
    Регистрация
    19.12.2013
    Адрес
    г. Никополь, Украина
    Сообщений
    845
    Спасибо Благодарностей отдано 
    186
    Спасибо Благодарностей получено 
    315
    Поблагодарили
    94 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  6. #4
    Activist Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    413
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    87
    Поблагодарили
    83 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    Зверинецъ

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

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

    По умолчанию

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

  8. #6
    Activist Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    413
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    87
    Поблагодарили
    83 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Зверинецъ

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

  9. #7
    Master
    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    643
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    13 сообщений
    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
    Адрес
    Москва
    Сообщений
    38
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    2 сообщений
    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

  11. #9
    Activist Аватар для Serg6845
    Регистрация
    30.12.2018
    Адрес
    г. Москва
    Сообщений
    413
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    87
    Поблагодарили
    83 сообщений
    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 внизу.

    Зверинецъ

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

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

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

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

Похожие темы

  1. Ответов: 40
    Последнее: 24.10.2020, 23:45
  2. Ответов: 273
    Последнее: 21.08.2020, 15:42
  3. Ответов: 0
    Последнее: 28.04.2008, 16:57
  4. Ответов: 23
    Последнее: 07.03.2007, 13:17

Ваши права

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