Reset da software

di fatto penso che il pulsane agisca su quel pin
arduino ha un ingrasso denominato reset che ha stessa funzione del pulsante
aprendo(nel senso collegando i cavi) la seriale mi pare che si resetti...
non so se ti può essere utile...

un "ottimo" metodo per resettare arduino quando ci sono talmente tanti fili che non si riesce a premere il pulsante è cortocircuitare 5V con GND.

ovviamente scherzo non usatelo!!!!!!!!

p.s. è vero che esiste il pin di reset sull'Atmel ma questo è già collegato con il pulsante e non c'è modo di "alzarlo" via software.
Un modo per aggirare sarebbe tirare un filo dalla valle del pulsante (se si capisse il senso) sino ad un pin digitale. Fatto questo capire se il pin RESET vuole High o vuole Low per resettare. Ma verosimilmente credo proprio che voglia High.

p.p.s non c'è altro modo che saldare su arduino per fare cio

ma se di fianco a 3v3 c'è il collegamento reset.....

ps bisogna metterlo a gnd per resettare

azzo vero!
c'è già il pin RESET affianco ai 3.3 V
e confermo anche che per resettare abbia bisogno di un valore BASSO

A low level on this pin for longer than the minimum pulse length will generate a Reset, even if the clock is not running

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"

  2. Collegare un piedino digitale al piedino "Reset" sulla scheda ma la Atmel non garantisce che funzioni (la spiegazione è abbastanza tecnica e rasenta la masturbazione mentale)

  3. forzare il processore a fare "goto $00" però questo lascia la ram, i timer e gli interrupt sporchi... cioè non è garantito che il programma riparta bene.

  4. Raccomandato da Atmel. Attivare il "watchdog timer" e aspettare che si resetti.
    Il "cane da guardia" è un timer che serve a resettare un processore che si sia incastrato per un problema software. Il timer, una volta attivato, resetta il processore a meno che non venga fatto ripartire... perciò in un'applicazione che deve mantenere un certo livello di affidabilità, il programma fa ripartire il timer regolarmente ... dovesse mai incepparsi allora dopo pochi millisecondi il processore si resetta. Aggiungi questo all'inizio tuo sketch Arduino

 #include <avr/io.h>
#include <avr/wdt.h>

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

mentre nel punto dove vuoi resettare scrivi:

Reset_AVR();

Nota: Apprezzo molto l'entusiasmo con cui molti si danno da fare per rispondere, senza di voi Arduino non esisterebbe. Però certe volte non sparate le risposte a caso perchè se chi ha fatto la domanda è un principiante poi si confonde e non capisce più :slight_smile: :slight_smile: :slight_smile:

1 Like

caro Banzi non credo di aver sparato a caso. >:(
ho soltanto descritto l'opzione 2. Si vede che d'ora in poi aspetteremo sempre le tue risposte. Tutti fanno domande e tu rispondi! Mi sembra un bel forum.

Ora voglio sapere il motivo per cui non dovrebbe funzionare con il piedino Reset.

Mi fa piacere di aver scatenato una discussione con il mio post!Ora provo e vi faccio sapere!!

Sono in debito comunque con tutti voi.!

Andrea

Provando le istruzioni suggerite sullo sketch ottengo le seguenti:

avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

quindi con la seriale si resetta totalmente come se usassi il tasto?
libera anche la ram ecc?

andrea80: Quell'errore non è dovuto al codice.. è un errore durante il caricamento. prova a verificare il modello di scheda selezionato nel software etc etc

garinus: si... perche il pin DTR della porta seriale cambia stato quando la porta viene aperta dal lato computer e questo è collegato tramite un condensatore da 100nf al piedino di reset. Questo fa in modo che il processore si resetti solo quando cambia stato.

uccio: era un discorso generale , ho anche messo le faccine... perche sei cosi permaloso?

Secondo la Atmel il metodo del pin che resetta il processore può non funzionare perchè appena il processo di reset inizia tutti i pin vengono messi in stato "tristate" perciò potrebbero non rimanere bassi per il tempo necessario da provocare un reset completo.

Massimo,
una domanda:

quanto da te suggerito serve per resettare da software Arduino utilizzando il WD.

Il comando Reset resetta il processore oppure re-inizializza il contatore del WD?

Perche' io vorrei utilizzare il WD per controllare il corretto funzionamento di un mio programma, visto ceh dovra' andare a lavorare su una montagna difficilmente raggiungibile.

Grazie e complimenti.

Giuseppe

Massimo, ogni volta che inserisco le istruzioni che mi hai suggerito succede un pandemonio. Ogni volta che carico qualsiasi sketch la scheda inizia la procedura di reset e mi vengono dati gli errori che ti ho segnalato prima....!

Davvero non capisco..

Che fare?!

UP

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.

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

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

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?

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:

setup()
{
inizalizza();
}

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

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

Ciao Uwe