Arkanoid, n_sonic, что-нибудь получается?
Arkanoid, n_sonic, что-нибудь получается?
Контроллеры только получил. На днях дособираю и попробую, обязательно отпишусь в теме. Домашние заботы съедают время, сори...
Подключил к Корвету. Работает, но как-то интересно. После включения сыплет символом @, пока не сбросишь Мегу, потом вроде всё работает, но "вниз" в некоторых играх (KLAD, PACMAN) не срабатывает, хотя по меню перемещается. В других работает всё, включая "вниз".
ОК, но с @ проблема. Плюс нет клавиш : ;, - _ . / [ \ ]^
Коды для MT8816 82-87, 51-55 и, возможно, каких-то ещё.
Вот мой вариант матрицы с добавленными символами.
Код:uint8_t table[1028] = {
127,127,127,44, 42, 40, 41, 127,127,127,
127,127,43, 102,54,127,127,127,112,127,
117,33, 65, 127,127,127,50, 35, 1, 39,
66, 127,127,3, 48, 4, 5, 68, 67, 127,
127,103,38, 6, 36, 34, 69, 127,127,22,
2, 16, 7, 49, 70, 127,127,127,21, 18,
37, 71, 80, 127,127,84,19, 17, 23, 64,
81, 127,127,86, 87 ,20, 83,32, 55,127,
127,127,82,127,51, 127, 127,127,127,119,
96, 53, 127,52,127,127,127,127,127,127,
127,127,101,127,127,9, 127,12, 15, 127,
127,127,8, 22, 10, 13, 14, 24, 115,127,
127,127,11, 85,127,25, 127,127};
elker, попробую на днях достать свой корвет и проверить прошивку. Впрочем, может быть надо фьюзами поиграть с задержкой запуска?
elker, до Корвета я так и не добрался, но с контроллером поэкспериментировал. Похожую проблему удалось воссоздать при недостаточной блокировочной емкости по питанию. На плате, где были установлены керамические конденсаторы по 10мкФ и электролит 220мкФ сбой воспроизвести не удалось. На всякий случай можно добавить клавишу для сброса матрицы. Ее можно использовать, если вдруг какой-то из ключей "залип".
Этот код нужно вставить первым в оператор switch. Он привязывает функцию сброса матрицы к клавише Scroll Lock.Код:case 0x7E: //если считался код 0x7E
digitalWrite(CSMT, HIGH); //выбор чипа
digitalWrite(RSTMT, HIGH);
digitalWrite(RSTMT, LOW); //сброс
digitalWrite(CSMT, LOW);
break;
Закинул в прошивку, перезалил - символ : не появился((( вместо него +
Также интересует как добавить переключение на русский. Нужно просто сопоставить alf и кнопку фиксации (на клавиатуре корвета кнопка с кружком)?
- - - Добавлено - - -
НАШЕЛ!!!)))
Настало время пояснить за принцип формирования массива.
Индекс массива соответствует скан коду клавиатуры. Элементы массива кодируют контакты матрицы. Как именно происходит кодирование, видно из этого участка кода:
Матрица имеет размерность 16 столбцов и 8 строк. 4 бита AX0...AX3 кодируют столбцы, 3 бита AY0..AY2 кодируют строки. AX0 - самый младший бит, AY2 - самый старший.Код:void SetAddr(uint8_t addr) {
digitalWrite(AX0,bitRead(addr,0));
digitalWrite(AX1,bitRead(addr,1));
digitalWrite(AX2,bitRead(addr,2));
digitalWrite(AX3,bitRead(addr,3));
digitalWrite(AY0,bitRead(addr,4));
digitalWrite(AY1,bitRead(addr,5));
digitalWrite(AY2,bitRead(addr,6));
}
Для удобства я применяю такую заготовку: Вложение 75668
Для модификации лучше всего подходят прошивки для Спека 48 и Корвета - они самые простые. В прошивку Спек - 128 добавлены сочетания клавиш - при этом замыкаются несколько контактов матрицы сразу и логика работы немного усложнилась.
Доработал матрицу в прошивке для корвета с аутентичной раскладкой (JCUKEN) и переопределил в ней пины, чтобы можно было относительно просто обжать шлейф для подключения корвета:
https://pic.maxiol.com/thumbs2/16246...3.img2256j.jpg
Всю информацию для изготовления контроллера для корвета собрал в первом посту темы https://zx-pk.ru/threads/29197-kontr...laviatury.html