Собрал я контроллер клавиатуры на ATMega8. Давно собрал. Только обнаружилась одна проблема.
Когда нажимаешь две кнопки одновременно, или почти одновременно, или последовательно, клавиатура посылает два (или четыре байта) нормально. Но когда отпускаешь две кнопки почти одновременно (с запаздыванием ~0.1 сек), то код второй отжатой кнопки теряется. То есть вторая кнопка залипает. Баг стабильный на всех клавишах.
Я уже это проверил без Ориона (без тормозящих прерываний) на маленькой демо программе.
После приема каждого байта я прижимаю линию Clock. То есть подаю на неё ноль, обрабатываю данные и отпускаю Clock. Собственно так же сделано и у caro.
Я пробовал зажимать Clock сразу после приема, во время приема, спустя 10-1000 мкс. Пофиг.
И мне кажется, что клавиатура продолжает передавать данные, когда я зажимаю Clock. Но при этом, я ни разу не принял хвост пакета. Моя программа бы заметила ошибку приёма и перезагрузила МК. Клавиатура бы мигнула светодиодами.
Либо в программе есть ошибка, которую я не заметил. В общем пока х.з. Я неспешно думаю над этой проблемой.
Пока писал, у меня появилась идея не трогать Clock, если принимается посылка из трёх и более байт.




Ответить с цитированием