Здравствуйте. Опять я с эмуляторами...
На этот раз на есп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 с "хитро расположенными диодами".
Вообщем я чувствую, что решение должно быть где-то близко.
Попробуйте, кому интересно. Возможно именно с этим я, в конце концов, сделаю супер маленький
спектрум-ноутбучек
Спасибо за терпение) Мне как-то особенно сложно описать проблему доходчиво ибо сам не до конца понимаю ((