User Tag List

Показано с 1 по 10 из 24

Тема: безвейтовый контроллер AT-клавы на МК

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    18.01.2005
    Адрес
    Москва
    Сообщений
    3,695
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от boo_boo Посмотреть сообщение
    а если держать в памяти МК (заполняя по мере нажатия клавиш) 256-байтную таблицу с текущим состоянием клавы для всех возможных сочетаний линий a8-a15 (т.е обьединять полуряды по ИЛИ заранее) и в прерывании просто брать оттуда готовое значение?
    Всеравно нужно время на обработку прерывания контроллеру и выборку нужного значения.

    Пожалуйста пишите в email (chunin{гаф}mail{тчк}ru), личка отключена!!!

    NedoPC group. ZX-Evolution, ATM Turbo 2+, Pentagon1024SL.
    [Предлагаю: ZXEvo, PAL coder, NeoGS, TS-FM, YM2149, Z80 и прочее]
    Все здесь: http://www.nedopc.com.
    Новости/поддержка/Faq: http://forum.nedopc.com.
    Раздача халявы: http://forum.nedopc.com/viewtopic.php?f=32&t=977

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

  3. #2

    Регистрация
    02.03.2005
    Адрес
    Екатеринбург
    Сообщений
    133
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно сделать безвайтовый контроллер без особых ухищрений, если между МК и спеком поставить маааленьку м/с памяти на 256 байт - мк будет обновлять данные в ней, спек - читать (с большим приоритетом).
    Однако изза незначительной длительности Wait-а в схеме "без-вайта" вся канитель с доп памятью смысла не имеет.
    (По моим приблизительным подсчетам, если делать с табличкой в памяти МК то можно добиться значения wait-а в 2-3 спековских такта при частоте МК 8 мгц (AVR)).

  4. #3

    Регистрация
    16.06.2005
    Адрес
    Москва, Ногинск
    Сообщений
    708
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexCrush Посмотреть сообщение
    Можно сделать безвайтовый контроллер без особых ухищрений, если между МК и спеком поставить маааленьку м/с памяти на 256 байт - мк будет обновлять данные в ней, спек - читать (с большим приоритетом).
    А зачем 256 байт? Мне хватило 5 байтов (40 битов, 40 кнопок Спектрума). А еще я не стал ставить микросхему памяти, а поставил ПЛИС, куда была запихнута и вся мелкая логика. Данные в ПЛИС периодически закачивает контроллер КР1878ВЕ1, на котором реализован ps2 интерфейс и сопутствующая перекодировка скан-кодов.


    Цитата Сообщение от CHRV Посмотреть сообщение
    Всеравно нужно время на обработку прерывания контроллеру и выборку нужного значения.
    Допустим, контроллер работает на частоте 10 МГц. Период тактовой частоты составляет 100 нс. Современные контроллеры, как правило, с гарвардской архитектурой и выполняют лобую команду за 2 периода тактовой частоты, т.е. в нашем случае за 200 нс. А сколько команд нужно выполнить, просто чтобы зафиксировать факт обращения процессора к порту FEh? Десяток точно наберется. Отсюда и необходимость тормозить процессор на время, необходимое контроллеру, чтобы прочитать состояние шины адреса, вычислить необходимое значение в соответствии с принятыми скан-кодами и выдать его на шину данных. Поэтому безвайтный контроллер просто так не сделать, надо извращаться.
    Последний раз редактировалось KingOfEvil; 05.03.2007 в 23:12. Причина: Добавлено сообщение

  5. #4

    Регистрация
    02.03.2005
    Адрес
    Екатеринбург
    Сообщений
    133
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KingOfEvil Посмотреть сообщение
    А зачем 256 байт? Мне хватило 5 байтов (40 битов, 40 кнопок Спектрума). А еще я не стал ставить микросхему памяти, а поставил ПЛИС, куда была запихнута и вся мелкая логика. Данные в ПЛИС периодически закачивает контроллер КР1878ВЕ1, на котором реализован ps2 интерфейс и сопутствующая перекодировка скан-кодов.
    256 байт - как раз чтобы не заниматься каждый раз высчитыванием ответа спектруму - чтобы убыстрить отклик МК на чтение порта FE.
    Хотя с ПЛИС такой проблемы явно нету ;-) - она сама всё что нужно насчитает.
    Цитата Сообщение от KingOfEvil Посмотреть сообщение
    Допустим, контроллер работает на частоте 10 МГц. Период тактовой частоты составляет 100 нс....
    ...
    Поэтому безвайтный контроллер просто так не сделать, надо извращаться.
    В целом вывод ни в коей мере не оспариваю - от вайта в схеме без ПЛИС/внешней памяти сложно избавиться Лишь несколько корректировок.
    AVR (ATmega) выполняет команду за такт. Вход в прерывание - 4 такта. 1 такт - чтение старшего байта адреса с порта МК. еще 2 такта - чтение байта клавиатуры из памяти (это в лучшем случае - если таблица в 256 байт готова). 1 такт - на вывод байта наружу. Итого - 8 тактов. т.е. 800 нс.
    На нетурбированном спеке за это время истечет 3 такта (286 нс) - т.е. может быть можно успеть за время I/O операции Z80 (как раз 3 такта) (если я нигде не обсчитался. На турбированном - точно не успеть.
    Последний раз редактировалось AlexCrush; 06.03.2007 в 18:48.

  6. #5

    Регистрация
    16.06.2005
    Адрес
    Москва, Ногинск
    Сообщений
    708
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexCrush Посмотреть сообщение
    256 байт - как раз чтобы не заниматься каждый раз высчитыванием ответа спектруму - чтобы убыстрить отклик МК на чтение порта FE.
    А, вот зачем.

    Цитата Сообщение от AlexCrush
    Хотя с ПЛИС такой проблемы явно нету ;-) - она сама всё что нужно насчитает.
    ПЛИС у меня ничего не считает, там жесткая логика (мультиплексор + 5 штук 8-разрядных регистров, в которые микроконтроллер периодически закачивает уже сформированную матрицу клавиатуры: 5x8=40 бит, по 1 биту на каждую кнопку).

    Цитата Сообщение от AlexCrush
    AVR (ATmega)
    Не люблю avr
    Последний раз редактировалось KingOfEvil; 06.03.2007 в 20:30.

  7. #6

    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,726
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    91 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexCrush Посмотреть сообщение
    256 байт - как раз чтобы не заниматься каждый раз высчитыванием ответа спектруму - чтобы убыстрить отклик МК на чтение порта FE.
    Если внимательно посмотрите, значение каждого байта этого ОЗУ надо предварительно рассчитать
    в зависимости от нажатых клавиш, так что никакого выигрыша в быстродействии такой подход не дает.
    Как раз жесткая логика, реализованная на CPLD дает выигрыш, поскольку операция ИЛИ в матрице
    клавиатуры реализуется аппаратно.
    Что касается применяемого микроконтроллера, то на вкус и цвет товарищей нет.
    Лично я делаю на том, что наиболее приемлемо в разрабатываемой кострукции, по разным критериям -
    цена, быстродействие, подходящий тип корпуса, наличие хороших средств разработки и отладки и т.д.
    Последний раз редактировалось caro; 06.03.2007 в 21:28.

  8. #7

    Регистрация
    02.03.2005
    Адрес
    Екатеринбург
    Сообщений
    133
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    13 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Если внимательно посмотрите, значение каждого байта этого ОЗУ надо предварительно рассчитать
    в зависимости от нажатых клавиш, так что никакого выигрыша в быстродействии такой подход не дает.
    Дело в том, что рассчитывать новую матрицу нужно относительно редко - лишь при нажатиях человека на PC клаву - а это несколько раз в секунду, не чаще. Пересчет таблицы на Z80 у меня занимает около 4500 тактов т.е. около 1.3 миллисек. при 3.5 МГц (значит можно пересчитывать до 750 раз в сек). Думаю, что на МК получится не дольше, а с учетом более высокой тактовой частоты - вообще быстро.

    Зато мы получаем почти мгновенный (максимум 3 такта вейта в турбо режиме, 0 в обычном) отклик на спектрумовский IN (#XXFE).

    Добавлено через 7 минут
    Цитата Сообщение от KingOfEvil Посмотреть сообщение
    ПЛИС у меня ничего не считает, там жесткая логика (мультиплексор + 5 штук 8-разрядных регистров, в которые микроконтроллер периодически закачивает уже сформированную матрицу клавиатуры: 5x8=40 бит, по 1 биту на каждую кнопку).
    Ну там же должна быть логика объединения данных по AND из этих самых регистров на случай чтения спектрумом из порта, например, #00FE. Именно это я и называю "ПЛИС считает". (Причем это такая нехилая логика, на дискретах ее делать громоздко.).
    Хотя можно конечно сделать и без обсчета - простым методом "AND на диодах". Но нужно 40 диодов.
    Последний раз редактировалось AlexCrush; 07.03.2007 в 08:40. Причина: Добавлено сообщение

  9. #8

    Регистрация
    23.10.2006
    Адрес
    С.Петербург
    Сообщений
    1,771
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexCrush Посмотреть сообщение
    ....... Но нужно 40 диодов............
    Жесть!
    Scorpion 256 TurboPlus GMX2048 edition (с новой ревизией спец-чипов - Турбина и ПрофПЗУ на GAL22v10D, ФАПЧ дисковода - GAL16v8D ),CARO ZX_MC/SMUC1.3/GeneralSound 512 Kb/FDD3.5+5.25... Pentagon1024Sl v2/Z-controller+SD 2Gb/GS-512/TurboSound/FDD3.5+5.25...Speccy2007 48 +SD 2Gb ( 128+Ay в процессе ) ... Все через PAL-Coder

  10. #9

    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,726
    Спасибо Благодарностей отдано 
    19
    Спасибо Благодарностей получено 
    148
    Поблагодарили
    91 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AlexCrush Посмотреть сообщение
    Зато мы получаем почти мгновенный (максимум 3 такта вейта в турбо режиме, 0 в обычном) отклик на спектрумовский IN (#XXFE).
    Откуда появился /WAIT в Турбо-режиме, если надо просто прочитать байт из заданной ячейки ОЗУ?

    Цитата Сообщение от AlexCrush Посмотреть сообщение
    Но нужно 40 диодов.
    Мы тебе про CPLD, а ты нам про диоды
    Обсуждать эту тему стало не интересно

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

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

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

Похожие темы

  1. [Поиск 1] Контроллер IDE
    от CHRV в разделе Поиск
    Ответов: 25
    Последнее: 02.10.2020, 16:07
  2. ZX-MMC контроллер
    от Orionsoft в разделе Внешние накопители
    Ответов: 17
    Последнее: 12.05.2019, 17:11
  3. Контроллер многозадачной ОС
    от Conan в разделе Оси
    Ответов: 50
    Последнее: 20.09.2009, 10:56
  4. глюки клавы
    от boo_boo в разделе Устройства ввода
    Ответов: 5
    Последнее: 11.02.2007, 15:55
  5. Есть плата PC клавы и мыши для ZS256
    от Sergei Frolov в разделе Барахолка (архив)
    Ответов: 5
    Последнее: 15.01.2006, 14:56

Ваши права

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