Zona Arcade. Construye, Restaura y Decora tu Máquina Arcade y Pinball.

Light guns?....no, minigun arcade

« Older   Newer »
  Share  
kapotik
view post Posted on 10/3/2016, 19:42 by: kapotik     +1   -1


Group:
Member
Posts:
76

Status:


image

image

image

image

image

image

image

image

image

image

image

image

bueno... hasta aqui por hoy, me canse de subir imagenes.
Solo agregar parte de la electronica, para el movimiento he usado como les dije antes un motor paso a paso, el cual controlo con el pic 16f84, tambien controlo el recoill con el pic, por ende las señales de los pulsadores de disparo y bombas pasan por el pic y luego al joystick por un 4066, quien necesite mas detalles me lo consulta.

Por si todavia no se dieron cuenta para controlar la minigun he usado el pocisionamiento por cordenadas, en lenguaje arcade POTENCIOMETROS, para ello he usado la controladora de 4 ejes y 64 botones publicada por Willy, les dejo el enlace
donde van a encontrar todo para armarla, incluso tiene un joystick de 81 botones.

www.xtremeracers.info/forums/viewto...831049d189ee795

asi me quedo

image

arme la vercion mas compacta ya que solo he usado 2 ejas y 2 botones.

las primeras pruebas:

Video

Video



para quien le interese les cuelgo el programa para el pic en assembler y totalmente comentado.


CODICE
;*************************************************  *****
; minigun kapotik 15/12/13
;
;*************************************************  ******************

       LIST P=16F84A, R=HEX    ; Usar el PIC16F84 y sistema decimal

       #include "P16F84A.INC"  ; Incluye datos de PIC16F84A

       __CONFIG   _CP_OFF & _WDT_OFF  & _PWRTE_ON & _XT_OSC


;*************************************************  ******************
; CONFIGURACION
;*************************************************  ******************


;*************************************************  ******************
; VARIABLES
;*************************************************  ******************
conta                EQU     0x20
cuenta        EQU          0x21
tiempo        EQU          0x22
PDel03         EQU          0x30
PDel13        EQU          0x27

;*************************************************  ******************
       ORG    0x00            ; El programa empieza en 0x000
;*************************************************  ******************

;************************** Patillas *************************
;                                    ___________
;    IN BOMBAS    - RA,2 -|1    \__/    18|- RA,1 - IN GATILLO
;                         - RA,3 -|2                17|- RA,0 - LLAVE GIRO
;                         - RA,4 -|3 16F84a   16|- OSC1 - [XT]          
;        MCLR         - RA,5 -|4               15|- OSC1 - [XT]
;                           GND -|5                14|- Vcc
;  OUT BOMBAS   - RB,0 -|6               13|- RB,7 - SELENOIDE BOMBAS
;   OUT GATILLO  - RB,1 -|7               12|- RB,6 - SELENOIDE DISPARO
;     MOTOR 1      - RB,2 -|8                11|- RB,5 - MOTOR 3
;     MOTOR 2      - RB,3 -|9                10|- RB,4 - MOTOR 4
;                                    |___________|
;
;*************************************************  *************
        movlw b'00000000'       ; valor inicial portA
       movwf PORTA                
       movlw b'00000000'       ; valor inicial portB
       movwf PORTB        
       bsf STATUS,RP0          ; Pág 1 RAM
       movlw b'00001111'
       movwf PORTA
       movlw b'00000000'            ; 0 SALIDA---1 ENTRADA                
       movwf PORTB
       bcf STATUS,RP0
       
               bcf        0x29,1                ; pongo a cero el registro completo
               bcf        0x29,2                ; por el momento uso tres posiciones
               bcf        0x29,3
               bcf        0x29,4
               bcf        0x29,5
               bcf        0x29,6
               bcf        0x29,7
               bcf        0x29,0
               clrf        conta
               clrf        cuenta
               clrf        tiempo
;*************************************************  ******************
; LAZO PRINCIPAL
;*************************************************  ******************
       call        carga                ; inicio conteo recoill
inicio        
       btfss        PORTA,0                ; testeo llave giro
       goto        giro
       goto        inicio
giro
       bsf        PORTB,2                ; inicio paso 1
       btfss        PORTA,1                ; testeo el gatillo
       call        disparo        
       btfss        PORTA,2                ; testeo bombas
       call        bombas                ; inicio bombas
       call        DEMORA3            ; velocidad de giro
       bcf        PORTB,1                ; finaliza disparo en el joystick
       bcf        PORTB,0                ; finaliza bombas en el joystick
       bcf        PORTB,2                ; fin paso 1



       bsf        PORTB,3                ; inicio paso 2
       btfss        PORTA,1                ; testeo el gatillo
       call        disparo                ; inicia disparo
       btfss        PORTA,2                ; testeo bombas
       call        bombas                ; inicio bombas
       call        DEMORA3            ; velocidad de giro
       bcf        PORTB,1                ; finaliza disparo en el joystick
       bcf        PORTB,0                ; finaliza bombas en el joystick
       bcf        PORTB,3                ; fin paso 2

       bsf        PORTB,4                ; inicio paso 3
       btfss        PORTA,1                ; testeo el gatillo
       call        disparo                ; inicia disparo
       btfss        PORTA,2                ; testeo bombas
       call        bombas                ; inicio bombas
       call        DEMORA3            ; velocidad de giro
       bcf        PORTB,1                ; finaliza disparo en el joystick
       bcf        PORTB,0                ; finaliza bombas en el joystick
       bcf        PORTB,4                ; fin paso 3
       
       bsf        PORTB,5                ; inicio paso 4
       btfss        PORTA,1                ; testeo el gatillo
       call        disparo                ; inicia disparo
       btfss        PORTA,2                ; testeo bombas
       call        bombas                ; inicio bombas
       call        DEMORA3          ; velocidad de giro
       bcf        PORTB,1                ; finaliza disparo en el joystick
       bcf        PORTB,0                ; finaliza bombas en el joystick
       bcf        PORTB,5                ; fin paso 4        
       
       btfss        PORTA,1                ; testeo el gatillo
       goto        rec
       btfss        PORTA,2                ; testeo las bombas
       goto        rec
       goto        llave
