Ayuda para generar 1ms usando Interrupciones 18f4550

Hola que tal,es la primera vez que les escribo,pero he consultado mucho en su foro y me ha sido de buena utilidad.Deseo realizar un proyecto con un18f4550 cuya funcion seria medir tiempos en interruptor de alta tension en lenguaje de programacion PBP.
Mi idea seria medir el tiempo que transcurre cuando se energiza la bobina de Apertura/Cierre hasta que se detecta la apertura o cierre de los contactos de potencia del interruptor.Enviando la orden desde un pin del pic.
Como los tiempos se miden en mseg. mi idea es realizar un contador a traves de un TIMER del pic.que vaya contando los mseg.desde que se energiza la bobina hasta que abra o cierre los contactos del interruptor.la cuenta seria mseg=mseg+1 y guardar los valores para luego mostrarlo en lcd.Estuve leyendo el libro de Microntroladores PIC y hay un ejemplo realizando un reloj,he querido realizar unas lineas en PBP pero me he entreverado en los calculos de tiempos para que las cuentas sean justas para 1mseg.
Como los interruptores de potencia tienen 3 polos R,Sy T tendria que realizar 3 contadores por separado para medir cada fase.
La frecuencia de cristal es de 20Mhz
Mi consulta es: 1) Que me aconsejan ustedes,que tipo de TImer o otra forma de realizarlo ,configuracion de los registros en PBP.

Les envio imagen de PROTEUS para que tengan una idea del proyecto

Desde ya Gracias y sigan asi el foro ta buenisimo.
PD:NO pretendo que me realizen el proyecto solamemte quiero unas ideas para comenzar.
 
Hola, yo usaria el timer1, que tiene un registro de 16bit.
que tiempo minimo y maximo debes medir?
Si es trifasico no accionan todos al mismo tirmpo?, si es asi porque 3 timer.
Si se maneja alta potencia como vas a acoplar las señales de los contactos al pic.
 
Gracias ricber por contestar,hay una norma internacional de analisis de interruptores que segun su tension de trabajo tienen un maximo de tiempo desde que se energizo la bobina de apertura hasta que los contactos principales del interruptor se separen totalmente.En interruptores de 150 Kv el maximo tiempo que debe transcurrir es de 50 mili seg.Lo mismo sucede cuando se Cierra el interruptor pero su tiempo es un poco mas elevado dependiendo del tipo del equipo.

La idea es medir que tiempo demora en hacer todo el proceso para determinar si un existe un problema en el interruptor,que este consta de 3 polos R,S,T y se miden los tiempos de cada polo para saber si la diferencia de tiempos entre ellos no supera de un tiempo determinado.

Estuve pensando en realizar algo asi como un cronometro,en pbp.La idea consiste en medir el tiempo como un contador de milisegundo usando la interrucion de TMRO a una frecuencia de 20MHZ y que desborde a los 39 cuentas segun calculos mio,desde que se la orden de energizar bobina hasta que se abran los contactos principales.

Comienza midiendo un polo y el soft pregunta si ya termino la cuenta y graba el dato,pero a la vez mide el otro polo y hace lo mismo asi tambien con el tercer polo.

La cuenta del TMRO para 1 miliseg(1000 micro) las hice asi:

Frecuencia interna = Cristal / 4= 20000000 / 4 = 5000000

Ciclo clock interno= Frecuencia interna / Cantidad de milisegundo 5000000/1000= 5000

Cuenta del TMRO= Ciclo interno / Preescaler=5000/128 =39

Periodo de cada interrupcion= (Preescaler * cuentas de TMRO) / Frecuencia Interna=
(128*39) / 5000000=0.00099= 0.001 seg =1 mseg

Mi pregunta es si este metodo del TMRO funcionaria,si este calculo es correcto y si fuera asi como configurar los registros de la interrupcion ya que no puedo decifrarla del datasheet del 18f4550

lo de acoplar señales al pic en el esquematico que puse seria algo similar

Gracias ricber por contestar,hay una norma internacional de analisis de interruptores que segun su tension de trabajo tienen un maximo de tiempo desde que se energizo la bobina de apertura hasta que los contactos principales del interruptor se separen totalmente.En interruptores de 150 Kv el maximo tiempo que debe transcurrir es de 50 mili seg.Lo mismo sucede cuando se Cierra el interruptor pero su tiempo es un poco mas elevado dependiendo del tipo del equipo.

La idea es medir que tiempo demora en hacer todo el proceso para determinar si un existe un problema en el interruptor,que este consta de 3 polos R,S,T y se miden los tiempos de cada polo para saber si la diferencia de tiempos entre ellos no supera de un tiempo determinado.

