Comments 16
Судя по движениям кисти руки на видео - долго играть не получится.
По сигналу LATCH (читай Reset), микросхема сбрасывает свой счетчик и ждет тактового сигнала CLOCK для опроса каждого бита входа. При каждом такте отдается состояние каждого следующего бита микросхемы, т.е. для опроса всех 8 кнопок контроллера требуется 8 тактов. А далее по кругу - снова сброс, регистрация текущих нажатий кнопок и 8 тактов опроса состояний. Но тут вот какой нюанс. CLOCK и состояния кнопок можно назвать инверсными сигналами. То есть, активный уровень такта — это когда он равен нулю, равно как и нажатие кнопки будет с уровнем 0.
Забавное описание. В даташите на cd4021 немного другое написано. Счетчиков никаких нет, есть цепь Д-триггеров соединенных последовательно выход данных->вход данных. По высокому уровню сигнала LATCH происходит асинхронная установка состояния внутренних триггеров-регистров в соответствии с уровнями на входах P1-P8. При низком уровне LATCH триггеры на изменение входных ног P1-P8 не реагируют.
По фронту (переход из 0 в 1) тактового сигнала CLOCK происходит сдвиг (последовательная перезапись) состояний триггеров от 1 к 8. Ну и тактов для опроса требуется не 8 а 7, т.к. на выходе регистра после перехода LATCH в низкий уровень уже появляется состояние 8 триггера.
технически - все верно, но на пальцах "даташитное" объяснение будет менее понятным. У меня, в свое время (лет 10 назад) были сложности с пониманием работы геймпада и вот такое сухое описание принципов работы микросхемы отбивало всякое желание копать дальше. Для людей, которые в программировании железа дальше Си не ходили, чаще всего регистры, триггеры, мультиплексоры и прочие логические термины вводят в ступор. Поэтому, если принять cd4021 как "черный ящик", то (наверно) такое упрощенное описание принципа работы будет лучше
Можно было бы аппаратный spi прикрутить, получилось бы проще и производительнее на порядки.
А вообще вкусно! Можно даже развить идею, добавив запись нажатий в память и получить аппаратный летсплей - вставил этот джой и картридж в любую денди и смотри как он сам играет. Красота! А можно и прокачать, добавив диктофон и слушать как бомбил геймер)... Люблю такие проекты. Помнится, кто-то удлиннял к соседу выше этажом джойстик. А мощности передатчика китайской денди хватало на пол-двора, так что хватало просто телека.
Помню как то мне один пацан хвастался, что ему родители настоящий компьютер купили. Я обрадовался, ибо у меня в селе только я и еще один знакомый чел имели компы, и тут появился еще один, с кем можно дисками меняться. И тут он мне говорит, что в него вставляются дискеты, как на денди.... Я очень удивился, говорю "Пошли к тебе, покажешь", в итоге это оказался один из китайских клонов NES, исполненный в виде клавиатуры и мыши. Пробовал даже играть во что то мышью, один в один, как у автора в видео получалось, не удобно и странно)
По исполнению:
1 - как выше уже писали - почему бы не использовать SPI?
2 - если с SPI не прокатит/не хватит опыта, повесить защелку и тактирование на прерывания.
3 - в конце концов, если в оригинале сдвиговый регистр, то кто мешает использовать его и в адаптере, а с ардуины подавать данные по "параллельной шине"?
По развитию:
1 - добавить режимы работы, когда одна или обе координаты защелкиваются при сдвиге мыши и отпускаются при возврате в "ноль", это как минимум спасет руки от постоянного перетягивания мыши.
2 - Более продвинуто - можно сделать плавный откат позиции мыши. то есть, например, при сдвиге мыши на 5см соответствующая кнопка нажата 0.5с, при 10см - 1с. при этом обратное движение возвращает, но с учетом прошедшего времени (при сдвиге на 10см, спустя 0.5с достаточно обратного сдвига на 5см)
Вероятно, у меня недостаточно опыта для работы с SPI. Какое будет преимущество получения сигналов на пинах SPI по сравнению с другими?
Общение с приставкой вешал на прерывания, но появилась проблема опроса мыши. Latch от приставки приходит слишком часто и опрос мыши ломается (ведь прерывание все-таки).
Да, прикрутить CD4021 и переложить работу опроса на него было бы наиболее простым вариантом, только в ближайших магазинах найти эту МС не удалось. Пробовал воспроизвести логику этой микросхемы на ИР9 и ЛН2, но обилие проводов на макетке постоянно давало сбои из-за плохого контакта. Поэтому "на поиграться" оставил в таком виде.
По доработкам - не копанная целина) Опять таки повторюсь, все было сделано как одноразовая поделка на один вечер. Хотя, народ просит такое же для сеги, так что возможно, этот прототип перерастет в проект со всякими режимами и опциями
в теории SPI позволит за одну операцию положить в регистр данные и приставка сама их заберет.
За попытки реализовать на "родной" схемотехнике однозначно зачет. Уважаю решения не возлагающие все на чистый софт. Кстати может стоит попробовать поиграться с Raspberry Pi Pico, там есть PIO
Я думаю использование малины для такой поделки будет уже слишком, пусть даже и Pico =) Вообще, думается, что надо попробовать переложить логику на STMовские чипы... с точки зрения железа они выглядят привлекательнее AVR. Как вариант - ESP, но опять смущает бойня "из пушки по воробьям"
pi pico на али сейчас от 200р. в отличии от STM...
... смущает бойня "из пушки по воробьям"
Сейчас глянул на али, разница в цене между ноде мку есп32 и адуриной нана что то около 20-50р. Так что пушка не сильно дороже выходит.
Подключение ПК мыши к Денди. Насколько это удобно?