Hola a todos !
Estoy trabajando con un sistema que medirá (entre otros parámetros) la duración de un impulso escalón y para ello pensé en la instrucción PULSIN
He implementado el siguiente circuito a la entrada del PIC (puede ser cualquiera)
(http://www.servisystem.com.ar/GRAFORO/PULSIN.jpg)
Utilizo dentro del programa la siguiente secuencia de instrucciones:
REPEAT DELAYUS 1:UNTIL PIN = 1 'ME QUEDO ESPERANDO HASTA QUE EL PIN SE PONGA EN ESTADO ALTO
FLA = PULSIN PIN,HIGH 'PASO A LA VARIABLE "FLA" EL TIEMPO QUE PERMANECE EN ESTADO ALTO
PRINT AT 2,1,DEC FLA 'LO MUESTRO EN PANTALLA AL TIEMPO OBTENIDO
donde FLA es una variable tipo FLOAT que muestro con 3 decimales, PIN es el que utilizo para ingresar con la onda cuadrada y el lazo REPEAT ... UNTIL es para esperar a que ocurra el evento del impulso en su flanco ascendente.
Según el manual de Protón al trabajar con un cristal de 20 Mhz., las unidades que se cargarán dentro de PULSIN corresponderán a un intervalo de 2uS, por lo que al medir una onda cuadrada de 50 Hz (frecuencia de línea) FLA debiera cargarse con un valor de 5000
5000 veces 2uS es igual a 10 mSeg., es decir que el tiempo que dura un semiciclo "es" de 10 milisegundos y éso debiera obtener.
Sucede que obtengo un valor de 5240 aproximadamente.
Mayor precisión en la forma de onda de entrada al PIC no creo poder lograr (lo veo en el osciloscopio y es impecable), entonces mi duda parte hacia la precisión del PULSIN y de la cantidad de tiempo "físico" que ocupan las instrucciones, a pesar de que 240 me parece un valor muy alto y no comprendo de donde puede provenir.
Es por ésto que acudo a quienes puedan tener experiencia en el uso y aprovechamiento de ésta instrucción.
Por cierto muy agradecido a quienes me puedan ayudar.
Gracias y saludos a todos.
Mario
Hola de nuevo ! :)
Manolo, gracias por estar siempre maestro.
La instrucción PULSIN es muy sencilla de implementar en BASIC y sirve para medir el tiempo que un pin del PIC permanezca en un determinado estado.
Por ejemplo para medir lo que dura un impulso en estado alto, se termina la instrucción con HIGH ó 1, en cambio si lo que queremos medir es el tiempo que dura un estado bajo, debemos terminarla en LOW ó 0.
Y tenías razón en tu apreciación.
Al medir la duración del otro semiciclo, me daba el complemento exacto tal como lo habías observado.
Ralf, gracias a tí también por la orientación del circuito.
Lo acomodé para el uso que le estoy dando y me quedó de la siguiente forma:
(http://www.servisystem.com.ar/GRAFORO/PULSIN2.jpg)
pudiendo obtener ahora una variación de 0,2% (4990 / 5010), valor que es mucho más aceptable para la aplicación que estoy implementando.
No alcanzo a comprender muy bien el motivo de la existencia de dicha variación ya que considero que la frecuencia de red es de lo más estable que se puede conseguir, pero tal vez 0,2% sea un valor normal de tolerancia en la misma.
Gracias por la recomendación del circuito amigo ! :)
Gracias a ambos por la ayuda !
Saludos
Mario