PDA

Просмотр полной версии : OpenVegaPlus - ещё один эмулятор на ESP32 с клавой и ili9341.



Скарт
20.08.2020, 20:40
Здравствуйте. Опять я с эмуляторами...

На этот раз на есп32 с клавой, звуком, менюшками удобными.. Выглядит неплохо.
Сразу: https://github.com/alvaroalea/OpenVegaPlus

Собрал, легко компилируется. Теперь дело в клавиатуре.

Вот вся инфомация что понял пока:
PCF8575 - i2c port expander, через него клава работает. Два порта по 8 IO пинов (16 всего).

Из 16-ти два последних (с краю) становятся поочерёдно логическим 0 для "сканирования всей клавы"
Вот так это выглядит: (hardware.ino в конце)
pf575_write(0xFFFE); - ставим 16 портов как 1111111, 11111110
Сканируем состояние всех 16-ти портов в две переменные (2 по байту)
pf575_write(0xFFFD); - ставим 16 портов как 1111111, 11111101
Снова сканируем, в ещё пару переменных.
(И тут обработка чтоб кнопку получить...)

Соответственно 14 из 16 портов никогда не бывают в 0 сами по себе, только через кнопки и диоды.
Ещё я знаю что надо использовать "Some diodes and pushbuttons for inputs".

Догадки:
Возможно эти два последних вывода как-то используются для каждой из сторон матрицы клавиатуры
(которые 5 х 8 на 40 кнопок (+ одна строчка для меню и кемпстона?)).

Недостаточно положить в 0 любую одну из пяти строк и одновременно в 0 любой из восьми столбцов,
чтоб по их пересечению получилось нажатие. Возможно надо инвертировать. Рандомальные прикосновения
к 14-ти ногам резистором на землю дают максимум открытие меню и, вроде, пашет часть ответственная
за кемпстон. т.е. Всё транслируется в контроллер правильно, но надо понять что подавать на ввод для
клавы.

У меня есть обычная клава 5х8 и, строчка "Some diodes", очевидно намекает, что надо использовать 5 или
8 или 5+8 диодов на каждую сторону, а не на каждой из 40-ка кнопок.

Ничего не сказано про резисторы. Значит без подтягиваний к питаниям. Только диоды.

Похоже, надо сделать такую матрицу, чтобы при заданных параметрах, в моменты записи этих нулей на пинах 15 и 16
опускались в нули соответствующие края (5 или 8) НО НЕ пересечение нажатой кнопки. вот.
Типа при нажатии какой-то кнопки на портах будет так: 00001000 и 01000000 например. Вот эти все нули
должны получиться за счёт линий 15 и 16 с "хитро расположенными диодами".

Вообщем я чувствую, что решение должно быть где-то близко.

Попробуйте, кому интересно. Возможно именно с этим я, в конце концов, сделаю супер маленький
спектрум-ноутбучек :)

Спасибо за терпение) Мне как-то особенно сложно описать проблему доходчиво ибо сам не до конца понимаю :(((

CodeMaster
20.08.2020, 23:15
с клавой, звуком, менюшками
На слух, как "с блекджетом и шл... куртизанками" ;-)))

fifan
22.08.2020, 11:35
А где схема то? Я должен обладать пространственным воображением, чтобы соединить один пин с другим? Хотя бы отобразили монтажную схему.

Dotoro
22.08.2020, 13:07
не, без картинок скучно

coffee
22.08.2020, 14:01
Сканируем состояние всех 16-ти портов в две переменные (2 по байту)
ничего не понимаю. Вы запрограммировали все ноги экспандера на вход? Зачем анализировать 16 портов? Вам всего 5 надо анализировать. Посмотрите схему спектрумовской клавиатуры. У вас 8 ног экспандера должны работать на выход (изображая A8-A15), через диоды они подключаются к клавиатуре. Пять линий с клавиатуры подать на 5 ног экспандера, которые запрограммировать на вход. Их хорошо бы подтянуть к питанию резисторами.
Это по подключению... Но что делает ваш эмулятор, мы вообще без понятия. Как правильно подключите - проверьте осциллом - гоняет ли он нули по адресн. выходам.

Скарт
22.08.2020, 23:06
Всем: были бы схемы я бы не спрашивал :(
Всё что есть - это ссылка на гитхаб наверху, остальное мои догадки.
Вот и пытаюсь понять как автор это замутил чтоб повторить.
Это не моё и программа не моя.
Я бы сделал как coffee написал. Но автор как-то сделал по другому и не отвечает :(

coffee
23.08.2020, 00:44
Это не моё и программа не моя.
"Моторолер не мой!!! Я просто разместил ОБЪЯВУ!" (С)
Тогда увы, или ждите подсказок от автора или разбирайтесь сами в его исходниках.
Но по-другому клаву спектрума подключить нельзя (практически): 8 линий на выход, 5 на вход.