User Tag List

Страница 112 из 162 ПерваяПервая ... 108109110111112113114115116 ... ПоследняяПоследняя
Показано с 1,111 по 1,120 из 1612

Тема: ZX_Multi_Card

  1. #1111

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

    По умолчанию

    Цитата Сообщение от newart
    caro, А можешь рассказать как запрограмиирована работа с ps/2 мышкой?
    При включении питания проверяется тип подключенной мышки:
    Код:
    ;****************************************************
    ; проверка подключения мышки
    ; на выходе:
    ; mous_ID = 0 - простая, = 3 - 3D-mouse
    ; = 0ffh - мышка не подключена
    tst_mouse:
    ; 1) передать команду сброса мышке (код = 0xFF)
    	ldi	data,0xff 	;Команда сброс
    	rcall	trans_ack_mous	;передать и ждать ACK
    	brcs	no_tst		;истек тайм-аут, мышка не подключена
    				; или неисправна
    ; иначе принять код AAh и код идентификатора мышки
    ; (время внутреннего теста 300 мсек для KeyMouse)
    ; (время внутреннего теста 350 мсек для Genius)
    	rcall	time_1s		; тайм-аут 1000 мсек
    	rcall	rec_mous	; принять код теста (0AAh)
    	brcs	no_tst		; истек тайм-аут
    	rcall	rec_mous	; принять идентификатор мышки
    ; 2) переключить мышку если получится в режим Intelimouse
    	ldi	data,0xf3	;Set Sample Ret
    	rcall	trans_ack_mous
    	brcs	no_tst
    	ldi	data,200	;200
    	rcall	trans_ack_mous
    	brcs	no_tst
    	ldi	data,0xf3	;Set Sample Ret
    	rcall	trans_ack_mous
    	brcs	no_tst
    	ldi	data,100	;100
    	rcall	trans_ack_mous
    	brcs	no_tst
    	ldi	data,0xf3	;Set Sample Ret
    	rcall	trans_ack_mous
    	brcs	no_tst
    	ldi	data,80		; 80
    	rcall	trans_ack_mous
    	brcs	no_tst
    ; 3) прочитать, что получилось
    	ldi	data,0xf2	;Read Device ID
    	rcall	trans_ack_mous
    	brcs	no_tst
    	rcall	rec_mous_20	;data=ID
    	brcs	no_tst
    	sts	mous_ID,data	
    ; 4) передать команду активизации мышке (код = 0xF4)
    	ldi	data,0xf4 	;
    	rjmp	trans_ack_mous	;передать
    ;\----
    no_tst:	ldi	data,0xff	;признак отсутствия мышки
    	sts	mous_ID,data
    	ret
    ;=====================================================
    Цитата Сообщение от newart
    Протокол програмно обрабатывается?
    В зависимости от типа мышки принимается либо три (mous_ID=0), либо четыре (mous_ID=3) байта,
    из которых программно формируются сигналы для передачи в Спектрум.
    Последний раз редактировалось caro; 01.10.2012 в 10:57.

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

  3. #1112

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,555
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    В зависимости от типа мышки принимается либо три (mous_ID=0), либо четыре (mous_ID=3) байта,
    из которых программно формируются сигналы для передачи в Спектрум.
    У меня такое ощущение что пентева на ID=3 Не реагирует и желает всегда 4 байта.

    Так как все таки програмно реализован интерфейс? Все хардкодингом на асме? Ножки клок-даты подтянуты к прерываниям?

    ---------- Post added at 13:22 ---------- Previous post was at 13:21 ----------

    У меня почему то не хочет дружить AVR ни с пентевой по ps/2 ни с твоей картой.
    Заработала только на Speccy 2010.

  4. #1113

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

    По умолчанию

    Цитата Сообщение от newart
    У меня такое ощущение что пентева на ID=3 Не реагирует и желает всегда 4 байта.
    Судя по исходнику от пентевы ps2.c, считается, что подключена может быть только мышка с колесом, поэтому всегда инициируется переключение в режим Intelli Mouse и всегда ожидается 4 байта.

    Цитата Сообщение от newart
    Так как все таки програмно реализован интерфейс? Все хардкодингом на асме? Ножки клок-даты подтянуты к прерываниям?
    Нет работаем без прерываний, а синхронизацию обеспечиваю опусканием в 0 сигнала CLK, на то время когда контроллер занят.
    По прерываниям в ZXMC работает только интерфейс связи с шиной Спектрума, прием/передача по RS232 и часы.

    Цитата Сообщение от newart
    У меня почему то не хочет дружить AVR ни с пентевой по ps/2 ни с твоей картой.
    Заработала только на Speccy 2010.
    Если бы еще мне знать что за устройство на AVR ты пробуешь подключать к ZXMC
    Последний раз редактировалось caro; 01.10.2012 в 13:49.

  5. #1114

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,555
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Судя по исходнику от пентевы ps2.c, считается, что подключена может быть только мышка с колесом, поэтому всегда инициируется переключение в режим Intelli Mouse и всегда ожидается 4 байта.
    Lamers Must Die!

    Цитата Сообщение от caro Посмотреть сообщение
    Если бы еще мне знать что за устройство на AVR ты пробуешь подключать к ZXMC
    Комовскую мышку через Ардуину. Я повесил колёсики от шарика на прерывания, всё отлично считается и определяется направление. Но... в пентеве данные почему то не стабильно принимались. А на твоей карте не принимаются вовсе. Точнее софт никак не реагирует на мою полу-мышь.

  6. #1115

    Регистрация
    27.03.2005
    Адрес
    CПб
    Сообщений
    711
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    Судя по исходнику от пентевы ps2.c, считается, что подключена может быть только мышка с колесом, поэтому всегда инициируется переключение в режим Intelli Mouse и всегда ожидается 4 байта.
    Без колеса мышь тоже понимается.
    Код:
    				switch( ps2mouse_resp_count )
    				{
    				case 1:
    					//byte 1: Y overflow | X overflow | Y sign bit | X sign bit | 1 | Middle Btn | Right Btn | Left Btn
    					zx_mouse_button = (zx_mouse_button&0xF0) + ((b^0x07)&0x0F);
    					break;
    				case 2:
    					//byte 2: X movement
    					zx_mouse_x += b;
    					break;
    				case 3:
    					//byte 3: Y movement
    					zx_mouse_y += b;
    					if ( !(flags_register&FLAG_PS2MOUSE_TYPE) )
    					{
    						//classical mouse
    						ps2mouse_resp_count = 0;
    						flags_register |= FLAG_PS2MOUSE_ZX_READY;
    					}
    					break;
    				case 4:
    					//byte 4: wheel movement
    					zx_mouse_button += ((b<<4)&0xF0);
    					flags_register |= FLAG_PS2MOUSE_ZX_READY;
    					ps2mouse_resp_count = 0;
    				}
    				break;
    Если FLAG_PS2MOUSE_TYPE = 0, то от мыши принимается 3 байта.

  7. #1116

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

    По умолчанию

    Цитата Сообщение от newart
    Комовскую мышку через Ардуину. Я повесил колёсики от шарика на прерывания, всё отлично считается и определяется направление. Но... в пентеве данные почему то не стабильно принимались. А на твоей карте не принимаются вовсе. Точнее софт никак не реагирует на мою полу-мышь.
    Судя по всему, протокол работы PS/2 мышки реализован тобой не полностью.
    У меня, если ты посмотришь на мой исходник начального тестирования мышки, при старте на нее выдается команда СБРОС (код 0FFh), и мышка не позже чем в течении 1 сек. должна выдать код нормального завершения внутреннего теста (0AAh) и свой идентификатор.
    Если этого не происходит, то считается что мышка либо не исправна, либо не подключена, что блокирует ее опрос в основном цикле работы прошивки.

  8. #1117

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,555
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мм.. возможно, вот код:



    PHP код:

    Старт
    :

    while(
    mouse.write(0xAA)!=0);  
    while(
    mouse.write(0x00)!=0);


    Потом в цикле:


      if( (
    digitalRead(7)==LOW) || (digitalRead(8) == LOW)) {
        while(
    mouse.read(&c)) ;
        
    mousecommand(c);
      } 

      if (
    enabled) {
      
        
    //
        
    write_packet();

      }

    ......


    int mousecommand(int command) {
      
    unsigned char val;

      
    //This implements enough mouse commands to get by, most of them are
      //just acked without really doing anything

      
    switch (command) {
      case 
    0xFF//reset
        
    ack();
        
    //the while loop lets us wait for the host to be ready
        
    while(mouse.write(0xAA)!=0);  
        while(
    mouse.write(0x00)!=0);
      
        break;
      case 
    0xFE//resend
        
    ack();
        break;
      case 
    0xF6//set defaults 
        //enter stream mode   
        
    ack();
        break;
      case 
    0xF5:  //disable data reporting
        //FM
        
    ack();
        break;
      case 
    0xF4//enable data reporting
        //FM
        
    enabled HIGH;
        
    ack();
        
    digitalWrite(13HIGH);
        
        break;
      case 
    0xF3//set sample rate
        
    ack();
        
    mouse.read(&val); // for now drop the new rate on the floor
            //  Serial.print("#");
             // Serial.println(val,HEX);
        
    ack();
        break;
      case 
    0xF2//get device id
        
    ack();
        
    mouse.write(0);
        break;
      case 
    0xF0//set remote mode 
        
    ack();  
        break;
      case 
    0xEE//set wrap mode
        
    ack();
        break;
      case 
    0xEC//reset wrap mode
        
    ack();
        break;
      case 
    0xEB//read data
        
    ack();
        
    write_packet();
        break;
      case 
    0xEA//set stream mode
        
    ack();
        break;
      case 
    0xE9//status request
        
    ack();
        
    //      send_status();
        
    break;
      case 
    0xE8//set resolution
        
    ack();
        
    mouse.read(&val);
        
    //    Serial.println(val,HEX);
        
    ack();
        break;
      case 
    0xE7//set scaling 2:1
        
    ack();
        break;
      case 
    0xE6//set scaling 1:1
        
    ack();
        break; 


    ---------- Post added at 14:21 ---------- Previous post was at 14:19 ----------

    Получается мне просто надо убрать "while(mouse.write(0xAA)!=0);
    while(mouse.write(0x00)!=0);" в самом начале.

  9. #1118

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

    По умолчанию

    Цитата Сообщение от Blade
    Без колеса мышь тоже понимается.
    Если FLAG_PS2MOUSE_TYPE = 0, то от мыши принимается 3 байта.
    Виноват, действительно есть такой флаг, не внимательно посмотрел.

  10. #1119

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,555
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от caro Посмотреть сообщение
    а синхронизацию обеспечиваю опусканием в 0 сигнала CLK
    Наверное все таки в 1?


  11. #1120

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

    По умолчанию

    Цитата Сообщение от newart
    Получается мне просто надо убрать "while(mouse.write(0xAA)!=0);
    while(mouse.write(0x00)!=0);" в самом начале.
    Нет, это правильно, поскольку мышка при подаче на нее питания всегда выполняет внутренний тест и выдает код 0AAh - как признак прохождения внутреннего теста и код своего идентификатора - 00h (простая мышь).
    Судя по твоему исходнику все нужные команды реализованы.
    Надо подумать, в чем тут может быть проблема.

    ---------- Post added at 16:31 ---------- Previous post was at 16:29 ----------

    Цитата Сообщение от newart Посмотреть сообщение
    Наверное все таки в 1?
    Нет именно в 0, поскольку иначе мышка считает, что шина свободна и можно опустить шину данных в 0 (СТАРТ), и начать передачу.

Страница 112 из 162 ПерваяПервая ... 108109110111112113114115116 ... ПоследняяПоследняя

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

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

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

Ваши права

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