Autor Tema: Joystick analógico de PlayStation  (Leído 2748 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Joystick analógico de PlayStation
« en: 25 de Enero de 2010, 18:42:23 »
.


Quisiera hacer un pequeño aporte: mostrar cómo se puede usar una de esas palanquitas que tienen los gamepads de PlayStation (para los no-enterados: no son más que dos potenciómetros que varían según uno mueva la palanca) con un 16F628A (<3) sin ADC.

La idea: aprovechar los 2 comparadores analógicos integrados en el Pic (¿quién diría que algún día servirían de algo?). Aunque este diseño sufre una grave desventaja en algunas implementaciones, y es que no se pueden tener direfentes valores según el recorrido de los potenciómetros, sino sólo saber en qué dirección apunta el mando.

Sin más, el programa:
Código: ASM
  1. LIST    P=16F628A, R=HEX, W=-302
  2.         #INCLUDE        P16F628A.INC
  3.         __CONFIG _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _INTOSC_OSC_NOCLKOUT
  4.  
  5.         #DEFINE vref_bajo       B'11000000'     ; 1.25v - RA2 VREF OUTPUT
  6.         #DEFINE vref_alto       B'11001111'     ; 3.6v - RA2 VREF OUTPUT
  7.  
  8.         #DEFINE ARRIBA  1
  9.         #DEFINE ABAJO   5
  10.         #DEFINE IZQ     3
  11.         #DEFINE DER     7
  12.  
  13.         #DEFINE UPL     2
  14.         #DEFINE UPR     0
  15.         #DEFINE DOWNL   4
  16.         #DEFINE DOWNR   6
  17.  
  18.         CBLOCK  20
  19. SALIDA
  20.         ENDC
  21.  
  22. ;========================================================================
  23.  
  24.         ORG     0
  25.         GOTO    inicio
  26.         ORG     5
  27.  
  28. inicio
  29.         MOVLW   B'00000111'
  30.         MOVWF   CMCON           ; COMP OFF
  31.         CLRF    PORTB
  32.         BSF     STATUS,RP0
  33.         MOVLW   0xFF
  34.         MOVWF   TRISA           ; PORTA SOLO ENTRADAS
  35.         CLRF    TRISB           ; PORTB SOLO SALIDAS
  36.         MOVLW   vref_alto
  37.         MOVWF   VRCON           ; VREF ENABLE - ALTO
  38.         BCF     STATUS,RP0
  39.         CALL    ret_vref
  40.  
  41.         MOVLW   B'00110011'     ; 2 COMPARADORES CON REFERENCIA COMUN RA2->(+)
  42.         MOVWF   CMCON           ; Y SALIDAS INVERTIDAS
  43.  
  44.         CLRF    SALIDA
  45.  
  46. ;========================================================================
  47.  
  48. main
  49.  
  50.         ; ENCIENDE/APAGA LOS BITS CORRESPONDIENTES DE ARRIBA Y DERECHA:
  51.  
  52.         BTFSC   CMCON,C1OUT
  53.         BSF     SALIDA,ARRIBA
  54.         BTFSC   CMCON,C2OUT
  55.         BSF     SALIDA,DER
  56.  
  57.         BSF     STATUS,RP0
  58.         MOVLW   vref_bajo
  59.         MOVWF   VRCON           ; VREF BAJO
  60.         BCF     STATUS,RP0
  61.         CALL    ret_vref
  62.  
  63.         ; ENCIENDE/APAGA LOS BITS CORRESPONDIENTES DE ABAJO E IZQUIERDA:
  64.  
  65.         BTFSS   CMCON,C1OUT
  66.         BSF     SALIDA,ABAJO
  67.         BTFSS   CMCON,C2OUT
  68.         BSF     SALIDA,IZQ
  69.  
  70.         BSF     STATUS,RP0
  71.         MOVLW   vref_alto
  72.         MOVWF   VRCON           ; VREF ALTO
  73.         BCF     STATUS,RP0
  74.  
  75. ;========================================================================
  76.  
  77.         ; IDENTIFICA DIAGONALES:
  78.  
  79.         MOVLW   B'10000010'     ; ARRIBA-DERECHA
  80.         XORWF   SALIDA,W
  81.         BTFSS   STATUS,Z
  82.         GOTO    $+4
  83.         CLRF    SALIDA
  84.         BSF     SALIDA,UPR
  85.         GOTO    salir
  86.  
  87.         MOVLW   B'00001010'     ; ARRIBA-IZQUIERDA
  88.         XORWF   SALIDA,W
  89.         BTFSS   STATUS,Z
  90.         GOTO    $+4
  91.         CLRF    SALIDA
  92.         BSF     SALIDA,UPL
  93.         GOTO    salir
  94.  
  95.         MOVLW   B'10100000'     ; ABAJO-DERECHA
  96.         XORWF   SALIDA,W
  97.         BTFSS   STATUS,Z
  98.         GOTO    $+4
  99.         CLRF    SALIDA
  100.         BSF     SALIDA,DOWNR
  101.         GOTO    salir
  102.  
  103.         MOVLW   B'00101000'     ; ABAJO-IZQUIERDA
  104.         XORWF   SALIDA,W
  105.         BTFSS   STATUS,Z
  106.         GOTO    $+4
  107.         CLRF    SALIDA
  108.         BSF     SALIDA,DOWNL
  109.         GOTO    salir
  110.  
  111. ;========================================================================
  112.  
  113. salir
  114.  
  115.         ; PASA LOS DATOS AL PUERTO B:
  116.        
  117.         MOVF    SALIDA,W
  118.         CLRF    PORTB
  119.         MOVWF   PORTB
  120.  
  121.         CLRF    SALIDA
  122.         GOTO    main
  123.  
  124. ;========================================================================
  125.  
  126. ret_vref
  127.         FILL    (GOTO   $+1), 5 ; RETARDO 14us
  128.         RETURN
  129.  
  130.         END

Un diagramita:



El funcionamiento:
El uC ejecuta un lazo repetitivo de

- Seleccionar voltaje de referencia 3,6V (salida por RA2)
- Ver el estado de los bits C1OUT y C2OUT (indican arriba y derecha, respectivamante)
- Seleccionar voltaje de referencia 1,25V
- Ver el estado de los bits C1OUT y C2OUT (indican abajo e izquierda, respectivamante)

Si encuentra el respectivo bit (arriba, abajo, derecha y/o izquierda) en alto, pone en 1 el respectivo bit del registro SALIDA. Luego inspecciona este registro para saber si la dirección de la palanquita es una diagonal, hace las modificaciones necesarias y manda el registro SALIDA por el PORTB (así se enciende un juego de leds). Y vuelta al inicio...

Alguna fotos: (créanme que sí funciona  :grin:)



Saludos y espero que les sea útil.


When you see a good move, look for a better one (Emanuel Lasker)

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Joystick analógico de PlayStation
« Respuesta #1 en: 25 de Enero de 2010, 18:47:44 »
Que bueno mtristan :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Joystick analógico de PlayStation
« Respuesta #2 en: 25 de Enero de 2010, 19:44:27 »
subite un video q esta bueno...por ahi tengo mis controles..a ver si se les hecho mano :mrgreen:
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Joystick analógico de PlayStation
« Respuesta #3 en: 28 de Enero de 2010, 20:28:42 »
.

Una vez que "evolucione" al control de dos de esas palanquitas simultáneamente me pongo a subir un videito  ;-)


When you see a good move, look for a better one (Emanuel Lasker)