Autor Tema: sistema de seguridad vehicular con 16f88  (Leído 1962 veces)

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

Desconectado dariovic

  • PIC10
  • *
  • Mensajes: 2
sistema de seguridad vehicular con 16f88
« en: 06 de Marzo de 2009, 13:47:00 »
hola a todos, mi programa consta  en rasgos generales de un sistema de seguridad vehicular para conductor dormido al volante. su funcionamiento se basa, en los latidos del corazon, yo los simulo con un tren de pulsos, que al variar la frec. ase una cosa o otra; actua como llave. Cuando tiene mas de 60Hz lo controlo yo, la direccion, y hacia donde gira.Cuando la frec. es menor que 60Hz, la direccion del auto se controla por medio de dos sensores CNY70, uno asta a la izquierda y el otro a la derecha,que mantien el auto entre dos lineas, simulando la carretera. Aqui esta mi problema, cuando el sensor de la derecha (funciona con BLANCO=0 Y NEGRO=1, YA PASADO A DIGITAL) detecta el la linea blanca debe girar a la izquierda, pero aqui le debe preguntar al otro sensor que esta detectando, y si el sensor izq. detecta la linea blanca debe girar a la derecha. yo utilizo en el porta RA0 y RA1. yo hice el programa pero parece como que nunca entra.
espero que me puedan ayudar.

ACA PONGO MI PROGRAMA:

#INCLUDE P16F88.INC
        __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _INTRC_IO

REG3          EQU 0X20
REG4         EQU 0X21
REG_FREC      EQU 0X22
REG5         EQU 0X23
REG6         EQU 0X24
SEG            EQU 0X25
temp         EQU 0X26
FREC         EQU   0X27
OPTION_REG       EQU 0X81
PDel0         EQU 0X28
PDel1         EQU 0X29
PDel2         EQU 0X30
REG1         EQU 0X31
REG2         EQU 0X32
temp1          equ   0x33
temp2         equ   0x34
temp3         equ   0X35
DupStat         equ   0x36
DupW         equ   0x37
REG_SENSORES   EQU 0X38
ADRESH1         EQU 0X39
ADRESH2         EQU 0X40
REG7         EQU 0X41
REG8         EQU 0X42
DATORX         equ   0x43
DATOTX         equ   0x44



;agregados con minuscula
   
      org         0x00
       goto      CONFIGURACION;inicio
      org         0X04
;      CALL      INTER
      RETFIE


inicio     
      clrf      PORTA
      clrf      PORTB
      call      CONFIGURACION

SIGO
      CLRF      TMR0
      CALL      DEMORA; TIENE QUE SER LO MAS CERCANO A 1SEG
      MOVF      TMR0,W
      MOVWF      FREC
     
      MOVFW      FREC
      SUBLW      D'60'         
      BTFSC      STATUS,C;carrier
      GOTO      MAXFREC;PARAR MOTOR   
      GOTO      MINFREC;MOTOR FUNCIONANDO
      BCF         PORTB,1
      BCF         PORTB,0
      ;BCF         PORTA,2
      ;BCF         PORTA,3
      GOTO      SIGO   


OTRO1
      movlw      0x55
      movwf      PORTB
      call      tempo
      movlw      0xAA
      movwf      PORTB
      call      tempo
      return
OTRO
      bsf         PORTA,0
      call      tempo
      bcf         PORTA,0
      CALL      tempo
      return   

CONFIGURACION

      BANKSEL      PORTA
      CLRF      PORTB
      CLRF      PORTA
     
      BANKSEL      ANSEL
      MOVLW      0X07
      MOVWF      ANSEL

      movlw      b'10000000';sensores
      movwf      ADCON1

      MOVLW      0X00;SALIDAS
      MOVWF      TRISB
      MOVLW      0XFF   ; RA4 ENTRADA PULSOS 0XCF
      MOVWF      TRISA
      MOVLW      B'11101000' ; POR CADA PULSO QUE INGRESE A RA4 SE INCREMENTA TMRO   
      MOVWF      OPTION_REG
      movlw      b'01100000';Seleciono 4Mhz
      movwf      OSCCON
        BANKSEL      PORTA

      ;BCF         ADCON0,ADCS1;sensor
      ;BSF         ADCON0,ADCS0;

      BSF         INTCON,7;GIE
      goto      SIGO



