Sistema de adquisición de datos con pic16f886 y modulo de bluetooth

mcpiebot

Bovino adicto
#1
En este video se muestra un PIC16F886 usando su ADC para leer la respuesta de un sensor de gas lp, tambien usa su USART para mandar los datos a la PC por medio de un modulo bluetooth.

Aqui el video.

[YOUTUBE]http://www.youtube.com/watch?v=wnaLNLqzRrY[/YOUTUBE]

Aqui el codigo del microcontrolador:

Código:
#INCLUDE <P16F886.INC>
;***D E C L A R A C I O N  D E  L O S  B I T S  D E  C O N F I G U R A C I O N****
    __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V
;*********************************************************************************
      errorlevel -302

;--------DECLARACION DE REGRISTROS--------

   CBLOCK      0X20
;******************************************************************   

   POINTER            ;REGISTROS UTILIZADOS EN 
   UNIDADES, DECENAS   ;BINBCD Y EN LA ADQUISICION DE 
   CENTENAS,MILLARES   ;DATOS
   UNIDADEST, DECENAST   ;BINBCD Y EN LA ADQUISICION DE 
   CENTENAST,MILLAREST   ;DATOS
   TEMPORAL
;******************************************************************
   W_TEMP,STATUS_TEMP, PCLATH_TEMP,SAMPLE, DATO
   NUM1,NUM2,NUM3
   ENDC

CBLOCK 0X73
DATOL,DATOH
ENDC

ENVIA         MACRO
               BSF         STATUS,RP0
            BTFSS      TXSTA,TRMT
            GOTO    $-1
               BCF         STATUS,RP0
            ENDM

   ORG         0X00



         GOTO      INICIO

   ORG         0X04
INTERRUPCION         MOVWF    W_TEMP       ;Copy W to TEMP register
                  SWAPF    STATUS,W    ;Swap status to be saved into W
                  CLRF    STATUS       ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
                  MOVWF    STATUS_TEMP ;Save status to bank zero STATUS_TEMP register
                  MOVF    PCLATH, W    ;Only required if using pages 1, 2 and/or 3
                  MOVWF    PCLATH_TEMP ;Save PCLATH into W
                  CLRF    PCLATH       ;Page zero, regardless of current page

            MOVF   RCREG,W
            ADDLW   0X01
            MOVWF   TXREG

            ENVIA

FIN_INT      
                  MOVF    PCLATH_TEMP, W    ;Restore PCLATH
                  MOVWF    PCLATH          ;Move W into PCLATH
                  SWAPF    STATUS_TEMP,W    ;Swap STATUS_TEMP register into W
                                    ;(sets bank to original state)
                  MOVWF    STATUS          ;Move W into STATUS register
                  SWAPF    W_TEMP,F       ;Swap W_TEMP
                  SWAPF    W_TEMP,W       ;Swap W_TEMP into W
            RETFIE
         ;*************************************************************
;TABLAS DE DATOS PARA LA SUBRUTINA BINBCD
TABLAU      ;TABLA DE UNIDADES
   MOVF   POINTER,W
   ADDWF   PCL,F
   RETLW   D'2'
   RETLW   D'6'
   RETLW   D'8'
   RETLW   D'4'
   RETLW   D'2'
   RETLW   D'6'
   RETLW   D'8'
   RETLW   D'4'
   RETLW   D'2'
   RETLW   D'1'

TABLAD      ;TABLA DE DECENAS
   MOVF   POINTER,W
   ADDWF   PCL,F
   RETLW   D'1'
   RETLW   D'5'
   RETLW   D'2'
   RETLW   D'6'
   RETLW   D'3'
   RETLW   D'1'
   RETLW   D'0'
   RETLW   D'0'
   RETLW   D'0'
   RETLW   D'0'

TABLAC      ;TABLA DE CENTENAS
   MOVF   POINTER,W
   ADDWF   PCL,F
   RETLW   D'5'
   RETLW   D'2'
   RETLW   D'1'
   RETLW   D'0'
   RETLW   D'0'
   RETLW   D'0'
   RETLW   D'0'
   RETLW   D'0'
   RETLW   D'0'
   RETLW   D'0'
