Это реклама. К тому же безнадежно устаревшая. Определитесь с вашими целям и критериями. И отталкиваетесь от них. По ним оцениваете каждый вариант.
Вид для печати
Это реклама. К тому же безнадежно устаревшая. Определитесь с вашими целям и критериями. И отталкиваетесь от них. По ним оцениваете каждый вариант.
ваши условные тайминги Вложение 76503 чёрной линей показано в какой момент будут фиксироваться данные при инверсии CLK.
Вопрос, гарантированная фиксация будет за 7 нанаек или за пол полпириуда
Смотрите datasheet, там все зависит от chip grade. Обычно требуется время между установкой входных сигналов и clk. Но вот после clk данные мугут меняться сразу или после небольшой задержки.
Судя по диаграммам в этой ветке. Там присутствует большой звон по питанию. Это характерно для или плохой трассировки питания, или не согласованности трасс. Или и того и другого. Когда на сигналах и питании звон, результат не предсказуемый.
Или за -3 нс, например. Отрицательная задержка относительно клока -- вполне себе нормальное дело. Например, у внутренних триггеров КМОП БИС такое даже скорее является правилом. Связано со семотехникой. Там, грубо говоря, путь тактового сигнала до защёлки короче, чем входных данных.
Ок с относительными задержками XTAL всё понятно, прямой или иверсный сигнал изменит фазу выводимого сигнала, в любом случаи фиксация данных произойдёт.
- - - Добавлено - - -
Соглашусь только с CTRL+SHIFT, они находятся в одной строке.
Вложение 76505
Значит мне нужно поместить скан код 0Ah и 04h в одну строку, а остальные кнопки не имеют значения, правильно?
Не понимаю с чем вы не согласны... :v2_dizzy_tired2: Вы не хотите игроком или курсором бежать по диагонали? Влево-вверх? Нет?
И еще. Вы говорите о "скан-коде", но в железе их нет. С точки зрения процессора, аппаратно клавиатура это набор бит, которые расположены в нескольких байтах. Каждый бит это состояние клавиши. Это не скан-код.
Скан-код это порядковый номер или уникальный идентификатор клавиши.
Конечно программно, порядковый номер бита, может быть конвертирован в скан-код.
Разъясните толком. Может я чего не догоняю.
Логика работы перекодирования: счётчик непрерывно сканирует клавиатуру, и как только будет нажата кнопка винтиль 8И установит на входе R "1" а при достижении двоичного адреса зажатой кнопки на входе С произойдёт перепад уровня High Low High, и в регистре зафиксируется старший адрес ПЗУ, в сваю очередь асинхронно программа опроса перебирает младшие 4 бита ПЗУ, когда будет достигнут требуемый адрес ПЗУ будет установлен в ноль один бит на выходе ПЗУ. В данном схемном решении можно зажать хоть все кнопки одновременно, счетчик будет непрерывно перезаписывать старший адрес а в ПЗУ записаные данные выдают только по одному биту, если предположим мы нажали абсолютно все кнопки процедура опроса определит как буто непрерывно, последовательно нажимаются все кнопки.
Проблему которую я ранее не заметил, то что CTRL и SHIFT должны находится в одной строке, а переработанная схема не может одновременно установить несколько бита в ноль, см миниатюра выше.
Я не совсе понимаю зачем двух портовое ОЗУ, если нажато две или более кнопок в ОЗУ эти кнопки не будут находится по одному адресу?
Моё решение основывается на одной ячейки памяти в которую записывается скан кодом (адрес ПЗУ) и будет удерживаться этот адрес пока нажата кнопка.
В регистре будет переписыватся адреса в той последовательности в которой было нажато несколько кнопок.
P.S. Давно в детстве я собрал РК-86, подпрограмма опроса в РК-86 разбита на две части 1я запрашивает нажата или не нажата любая кнопка 2я определяет какая по счёту нажата, и этот порядковый номер является индексом в таблице кодов.
У меня нету кода опроса клавиатуры Aleste
Повторюсь: С точки зрения процессора, аппаратно клавиатура это набор бит, которые расположены в нескольких байтах двух-портового ОЗУ.
Задача перекодировщика конвертировать матрицу клавиатуры А в матрицу клавиатуры Б. Та что бы программы от Amstrad CPC которые напрямую доступаются к клавиатуре не заметили разницы. И если они ждут нажатия клавиш left+up в матрице Б, то получает эти нажатия если нажаты left+up в матрице А.
Процессор не чего не ждёт он опрашивает.
Как работает конвертор Alete мне известно. ПЗУ преобразует линейный адрес в нелинейный и по битно задвигает в регистр и уже конвертированная матрица записывается в порт Б и считывается из порта А. 11 Байт двух-портового ОЗУ. Адрес порта А номер строки матрицы от Amstrad CPC.
Может я не магу вам разъяснить альтернативный вариант конвертора клавиатур?
Одна ячейка которая переписывается в 88 раз быстрей чем происходит опрос процессором, и данные записанные в регистр синхронизированные с адресом строки матрицы Amstrad CPC.
Если быть точней то "опрашивает" и "ждёт" или "ожидает" не процессор а программа.
Но если программа в ожидании события, то можно в постом разговоре сказать "процессор ждет".
В вашем случае. Время сканирования всей клавиатуры для генерации оного байта (одной строки)
- должно быть достаточно мало чтобы процессор выставив адрес строки прочитал ее состояние в следующей инструкции. Ну или немногим больше.( сканировать надо быстро)
- Но при сканировать клавиатуру, требуется небольшое время на разряд/заряд емкости прододников клавиатуры.(сканировать необходимо не слишко быстро) это при том, что сопротивление нажатой клавиши может быть десятки Ом.
Сами рассчитывайте этот баланс. И тогда поймете, возможен ли он или нет.