| 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...831049d189ee795asi me quedo arme la vercion mas compacta ya que solo he usado 2 ejas y 2 botones. las primeras pruebas: VideoVideopara 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
|