Estuve pensando en realizar algo asi como un cronometro,en pbp.La idea consiste en medir el tiempo como un contador de milisegundo usando la interrucion de TMRO a una frecuencia de 20MHZ y que desborde a los 39 cuentas segun calculos mio,desde que se la orden de energizar bobina hasta que se abran los contactos principales.

Comienza midiendo un polo y el soft pregunta si ya termino la cuenta y graba el dato,pero a la vez mide el otro polo y hace lo mismo asi tambien con el tercer polo.

La cuenta del TMRO para 1 miliseg(1000 micro) las hice asi:

Frecuencia interna = Cristal / 4= 20000000 / 4 = 5000000

Ciclo clock interno= Frecuencia interna / Cantidad de milisegundo 5000000/1000= 5000

Cuenta del TMRO= Ciclo interno / Preescaler=5000/128 =39

Periodo de cada interrupcion= (Preescaler * cuentas de TMRO) / Frecuencia Interna=
(128*39) / 5000000=0.00099= 0.001 seg =1 mseg

Mi pregunta es si este metodo del TMRO funcionaria,si este calculo es correcto y si fuera asi como configurar los registros de la interrupcion ya que no puedo decifrarla del datasheet del 18f4550
 
Última edición:
Hola, muy interesante el tema, no conocia que existia esas normas.
el tema de trm0 es asi:
Periodo_tmr0 = Fcristal/4 = 20000000/4 = 5000000 hz
Periodo_con_prescaler = periodo_tmr0/128 = 39026 hz o 0,0000256 seg (suponiendo prescaler de 128)
como el registro del tmr0 es de 8 bits eso son 256 valores, por lo tanto
el tiempo por cada interrupcion es de 0,0000256 *256 = 6.55 ms
para llegar a 50ms sera 0,05 / 0,0000256 = 7,63 o sea 7 interrupciones + un poquito mas. (si no tengo ningun error)
El modo de medir seria:
En el momento de energizar la bobina, debes activar el tmr0, en el momento de realizarse el cierre del ultimo contacto debes parar el tmr, luego deberias saber cuantas veces se interrupio y leer el ultimo valor del registro del tmr0 que no llego a generar interrupcion pero que si conto. (se entiende).
La deteccion del cierre del contacto podrias hacerlo con la interrupcion INT0.
Insisto que veas el tmr1 que es mejor que el tmr0.
 
Gracias por contestar.Ya veo que mis calculos eran erroneos.
La idea no es medir el tiempo hasta 50mseg sino hasta que abren o cierren los contactos principales.

Si no es molestias me podrias colocar ejemplos de como seria las lineas de programacion de configuracion de registros del TMR0 lo mismo del Timer 1 ya que tu me lo recomiendas.

En donde tu me escribes lo siguiente : "La deteccion del cierre del contacto podrias hacerlo con la interrupcion INT0.
Insisto que veas el tmr1 que es mejor que el tmr0." Mi idea es leer si los pines de que estan conectados a los polos del interruptor cambian de estado
 
Hola, el PBP no es el lenguaje que yo uso ( yo programo en C ), pero si no tienes mucho apuro, por ahi para el lunes, veo que te conseguir, me interesa el tema, es un buen desafio.
Con respecto a la lectura de los pines, como detectas el cambip de estado?

Saludos
 
moz-screenshot-1.png
moz-screenshot-2.png
moz-screenshot-3.png
moz-screenshot-4.png
Me alegro que te interese mi proyecto,te envio un pdf con el circuito en proteus indicando por ahora las partes funcionales.
En el futuro a este circuito lo quiero adjuntar con una PC para comandar desde la PC por via USB intercambiando datos PC-Micro.
Veras que aparte de medir los tiempos de cierre y apertura quiero medir tambien el consumo de corriente de las bobinas de Cierre y apertura(esta parte ya la tengo hecha en pbp utilizando el A/D del pic.

Saludos
 

Adjuntos

  • Circuito.pdf
    240.9 KB · Visitas: 49
Hola, estube mirando el tmr0 del micro que pensas usar y tiene prestaciones que son mejores que las de otros pic, yo estaba haciendo calculos en funcion de los timer de 8 bits.
El timer0 del 18f4550 se puede programar para 8 o 16 bits por lo que sin dudas hay que hacerlo para 16bits.
Entonces recalculando lo anterior con 16bits podes medir hasta 1.67 seg.
La forma de programar el tmr0 es algo asi:

T0CON=%00000110
Con esta instruccion fjamos los parametros como prescaler, encndido / apagado, reg 8/16 bits.
Luego para arrancar la cuenta se pone
T0CON.7=1 y para detener T0CON.7=0
Si puedes prueba esto ya que tienes el compilador.
 
bueno tengo un problema no se como realizar un programa que encienda y apage un led usando las interrupciones del timer 3 del pic 18f4550.
si alguien me puede ayudar con el programa mil gracias de antemano.
 
Atrás
Arriba