Важная информация

User Tag List

Страница 22 из 26 ПерваяПервая ... 181920212223242526 ПоследняяПоследняя
Показано с 211 по 220 из 259

Тема: Универсальный контроллер PS/2 клавиатуры для компьютеров с матричными клавиатурами.

  1. #211
    Veteran
    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,765
    Спасибо Благодарностей отдано 
    153
    Спасибо Благодарностей получено 
    56
    Поблагодарили
    42 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Отдельно на кнопках эта последовательность сработает, а кодом - нет. что не так? Печатается [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;
    Последний раз редактировалось Gutten; 26.11.2022 в 01:07.
    ZX-Evo Rev. C4 (Double-config) / VDAC2 / ZiFi / NeoGS / ZXM-Soundcard Extreme

  2. #211
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #212
    Veteran
    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,007
    Спасибо Благодарностей отдано 
    75
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    77 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Возможно с таймингами не так. 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;
    В любом случае, это не даст возможность вводить [ с автоповтором (если не отпускать клавишу), это больше для одиночного. Для автоповтора нужно еще помудрить.
    Последний раз редактировалось Dexus; 26.11.2022 в 09:08.

  4. #213
    Master Аватар для Xrust
    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    907
    Спасибо Благодарностей отдано 
    204
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    70 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Gutten, возможно между //отжали Y и //отжали SymShift нужно вставить задержку.

  5. #214
    Veteran
    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,765
    Спасибо Благодарностей отдано 
    153
    Спасибо Благодарностей получено 
    56
    Поблагодарили
    42 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Xrust Посмотреть сообщение
    Gutten, возможно между //отжали Y и //отжали SymShift нужно вставить задержку.
    Код:
         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 печатается дважды: в составе [, потом сама.

    - - - Добавлено - - -


    - - - Добавлено - - -

    Цитата Сообщение от Dexus Посмотреть сообщение
    Возможно с таймингами не так. 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;
    В любом случае, это не даст возможность вводить [ с автоповтором (если не отпускать клавишу), это больше для одиночного. Для автоповтора нужно еще помудрить.
    не помогло. Хотя автоповтор как раз работает и работает правильно: пока держишь, печатается [, в конце [y. А вот если один раз нажать, то печатается [y. Ну и савтоповтором проблема: уже давно не держишь, а он выводит несколько символов.
    Последний раз редактировалось Gutten; 26.11.2022 в 15:54.
    ZX-Evo Rev. C4 (Double-config) / VDAC2 / ZiFi / NeoGS / ZXM-Soundcard Extreme

  6. #215
    Veteran
    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,007
    Спасибо Благодарностей отдано 
    75
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    77 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Gutten Посмотреть сообщение
    пока держишь, печатается [, в конце [y
    Вот [y в конце означает что сканер клавиш бейсика считает, что шифт отпускается после y. Последнюю delay (50) увеличить может, до 100, 150, чтобы шифт сильно позже отпускался...

  7. #216
    Master Аватар для Xrust
    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    907
    Спасибо Благодарностей отдано 
    204
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    70 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Возможно, сама клавиатура генерирует лишний символ?
    Можно попробовать использовать отладку через порт. Посмотреть, в какой момент появляется лишний символ? Клавиатура его генерирует или логика скетча?

    - - - Добавлено - - -

    Dexus, возможно. Delay может давать очень странные эффекты.

  8. #217
    Veteran
    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,007
    Спасибо Благодарностей отдано 
    75
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    77 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Клавиатура может 1000 раз в прерывании менять состояние порта, важно только то что она прочитает в момент отработки сканирования, 1 раз в прерывание. Т.е. как минимум на 1/50 секунды там проскакивает голый Y (без shift).
    Кстати после этого нужно снова Ext ткнуть.
    По сути должно быть 2 сценария, на нажатие и на отжатие клавиши.

  9. #218
    Master Аватар для Xrust
    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    907
    Спасибо Благодарностей отдано 
    204
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    70 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Нужно еще учитывать, что клавиатура генерирует коды как на нажатие, так и на отжатие клавиши. Эти коды надо обрабатывать очень аккуратно, иначе вместо отжатия может сработать нажатие. Скорее всего придется весь цикл переделать, чтобы такие сложные сочетания заработали.
    Gutten, распознание кода отжатия (F0) только в одном месте цикла сейчас происходит, обратите на это внимание.

    Как я уже говорил, отладочный порт покажет, что происходит.

  10. #219
    Junior
    Регистрация
    31.03.2021
    Адрес
    г. Лимасол, Кипр
    Сообщений
    26
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nemo Посмотреть сообщение
    USB бы прикрутить да mega168 вроде этого не умеет....
    занимаюсь USB на STM32
    тут https://zx-pk.ru/threads/34781-usb-keyboard.html думал на 595 но вот тодсказали Эту статью

  11. #220
    Member
    Регистрация
    26.01.2016
    Адрес
    г. Мелитополь, Украина
    Сообщений
    155
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    41
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от aleksy Посмотреть сообщение
    занимаюсь USB на STM32
    зачем там стм32?
    лет 100 назад делал программный юсб на 48 меге... хватало за глаза! а тут стм32... как-то перебор.

Страница 22 из 26 ПерваяПервая ... 181920212223242526 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 34
    Последнее: 24.11.2022, 16:05
  2. Ответов: 40
    Последнее: 27.06.2021, 15:41
  3. Ответов: 146
    Последнее: 31.05.2020, 19:00
  4. Ответов: 29
    Последнее: 24.03.2019, 18:11

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •