TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: simon365 en 12 de Septiembre de 2008, 12:55:19
-
Hola a todos:
Como puedo usar las funciones de lectura de reset en un 12f508?Estoy aplicando la sleep(), y quiero atender la interrupcion por cambio en los pin, luego de un reset por sleep.Pero no logro aplicar las constantes en el .h.
Agradeceria la ayuda, ya q termine un proyecto y deseo cambiar a este micro.
-
que tal simon265,
No logro entender bien tu duda con eso de leer el Reset. Te refieres a utilizar el pin del MCLR como un pin de entrada ya que ahi estas conectando un pulsador?
Si es asi, lo que tienes que hacer es que al momento de programar el micro debes indicarle en lo fusibles que MCLR es interno, es decir habilitar ese pin como puerto de entrada.
Seria bueno que pudieras explicarte un poquito mejor y si te es posible tambien colocar el codigo.
Saludos.
Elreypic.
-
Hola.
O sera a caso que quieres usar la funcion RESTART_CAUSE() ????
Saludos
-
Lo q trato de hacer en CCS es por medio de pulsadores leer las interrupciones previamente habilitadas en el OPTION bit 7 y sacarlo del sleep, al f508.Leyendo el .h busque la funcion q podria leer como en el caso del F84 #RB pero no logro dar en la tecla.
////////////////////////////////////////////////////////////////// Control
// Control Functions: RESET_CPU(), SLEEP(), RESTART_CAUSE()
// Constants returned from RESTART_CAUSE() are:
#define WDT_FROM_SLEEP 3
#define WDT_TIMEOUT 11
#define MCLR_FROM_SLEEP 19
#define MCLR_FROM_RUN 27
#define NORMAL_POWER_UP 24
#define BROWNOUT_RESTART 26
/ Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above)
// RESTART_WDT()
//
#define WDT_18MS 0x8000
#define WDT_36MS 9
#define WDT_72MS 10
#define WDT_144MS 11
#define WDT_288MS 12
#define WDT_576MS 13
#define WDT_1152MS 14
#define WDT_2304MS 15
#define DISABLE_PULLUPS 0x40 // for 508 and 509 only
#define DISABLE_WAKEUP_ON_CHANGE 0x80 // for 508 and 509 only
#ifndef PIN_CHANGE_FROM_SLEEP
#define PIN_CHANGE_FROM_SLEEP 0x90 // for 508 and 509
Como se utilizan estas funciones y constantes ? Para aplicarlas a otros programas.
En el programa con el F84 hago sleep y espero una interrup. por el pin 4-7 del ptob.Cuando ocurre leo por medio de la constante #RB, y continuo la rutina hasta volver al prog ppal.
Espero q me entiendan claro.
MLO_ podría ser la funcion RESTART_CAUSE.
-
Hola.
Las constantes:
#define WDT_TIMEOUT 7
#define MCLR_FROM_SLEEP 11
#define MCLR_FROM_RUN 15
#define NORMAL_POWER_UP 12
#define BROWNOUT_RESTART 14
#define WDT_FROM_SLEEP 3
#define RESET_INSTRUCTION 0
se usan con la funcion de control RESTART_CAUSE(), de tal manera que si lo colocas al inico del programa puedes saber por cual de las situaciones se reseteo el pic, por ejemplo:
void main (void)
{
switch ( restart_cause() ) {
case WDT_FROM_SLEEP: ..// codigo a realizar si el reset fue por esta causa
case WDT_TIMEOUT: .. // codigo a realizar si el reset fue por esta causa
....
}
}
Creo que el micro sale del modo sleep al activarse el flagg de la interrupcion.
Saludos
-
gracias MLO_, lo habia hecho pero lo colocaba luego de la sleep por eso no me andaba.Lo estoy haciendo correr luego te cuento.
-
Hoy termine!!!!!!! Luego de luchar con el viejo 12C508JW pude pasar el codigo del f84 a este.La aplicacion de la lectura de la causa del reset anda de 10.En lo ultimo q tuve problema es q para activar en alto una salida debi cambiar de bit_set a output_high sino no salia el dato.Lo dejo como ayuda si a alguien le pasa, use el standard_io(B) para definir el puerto.
Gracias y saludos a todos.