;*********************************************************



      DT "www.cosasdeingenieria.com"
      DT "www.cosasdeingenieria.com"

INICIO:      CALL   USARTINI
         CALL   INIT_ADQUI   

START      CALL   ADQUI
         CALL   BINBCD

         MOVLW 0x24 ;initialize pointer
         MOVWF FSR ;to RAM

NEXTx       MOVF INDF,W
         MOVWF   TXREG
         ENVIA 
         DECF FSR ;inc pointer
         MOVF   FSR,W
         SUBLW   0X20
         BTFSS   STATUS,Z
         GOTO   NEXTx
         MOVLW   0X0D
         MOVWF   TXREG
         ENVIA

         MOVLW   0X0A
         MOVWF   TXREG
         ENVIA
CALL RETARDO1S

         GOTO   START



;**********S U B R U T I N A  D E  A D Q U I S I C I O N  D E L  A D C**********
ADQUI:   ;   MOVWF      ADCON0
         MOVLW      B'11000001'
         MOVWF      ADCON0
         CALL       SAMPLETIME   ;RETARDO DE ADQUISICION   CALL       SAMPLETIME   ;RETARDO DE ADQUISICION
         CALL       SAMPLETIME
         BSF       ADCON0,GO    ;INICIA LA CONVERSION
         BTFSC       ADCON0,GO    ;YA SE TERMINO LA CONVERSION?
         GOTO       $-1       ;NO? PREGUNTA DE NUEVO
         CALL       SAMPLETIME
         BANKSEL    ADRESH       ;SI, CONTINUA
         MOVF       ADRESH,W    ;LEE LA PARTE MAS SIGNIFICATIVA
         MOVWF       DATOH       ;GUARDALO EN DATOH
         BANKSEL    ADRESL       ;CAMBIO A BANCO1
         MOVF       ADRESL,W    ;LEE LA PARTE MENOS SIGNIFICATIVA
         MOVWF       DATOL       ;GUARDALO EN DATOL
         BANKSEL      PORTB      ;CAMBIO A BANCO 0
         
         RETURN

SAMPLETIME:   MOVLW      .255
         MOVWF      SAMPLE
ESPERA_S:   NOP
         NOP
         DECFSZ      SAMPLE,F
         GOTO      ESPERA_S
         RETURN




;*********************************************************
;subrutina de conversion de binario a codigo ASCII
BINBCD      CLRF   MILLARES
      CLRF   UNIDADES
      CLRF   DECENAS
      CLRF   CENTENAS
      CLRF   POINTER
OTRA
      BTFSS   DATOH,7
      GOTO   ROTA
      CALL   TABLAU   
      ADDWF   UNIDADES,F

      CALL   TABLAD   
      ADDWF   DECENAS,F

      CALL   TABLAC   
      ADDWF   CENTENAS,F

;**************************************
      MOVF   UNIDADES,W   
      SUBLW   D'10'
      BTFSS   STATUS,C
      GOTO   MAYOR 
      GOTO    MENOR   
   
MAYOR   INCF   DECENAS,F
      MOVLW   D'10'
      SUBWF   UNIDADES,F   
      GOTO    DECE   

MENOR   MOVLW   D'10'
      SUBWF   UNIDADES,W
      BTFSS   STATUS,Z   
      GOTO    DECE   
      GOTO   MAYOR
;**************************************

DECE   MOVF   DECENAS,W   
      SUBLW   D'10'
      BTFSS   STATUS,C
      GOTO   MAYORD 
      GOTO    MENORD   
   
MAYORD   INCF   CENTENAS,F
      MOVLW   D'10'
      SUBWF   DECENAS,F   
      GOTO    CENTE   

MENORD   MOVLW   D'10'
      SUBWF   DECENAS,W
      BTFSS   STATUS,Z   
      GOTO    CENTE   
      GOTO   MAYORD

