User Tag List

Показано с 61 по 70 из 107

Тема: Вектор-06Ц. подключение USB-мыши.

Древовидный режим

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

    Регистрация
    22.02.2014
    Адрес
    г. Курган
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    275
    Спасибо Благодарностей получено 
    318
    Поблагодарили
    222 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вектор-06Ц. подключение USB-мыши.

    Я всё думаю, как мышь прицепить...
    PS/2 - просто, но получение данных занимает очень много времени, и реализация на эмуляторах не очевидна, в виду малого количества реалов и большей доступности эмулятора - такой вариант подключения не очень практичен.
    Нашел USB-хост на stm32f103, в продаже есть готовые платы, не очень дорогие.

    ...

    Сошлись таки "звёзды на небе", ..... подключил USB-мышь к реальному вектору, через контроллер.

    Пока сделал самый простой в реализации вариант, контроллер мыши выдаёт состояние клавиш и текущие координаты "курсора" по осям в диапазоне: для Х - [0-511] для Y - [0-255]
    Начало координат - нижний левый угол.

    Пока без колеса прокрутки.
    В регистре состояния клавиш, хранится младший бит (дополнительный) положения курсора по оси "Х".
    Собственно, если этот младший бит не учитывать, то в режиме экрана 256х256, указатель имеет диапазон из регистра [0-255].
    А при переключении экрана в режим 512х256, учитывая дополнительный младший бит координаты "Х" можно позиционировать все точки экрана, скорость перемещения курсора не изменится.

    "Контроллер USB-мыши" собран на stm32f103ret6 (что было под рукой).
    Данные из мыши контроллер читает через "usb-hub" собранный на чипе "max3421e".
    Готовая плата usb-hub на max3421e, обошлась примерно 300руб. Вредная, но юзать вполне можно.

    Подключается контроллер к "ПУ" Вектора, порт С - управление, А - выставляется номер регистра контроллера, В - чтение данных из выбранного регистра.

    Использование портов "ПУ":


    ; Порт 5:
    ; бит С5 - запись - вкл/сброс мыши, "0" - вкл. , "1" - откл. и сброс начальных координат в 128/128
    ; бит С4 - запись - строб запроса данных, перед чтением данных из мыши, нужно сбросить бит в "0", затем восстановить в "1"
    ;
    ; Порт 6:
    ; В7-0 - чтение - байт данных из мыши
    ;
    ; Порт 7:
    ; биты А3-0 - запись - номер регистра контроллера мыши, для чтения данных
    ; регистры контроллера мыши:
    ; регистр "0" - состояние кнопок и младший бит "Х" для режима экрана 512/256
    ; бит 7 - "левая" кнопка мыши "1" - нажата
    ; бит 6 - "правая" кнопка мыши "1" - нажата
    ; бит 5 - "средняя" кнопка мыши "1" - нажата
    ; бит 0 - младший бит "Х" для режима экрана 512/256
    ; регистр "1" - "Х" положение курсора мыши (от 0 до 255), значение обновляется только при чтении регистра "0"
    ; регистр "2" - "Y" положение курсора мыши (от 0 до 255), значение обновляется независимо от чтения других регистров
    [свернуть]


    За кнопки мыши, отвечают биты, которые были описаны в тех-доках на Вектор. Там есть описание подключения мыши к Вектору, и соответствие кнопок-бит. Они отзеркалены по отношению к стандарту для USB и РС/2 мышей.
    Взял вариант уже предложенный для Вектора.

    С младшим битом положения по "Х" для режима экрана 512х256, получилось очень удобно.
    Из-за особенностей реализации этого режима, этот "младший бит" отвечает за переключение плоскостей, а не за координату на плоскости. Соответственно, по значению из регистра для "Х" (№1) вычисляем позицию указателя по горизонтали, а по состоянию "младшего бита" выбираем экранную плоскость.

    Во вложении исходник и "rom" теста контроллера. Сочетание клавиш пкм+скм - переключает экран в режим 512х256, пкм+лкм - в режим 256х256 точек.

    Собственно, весть код, работы с контроллером через "ПУ":

    ;
    MVI A,82H ; ПУ - А,С на вЫход , В на вход
    OUT 4
    MVI A,0FFH
    OUT 5 ; отключить/сбросить мышь
    OUT 7 ; номер регистра мыши НЕ указан
    ;------------------------
    ;========== инициализация мыши ==============
    mvi a,0Ah ; бит 5 - "0" - включить мышь
    out 4
    ;============================================
    RDMous: ; прочитать
    ;--------------- прочитать регистры мыши -----------------
    xra a ; регистр "0"
    out 7
    mvi a,08h ; строб бит 4 в "0"
    out 4
    mvi a,09h ; строб бит 4 в "1"
    out 4
    in 6 ; чтение выбранного регистра

    STA MKey ; сохранить состояние кнопок

    mvi a,01h ; регистр "1"
    out 7
    mvi a,08h ; строб бит 4 в "0"
    out 4
    mvi a,09h ; строб бит 4 в "1"
    out 4
    in 6 ; чтение выбранного регистра

    STA POSMX ; сохранить позицию Х

    mvi a,02h ; регистр "2"
    out 7
    mvi a,08h ; строб бит 4 в "0"
    out 4
    mvi a,09h ; строб бит 4 в "1"
    out 4
    in 6 ; чтение выбранного регистра

    STA POSMY ; сохранить позицию Y
    ;
    [свернуть]



    При тесте usb-мыши, возник вопрос, что делать со скоростью перемещения курсора...
    На РС-шном экране с большим разрешением, курсор проходит от края до края, при перемещении мыши примерго сантиметров на 7-8, это привычная скорость.
    А у Вектора всего 256х256 - курсор пробегал от края до края примерно за 1см перемещения мыши по коврику... 8()
    Пришлось уменьшить скорость в 8 раз.
    Сейчас перемещение указателя мыши по экрану Вектора вполне комфортно.

    На скриншоте - тест мыши. "Сетка" помогает понять как движется "указатель мыши", и визуализировать режим экрана 512х256.

    Исходник проекта для stm32 на Keil можно будет потом выложить. Пока в нём много мусора, так как переделывался из исходников, скачанных с просторов и-нета.

    Откопал в кладовке плату с ПЛИС, у которой распаян переходник на "ВУ", в сырец старого проекта добавил "мост" между портом D4h и "контроллером USB-мыши", поменял в тестовой программе чтение регистров "контроллера мыши".
    "Контроллер USB-мыши" переткнул с "ПУ" в разъём платы ПЛИС, и все дела.

    Во вложении исходник и rom, с тестом USB-мыши, подключенной к шине "ВУ".

    код работы с мышью через порт D4h

    ;
    ; тест USB-мыши в разъёме "ВУ"
    ; 08.2024
    ;--------------------------------------------------
    ; порт D4h - на запись - слово управления контроллером мыши
    ;
    ; бит 5 - запись - вкл/сброс мыши, "0" - вкл. , "1" - откл. и сброс начальных координат в 128/128
    ; биты 3-0 - запись - номер регистра мыши, для чтения данных
    ;
    ; порт D4h - на чтение - данные из запрошенного регистра контроллера мыши
    ;=======================================================================================================

    ;========== инициализация мыши ==============
    mvi a,0DFh ; бит 5 - "0" - включить мышь
    out 0D4h
    ;
    ;=========================================================
    RDMous: ; прочитать и вывести на экран
    ;--------------- прочитать регистры мыши -----------------
    ;
    xra a ; регистр "0"
    out 0D4h
    in 0D4h ; чтение выбранного регистра
    STA MKey ; сохранить состояние кнопок

    mvi a,01h ; регистр "1"
    out 0D4h
    in 0D4h ; чтение выбранного регистра
    STA POSMX ; сохранить позицию Х

    mvi a,02h ; регистр "2"
    out 0D4h
    in 0D4h ; чтение выбранного регистра
    STA POSMY ; сохранить позицию Y
    ;
    [свернуть]


    Так-же во вложении проект на Квартус, для ПЛИС EP4CE6E22C8.
    Я криворукий прогер на верилоге, даже на любиреля не тяну, за стиль не пинать.
    Но надеюсь запись и чтение порта будет понятна.

    Для "Мыши" выбрал порт D4, так как 4Dh - код символа "М".

    Архив MOUSE_USB_R9 содержит исходник универсального теста и адаптера контроллера на шину ВУ, для контроллера, предоставляющего доступ к ДЕВЯТИ регистрам ( кнопки, X, Y, W, mX, mY, , Xps, Yps, Id ).

    Архив MOUSE_USB_R12 содержит исходник универсального теста контроллера, добавлены регистры: 8, 9, 10.
    Это сырые данные мыши. Данные регистров 9 и 10 смещения только защищаются от переполнения.

    В контроллере R12 регистры


    "0" кнопки - состояние кнопок и младший бит координаты "Х" для режима экрана 512х256
    бит 7 - "левая" кнопка мыши "1" - нажата
    бит 6 - "правая" кнопка мыши "1" - нажата
    бит 5 - "средняя" кнопка мыши "1" - нажата
    бит 0 - младший бит координаты "Х" для режима экрана 512х256, значение обновляется только при чтении регистра "1"

    "1" - "Х" координата курсора мыши (от 0 до 255)
    "2" - "Y" координата курсора мыши (от 0 до 255)
    "3" - колесо прокрутки, правда с моими мышами не работает;
    "4" - смещение мыши по X, за период между чтениями этого регистра от -128 до 127 ( от 80h до 7fh );
    "5" - смещение мыши по Y, за период между чтениями этого регистра от -128 до 127 ( от 80h до 7fh );
    "6" - смещение мыши по "X" между чтениями этого регистра от 0 до 127 ( бит 7 - направление "1" - влево )
    "7" - смещение мыши по "Y" между чтениями этого регистра от 0 до 127 ( бит 7 - направление "1" - вниз )
    "8" - состояние кнопок
    бит 0 - "левая" кнопка мыши "1" - нажата
    бит 1 - "правая" кнопка мыши "1" - нажата
    бит 2 - "средняя" кнопка мыши "1" - нажата
    "9" - "Х" смещение курсора мыши (от -127 до +127) сырые данные мыши
    "10" - "Y" смещение курсора мыши (от -127 до +127) сырые данные мыши
    "15" - регистр идентификатора, выдаёт значение 6Dh, позволяет определить факт подключения контроллера.
    [свернуть]

    На фото, четыре крайние левые столбца экрана - статистика значений регистров R4, R5, R6, R7 (соответственно) полученных от контроллера позволяет определить максимальные значения регистров - максимальное смещение мыши за отрезок времени.

    Добавил во вложение "arkanoid", адаптированный под контроллер USB-мыши, разъём "ВУ", порт D4h.
    Если "контроллер мыши" не подключен, то управление обычное.
    Визуальное отличие - в нижнем левом углу экрана есть маркер и отображаются байты, прочитанные из регистров "0" и "4" контроллера.

    В каталоге обнаружился исходник игры "MINSWEEPER", сделал из неё демонстрашку мыши, во вложении "MINES_M".
    Адаптирована под контроллер USB-мыши, разъёмы "ПУ" и "ВУ".
    Если "контроллер мыши" не подключен, то управление обычное.
    Визуальное отличие - в верхнем левом углу экрана есть маркер и отображаются байты, прочитанные из регистров "0", "1" и "2" контроллера.

    На дополнительном скриншоте экран теста контроллера R12.
    Добавлены столбцы статистики для регистров R9, R10.
    Во второй строке состояние добавленных регистров R8, R9, R10.

    В тесте R12:
    клавиша "РУС/LAT" - переключает на перемещение мыши по данным регистров 1 и 2.
    клавиша "УС" - переключает на перемещение мыши по данным регистров 4 и 5.
    клавиша "СС" - переключает на перемещение мыши по данным регистров 9 и 10.

    игра "mines" - для экспериментов есть сборка с "сервером мыши" и конфигом для эмулятора emu https://zx-pk.ru/threads/35656-vekto...=1#post1202779
    игра ARKANOID - для экспериментов есть сборка с "сервером мыши" и конфигом для эмулятора emu https://zx-pk.ru/threads/35656-vekto...=1#post1202815
    игра COLLINES - для экспериментов есть сборка с "сервером мыши" и конфигом для эмулятора emu https://zx-pk.ru/threads/35656-vekto...=1#post1202874
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	mouse_r7_off.jpg 
Просмотров:	79 
Размер:	20.8 Кб 
ID:	81116   Нажмите на изображение для увеличения. 

Название:	r9_vu.jpg 
Просмотров:	84 
Размер:	83.7 Кб 
ID:	81139   Нажмите на изображение для увеличения. 

Название:	r9_pu.jpg 
Просмотров:	79 
Размер:	81.1 Кб 
ID:	81138   Нажмите на изображение для увеличения. 

Название:	mous_r12.png 
Просмотров:	59 
Размер:	11.0 Кб 
ID:	81153  
    Вложения Вложения
    Последний раз редактировалось KTSerg; 10.09.2024 в 16:59.

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

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

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

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

Похожие темы

  1. Ответов: 574
    Последнее: 23.08.2024, 09:14
  2. Ответов: 82
    Последнее: 04.07.2022, 12:10
  3. Ответов: 1
    Последнее: 27.04.2022, 11:52
  4. Ответов: 15
    Последнее: 20.01.2022, 17:03
  5. Ответов: 4
    Последнее: 23.06.2016, 00:02

Ваши права

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