А теперь вопрос: что сложного в том, чтобы сразу указать эти значение в первом посте с прошивками?
Вместо этого предлагается смотреть 10 минут видео, в котором воды больше чем смысла...
А теперь вопрос: что сложного в том, чтобы сразу указать эти значение в первом посте с прошивками?
Вместо этого предлагается смотреть 10 минут видео, в котором воды больше чем смысла...
Автор же написал, что делал в ардуине, поэтому не вдавался в такие нюансы. Ему и без этого надо спасибо сказать за столь удачную конструкцию.
И важный момент. На схеме в первом сообщении указан чип Atmega168. Для него я и давал фьюзы. Но автор уточняет:При смене чипа надо обязательно проверять фьюзы. Для Atmega8 они 100% будут другими. Иначе можно получить кирпич.
P.S. Не смотрел прошивку. Неужели она не влезет в Atmega88 или даже Atmega48?
Эти чипы побюджетнее Atmega168.
Так автору спасибо без вопросов. НО предлагать смотреть видео вместо текстового описания какие параметры выставить (раз уже нет конкретных значений фьюзов)... Завтра ютуб заблочат или ютуб видео заблочит и что делать?
Ретрограды обычно сами знают, как правильно выставить фьюзы. Я не настолько погружен в тему. Можно скомпилировать в Ардуино и прошить TL866, фьюзы будут содержаться в файле прошивки.
- - - Добавлено - - -
Совершенно справедливо.
- - - Добавлено - - -
Когда я последний раз изучал цены на Али, там как раз Atmega168 были самыми доступными. Они просто более распространены. А пару лет назад, действительно, можно было найти Atmega8 немного дешевле.
- - - Добавлено - - -
Это один из способов отблагодарить автора.
Ewgeny7, можно ли получить исходник прошивки KeybRT.ino_atmega168p_8000000L? Я её использую на скорпионе+ГМХ, и она при холодном старте всегда висит. При этом исходная прошивка (не повёрнутая матрица) не висит. И кнопка переключения турбо не работает: подключена на контакты GMX, но при каждом нажатии светодиод мигает и снова загорается, т.е. турбо само разу же включается обратно.
скажите, а реально сделать вывод 2 клавиш, потом через паузу ещё двух? Для спектрума это переход в режим ExtMode, потом нажатие кнопки вместе с SymShift.
У меня получилось перейти в режим ExtMode, но потом срабатывает только кнопка, SymShift не учитывается.
Gutten, да можно все что угодно сделать. Матрица может любое количество ключей произвольно замыкать. Нужно только дать ей команды. ExtMode в прошивке уже реализован, символы ".,:; тоже реализованы.
Эо я понимаю, по отдельности я и ExtMode делаю, и Y+SymShift.
Вопрос как это последовательно сделать? У меня вот пока не получилось. Не срабатывает второй SymShift.
- - - Добавлено - - -
Последовательность нажатий "Caps, Sym, пауза, Sym, Y" не отрабатывает второй Sym. Получается "Caps, Sym, Y"
Или же надо "нажать Caps+Sym, потом Caps отпустить, и нажать Y"? Как сделать отпускание одной клавиши внутри case?
Gutten, А на реале эта последовательность правильно работает? Требуется отжимать Sym?
Чтобы "нажать клавишу" нужно записать значение HIGH, чтобы затем отпустить, надо записать значение LOW.
Чтобы разобраться что там у вас происходит, покажите ваш скетч.
Отдельно на кнопках эта последовательность сработает, а кодом - нет. что не так? Печатается [y, должно [
Код:case 0x54: //если считался код 0x54 [[]
SetAddr(table[0x14]);
SetKey(d); //нажали SymShift
SetAddr(table[0x12]);
SetKey(d); //нажали CapsShift
delay (100);
d = LOW;
SetAddr(table[0x12]);
SetKey(d); //отжали CapsShift
delay (100);
d = HIGH;
SetAddr(table[0x35]);
SetKey(d); //нажали Y
delay (100);
d = LOW;
SetAddr(table[0x35]);
SetKey(d); //отжали Y
SetAddr(table[0x14]);
SetKey(d); //отжали SymShift
d = HIGH;
break;
Возможно с таймингами не так. delay(100) это по 1/10 секунды. Возможно не в каждом месте этой паузы достаточно (а где-то - с избытком). Предположительно, с зажатой "y" нужно меньше задержку делать, и шифт отпускать после. Типа вот так:
В любом случае, это не даст возможность вводить [ с автоповтором (если не отпускать клавишу), это больше для одиночного. Для автоповтора нужно еще помудрить.Код:SetAddr(table[0x35]);
SetKey(d); //нажали Y
delay (50);
d = LOW;
SetAddr(table[0x35]);
SetKey(d); //отжали Y
delay (50);
SetAddr(table[0x14]);
SetKey(d); //отжали SymShift
d = HIGH;
Gutten, возможно между //отжали Y и //отжали SymShift нужно вставить задержку.
Добавил. Не помогло. Проблема в том, что Y печатается дважды: в составе [, потом сама.Код:case 0x54: //если считался код 0x54 [[]
SetAddr(table[0x12]);
SetKey(d); //нажали SymShift
SetAddr(table[0x14]);
SetKey(d); //нажали CapsShift
delay (50);
d = LOW;
SetAddr(table[0x12]);
SetKey(d); //отжали CapsShift
delay (50);
d = HIGH;
SetAddr(table[0x35]);
SetKey(d); //нажали Y
delay (50);
d = LOW;
SetAddr(table[0x35]);
SetKey(d); //отжали Y
delay (50);
SetAddr(table[0x14]);
SetKey(d); //отжали SymShift
d = HIGH;
break;
- - - Добавлено - - -
- - - Добавлено - - -
не помогло. Хотя автоповтор как раз работает и работает правильно: пока держишь, печатается [, в конце [y. А вот если один раз нажать, то печатается [y. Ну и савтоповтором проблема: уже давно не держишь, а он выводит несколько символов.
Возможно, сама клавиатура генерирует лишний символ?
Можно попробовать использовать отладку через порт. Посмотреть, в какой момент появляется лишний символ? Клавиатура его генерирует или логика скетча?
- - - Добавлено - - -
Dexus, возможно. Delay может давать очень странные эффекты.
Клавиатура может 1000 раз в прерывании менять состояние порта, важно только то что она прочитает в момент отработки сканирования, 1 раз в прерывание. Т.е. как минимум на 1/50 секунды там проскакивает голый Y (без shift).
Кстати после этого нужно снова Ext ткнуть.
По сути должно быть 2 сценария, на нажатие и на отжатие клавиши.
Нужно еще учитывать, что клавиатура генерирует коды как на нажатие, так и на отжатие клавиши. Эти коды надо обрабатывать очень аккуратно, иначе вместо отжатия может сработать нажатие. Скорее всего придется весь цикл переделать, чтобы такие сложные сочетания заработали.
Gutten, распознание кода отжатия (F0) только в одном месте цикла сейчас происходит, обратите на это внимание.
Как я уже говорил, отладочный порт покажет, что происходит.
занимаюсь USB на STM32
тут https://zx-pk.ru/threads/34781-usb-keyboard.html думал на 595 но вот тодсказали Эту статью
vegapiratradio, USB host?
нет, слэйв
А вот интересно сделано для матрицы на альтере: https://github.com/andykarpov/ps2_cp...bd/avr_kbd.ino
В принципе, как-то можно и здесь аналогично сделать, был бы человек умелый и с желанием.
Да чтото не доверяю я програмному USB HOST
А для Спека, Атмега8 подойдет, есть прошивка под неё?
Я к сожалению в компиляциях этих ни в зуб ногой! Не сочтите за наглость, но можно готовую прошивку для 8-й Атмеги.
- - - Добавлено - - -
Клава вот такая у меня
https://pic.maxiol.com/thumbs2/16754...78.1001096.jpg
gdv2002, да я сам в них ни в зуб ногой :) поэтому все через ардуину делаю. А чем вы прошивать будете контроллер?
У меня Usbasp для Атмег. Ну и "5 проводков" на ЛПТ.
У меня получилось так (там версии для 48 и 128).
Выбрал плату "Arduino NG or older" и процессор "ATmega8".
Сделал по совету ниже конкретно ATmega8.
Как удалить предыдущий файл не разобрался поэтому оставил.
Вроде как это можно просто прошить программатором.
https://github.com/MCUdude/MiniCore
как вариант
Atmega88 тоже работает,проверено много раз, на CH9350L хороший вариант все клавы что у меня есть работают(без проводная тоже ). Можно менять пины подключения в экселе. Автор HighLander.
Как решен вопрос автоповтора нажатой клавиши?
Если нажать и удерживать клавишу, клавиатура начинает сама генерировать повторные нажатия.
То же самое делает Спектрум.
Они не конфликтуют?
Естественным образом так получилось. Логика работы ps/2 клавиатуры. При автоповторе не передаётся префикс отпускания клавиши. Соответственно уже замкнутый контакт матрицы может ещё раз замкнуться, что никак не повлияет на работу клавиатуры "подопечного" компьютера. И если в нём нет автоповтора, то и не будет.