Autor Tema: cuentavueltas y cronometro para scalextric  (Leído 6756 veces)

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

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: cuentavueltas y cronometro para scalextric
« Respuesta #15 en: 15 de Noviembre de 2004, 11:09:00 »
Hola:

para los sensores lo mas practico son los reel switchs ,cada vez que pasa un auto se cerrara el switch ,son baratos y efectivos ,el mismo iman de los motores te los activa sin problema.Si lo haces en Pro  o en plus solo deberas incrementar una variable por cada paso del auto...
La forma que se me ocurre mas facil para el tiempo seria tener un loop de conteo activado ,como sabes cuanto dura cada conteo dependiendo del Xtal que uses podras aber parando el conteo y leyendolo cuando el switch se activo...Me explico mejor ...un lazo for n=0 to 2000 por ejemplo next n,haces el calculo cada cuanto incrementa y cuando el auto pasa por el switch lo lees sacando los segundos y decimas correspondientes,lo pones a 0 y asi hasta que pase de nuevo...No es muy ortodoxa pero funciona sin interrupciones para no complicarte...

es una idea que teal vez te oriente...

saludos
khasistos

Desconectado sino55

  • PIC10
  • *
  • Mensajes: 9
RE: cuentavueltas y cronometro para scalextric
« Respuesta #16 en: 17 de Noviembre de 2004, 04:11:00 »
Hla si lo he hecho al final por el puerto A Ra3 y Ra4, tengo lo siguiente para la cuenta.. sirve bien.. lo ke llevo pero aun kiero hacerlo en lcd. etc.. mirad a ver ke os parece.
;*********************************************************************************************
;
;Programa CIRCUITO.ASM                     FECHA:
;
;Circuito de carreras controlado por un microcontrolador que nos indicara el tiempo que cada coche
;emplea en dar una vuelta.
;
;Programa para el PIC 16F84A        Velocidad de reloj: 4 MHz   Ciclo de Instrucion:1 MHz
;
;Perro guardian: Desactivado       Tipo de reloj:XT         Proteccion de codigo:OFF
;
;****************************SELECCION DEL PIC Y SISTEMA DE NUMERACION************************

         LIST   p=16F84A   ;Tipo de microcontrolador
         RADIX   hex      ;Seleciona el sistema hexadecimal por defecto

;***************************DEFINICION DE VARIABLES Y REGISTROS ESPECIALES*************

   include      <p16F84A.inc>          ;Define todos los registros y variables
                                                        ;del PIC 16F84
   CONTADOR1   EQU   0X0C         ;Registro del contador1
   CONTADOR2   EQU   0X0D         ;Registro del contador2
   CONTADOR3   EQU   0X0E         ;Registro del contador3   
   CONTADOR4   EQU   0X0F         ;Registro del contador4   
   CONTADOR5   EQU   0X10         ;Registro del contador5
   CONTADOR6   EQU   0X11         ;Registro del contador6
   CONTADOR7   EQU   0X12         ;Registro del contador7
   CONTADOR8   EQU   0X13         ;Registro del contador8
   CONTADOR9   EQU   0X14         ;Registro del contador9
   CONTADOR10  EQU 0X15         ;Registro del contador10
   CONTADOR11   EQU 0X16         ;Registro del contador11
   CONTADOR12   EQU 0X17         ;Registro del contador12
   #DEFINE      BANCO1   bsf   STATUS,RP0
   #DEFINE    BANCO0   bcf   STATUS,RP0
;*************************COMIENZO DEL PROGRAMA*************************************

         ORG   0X00            ;Direccion del vector reset
         goto    INICIO         ;Comienza el programa

INICIO            BANCO1         ;Seleciona el banco1

         movlw   b"00011000"      ;Carga un 1 en el registro de trabajo w
         movwf   TRISA         ;Pone el TRISA de PORTA como entradas y salidas
         clrf   TRISB         ;Pone el TRISB de PORTB como salida
         movlw   b"00000000"      ;Carga un 0 en el registro de trabajo w
         movwf   TRISB         ;Mueve el contenido de w en TRISB
         
BORRADO            BANCO0         ;Selecciona el BANCO 0
         clrf   PORTB         ;Borra el contenido del PORTB

         clrf   CONTADOR1      ;Borra el contenido del contador1
         clrf   CONTADOR2      ;Borra el contenido del contador2
         clrf   CONTADOR3      ;Borra el contenido del contador3
         
         clrf    CONTADOR4      ;Borra el contenido del contador4
         clrf   CONTADOR5      ;Borra el contenido del contador5
         clrf   CONTADOR6      ;Borra el contenido del contador6

         movlw   .10            ;Carga 10 decimal en el registro w   
         movwf   CONTADOR4      ;Mueve el contenido de w en CONTADOR4
         
         movlw   .9            ;Carga 9 decimal en el registro w      
         movwf   CONTADOR5      ;Mueve el contenido de w en CONTADOR5

         movlw   .5            ;Carga 6 decimal en el registro w
         movwf   CONTADOR6

      
TESTEO
   
         btfsc   PORTA,3         ;Testea y comprueba si la entrada RA0 es
                           ;1 lee  instruccion si es 0 salta
                           ;a la siguiente instruccion
         goto   RELOJ         ;Vete a la subrutina RELOJ
         btfsc   PORTA,4         ;Testea y comprueba si la entrada RA0 es
                           ;1 lee  instruccion si es 0 salta
                           ;a la siguiente instruccion
         goto   RELOJ2         ;Vete a la subrutina RELOJ
         goto   TESTEO         ;Vete a la subrutina TESTEO


RELOJ      clrf   CONTADOR1      ;Borra el contenido del contador1
         clrf   CONTADOR2      ;Borra el contenido del contador2
         clrf   CONTADOR3      ;Borra el contenido del contador3

         clrf   PORTB         ;Borra el contenido del puerto b
                     
         nop
         nop
         movlw    .100
         movwf   CONTADOR2
BUCLE1      movlw   .199
         movwf   CONTADOR1
BUCLE0      nop
         nop
         decfsz   CONTADOR1,F
         goto    BUCLE0
         decfsz   CONTADOR2,F
         goto    BUCLE1
         movlw    .31
         movwf   CONTADOR3
BUCLE2      decfsz   CONTADOR3,F
         goto     BUCLE2
         nop
         nop                  ;Hasta aqui, hace la cuenta de las decimas (100ms)
      
         bsf      PORTB,0         ;Indica que ha pasado una decima   
         btfsc   PORTA,3      
         btfsc   PORTA,4
         goto   BORRADO2   
            
         decfsz  CONTADOR4,F                        
         goto   RELOJ
                        
         bsf      PORTB,1         ;Indica que ha pasado un segundo         
         btfsc   PORTA,3   
         btfsc   PORTA,4
         goto   BORRADO2
         
         decfsz    CONTADOR5,F   
         goto   CARGA
      
         bsf      PORTB,2         ;Indica que han pasado 10 segundos
         btfsc   PORTA,3      
         btfsc   PORTA,4
         goto   BORRADO2   
         
         decfsz   CONTADOR6,F
         goto   CARGA2

         bsf      PORTB,3         ;Indica que ha pasado un minuto   
         btfsc   PORTA,3
         btfsc   PORTA,4
         goto   BORRADO2

         goto   BORRADO
      
CARGA
         movlw   .10
         movwf   CONTADOR4
         goto   RELOJ

CARGA2      
         movlw   .10
         movwf   CONTADOR4

         movlw   .10
         movwf   CONTADOR5

         goto    RELOJ


BORRADO2            BANCO0         ;Selecciona el BANCO 0
         clrf   PORTB         ;Borra el contenido del PORTB

         clrf   CONTADOR7      ;Borra el contenido del contador1
         clrf   CONTADOR8      ;Borra el contenido del contador2
         clrf   CONTADOR9      ;Borra el contenido del contador3
         
         clrf    CONTADOR10      ;Borra el contenido del contador4
         clrf   CONTADOR11      ;Borra el contenido del contador5
         clrf   CONTADOR12      ;Borra el contenido del contador6

         movlw   .10            ;Carga 10 decimal en el registro w   
         movwf   CONTADOR10      ;Mueve el contenido de w en CONTADOR4
         
         movlw   .9            ;Carga 9 decimal en el registro w      
         movwf   CONTADOR11      ;Mueve el contenido de w en CONTADOR5

         movlw   .5            ;Carga 6 decimal en el registro w
         movwf   CONTADOR12


RELOJ2      clrf   CONTADOR7      ;Borra el contenido del contador1
         clrf   CONTADOR8      ;Borra el contenido del contador2
         clrf   CONTADOR9      ;Borra el contenido del contador3

         clrf   PORTB         ;Borra el contenido del puerto b
                     
         nop
         nop
         movlw    .100
         movwf   CONTADOR8
BUCLEB      movlw   .199
         movwf   CONTADOR7
BUCLEA      nop
         nop
         decfsz   CONTADOR7,F
         goto    BUCLEA
         decfsz   CONTADOR8,F
         goto    BUCLEB
         movlw    .31
         movwf   CONTADOR9
BUCLEC      decfsz   CONTADOR9,F
         goto     BUCLEC
         nop
         nop                  ;Hasta aqui, hace la cuenta de las decimas (100ms)
      
         bsf      PORTB,4         ;Indica que ha pasado una decima   
         btfsc   PORTA,4   
         btfsc   PORTA,3
         goto   BORRADO   
            
         decfsz  CONTADOR10,F                        
         goto   RELOJ2
                        
         bsf      PORTB,5         ;Indica que ha pasado un segundo         
         btfsc   PORTA,4   
         btfsc   PORTA,3
         goto   BORRADO
         
         decfsz    CONTADOR11,F   
         goto   CARGA3
      
         bsf      PORTB,6         ;Indica que han pasado 10 segundos
         btfsc   PORTA,4
         btfsc   PORTA,3
         goto   BORRADO   
         
         decfsz   CONTADOR12,F
         goto   CARGA4

         bsf      PORTB,7         ;Indica que ha pasado un minuto   
         btfsc   PORTA,4
         btfsc   PORTA,3
         goto   BORRADO

         goto   BORRADO2

CARGA3
         movlw   .10
         movwf   CONTADOR10
         goto   RELOJ2

CARGA4      
         movlw   .10
         movwf   CONTADOR10

         movlw   .10
         movwf   CONTADOR11

         goto    RELOJ2

         end


Desconectado joseaam1980

  • PIC10
  • *
  • Mensajes: 4
RE: cuentavueltas y cronometro para scalextric
« Respuesta #17 en: 19 de Noviembre de 2004, 03:00:00 »
Chaval tu lo q tiens q hacer es juntarte con el Raul y EL Abeja q ellos son unos makinas de esto seguro q te resuelven la duda.