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

User Tag List

Страница 27 из 31 ПерваяПервая ... 232425262728293031 ПоследняяПоследняя
Показано с 261 по 270 из 303

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

  1. #261
    Activist
    Регистрация
    20.12.2016
    Адрес
    г. Москва
    Сообщений
    375
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    caro, какую прошивку лучше взять за исходную для модификации под 16ю атмегу?

  2. #262
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,721
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    87 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от surinm Посмотреть сообщение
    caro, какую прошивку лучше взять за исходную для модификации под 16ю атмегу?
    Посмотрю в своих вариантах, пришлю подходящую.

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

    Цитата Сообщение от Error404 Посмотреть сообщение
    В Орионе даже в базовом ROM-BIOS F800 есть п/п анализа нажатия любой клавиши, там в порт F400 записывается константа 0 и затем c F401 считываются сразу все линии, это примерно одинаково для обоих матриц, для УКНЦ дополнительно читается и F402 (порт где в варианте РК висит только 3 кнопки {ctrl, shift, ruslat}, а у УКНЦ там 3*8 кнопок). И все игры ZX опрашивают клавиатуру произвольно. Т.е. надо чтобы алгоритм был тот же что у прошивки для RK-86, но на 3 бита "шире"
    У нас вышло уже 2 релиза плат для УКНЦ, которые разведены под корпус и клавиатуру УКНЦ, и там сразу разведен контроллер из этой темы (причем с 11 доп. диодами, что в теории дает возможность одновременного использования и механической клавы, и PS2).
    Желательно бы посмотреть эту часть схемы. Пришли если не сложно на мой e-mail или дай ссылку.

  3. #263
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Желательно бы посмотреть эту часть схемы. Пришли если не сложно на мой e-mail или дай ссылку.
    Схема полностью такая же как и оригинальная kbd_or12.png (в архиве первом посте), добавленные диоды - просто развязка аналогично тому как в оригинале стоит диод на reset Ориона.Нажмите на изображение для увеличения. 

