Hola a todos.
Os expongo una pequeña duda respecto a este proyecto.
Estoy tratando de realizar un anemómetro como parte del proyecto final de carrera. Para ello uso un CNY70 sobre un eje accionado por un anemómetro de cazoletas. El CNY70 envía pulsos en función de la velocidad de giro que introduzco al pic por RC2/CCP1 (patilla17).
Mediante TIMER1 mido el periodo de la señal entre dos flancos de subida (rissing edge). Para comprobar la existencia de viento minimo, compruebo el desbordamiento del contador de timer1 (en ese caso almaceno 255 en Msb y Lsb) y si no desborda, continúa la cuenta. Cuando se produce el segundo flanco de subida, almaceno el valor de CCPR1H y CCPR1L en Msb y Lsb respectivamente.
Bien, ésta es mi pregunta. Al conectarlo a Labview, siempre recibo 255. He depurado en MPLab el software y parece funcionar correctamente y por otro lado, en CCP1 recibo correctamente los pulsos del sensor.
¿que puede estar pasando? ¿por que no funciona correctamente?
Os dejo la programación por si veis algo que se me esté pasando.
Muchas Gracias por adelantado.
; **** Encabezado ****
list p=16f877; directiva que define al microcontrolador
#include <p16f877.inc> ; definiciones de variables especificas del microcontrolador
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_ON & _PWRTE_ON & _HS_OSC & _LVP_OFF
;**** Definicion de variables ****
Msb equ 0x20 ; Guarda Byte alto de Captura para enviar por RS232
Lsb equ 0x21 ; Guarda byte bajo de Captura para enviar por RS232
Contador1 equ 0x22 ; Para demora
Contador2 equ 0x23 ; Para demora
;**** Definiciones para el ensamblador ****
;**** Definición de macros ****
; Se envia la data de un registro a PC.-
Putreg macro Registro
movfw Registro
call RS232_EnviaDato
endm
;/////////////////////////////////
;**** Inicio del Micro ****
Reset.
org 0x00 ; Aquí comienza el micro.-
goto Inicio ; Salto a inicio de mi programa.-
; **** Programa Principal ****
org 0x05
Inicio
bsf STATUS,RP0 ; Banco 1
movlw b'11101111'
movwf TRISC
movlw b'00100100' ; Configuración USART
movwf TXSTA ; y activación de transmisión
movlw .25 ; 9600 baudios
movwf SPBRG
bsf TXSTA,TXEN ; Habilita transmision
bcf STATUS,RP0 ; Banco 0.-
bsf RCSTA,SPEN ; Habilitacion puerto serie
movlw b'00110001' ; Se selecciona TMR1, preescaler de 1/8, modo temporizador.-
movwf T1CON
movlw b'00000101' ; Se configura CCP modo captura cada flanco de subida.-
movwf CCP1CON
Bucle
bcf PIR1,CCP1IF ; Borramos bandera
pto1
btfss PIR1,CCP1IF ; Testeamos bandera.-
goto desborde1 ; No se activo. Comprobamos desbordamiento
bcf PIR1,CCP1IF ; Se activo, la borramos.-
clrf TMR1H ; Borramos Timer1.-
clrf TMR1L ;
pto2
btfss PIR1,CCP1IF ; Volvemos a testear bandera.-
goto desborde2 ; No se activo, comprobamos desbordamiento
movfw CCPR1L ; Copiamos el valor capturado.-
;addlw 0x30
movwf Lsb
movfw CCPR1H
; addlw 0x30
movwf Msb
bsf PORTC,4
goto marcado
desborde1
btfss PIR1,TMR1IF ; Testeamos bandera desbordamiento TRM1.-
goto pto1
movlw .255
movwf Lsb
movwf Msb
goto marcado
desborde2
btfss PIR1,TMR1IF ; Testeamos bandera desbordamiento TMR1.-
goto pto2
movlw .255
movwf Lsb
movwf Msb
goto marcado
marcado
Putreg Msb ; Enviamos lo guardado en el registro Msb.-
Putreg Lsb ; Enviamos lo guardado en el registro Lsb.-
; call Demora_30ms
goto Bucle ;
;..............................................
;**** Rutinas ****
;**** Se envia Dato ****
RS232_EnviaDato
bsf STATUS,RP0 ; Banco 1
btfss TXSTA,TRMT ; chequea si esta listo
goto $-1 ; Esperamos a que se desocupe.-
bcf STATUS,RP0 ; Banco 0
movwf TXREG ; envia Dato.-
return
;...............................................
; *** Demora****
Demora_30ms
movlw 0xFF ;
movwf Contador1 ; Iniciamos contador1.-
Repeticion1
movlw 0xC3 ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
goto Repeticion2 ; Si no es 0 repetimos ciclo.-
decfsz Contador1,1 ; Decrementa Contador1.-
goto Repeticion1 ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
;...............................................
end