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

User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 29

Тема: Контроллер клавиатуры PS/2

  1. #11
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    538
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    136
    Поблагодарили
    105 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Использовать монитор БКшки для тестирования - не самая лучшая идея, нужно написать специальную тестовую программку.
    Цитата Сообщение от Alex_LG Посмотреть сообщение
    В некоторые моменты проц почему-то считывает не регистр кода клавиши (для обычный кодов по 2 раза), а делает цикл "чтение-модификация-запись" регистра состояния
    Это происходит по команде clr @#177660
    Не знаю, какую БК 10 или 11М используете, но в 10ке это используется только в п/п инициализации драйвера клавиатуры, и в обработке прерывания по кнопке СТОП, а в мониторе 11М - этой командой злоупотребляют. Она там втыкнута к месту и не к месту. Например, в п/п получения кода нажатой клавиши, перед получением она выполняется, в обработке векторов прерывания от клавиатуры в конце, и в обработчике ошибочных ситуаций.

    регистр читается дважды как на БК 10 так и на 11 в п/п приёма кода нажатой клавиши потому, что в первый раз - это чтобы сбросить бит 7 - флаг нового кода в регистре состояния (на всякий случай, чтобы гарантированно произошло прерывание от клавиатуры), и потом делается ожидание прерывания, в котором делается чтение регистра 177662 и обработка и передача принятого кода подпрограмме приёма кода нажатой клавиши.

  2. Этот пользователь поблагодарил gid за это полезное сообщение:

    Alex_LG (01.08.2019)

  3. #12
    Master
    Регистрация
    30.07.2013
    Адрес
    г. Запорожье, Украина
    Сообщений
    891
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    49 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть прогресс, правда не все хорошо.
    Думал, что вывод "СТОП" и зависание это одна проблема, но оказалось, что причина одна, а вот решения разные. "СТОП" появляется при первом считывании из регистра данный клавиатуры, а зависание - при втором.
    При разработке пользуюсь докой "Однокристальный микропроцессор К1801ВМ1. Техническое описание. Версия 1.1 (January 26, 2019)" от [email protected] взятой где-то здесь. Так вот. По доке, проц при чтении выставляет активный "уровень на линии nDIN, далее микропроцессор переходит в состояние ожидания данных и сигнала подтверждения nRPLY", запускается специальный таймер и "Если сигнал подтверждения nRPLY не будет получен в течение 56..64 тактов CLC, то цикл обмена прерывается и возникает программное исключение по вектору 0000048 (или 1600028 - зависит от состояния битов PSW10 и PSW11)." Однако на практике оказалось другое - если Мега8 не успевает вовремя выставить nRPLY (не пойму по какой причине, но nDIN бывает разной длины: при нормальной работе - где-то 2-3мкс, при сбоях - 1.5мкс), то проц не сразу ждет, а "передергивает" nDIN (что делает - не знаю) и только после этого уходит в ожидание на 64 такта. Т.к. Мега определяет, что nDIN уже не активный - снимает nRPLY, а он получается коротким (по доке - должен быть не менее двух тактов проца) и уже игнорирует следующий активный nDIN с ожиданием в 64 такта. Проц, естественно уже не получает nRPLY и уходит в обработку исключений, т.е. в инициализацию контроллера клавиатуры с выводом надписи "СТОП". Немного оптимизировал код и поставил задержку в 1мкс - проблема со "СТОП" ушла.

    Осталось зависание. Причина та же, но вот проц не уходит в ожидание, а зависает. В принципе от него тоже избавился оптимизацией кода (все-таки переход на Мегу8 сказывается - надо байт делить между портами), но вылезла другая "бяка" - коды клавишь "O", "G" и "C" не правильно выводятся, т.е. вместо "О" выдает "/", вместо "G" - " ' ", вместо "C" - "#", правда иногда - все ОК. Анализ кодов показал, что портится бит 6 и только в кодах, где в младшем полубайте подряд идут 4, 3 и 2 единицы, т.е. 0x6F -> 0x2F, 0x67 -> 0x27, 0x63 -> 0x23. С остальными кодами вроде все хорошо. Вот как сейчас
    Код:
    ADL_WR=DATA_REG;
    //ADH_WR |= AD6;
    ADH_WR=DATA_REG_H;
    но если разрэмить вторую строчку (хотя в кодах клавишь этот бит и так установлен), то коды выдает правильные, но появляется периодически зависание когда короткий nDIN.

    Ну и последний вопрос. Где-то туплю. Есть код
    Код:
    if (sc==0x11)
    {
    	if (ext)
    	{
    		ext=0;
    		lat = 2;	//R_ALT=LAT
    		kk++;
    	}
    	else lat=4;		//L_ALT=RUS
    }
    Этот кусок по идее переключает РУС-ЛАТ. По левому Alt (код 0x11, т.е. sc=0x11, ext=0) должен включиться режим РУС, по правому Alt (код 0xE0 0x11, т.е. sc=0x11, ext=1) - ЛАТ. По умолчанию режим ЛАТ, т.е ext=0 и lat=2. По идее при нажатии лев. Alt должен переключиться режим на РУС. Но в этот режим переключается только при втором нажатии на лев. Alt (всегда). Режим ЛАТ переключается сразу по нажатию прав. Alt.

    Обновил исходники
    https://drive.google.com/file/d/1q8r...ew?usp=sharing

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

    Разобрался с кодами клавиш - поменял строчки местами, т.е.
    Код:
    ADH_WR=DATA_REG_H;
    ADL_WR=DATA_REG;
    и все стало нормально работать - переходные процессы??? ))))))

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

    С РУС-ЛАТ тоже разобрался.

  4. #13
    Master
    Регистрация
    30.07.2013
    Адрес
    г. Запорожье, Украина
    Сообщений
    891
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    49 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Все работает. Обновил первый пост, так же добавил видео. Пользуйтесь! )))))
    Клавиша Del убирает символ справа, как и положено, Insert - вставляет пробел. Служебные кнопки верхнего ряда назначены на F1 (ПОВТ) - F10 (СТОП), Esc - АР2, Home - ВС, левый Alt - РУС, правый Alt - ЛАТ, Ctrl - СУ. Shift - работает как и принято в современном мире, CapsLock - не работает, не вижу смысла.

  5. Эти 2 пользователя(ей) поблагодарили Alex_LG за это полезное сообщение:

    Adam Bazaroff (11.08.2019), Mr-Linker (06.08.2019)

  6. #14
    Member
    Регистрация
    13.01.2010
    Адрес
    Подольск
    Сообщений
    41
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чего-то у меня не заработало, подвешивает 11М. С вытащенной atmega8 запускается. МК проверял, прошивал загрузчик от ардуино - светодиодом моргал. Кварц 20МГц без конденсаторов.

    Нашёл косяк с землёй, позже ещё поковыряю.
    Последний раз редактировалось Terra; 16.01.2020 в 21:44.

  7. #15
    Master
    Регистрация
    30.07.2013
    Адрес
    г. Запорожье, Украина
    Сообщений
    891
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    49 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если подвешивает, значит или проверить монтаж или АТмега висит, т.к. она должна отвечать на запрос, а проц ждет ответа.
    На 11 не проверял, нету (((

  8. #16
    Member
    Регистрация
    13.01.2010
    Адрес
    Подольск
    Сообщений
    41
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Накосячил - землю 8 посадил на avcc-20 вместо gnd -22. Запускается но не работает, для теста посадил диод на стоп через сопротивление на землю. Подправил время на 1000мс в атмел студио, скомпилил, залил. Не работает, похоже без лог. анализатора не обойтись.

    https://pic.maxiol.com/images2/15792...31.ps2key1.jpg
    https://pic.maxiol.com/images2/15792...31.ps2key2.jpg
    https://pic.maxiol.com/images2/15792...31.ps2key3.jpg

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

  10. #17
    Master
    Регистрация
    30.07.2013
    Адрес
    г. Запорожье, Украина
    Сообщений
    891
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    49 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Скорее всего да, лог анализатор нужен, проверяйте ответ от атмеги. И еще, поставьте конденсаторы на кварц 12-22пФ, даташит рекомендует)))

  11. #18
    Member
    Регистрация
    13.01.2010
    Адрес
    Подольск
    Сообщений
    41
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Что-то у меня вообще от МК сигналов нет...как бы ещё это дело проверить?

  12. #19
    Master
    Регистрация
    30.07.2013
    Адрес
    г. Запорожье, Украина
    Сообщений
    891
    Спасибо Благодарностей отдано 
    70
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    49 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Фьюзы правильно прошили?

  13. #20
    Member
    Регистрация
    13.01.2010
    Адрес
    Подольск
    Сообщений
    41
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вроде правильно

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

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

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

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

Похожие темы

  1. ZXKeyb контроллер PS/2 клавиатуры.
    от Randomize_Usr в разделе Устройства ввода
    Ответов: 8
    Последнее: 17.06.2018, 22:01
  2. БезWaitовый контроллер клавиатуры
    от caro в разделе Устройства ввода
    Ответов: 68
    Последнее: 01.07.2015, 05:42
  3. контроллер писишной клавиатуры
    от sevol в разделе Устройства ввода
    Ответов: 10
    Последнее: 18.02.2011, 09:38
  4. КУПИТСЯ контроллер AT клавиатуры.
    от kgbond в разделе Барахолка (архив)
    Ответов: 5
    Последнее: 15.09.2010, 11:16

Ваши права

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