Buenas amigos tenia tiempo que no pasaba por el foro, hace unos días me puse a recordar un poco de picbasic ya que me la paso mas metido con programación Arduino. El caso es que estoy haciendo un monitor cardíaco para medir las pulsaciones, estaba pensando usar el comando COUNT pero no conseguía los datos correctos en el manejo de dicha sentencia, así que me dispuse a hacer un sistema como flanco.
Voy a empezar por pasos en la programacion:
Bueno como puede ver la lógica del programa se basa en, que al cambiar a estado 1 el pin dato se suma la variable pulsos y esta no seguirá sumando hasta no volver a 0 y luego iniciar otra vez, así conseguí leer la entrada de pulsos en tiempo real sin importar la velocidad con que llegan los pulsos al pin DATOS.
El problema es que quiero que, a medida que se cuente los pulsos por el pin DATOS, se pueda mostrar en la LCD un conteo de 60 segundos al mismo tiempo, que sea independiente uno del otro, he intentado que el programa me trate de realizar ambas funciones al mismo tiempo y no puedo, tiene retardos o se cuelga, ¿hay que usar interrupciones? he intentado con el manual pbp que aparece unos ejemplos y no me da tampoco.
Les voy a dejar el diagrama que detecta los pulsos y el diagrama de proteus con el archivo HEX, ojala me puedan ayudar y me haya hecho explicar bien.
Voy a empezar por pasos en la programacion:
Código:
DEFINE OSC 4 ;DEFINCION OSCILADOR
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB ;DEFINICION DE LOS PINES DEL PIC AL LCD
DEFINE LCD_EBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 3
TRISB = 0 ;PUERTO B COMO SALIDA
PORTB = 0 ;INICIA EL PUERTO B EN CERO
DATOS VAR PORTB.0 ;PIN CON EL NOMBRE DATO, POR DONDE SE LEERÁN LOS PULSOS
PULSOS VAR BYTE ;VARIABLE DONDE SE GUARDARAN LOS PULSOS OBTENIDOS
LCDOUT $FE,1 ;LIMPIAR LCD
PAUSE 500 ;RETARDO
INICIO: ;LOOP CON NOMBRE INICIO
LCDOUT $FE,2,"PULSOS = ",DEC2 PULSOS ;MOSTRAR RESULTADO EN LA LCD
IF DATOS = 1 THEN ;SI DATOS ENTRA EN ESTADO 1 ENTONCES
LCDOUT $FE,1,"PULSOS = ",DEC2 PULSOS ;MOSTRAR RESULTADO EN LA LCD
PULSOS = PULSOS + 1 ;SUMA "1" A LA VARIABLE PULSOS
ESPACIO: ;LOOP CON NOMBRE ESPACIO
IF DATOS = 1 THEN ESPACIO ;SI EL PIN DATOS PERMANECE EN UNO, NO HACE NADA
ENDIF ;FINALIZAR SI
GOTO INICIO ;IR A INICIO
END ;FIN DEL PROGRAMA
Bueno como puede ver la lógica del programa se basa en, que al cambiar a estado 1 el pin dato se suma la variable pulsos y esta no seguirá sumando hasta no volver a 0 y luego iniciar otra vez, así conseguí leer la entrada de pulsos en tiempo real sin importar la velocidad con que llegan los pulsos al pin DATOS.
El problema es que quiero que, a medida que se cuente los pulsos por el pin DATOS, se pueda mostrar en la LCD un conteo de 60 segundos al mismo tiempo, que sea independiente uno del otro, he intentado que el programa me trate de realizar ambas funciones al mismo tiempo y no puedo, tiene retardos o se cuelga, ¿hay que usar interrupciones? he intentado con el manual pbp que aparece unos ejemplos y no me da tampoco.
Les voy a dejar el diagrama que detecta los pulsos y el diagrama de proteus con el archivo HEX, ojala me puedan ayudar y me haya hecho explicar bien.
Adjuntos
Última edición por un moderador: