User Tag List

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

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

  1. #211

    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,800
    Спасибо Благодарностей отдано 
    177
    Спасибо Благодарностей получено 
    64
    Поблагодарили
    49 сообщений
    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 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
    Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek

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

  3. #212

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,086
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    151
    Поблагодарили
    99 сообщений
    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

    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    931
    Спасибо Благодарностей отдано 
    243
    Спасибо Благодарностей получено 
    167
    Поблагодарили
    81 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #214

    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,800
    Спасибо Благодарностей отдано 
    177
    Спасибо Благодарностей получено 
    64
    Поблагодарили
    49 сообщений
    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 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
    Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek

  6. #215

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,086
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    151
    Поблагодарили
    99 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  7. #216

    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    931
    Спасибо Благодарностей отдано 
    243
    Спасибо Благодарностей получено 
    167
    Поблагодарили
    81 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

  8. #217

    Регистрация
    04.08.2005
    Адрес
    Nizhnevartovsk
    Сообщений
    1,086
    Спасибо Благодарностей отдано 
    102
    Спасибо Благодарностей получено 
    151
    Поблагодарили
    99 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  9. #218

    Регистрация
    12.04.2017
    Адрес
    г. Тольятти
    Сообщений
    931
    Спасибо Благодарностей отдано 
    243
    Спасибо Благодарностей получено 
    167
    Поблагодарили
    81 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  10. #219

    Регистрация
    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

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

    По умолчанию

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

Страница 22 из 29 ПерваяПервая ... 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

Ваши права

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