;**************************************
CENTE   MOVF   CENTENAS,W   
      SUBLW   D'10'
      BTFSS   STATUS,C
      GOTO   MAYORC 
      GOTO    MENORC   
   
MAYORC   INCF   MILLARES,F
      MOVLW   D'10'
      SUBWF   CENTENAS,F   
      GOTO    MILLA   

MENORC   MOVLW   D'10'
      SUBWF   CENTENAS,W
      BTFSS   STATUS,Z   
      GOTO    MILLA   
      GOTO   MAYORC
;**************************************
MILLA   MOVF   MILLARES,W   
      SUBLW   D'10'
      BTFSS   STATUS,C
      GOTO   MAYORM 
      GOTO    MENORM   
   
MAYORM   MOVLW   D'10'
      SUBWF   MILLARES,F   
      GOTO    ROTA   

MENORM   MOVLW   D'10'
      SUBWF   MILLARES,W
      BTFSS   STATUS,Z   
      GOTO    ROTA   
      GOTO   MAYORM
;**************************************
ROTA
      RLF      DATOL,F
      RLF      DATOH,F
      INCF   POINTER,F
      MOVF   POINTER,W
      SUBLW   D'10'
      BTFSS   STATUS,Z
      GOTO    OTRA

      MOVLW   0X30
      ADDWF   UNIDADES,F

      MOVLW   0X30
      ADDWF   DECENAS,F

      MOVLW   0X30
      ADDWF   CENTENAS,F

      MOVLW   0X30
      ADDWF   MILLARES,F

      RETURN



SHOW   MOVF   MILLARES,W
      CALL   DATO

      MOVF   CENTENAS,W
      CALL   DATO

      MOVF   DECENAS,W
      CALL   DATO

      MOVF   UNIDADES,W
      CALL   DATO
      RETURN

USARTINI:      BSF   STATUS,RP0
            MOVLW 0X24  
            MOVWF TXSTA
            MOVLW D'25'
            MOVWF SPBRG
            BSF PIE1,RCIE
            MOVLW 0XC0
            MOVWF INTCON
            BCF STATUS,RP0   ;BANCO 0
            MOVLW 0X90
            MOVWF RCSTA
            RETURN
RETARDO100US
REBOTE:           MOVLW      d'1'
            MOVWF      NUM3

OTRA2           MOVLW      d'200'
            MOVWF      NUM2

OTRA1          MOVLW      d'166'
            MOVWF      NUM1

OTRAX:         DECFSZ      NUM1,F
            GOTO      OTRAX
            DECFSZ      NUM2,F
            GOTO      OTRA1

            DECFSZ      NUM3,F
            GOTO      OTRA2
            return



RETARDO1S:        MOVLW      d'1'
            MOVWF      NUM3

OTRA2S           MOVLW      d'100'
            MOVWF      NUM2

OTRA1S          MOVLW      d'166'
            MOVWF      NUM1

OTRAS:         DECFSZ      NUM1,F
            GOTO      OTRAS
   
            DECFSZ      NUM2,F
            GOTO      OTRA1S

            DECFSZ      NUM3,F
            GOTO      OTRA2S
            return

INIT_ADQUI:    
            BANKSEL    ADCON1 ;
            MOVLW       B'00000000' ;JUSTIFICACION A LA IZQUIERDA
            MOVWF       ADCON1       ;VDD Y VSS COMO VREF
            BcF         ADCON1,4
            BANKSEL    TRISA       ;
            BSF       TRISA,1    ;PONEMOS A  RA0 COMO ENTRADA
            BANKSEL    ANSEL       ;
            BSF         ANSEL,1
            BANKSEL    ADCON0       ;
            MOVLW       B'11000101' ;ELEGIMOS EL RELOJ FRC DEL ADC
            MOVWF       ADCON0       ;Y ENCENDEMOS EL CONVERTIDOR
            RETURN


END
 
Arriba