Название:	key.png 
Просмотров:	347 
Размер:	13.3 Кб 
ID:	65057 {схема с диодами потерялась со смертью savepic, этот обмылок из кэша гуглопоиска} Механическая матрица УКНЦ такая, подключение к ориону такое.
    Последний раз редактировалось Error404; 18.04.2018 в 10:24.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  4. #264
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,721
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    87 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Посмотрел все схемы и прошивку и пришел к не утешительному выводу, что текущая схема на ATMega48,
    которая работает на частоте 8 МГц от встроенного генератора не обеспечивает требуемую скорость реакции
    контроллера на опрос двух портов клавиатуры.
    Предлагаю перейти к варианту контроллера выполненного на базе ATMega164 (40/44 выводной корпус),
    работающий на частоте 20 МГц.

  5. #265
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Посмотрел все схемы и прошивку и пришел к не утешительному выводу, что текущая схема на ATMega48,
    которая работает на частоте 8 МГц от встроенного генератора не обеспечивает требуемую скорость реакции
    контроллера на опрос двух портов клавиатуры.
    Предлагаю перейти к варианту контроллера выполненного на базе ATMega164 (40/44 выводной корпус),
    работающий на частоте 20 МГц.
    На 20 МГц работают и Меги48 (если с внешним кварцем). Опрос же там работает по прерыванию от изменения потенциала на ножках? Порт генерирующий прерывание остался ровно тот же (Орион выводит скан-код одинаково для обоих типов клавиатур: 8-битный сканкод в порт "А" ВВ55). Меняется только обработка 3х битов порта "C" (это выход Меги48 и вход Ориона).

    На самом деле я не очень понимаю почему должно стать намного медленнее. Конечно, я не знаю как написан код, но если бы делал сам, то сделал бы так:
    - в основном цикле непрерывно сканировал PS-2 клавиатуру и постоянно поддерживал в актуальном состоянии "полуфабрикат" ответов на входящий скан-код (т.е. вёл бы таблицу со всеми возможными вариантами ответов - их 256). Эта процедура на контроллере в 1МИПС вообще не критична по времени т.к. гарантированно успевает выполниться много раз в секунду (чаще чем мы сможем нажимать кнопки). Для РК86 в этом же цикле можно выводить 3 бита статуса упр. кнопок ctrl+shift+ruslat т.к. для РК86 они не зависят от скан-кода.
    - по прерыванию (поступлению 8-битного скан-кода) используя скан-код как индекс просто брать из подготовленной ранее таблицы результат и выводить его в выходные порты (три команды на ассемблере). Для РК86 эта таблица содержит байты, а для УКНЦ - слова (надо по 11 бит, но придется по 16), т.е. для УКНЦ возможно придется использовать Мегу88 т.к. у неё 1кб RAM против 512b у Меги 48 (но она хотя бы по ножкам совместима - это очень важно учитывая что уже выпущено 4 десятка плат УКНЦ под такой корпус Меги).

    Т.е. для 64 кнопок совпадающих с матрицей РК86 прошивка УКНЦ покажет ровно такую же скорость, а вот дополнительные 3 бита (24 кнопки) по прерыванию (скан-коду) будут выданы на 2 команды (2 такта Меги) позже, но не факт что это станет заметно Ориону - попробовать надо!
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  6. #266
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,721
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    87 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    ;==========================================================
    ; На линиях PORTD фиксируются изменения состояния адресов
    				;4 PCINT2 PORTD 
    	in	YL,PIND		;+1 адрес сканирования
    	ld	scanFF,Y	;+2 скан код из текущего буфера
    	out	PORTB,scanFF	;+1 выдать в порт данных
    				;=8 тактов => 1 Мксек при 8 МГц
    ; Регистровая пара Y по умолчанию указывает на 256 байтный буфер,
    ; в котором сформирована таблица с кодами нажатых клавиш
    ; Это в случае матрицы 8*8
    ; ----
    ; Для дополнительных 3 бит нужно будет сформировать еще один буфер на 256 байт
    ; Для ускорения работы сделаем его со старшим байтом адреса, отличающимся
    ; на 1 бит от первого буфера, например 0200h и 0300h
    	sbr	YH,1<<0		;+1 -> Y=03xx
    ; теперь прочитаем код нажатых клавиш из нового буфера
    	ld	scanFF,Y            ;+2
    ; а вот теперь надо обязательно запомнить регистр статуса МК
    	in	tempS,SREG	;+1 сохранить СТАТУС
            in      port_C,PINC        ;+1 текущее состояние порта C
            andi   port_C,0xF8        ;+1 обнулить 3 мл. бита
    	or	scanFF,port_C	;+1 добавим 3 бита из буфера клавиш 		
    	out	PORTC,scanFF	;+1
    				;= 16 тактов => 2 мксек
    ; завершили выдачу во второй порт клавиатуры
    	cbr	YH,1<<0		; Y=02xxh 
    	out	SREG,tempS	; восстановить СТАТУС
    	reti			;+4 возврат
    ;**********************************************************
    Получилось 2 мксек.
    Посмотри, если есть возможность, сколько времени в ОРИОНЕ занимает чтение порта клавиатуры.
    Если больше 2 мксек до момента фиксации данных, то может и пройдет.
    На спектруме, при тактовой частоте 3.5 Мгц реакция должна быть не более 0.7 мксек.
    А у Ориона по моему тактовая = 2 МГц если я не ошибаюсь?
    Последний раз редактировалось caro; 18.04.2018 в 21:19.

  7. #267
    Master Аватар для andreil
    Регистрация
    20.06.2005
    Адрес
    Светлогорск
    Сообщений
    885
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    А у Ориона по моему тактовая = 2 МГц если я не ошибаюсь?
    Здесь принцип другой.
    В Спеке данные сразу же и читаются, 1 командой процессора.
    А в Орионе и подобных - много команд, поскольку всё идёт через ВВ55. А это как минимум 2 команды (3 для расширенного, больше чем 8х8): запись сканкода в порт А и чтение результата из портов B/C.
    "Байт-48"

  8. #268
    Guru Аватар для caro
    Регистрация
    14.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,721
    Спасибо Благодарностей отдано 
    16
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    87 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от andreil Посмотреть сообщение
    Здесь принцип другой.
    В Спеке данные сразу же и читаются, 1 командой процессора.
    А в Орионе и подобных - много команд, поскольку всё идёт через ВВ55. А это как минимум 2 команды (3 для расширенного, больше чем 8х8): запись сканкода в порт А и чтение результата из портов B/C.
    Да, я это не учел. Тогда может и заработает. Мне это проверить не удастся, за неимением необходимого железа. Попробую обновить прошивку и выложу для тестирования.

  9. #269
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Код:
    ;==========================================================
    ; На линиях PORTD фиксируются изменения состояния адресов
    				;4 PCINT2 PORTD 
    	in	YL,PIND		;+1 адрес сканирования
    	ld	scanFF,Y	;+2 скан код из текущего буфера
    	out	PORTB,scanFF	;+1 выдать в порт данных
    				;=8 тактов => 1 Мксек при 8 МГц
    ; Регистровая пара Y по умолчанию указывает на 256 байтный буфер,
    ; в котором сформирована таблица с кодами нажатых клавиш
    ; Это в случае матрицы 8*8
    ; ----
    ; Для дополнительных 3 бит нужно будет сформировать еще один буфер на 256 байт
    ; Для ускорения работы сделаем его со старшим байтом адреса, отличающимся
    ; на 1 бит от первого буфера, например 0200h и 0300h
    	sbr	YH,1<<0		;+1 -> Y=03xx
    ; теперь прочитаем код нажатых клавиш из нового буфера
    	ld	scanFF,Y            ;+2
    ; а вот теперь надо обязательно запомнить регистр статуса МК
    	in	tempS,SREG	;+1 сохранить СТАТУС
            in      port_C,PINC        ;+1 текущее состояние порта C
            andi   port_C,0xF8        ;+1 обнулить 3 мл. бита
    	or	scanFF,port_C	;+1 добавим 3 бита из буфера клавиш 		
    	out	PORTC,scanFF	;+1
    				;= 16 тактов => 2 мксек
    ; завершили выдачу во второй порт клавиатуры
    	cbr	YH,1<<0		; Y=02xxh 
    	out	SREG,tempS	; восстановить СТАТУС
    	reti			;+4 возврат
    ;**********************************************************
    Получилось 2 мксек.
    Посмотри, если есть возможность, сколько времени в ОРИОНЕ занимает чтение порта клавиатуры.
    Если больше 2 мксек до момента фиксации данных, то может и пройдет.
    На спектруме, при тактовой частоте 3.5 Мгц реакция должна быть не более 0.7 мксек.
    А у Ориона по моему тактовая = 2 МГц если я не ошибаюсь?
    Самая короткая (скоростная) последовательность чтения с клавиатуры для Ориона будет такая:
    Код:
    ld hl,0F400h ; base PPA address
    ld a,scancode  ; 8 bits
    ld (hl),a  ; 7 tstates
    inc l      ; 4 tstates
    ld b,(hl)  ; 7 tstates
    inc l      ; 4 tstates
    ld c,(hl)  ; BC[15..5]=resulting inkey bits
    как видим, порядка 10 тактов на реакцию от контроллера, т.е. для частот до 5 Мгц вполне умещаемся.
    Причем, это минимальная подпрограмма, большинство прочих написано куда как менее оптимально.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  10. #270
    Activist
    Регистрация
    20.12.2016
    Адрес
    г. Москва
    Сообщений
    375
    Спасибо Благодарностей отдано 
    83
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    20 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Посмотрю в своих вариантах, пришлю подходящую.
    caro, Добрый день! Удалось ли найти что-нибудь подходящее?

Страница 27 из 31 ПерваяПервая ... 232425262728293031 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 34
    Последнее: 24.11.2022, 16:05
  2. Ответов: 146
    Последнее: 31.05.2020, 19:00
  3. БезWaitовый контроллер клавиатуры
    от caro в разделе Устройства ввода
    Ответов: 68
    Последнее: 01.07.2015, 05:42
  4. Куплю контроллер клавиатуры
    от AAA в разделе Барахолка (архив)
    Ответов: 121
    Последнее: 01.02.2008, 18:33
  5. Контроллер клавиатуры для Скорпиона
    от Nikolaj Amosov (500:812/02.26) в разделе Scorpion
    Ответов: 1
    Последнее: 15.11.2005, 23:05

Ваши права

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