TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: berlanga en 26 de Agosto de 2010, 15:20:58

Título: uso de RESTART_CAUSE()
Publicado por: berlanga en 26 de Agosto de 2010, 15:20:58
muy buenas a todos. primero presentarme ya que estoy recién registrado, aunque me haya estado metiendo por aqui desde hace un par de semanas. Primero decir que soy nuevo con ccs aunque en assembler llevaba programando varios años. Me dió la cosa de hacerlo en c por eso de aprender y aquí estoy... preguntando... XDD

en estos devaneos y visto que hay una instrucción que devuelve el motivo del reset me pareció útil el ver cómo funcionaba, a mano solo tengo un 16F84. al hacer un pequeño programita y llevarlo a proteus funciona perfecto. si el reset es por alimentacion me enciende un led, y si es por un pulso bajo en MCLR me enciende otro.

el problema viene al llevarlo al PIC, que me detecta ambos casos como si fueran un pulso bajo por MCLR...

si alguien fuera tan amable de explicarme eso (decir que he mirado el data y no le veo el fallo, ya no se si es que estoy obcecado o es que soy un inutil.. XD)

os pongo un ejemplo

Código: [Seleccionar]
void main ()
{
     set_tris_b(0x00);

     int reinicio=0;
     reinicio = restart_cause();

     if(reinicio == NORMAL_POWER_UP){
          output_high(pin_b0);
     }
     else if (reinicio == MCLR_FROM_RUN){
          output_high(pin_b1);
     }

}


y extracto de la libreria del 16f84

Código: [Seleccionar]
////////////////////////////////////////////////////////////////// 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 25    
#define BROWNOUT_RESTART 26  

antes de nada muchas gracias por la ayuda que me podáis prestar. y decir que sois la leche... este foro me ha ayudado muchísimo a la hora de empezar y aclarar dudas.
Título: Re: uso de RESTART_CAUSE()
Publicado por: MLO__ en 27 de Agosto de 2010, 09:03:32
Hola.

Una pregunta: Como hiciste para quitar la alimentación del PIC en el ISIS?

Saludos
Título: Re: uso de RESTART_CAUSE()
Publicado por: MGLSOFT en 27 de Agosto de 2010, 10:52:11
Le pones una tecla entre el pin y la alimentacion...
Antes debes entrar en las propiedades del pic y activar las casillas de mostrar todos los pines.
Título: Re: uso de RESTART_CAUSE()
Publicado por: MLO__ en 27 de Agosto de 2010, 15:43:10
Antes debes entrar en las propiedades del pic y activar las casillas de mostrar todos los pines.

Gracias  ;-)
Título: Re: uso de RESTART_CAUSE()
Publicado por: berlanga en 28 de Agosto de 2010, 15:38:19
Hola.

Una pregunta: Como hiciste para quitar la alimentación del PIC en el ISIS?

Saludos

la verdad que no pensé en eso. lo hago directamente al arrancar la simulación. y lo hace bien. la funcion restart cause te devuelve el NORMAL_POWER_UP y cuando lo haces apretando un pulsador en reset te devuelve el MCLR_FROM_RUN.

el problema viene al ir al pic, que toma todos como un MCLR_FROM_RUN ya sea quitandole la alimentación o haciendole un reset...