Pages: [1] 2   Go Down
Author Topic: Reset desde el programa  (Read 5739 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Existe alguna manera de hacer un reset desde el programa, ahora mismo lo tengo hecho usando una salida conectada a un transistor, cuando quiero hacer un reset activo la salida y listo.

Saludos.

« Last Edit: April 29, 2012, 09:57:39 pm by coleoptero » Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

ALCALA DE HENARES
Offline Offline
Sr. Member
****
Karma: 13
Posts: 279
Centro de Robótica Educativa
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Por desgracia yo no conozco ninguna forma 100% estable para hacer un reset por software. La idea que tu planteas de usar una salida digital con un transistor en colector abierto conectado a la linea de reset es "peligrosa" y no es muy aconsejable.

El motivo de esto es que para garantizar un reset correcto la entrada de reset tiene que permanecer a nivel bajo un cierto tiempo. Si esto lo haces con una propia salida del microcontrolador y un transistor, en cuanto comienza el proceso de reset la salida se pone en alta impedancia y levanta el reset sin completar el tiempo minimo de seguridad.

Una solicion es poner un monoestable (con un 555 o similar)  que se dispare por flanco a una salida digital y de esta forma poder generar un pulso de reset que respete el tiempo minimo.

PD. Disculpar pero por alguna estraña razon se me ha desconfigurado el teclado y no he conseguido poner ningun acento  smiley-mad
Logged

Centro de Robótica Educativa
www.complubot.com

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, gracias por la info
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Dallas, TX
Offline Offline
Jr. Member
**
Karma: 5
Posts: 91
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

De hecho la idea de transistor no es mala idea, (si respetas las leyes de Ohm). Yo utilizaria un capacitor para resolver el problema de tiempo.

Utilizar un 555 no es mala idea para nada tampoco, y tienes que tener las mismas precauciones como el ejemplo anterior.
« Last Edit: February 02, 2011, 09:16:38 am by Staedtler » Logged

--------------------------------------
Eight bytes walk into a bar. The bartender asks, 'Can I get you anything?'
- 'Yeah', reply the bytes

0
Offline Offline
Full Member
***
Karma: 4
Posts: 102
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo mismo iba a comentar yo, el tiempo de reset se puede alargar un poco con un condensador electrolítico., y no hace falta que sea muy grande, dependerá del tiempo que quiera hacerse reset claro.
Logged

ALCALA DE HENARES
Offline Offline
Sr. Member
****
Karma: 13
Posts: 279
Centro de Robótica Educativa
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Centro de Robótica Educativa
www.complubot.com

0
Offline Offline
Full Member
***
Karma: 0
Posts: 200
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
« Last Edit: February 06, 2011, 06:44:02 am by Igor R » Logged


ALCALA DE HENARES
Offline Offline
Sr. Member
****
Karma: 13
Posts: 279
Centro de Robótica Educativa
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Centro de Robótica Educativa
www.complubot.com

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


smiley-wink
Logged


ALCALA DE HENARES
Offline Offline
Sr. Member
****
Karma: 13
Posts: 279
Centro de Robótica Educativa
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Nada, nada, no tienes perdón  smiley-grin

Sinceramente siento curiosidad por saber la utilidad de un "reset" por software. Si es para tratar una escepción, el programa debería estar preparado para ello. Si es para solucionar un problema, el POR (Power On Reset) o el watchdog deberían ser suficiente.
Logged

Centro de Robótica Educativa
www.complubot.com

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Y para que te puede interesar un reset hardware??

Por cierto, el watchdog funciona con el bootloader que viene con Arduino??? Tenia entendido que no....
« Last Edit: February 07, 2011, 05:21:18 am by Igor R » Logged


ALCALA DE HENARES
Offline Offline
Sr. Member
****
Karma: 13
Posts: 279
Centro de Robótica Educativa
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Y para que te puede interesar un reset hardware??

No, lo que quería decir es que no entiendo la necesidad de hacer un reset de ese estilo desde el propio programa.

Quote
el watchdog funciona con el bootloader que viene con Arduino???

Pues no lo sé ya que casi siempre usamos la programación por ISP y la única prueba que he hecho del Watchdog si que funcionó.
Logged

Centro de Robótica Educativa
www.complubot.com

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si no me equivoco, hay que usar el bootloader de Adafruit si quieres usar watchdog. Pero no se si con la version UNO lo han solucionado.
Lo de hacer el reset, seguro que flico nos puede explicar sus intenciones.... smiley-wink

Logged


0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Solamente quiero inicializar las salidas al estado original y arrancar desde el setup. Con las dos soluciones me funciona OK.
Gracias a los dos.
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Pages: [1] 2   Go Up
Jump to: