User Tag List

Страница 1 из 11 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 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 
Просмотров:	78 
Размер:	81.1 Кб 
ID:	81138   Нажмите на изображение для увеличения. 

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

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

  3. #2

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,060
    Спасибо Благодарностей отдано 
    578
    Спасибо Благодарностей получено 
    468
    Поблагодарили
    251 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да, думаю, лучше начать с простого, а если тема пойдёт, то и ПДП можно, и колесо добавить... Хотя, отражение портов на память -- не Векторовский метод.

  4. #3

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

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    Да, думаю, лучше начать с простого, а если тема пойдёт, то и ПДП можно, и колесо добавить... Хотя, отражение портов на память -- не Векторовский метод.
    Колесо добавить, даже на "ПУ" - не проблема, 4 бита управления, один можно использовать для замены данных "Y" на данные о состоянии колеса.
    Мысль о ПДП прицепилась случайно, при обдумывании возможности переноса контроллера с "ПУ" на "ВУ", и упрощении опроса мыши.

  5. #4

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,060
    Спасибо Благодарностей отдано 
    578
    Спасибо Благодарностей получено 
    468
    Поблагодарили
    251 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Колесо добавить, даже на "ПУ" - не проблема
    Да, не проблема, но не в этом дело... Если мышь будет подключена, "пойдёт в народ", появится под неё хотя бы с десяток программ (новых и/или адаптированных старых), то потом можно и усложнять -- добавлять колёса, настройки... На первых порах пусть будет хотя бы просто координаты и две кнопки, а так тут уже не раз обсуждалось подключение мыши, только пока результата нет.

  6. #5

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

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    ... На первых порах пусть будет хотя бы просто координаты и две кнопки,...
    Я пока думал для начала действительно сделать чтение с контроллера текущих координат. Но потом задумался, как адаптировать Арканоид?
    Если мышь достигла крайней координаты, а каретка ещё нет (она ведь сдвигается направлением/смещением), то её не возможно будет сдвинуть дальше. Нужно будет полностью переделывать управление кареткой, привязывать его не к "нажатию клавиш курсора" а к координатам положения мышки. Над этим нужно будет думать отдельно, адаптация будет сложнее, чем в случае чтения с контроллера смещений мыши.

  7. #6

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,299
    Спасибо Благодарностей отдано 
    1,028
    Спасибо Благодарностей получено 
    812
    Поблагодарили
    484 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ломать копья я не стану, но на всякий случай напомню с нехарактерной для меня категоричностью, что передавать от мыши абсолютные координаты -- гнилая идея.

    Если реализовывать мышь на микроконтроллере, что по-моему правильно, нельзя ли сделать в нем внутреннюю очередь? Пусть копит буфер, а программа на Векторе будет читать данные, пока они есть. В контроллере можно сделать промежуточное накопление, чтобы без потерь отдавать в Вектор накопленные данные меньшим количеством пакетов. То есть например, если пришло 1, 1, 3, а Вектор в это время делал что-то еще, когда он спросит можно отдать сразу 5. Если накопилось больше 127, отдавать по частям.
    Больше игр нет

    Этот пользователь поблагодарил svofski за это полезное сообщение:

    ivagor(26.03.2024)

  8. #7

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,060
    Спасибо Благодарностей отдано 
    578
    Спасибо Благодарностей получено 
    468
    Поблагодарили
    251 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    адаптация будет сложнее, чем в случае чтения с контроллера смещений мыши.
    В любом случае, на Векторе нет программ, в которых внедрение мышки было бы простым, все в той или иной степени адаптированы к кнопкам. Но если преодолеть эти сложности, то мышка тогда не превратиться в унылый эмулятор джойстика/клавиатуры.

  9. #8

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    ...
    Если реализовывать мышь на микроконтроллере, что по-моему правильно, нельзя ли сделать в нем внутреннюю очередь? Пусть копит буфер, а программа на Векторе будет читать данные, пока они есть. В контроллере можно сделать промежуточное накопление, чтобы без потерь отдавать в Вектор накопленные данные меньшим количеством пакетов. То есть например, если пришло 1, 1, 3, а Вектор в это время делал что-то еще, когда он спросит можно отдать сразу 5. Если накопилось больше 127, отдавать по частям.
    Я размышлял аналогично.
    Пусть контроллер суммирует все перемещения между запросами, и выдаёт уже итоговое значение перемещения.
    Думаю, что если перемещение было больше чем 127 (половина экрана), этого вполне достаточно. Но отдать 127 из большего перемещения, тоже не проблема.

    Для начала нужно со средой разработки для stm32 разобраться, установлена древняя версия, а свежую скачать не могу, хоть она и бесплатная.

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

    Цитата Сообщение от Improver Посмотреть сообщение
    В любом случае, на Векторе нет программ, в которых внедрение мышки было бы простым, все в той или иной степени адаптированы к кнопкам. Но если преодолеть эти сложности, то мышка тогда не превратиться в унылый эмулятор джойстика/клавиатуры.
    Воткнуть в контроллер оба режима смещение/координаты, не проблема. Подозреваю, что свои "плюсы" можно найти в обоих режимах (если поискать).
    Главное, что-бы в контроллере вообще режим usb-хост заработал.

  10. #9

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,060
    Спасибо Благодарностей отдано 
    578
    Спасибо Благодарностей получено 
    468
    Поблагодарили
    251 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати, интересная идея: а что если для мышки использовать магнитофонный вход? При работе Вектора он практически всегда свободен, поддерживает горячее подключение/отключение, есть подпрограммы по чтению байтов с него, скорости должно хватить... Да, туда идёт и музыка с ВИ, но писать на мышку надо гораздо меньше, чем читать.

  11. #10

    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,299
    Спасибо Благодарностей отдано 
    1,028
    Спасибо Благодарностей получено 
    812
    Поблагодарили
    484 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от KTSerg Посмотреть сообщение
    Для начала нужно со средой разработки для stm32 разобраться, установлена древняя версия, а свежую скачать не могу, хоть она и бесплатная.
    Ты твердо определился с выбором контроллера? Популярный молодежный тренд сейчас ch32x035.
    Больше игр нет

Страница 1 из 11 12345 ... ПоследняяПоследняя

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

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

Эту тему просматривают: 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

Ваши права

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