tempo
      banksel      temp1
      movlw      0x8
      movwf      temp1
otro2
      movlw      0xff
      movwf      temp2
otro1
   
      movlw      0xff
      movwf      temp3


;//////////////////////////////////////////////////

MINFREC
      BSF         PORTB,0
      BCF         PORTB,1
      GOTO      CONDUCTOR;90 PULSOS,ESTA ALREVES
     
MAXFREC

     
      BCF         PORTB,6;DESACTIVO CNY70 CONDUCTOR
      GOTO      DORMIDO


DORMIDO

   
      BCF         PORTB,1;al bajar la frec espero un tiempo de 2min en los q controlo los sensores y luego apago el motor traseroBSF
      BCF         PORTB,0 ;voy a s derecha y sensor izquierda         
      goto      S1
      CALL      BUZER
      CALL      FLASHEO   
      GOTO      SIGO ;60


CONDUCTOR

      BSF         PORTB,6;ACTIVO CNY70(CONDUCTOR) POR TENSION
      BCF         PORTB,2
      BCF         PORTB,3
      BTFSC      PORTA,7; izquierda
      GOTO      IZQUIERDA     
      BTFSC      PORTA,6
      GOTO      DERECHA
     
     
      GOTO      SIGO



IZQUIERDA

      BTFSS      PORTA,7;PREG SI ESTA ACTIVADO PULSADOR
      GOTO      SIGO
CR
      CALL      TEMPO50m; POR EL REBOTE
      BTFSS      PORTA,7
      GOTO      CR         
ANDAR     
      BTFSS      PORTA,7
      GOTO      DERECHA
      BCF         PORTB,3
      BSF         PORTB,2
      BTFSC      PORTA,7; SI EL PULASADOR ESTA LEVANTADO PARO MOTOR
      GOTO      ANDAR
      ;BCF         PORTA,7;PARAR
      BCF         PORTB,3
      BCF         PORTB,2
      GOTO      SIGO



DERECHA


      BTFSS      PORTA,6;PREG SI ESTA ACTIVADO PULSADOR
      GOTO      SIGO
CC
      CALL      TEMPO50m; POR EL REBOTE
      BTFSS      PORTA,6
      GOTO      CC         
ANDAR1     
      BTFSS      PORTA,6
      GOTO      IZQUIERDA
      BSF         PORTB,3
      BCF         PORTB,2
      BTFSC      PORTA,6;      DERECHA
      GOTO      ANDAR1;         GOTO      ANDAR1;PARAR1     
      ;BCF         PORTA,6
      BCF         PORTB,3
      BCF         PORTB,2

      GOTO      SIGO


DEMORA;1seg
       movlw     .14       ; 1 set numero de repeticion  (C)
        movwf     PDel0     ; 1 |
PLoop0  movlw     .72       ; 1 set numero de repeticion  (B)
        movwf     PDel1     ; 1 |
PLoop1  movlw     .247      ; 1 set numero de repeticion  (A)
        movwf     PDel2     ; 1 |
PLoop2  clrwdt              ; 1 clear watchdog
        decfsz    PDel2, 1  ; 1 + (1) es el tiempo 0  ? (A)
        goto      PLoop2    ; 2 no, loop
        decfsz    PDel1,  1 ; 1 + (1) es el tiempo 0  ? (B)
        goto      PLoop1    ; 2 no, loop
        decfsz    PDel0,  1 ; 1 + (1) es el tiempo 0  ? (C)
        goto      PLoop0    ; 2 no, loop
PDelL1  goto PDelL2         ; 2 ciclos delay
PDelL2  clrwdt              ; 1 ciclo delay
        return              ; 2+2 Fin.


TEMPO50m

      MOVLW      0X81
      MOVWF      REG1
DOS      MOVLW      0X81
      MOVWF      REG2     
UNO      DECFSZ      REG2
      GOTO      UNO
      DECFSZ      REG1
      GOTO      DOS
      RETURN

   
FLASHEO

      BSF         PORTB,4
      CALL       TEMPO2;INTER
      BCF         PORTB,4
      ;CALL      TEMPO2;INTER
       ;GOTO      FLASHEO
      RETURN
   
     
BUZER

      BSF         PORTB,5
      RETURN


TEMPO2
               
      MOVLW      0X30
      MOVWF      REG5
