Прикольно! А как работает джойстик?
Прикольно! А как работает джойстик?
Github: https://github.com/andykarpov/
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Не очень понятно к каким последствиям это ведёт. Если я правильно понимаю, то в этом случае при наличии на одном регистре 1, а на другом 0 на том же разряде, ток просто потечёт через OD вход (или не потечёт, по идее там встроенный диод в самом полевом транзисторе на выходе есть). Я эту схему на макетке собрал и проверил на самопальном клоне, ничего не греется вроде и видимых глюков нет. 596 от 595 отличается только тем, что 595 есть 3 состояние, а по даташиту от TI выходы у них по одной и той же схеме сделаны.
Это на перспективу было, вообще-то, но сел - припаял 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
в случае с 595 - тот регистр где "кнопка нажата" - будет тянуть в 0, остальные (где "не нажата") - в 1. что в итоге получится на выходе - это как повезет. ну и "неаккуратно как-то"...
может мы разные даташиты смотрим? я у TI нашел 596 только в варианте 74LS596Я эту схему на макетке собрал и проверил на самопальном клоне, ничего не греется вроде и видимых глюков нет. 596 от 595 отличается только тем, что 595 есть 3 состояние, а по даташиту от TI выходы у них по одной и той же схеме сделаны.
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 стоковый[свернуть]
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)