Go Down

Topic: Reset desde el programa (Read 6 times) previous topic - next topic

complubot

Sea con un filtro RC, sea con un monoestable, el tiempo mínimo que debemos mantaner a nivel bajo el Reset (según el fabricante) son 2.5us (microsegundos). Si conectamos directamente una salida digital a la pata de reset el pulso es mucho más corto y aunque puede funcionar, nadie nos garantiza que sea de una forma estable.
Centro de Robótica Educativa
www.complubot.com

Jose Francisco

En algún sitio leí esto:

Quote

Yo lo reseteo con esto.
void(* resetFunc) (void) = 0; // esta es la funcion
resetFunc();  // la llamo con esto


Si funciona me lo decís, que yo no lo he probado.

Un saludo.

Igor R

#7
Feb 06, 2011, 12:17 pm Last Edit: Feb 06, 2011, 12:44 pm by Igor R Reason: 1
Hola,

Puedes hacer un reset software usando ensamblador ( asm("jmp 0x0000"); ). Ésto salta tu programa a la zona de memoria "reset vector".
Es similar a lo que ha puesto Jose Francisco, que en su caso es usando un puntero a funciones y que esta apuntando a reset vector (0x0).

Pongo un ejemplo:

Code: [Select]

unsigned int tstart;

void setup()
{
 Serial.begin(9600);
 Serial.println("EMPEZANDO....");
 tstart=millis();
}



void loop()
{

   if ( (millis()-tstart)>1000 )
   {
     Serial.println("Un segundo! Reseteando");  
     asm("jmp 0x0000");
   }

}


La salida es:

EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....
Un segundo! Reseteando
EMPEZANDO....


Para hacerlo más "user friendly" puedes declarar al principio del código:
#define RESTART asm("jmp 0x0000")
y ahora puede usar el macro RESTART; en tu código.

Ésto no es un "power cycle" del micro, pero me imagino que te hará un "apaño" para lo que quieras hacer. Me refiero, que cuando reseteas hardware, todas las entradas/salidas vuelves a sus valores iniciales y luego el programa empieza desde dicha  dirección (Reset Vector). Con ésta instrucción lo que haces es saltar por software otra vez a dicha dirección, pero no pasa por el estado en que todas las entradas i/o del micro pasan por estado inicial del micro.

Saludos!!


Igor R.

complubot

Quote
Con ésta instrucción lo que haces es saltar por software otra vez a dicha dirección, pero no pasa por el estado en que todas las entradas i/o del micro pasan por estado inicial del micro.


Claro Igor, este es justo el problema, lo que propones reinicia el programa pero no hace un reset como tal. El peligro es que hay gente que piensa que si hace un reset como tal...
Centro de Robótica Educativa
www.complubot.com

Igor R

Sip, pero como tampoco se para que lo necesita, yo pongo la opcion con pros y contras...


;)

Go Up