Autor Tema: Cómo trabajan juntos el SLEEP y WDT ???????  (Leído 1705 veces)

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

Desconectado Automata78

  • PIC12
  • **
  • Mensajes: 61
Cómo trabajan juntos el SLEEP y WDT ???????
« en: 11 de Abril de 2008, 10:21:39 »
  Hola a todos !... les cuento que estoy desarrollando un dipositivo portable ( alimentado con pilas ) que debe incrementar un contador por cada interrupcion externa en el PIN B_0 ( 16F628 ), en cuyo caso sale del modo SLEEP para atender esta interrupción (GIE = 1) y luego nuevamente lo mando a dormir   :)  . Dado que este dispositivo va estar funcionando durante mucho tiempo sin la supervisión de un operario, he decidido activar el WDT, lo que me permitirá, en el caso que pierda el hilo de ejecución se reinicie (cuestiones del mas allá  :shock: ) y seguir su normal funcionamiento. Hasta aquí todo muy claro ( por lo menos para mi  :D ).
  Ahora viene la pregunta del millón !!!.....que pasaría en el momento que se despierta PIC por una interrupción en RB0 y justo el WDT se desborda en el mismo ciclo de instrucción o el siguiente al wake-up  ??????
  U otra manera de verlo, si al principo del código que atiende la interrupción coloco un "clrwdt", esta instrucción alcanzá a borrar al wdt si este se desborda justo cuando despierta el PIC de manera tal que el flujo del programa vaya a parar la vector reset ?, existe una manera de evitar esto, ya que resetearía al micro antes de poder llegar a la rutina de interrupción donde se encuentra el "clrwdt" que debería ser lo principal.

  Les recuerdo que tengo habilitado el GIE, para que al despertar de una interrupción salte al vector 0x04.

  Espero haber sido claro.

  Muchísimas gracias por cualquier aporte ! .... nos leemos !

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Cómo trabajan juntos el SLEEP y WDT ???????
« Respuesta #1 en: 11 de Abril de 2008, 16:11:56 »
Que tal Automata78,

En realidad lograr que se cumpla la condicion que propones es muy dificil, esto es porque el WDT si lo pones en el prescalar maximo tendra un desborde de 2.3 segundos. Asi que no te preocupes por esa condicion. Lo que si debes considerar es que el WDT tambien despierta al micro de su estado SLEEP, y el codigo continua ejecutandose de forma normal , por lo que debes tomar las acciones necesarios.

Cuando el micro estaen modo SLEEP y se despierta por una interrupcion el PC se va al vector 0x04 para ejecutar la interrupcion, pero al regresar de la interrupcion el PC ahora tiene el valor PC+1. Es fuertemente recomendable que despues de un SLEEP coloques un NOP.

Saludos.

Elreypic.