rec        
       decfsz        conta,1                ; Pregunto si ya se ha repetido 10 veces el ciclo?
       goto        inicio                ; chequeo la llave de giro
       call        carga                ; vuelvo a cargar el contador
       btfsc        0x29,0        
       call        recoil                ; desactivo recoill disparo
       btfsc        0x29,1        
       call        recoill                ; desactivo recoill bombas
               
llave
       btfsc        0x29,0
       goto        rec
       btfsc        0x29,1
       goto        rec
       btfss        PORTA,0                ; testeo llave giro
       goto        giro                ; sigue girando
       clrf        PORTB                ; detiene el giro y todo lo que este activo
       goto        inicio                ; vuelve al inicio

;------------------------------------------
; sub rutinas
;------------------------------------------        
disparo
       bsf        PORTB,1                ; activa boton joystick
       btfss        0x29,2                ; testea el bit de descanso selenoide
       bsf        PORTB,6                ; activa selenoide recoill
       decfsz        cuenta,1        ; Pregunto si ya se ha repetido 20 veces el ciclo?
       goto        fin                    ; chequeo la llave de giro
       bsf        PORTB,6                ; activa selenoide recoill
       bsf        0x29,0                ; pone a 1 el bit para luego poder ser testeado
       bcf        0x29,2                ; reinicia el bit
fin        
       return

bombas
       bsf        PORTB,0                ; activa boton joystick
       btfss        0x29,3                ; testea el bit de descanso selenoide
       call        sele                ; activa las dos selenoides
       decfsz        tiempo,1        ; Pregunto si ya se ha repetido 20 veces el ciclo?
       goto        final                ; chequeo la llave de giro
       call        sele                ; activa selenoide recoill
       bsf        0x29,1                ; pone a 1 el bit para luego poder ser testeado
       bcf        0x29,3                ; reinicia el bit
final
       return
sele
       bsf                PORTB,6                ; activa selenoide recoill
       bsf                PORTB,7                ; activa la segunda selenoide recoill
       return
carga
       movlw        d'10'                ; Cargo Contador = a unos 100 ms
       movwf        conta                ; tiempo de demora
       return
carga_2
       movlw        d'20'                ; Cargo Contador = a unos 200 ms
       movwf        cuenta                ; tiempo de demora
       return
carga_3
       movlw        d'20'                ; Cargo Contador = a unos 200 ms
       movwf        tiempo                ; tiempo de demora
       return
recoill
       bcf                PORTB,7                ; desactiva recoill bombas
       bcf                PORTB,6                ; desactiva las dos selenoides
       bcf                0x29,0                ; reseteo bit
       bcf                0x29,1                ; reseteo bit
       bsf                0x29,3                ; activo bit para indicar tiempo de descanso selenoide
       call        carga_3                ; cargo tiempo de descanso selenoide
       return
recoil
       bcf                PORTB,6                ; desactiva la selenoide disparo
       bcf                0x29,0                ; reseteo bit
       bsf                0x29,2                ; activo bit para indicar tiempo de descanso selenoide
       call        carga_2                ; cargo tiempo de descanso selenoide
       return

;=================================================  ==========================
; 10 milisegundos
;=================================================  ==========================
DEMORA3  movlw          .8                       ; 1 set numero de repeticion  (B)
                movwf          PDel03       ; 1 |
PLoop13    movlw          .249           ; 1 set numero de repeticion  (A)
                movwf          PDel13       ; 1 |
PLoop23    clrwdt                               ; 1 clear watchdog
                clrwdt                               ; 1 ciclo delay
                decfsz           PDel13,1    ; 1 + (1) es el tiempo 0  ? (A)
                goto             PLoop23     ; 2 no, loop
                decfsz           PDel03,1    ; 1 + (1) es el tiempo 0  ? (B)
                goto             PLoop13     ; 2 no, loop
PDelL13    goto                    PDelL23      ; 2 ciclos delay
PDelL23    clrwdt                              ; 1 ciclo delay
        return               ; 2+2 Fin.
;------------------------------        
       END


bueno eso hasta ahora luego seguire subiendo el resto de las imagenes y por supuesto como funciona.




Saludos
kapotik

Edited by kapotik - 10/3/2016, 19:59
 
Top
18 replies since 3/3/2016, 23:23   422 views
  Share