Autor Tema: Temporizador con PIC12F675  (Leído 4169 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Temporizador con PIC12F675
« en: 04 de Octubre de 2011, 18:25:44 »
Hola, necesito realizar un temporizador de 30 minutos, pero si durante ese tiempo se produce un cambio en una señal externa, debe resetearse el conteo y empezar de nuevo. Resumiendo es algo similar a como funciona el Wachdog de los micros, pero con un tiempo muchisimo mayor.
Tengo escrito el temporizador, sacado y adaptado de un codigo que encontre por internet. Consiste simplemente en una espera de 1.800.000 ms. Y la idea es agregarle una interrupcion de modo que la active la señal esterna, pero no se exactamente como volver al principio del while(true), en el retorno de la interrupcion, para empezar el ciclo de nuevo.
Se que este sistema no es el mas optimo y tambien he pensado en poner varios temporizadores parciales anidados, de modo que sea mas versatil, pero no se por cual decidirme.
Mis dudas son:
Si lo hago con un "delay_ms(1800000)":
¿tendre problemas con el tratamiento de las interrupciones?.
¿como regreso al punto anterior al while(true), para empezar el ciclo de nuevo?

Si lo hago con temporizadores parciales anidados, basicamente las dudas son las mismas.

Espero que alguien me pueda achar una mano.

Saludos.
« Última modificación: 04 de Octubre de 2011, 18:35:50 por AcoranTf »

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Temporizador con PIC12F675
« Respuesta #1 en: 04 de Octubre de 2011, 18:31:44 »
No puedes poner ese valor dentro del delay_ms, pues solo admite valores de 16 bits. Es decir, el maximo que puedes poner es 65535, que valdrian a ser un minuto con 5 seg aprox.

De esta forma, tendrias que hacer un contador de segundos con el timer0. Es mas conveniente hacerlo asi, existe muchos ejemplos de como hacer contadores en el foro, buscalos.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re: Temporizador con PIC12F675
« Respuesta #2 en: 04 de Octubre de 2011, 18:41:20 »
Gracias por responder jeremylf, como aun no lo probe en la practica y ademas estoy empezando con la programacion de PIC, no sabia eso, pero me confie poruq el compilador de CCS no me dio ningun error al compilar.
En ese caso solo me queda la segunda opcion, o sea anidar varios temporizadores hasta sumar el total, pero aun me queda la duda de como retornar a la entrada del programa principal desde la interrupcion, o sea justo antes del while(true).

Saludos.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Temporizador con PIC12F675
« Respuesta #3 en: 04 de Octubre de 2011, 19:07:25 »
No te da error porque al sobrepasar 0xFFFF (65535) se pone de nuevo a 0 y asi sucesivamente.

Por lo otro, si quieres practicamente volver al principio del main, puedes usar el reset_cpu().

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: Temporizador con PIC12F675
« Respuesta #4 en: 04 de Octubre de 2011, 23:00:32 »
Tiene que poner una variable que se llame por ejemplo "interrupcion" y que se active si hay una interrupcion y que si se da dentro del while resetee el conteo del timer.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re: Temporizador con PIC12F675
« Respuesta #5 en: 05 de Octubre de 2011, 05:32:17 »
Gracias soymoe, el problema es que en CCS no tengo manera de hacer eso una vez arranque la espera delay_ms(XXXX), al menos yo no lo veo. Una vez llegue a ese punto y cuando regrese de la interrupcion, creo que seguira por donde iba con los contadores.
Y respecto a utilizar el reset_cpu, podria ser una solucion, pero que representa otro problema, ya que en el momento del reset, la salida del pic quedara desactivada hasta que el programa vuelva a activarla unos milisegundos despues, con lo que se interrumpira la alimentacion al circuito controlado, cosa que no puede ocurrir.

Saludos.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Temporizador con PIC12F675
« Respuesta #6 en: 05 de Octubre de 2011, 09:31:43 »
  Efectivamente no podes interrumpir la función delay  :? .
  Hay que buscar otra forma... se me ocurre que tal vez podrías hacer un ciclo do-while en el cual vayas incrementando un contador cada vez que se desborda el timer0 -dicho contador sería el que te daría los 30 minutos-. Dentro del ciclo sí podrías evaluar si se activo la interrupción externa y si ocurrió sólo basta con resetear el contador y el timer0 y así te aseguras que la cuenta comenzará nuevamente desde 0.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re: Temporizador con PIC12F675
« Respuesta #7 en: 18 de Julio de 2012, 21:00:08 »
Que curioso, abri este hilo cuando empezaba con el lenguaje C y como no le vi una solucion facil, lo hice con un 555 y me olvide de este hilo. Tampoco sabia como buscar mis comentarios en este foro. Pues como decia me olvide del hilo y ahora buscando info y ejemplos del PIC12F675, lo volvi a encontrar.
Gracias AngelGris por tu aporte, aunque con un "poco" de retraso.  :D ;-)
Por cierto ahora que se un poquito mas de C, voy a ver si acabo este proyectito.

Saludos.