Go Down

Topic: Reset da software (Read 8 times) previous topic - next topic

andrea80


andrea80


Ramiuss

#17
Apr 16, 2010, 09:48 am Last Edit: Apr 16, 2010, 10:25 am by Ramiuss Reason: 1
Salve a tutti.
Sono nuovo del forum, di cui saluti tutti i membri.
Senza aprire una nuovo topic, ho acquistato un Arduino 2009 con lo scopo di realizzare la programmazione automatica della mia macchina del pane.
Il progetto è a buon punto, direi quasi terminato. Funziona tutto a meno di un problemino per il quale chiederei un piccolo aiuto. Devo resettare lo Sketch con un comando specifico.
Per resettare uso, come suggerito dal grande Massimo :
#include <avr/io.h>
#include <avr/wdt.h>
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

mentre nel punto dove voglio resettare ho scritto:
Reset_AVR();


Quando viene eseguito il comando "Reset_AVR();" la scheda entra in loop, il led lampeggia in continuazione e non prende alcun tipo di input, la seriale è bloccata e così pure lo Sketch.
Qualche idea/suggerimento?
Ringrazio in anticipo e approfitto per fare i complimenti a questo utilissimo forum.

uwefed

Ciao Ramiuss
Spiegami perché devi resettare l'arduino.
Ciao Uwe

Ramiuss

Ciao.
In effetti sarebbe solo un modo per ripristinare "comodamente" tutto lo sketch con un solo comando, invece di farlo manualmente, compresi gli output e i loro stati (led).
La cosa è risolvibile via software, ma avendo visto quella routine proposta da Banzi, semplice semplice, la volevo usare solo per comodità.

garinus

c'è un post dove era spiegato bene

non che hai messo quel comando senza un if prima?
in quel caso appena parte fa il setup quindi eseguendo il loop si imbatte nel comando si resetta e ricomincia all'infinito

in tal caso riprogrammalo e se non riesci prova tenedo premuto reset manualmente

e  mettere un pulsante collegato in parallelo a quello dellla scheda?

uwefed

#21
Apr 17, 2010, 05:21 pm Last Edit: Apr 17, 2010, 05:22 pm by uwefed Reason: 1
ciao Ramiuss
Durante il Reset del microprocessore non hai controllo dei stati delle uscite.
Io preferirei rimettere le variabili e le uscite/entrate ai valori iniziali. Cosí i stati sono in ogni momento definiti.
Se non vuoi scrivere tutte le cose 2 volte perché devi definire gli stati e le variabili nella funzione setup() e poi una seconda volta nel loop(), perché non li metti in una funzione da te definita e la chiami all'inizo dalla funzione setup() e dopo l' esecuzione del codice quando vuoi resettare un altra volta?

nel senso:
Code: [Select]
setup()
{
inizalizza();
}

loop()
{
codice.....
if (condizione di fine) inizializza();
}

inizializza()
{
carica variabili con valore iniziale;
mettere PIN su stato iniziale;
}
}


Ciao Uwe

t30

io uso questo sistema....
non ho ben capito in quale dei 4 modi rientra :)

Code: [Select]
void(* resetFunc) (void) = 0; //declare reset function @ address 0
resetFunc();  //call reset


trovato in giro per il forum tempo fa...


Ramiuss

Grazie a tutti, ho risolto via sw.

ottaviane

Ciao.

Ci sono 4 metodi:

1. Chiudere e riaprire la porta seriale , questo fa resettare il processore. e' la tecnica che usiamo per caricare i programmi sull'arduino quando premi "Upload to IO Board"...............


Ciao,
interessante questo metodo.
Giusto per approfondire le nostre conoscenze potresti fare un esempio?
Come si fa a chiudere e riaprire la porta seriale?
ciao e grazie.

Go Up