SEIS   MOVLW      0X30
      MOVWF      REG6     
CINCO   DECFSZ      REG6
      GOTO      CINCO
      DECFSZ      REG5
      GOTO      SEIS
      RETURN


TEMPO               ;VARIO EL TIEMPO DE GIRO               
      MOVLW      0X20
      MOVWF      REG3
CUATRO   MOVLW      0X20
      MOVWF      REG4     
TRES   DECFSZ      REG4
      GOTO      TRES
      DECFSZ      REG3
      GOTO      CUATRO
      RETURN

;///////////////////////////////////////////////////////////////////////////////
;funcionamiento con negro;BLANCO=0, NEGRO=1


S1; SENSOR1 IZQUIERDA

      CLRF      ADRESH
      BCF         ADCON0,5;LEO SENSOR 1
      BCF         ADCON0,4
      BCF         ADCON0,3

      BSF         ADCON0,0
      CALL      TEMPO20u
      BSF         ADCON0,2

ESPERO
      BTFSC      ADCON0,2
      GOTO        ESPERO
      BCF         ADCON0,0

ADRE

      MOVFW      ADRESH
      MOVWF      ADRESH1

BUSCOADRESH
 
      MOVLW      0X7D
      SUBWF      ADRESH,W
      BTFSS      STATUS,0;SI ES IGUAL A "1" MENOR A 2,5V BLANCO, SI ES "0" MAYOR A 2,5V NEGRO
      GOTO      SENSOR1ENUNO;NEGRO
      GOTO      SENSOR1ENCERO;BLANCO

SENSOR1ENUNO;negro

      BCF         REG_SENSORES,0
      CLRF      ADRESH
      GOTO      S2;DERECHAaaaaaaaaaaaa


SENSOR1ENCERO

      BSF         REG_SENSORES,0
      CALL      DERECHA1;MAXFREC;60HZ///////////////////////////////
      GOTO      MAXFREC

S2;derecha

      CLRF      ADRESH
      BCF         ADCON0,5;LEO SENSOR 2
      BCF         ADCON0,4
      BCF         ADCON0,3

      BSF         ADCON0,0
      CALL      TEMPO20u
      BSF         ADCON0,2

ESPERO1
      BTFSC      ADCON0,2
      GOTO        ESPERO1
      BCF         ADCON0,0

ADRE1

      MOVFW      ADRESH
      MOVWF      ADRESH2

BUSCOADRESH1

      MOVLW      0X7D
      SUBWF      ADRESH2,W
      BTFSS      STATUS,0
      GOTO      SENSOR2ENUNO;NEGRO
      GOTO      SENSOR2ENCERO;BLANCO
     

SENSOR2ENUNO;negro

      BCF         REG_SENSORES,1
      CLRF      ADRESH2
      GOTO      S1

SENSOR2ENCERO

      BSF         REG_SENSORES,1
      CALL      IZQUIERDA1;MAXFREC
      GOTO      MAXFREC

;///////////////////////////////////////////////////////////////////////////

SR1; SENSOR POR COLISION


      BSF         PORTB,7
      BTFSS      PORTA,3
      GOTO      MAXFREC;//////////////////// VER /////////////////
      GOTO      DORMIDO
     



DERECHA1


      ;bsf            PORTB,6;LED ROJO GIRO DERECHA
      BSF         PORTB,3
      BCF         PORTB,2   
      CALL      DEMORA;tiempo en que funciona,luego paro
      BCF         PORTB,3
      BCF         PORTB,2
      RETURN

IZQUIERDA1


      ;bsf            PORTB,7;LED VERDE GIRO IZQUIERDA
      BCF         PORTB,3
      BSF         PORTB,2   
      CALL      DEMORA
      BCF         PORTB,3
      BCF         PORTB,2
      RETURN



TEMPO20u

      MOVLW      0X2
      MOVWF      REG7
OCHO   MOVLW      0X2
      MOVWF      REG8     
SIETE   DECFSZ      REG8
      GOTO      SIETE
      DECFSZ      REG7
      GOTO      OCHO
      RETURN



      END


CREO QUE LO COPIE BIEN, ADJUNTO UN DIBUJITO PARA QUE SE ENTIENDA LO DEL CANAL DONDE ESTAN LOS SENSORES.