reset arduino via software con un pizzico di hardware.

ciao a tutti.

Un progetto personale mi ha spinto a cercare in rete un modo per resettare arduino o un micro controller che andrò a utilizzare in via definitiva la possibilità questo necessiti di un reset nel caso che questo non sia raggiungibile per premere il tasto indicato.

In realtà ci sarebbe una funzione dormiente, quindi non attiva chiamata "Watchdog" ma non tutte le versioni arduino le supportano.

La mia per esempio, un arduino uno compatibile non la supporta e visto che il progetto definitivo riguarda l'attiny 85 mi sono posto il problema di come effettuare un reset hardware come se fossi presente fisicamente e premere il tasto qual'ora questo sia necessario.

La prima cosa da fare, vale per ogni controllore, e comprendere come questo effettui il reset.

Nel caso di arduino uno e le sue varianti economiche mi sono preso la briga di vedere cosa succede con un multimetro quando questo e in stato normale,quando viene premuto il tasto e cosa accade quando alle porte in/out analogiche e digitali quanto si effetua il reset.

Monitorando sul piedino di reset post sulla board ho potuto constatare che questo e in stato logico alto (+5v) ma non solo, lo stesso pin reset e collegato al piccolo interrutore saldato sulla board.

Se premiamo il tasto reset questo si riavvia, ma come? sempliceissimo, l'altro capo e a massa o negativo.

Quando arduino o il micro controller come l'attiny 85 vengono resettati portano allo stato logico basso (0v) tutte le porte quindi perchè non sfruttare una porta logica attivano lo stato logico alto verso massa?.

Il problema però e che il pin reset ha uno stato logico alto quindi una semplice soluzione e far fare il lavoro sporco via hardware ad un transistor NPN.

Le correnti in gioco sono di circa 0,0015ma (1,5ma) circa quindi posso assicurare per chi e meno pratico che il collegamento e totalemtne sicuro e per chi e pratico di elettronica e film già visto.

Sostanzialmente come da schema non sto facendo altro che utilizzare il Q1 come interrutore e portare in saturazione a massa
dal collettore verso l'emettitore il Q1 quando una delle porte di arduino di nostra scelta porta in stato logico alto (+5v) alla base.

In questo modo la tensione da collettore ed emettitore viene passata a massa ed ecco che arduino si resetta.

Come potete vedere sul collettore Naturalmente ho collegato il pin reset di arduino che come spiegato e in uno stato logico alto
(+5v).

Non ho fatto altro che creare una sorta di interruttore digitale, comandato via software ma con il pin reset che quando passa a
condurre verso massa il controller si riavvia.

Lo sketch non necessita di accorgimenti particolari perchè quando arduino si resetta porta, come già spiegato, tutte le porte digitali in/out e analogiche a 0v per il tempo necessario per riavviarsi.

La resistenza da 10k sulla base e precauzionale, anche se le correnti in gioco sono quasi inesistenti ho preferito proteggerla in
caso questo con il tempo dovesse andare in perdita non accadrà nulla.

Se dovesse mai capitare per difetto senza la resistenza questo applicherebbe tutta la corrente disponibile verso massa con il
rischio di danneggiare la porta o il microcontroller quindi consiglio di lascialra.

lo sketck di esempio e molto semplice non credo necessiti di commenti ulteriori.

void setup()

{
   pinMode (10,OUTPUT);// setto il pin 10 per l'uscita
   pinMode (11,INPUT);// setto il pin 11 per comandare il pulsante di esempio via software
  
  
}
void loop()
{
if (digitalRead(11) == HIGH) {digitalWrite(10,HIGH);} //tasto premuto arduino si resetta in tutta sicurezza.

}

come potere notare il lavoro viene fatto sostanzialmente dal transitor.

Il pulsante serve solo da esempio per dimostrare che il controllo del reset e totalmente via software.

E vero che forse impiego un pin, ma ricordiamoci che con un semplice shift register possiamo moltiplicare le nostre porte in
raporto 1/8 per un 8 bit e così via quindi credo che sia sacrficabile.

ho allegato l'immagine di esempio dello schema.

per le mie esigenze e una soluzione adeguata ed evita listati di codice che ho visto spesso e la maggior parte non funzionare.

ciao a tutti :slight_smile:

Potresti evitare di lasciare svariate righe e righe vuote che altro non fanno che allungare inutilmente la pagina e rendere difficile la lettura ? Considera che molti oggi leggono da dispositivi mobili con schermi ridotti ...

Cortesemente edita il tuo post (in basso a destra del post, bottone More -> Modify) ed elimina tutti gli spazi vuoti di più righe, Grazie.

Guglielmo

P.S.: Sempre per leggibilità, post così lunghi forse sarebbe meglio farli suddivisi su più post ... ::slight_smile:

Ti consiglio di leggerti il cap. 8.2 del manuale ATMEL dell'ATryny85 in cui il reset è spiegato molto bene.

In particolare, l'impulso per il reset hardware deve durare almeno 3-4 μs.

Sfortunatamente, all'arrivo dell'impulso (fronte di discesa), le I/O del micro si pongono in tri-state mode, quindi il transistor pilotato da una delle uscite potrebbe non raggiungere il tempo minimo di cui sopra.

Un semplice condensatore risolve il problema.

Tralascio i commenti sul fatto se sia DAVVERO necessario fare questo, comunque:

PersonalProject:
In realtà ci sarebbe una funzione dormiente, quindi non attiva chiamata "Watchdog" ma non tutte le versioni arduino le supportano.

La mia per esempio, un arduino uno compatibile non la supporta [...]

In base a cosa dici questo? Il watchdog è una caratteristica del microcontrollore, sul 328 è decisamente supportato e anche sull'ATtiny85.

Vero che ci sono stati in passato problemi con il bootloader che la rendevano inutilizzabile, ma dovrebbero essere stati risolti da tempo.

PersonalProject:
Quando arduino o il micro controller come l'attiny 85 vengono resettati portano allo stato logico basso (0v) tutte le porte quindi perchè non sfruttare una porta logica attivano lo stato logico alto verso massa?.

Il reset non mette i pin a 0 logico, li setta in condizione di alta impedenza, ovvero nessuno stato logico visto che non sono degli out in questa condizione.
L'argomento autoreset è stato discusso una infinità di volte su questo forum, usare un pin per resettare gli Atmega non va bene perché il tempo in cui rimangono a 0 logico, o 1 logico se vuoi usare un transistor, è troppo breve prima che passano in stato di alta impedenza, il reset richiede qualche us di permanenza a 0 logico, i pin vanno in stato di alta impedenza in circa 1 us da quando porti reset a zero logico.
Il watchdog è presente su tutti gli AVR ed è sempre utilizzabile, il suo scopo è prevenire blocchi del processore dovuti a cause esterne, se il codice non gira il watchdog resetta il micro.
Non esiste nessun motivo valido per cui è necessario resettare il micro a mano, se questo è necessario o c'è un problema col software oppure c'è una causa esterna, solitamente problemi di alimentazione, in tutti e due i casi si risolve "l'emergenza" col watchdog, però nel caso di blocchi dovuti al software è necessario capire perché e correggere il codice.

buongiorno.
insomma ok la presnetazione, ok il code ora mi si contestano le troppe righe,inizia ad essere seccante.
per chi non avesse letto bene sono a conoscenza che il 328/328p ha la sua funzione infatti ho spiegato che le versioni economiche non la supportano!.
seconda cosa la teoria e una cosa e la pratica una'altra e siccome il mio discorso e a livello sia teorico che pratico prima di dire che non funziona cortesemente porvatelo!.
prima di parlare di datasheet, livello alto o basso e di cosa succede nel reset per cortesia, potreste almeno interpretarlo meglio??.....
in risposta ad astebeed non mi sono alzato ieri mattina e ho preso il primo transistor che mi e capitato.
quindi magari dando una occhiata ad un datasheet del micro controller forse mi sono cercato il transistor giusto che mi permettessa
di sfruttarlo come interrutore in corrispondenza ai tempi di reset del microcorntroller!.
http://datasheet.seekic.com/datasheet/PN2222_FAIRCHILD_[Fairchild_Semiconductor].html
altra cosa molto importante il reset hardware e una cosa, farlo via software con i comandi supportati e un'altra.
ricordo ancora una volta che alcune versioni compatibili ed economiche non hanno alcuna funzione interna riguardo a questo.
però siccome non e apprezzato e senza nemmeno provarlo dite che non funziona e mi sono preso il primo transistor che ho trovato
da incoscente quando ce lo davanti e funziona bene facciamo così,da questo momento mi limito a seguire.
per il moderate ho scritto il mio secondo ed ultimo post come volevi tu visto che sicuramente la prossima vota avrai qualcos'altro da
rimproverare.
Vedo che altri utenti usano gli spazi e non hai detto nulla.
in conclusione tornando al reset nel mio caso voglio avere la necessità di fare un reset HARDWARE cosa molto diversa da farlo via SOFTWARE quando questo supporta la funzione cosa che I MICRO CONTROLLER ECONOMICI ARDUINO NON ORIGINALI NON SUPPORTANO!.....
teoria e una cosa, la pratica e un'altra cosa, e io passo dalla teria alla pratica prima di dire che non funziona!
saluti!

PersonalProject:
in conclusione tornando al reset nel mio caso voglio avere la necessità di fare un reset HARDWARE cosa molto diversa da farlo via SOFTWARE quando questo supporta la funzione cosa che I MICRO CONTROLLER ECONOMICI ARDUINO NON ORIGINALI NON SUPPORTANO!.....

Il problema è che questo non è vero! Come te lo sei messo in testa? Economici o no, originali o no, tutti gli Arduino Uno/Nano/Mini E COMPATIBILI hanno lo stesso identico microcontrollore! Micro/Leonardo e Mega ne hanno di diversi, ma hanno comunque TUTTI un Watchdog funzionante che può essere usato per resettare la MCU via software. E questo è vero anche per gli ATtiny.

Dovrebbe bastare questo:

#include <avr/wdt.h>

void reset() {
  wdt_enable(WDTO_15MS);
  while (true)
    ;
}

PersonalProject:
ricordo ancora una volta che alcune versioni compatibili ed economiche non hanno alcuna funzione interna riguardo a questo.

Ma dove l'hai letta questa ?
Tutti, ripeto tutti, gli AVR utilizzati su Arduino hanno il watchdog, non c'entra nulla con la versione di Arduino o il suo prezzo, semmai questo è una questione di qualità della board, il watchdog è una funzione interna del micro non di Arduino.
Il datasheet di un componente è la bibbia, le sue Application Note sono i vangeli, distorcere a proprio uso e consumo quanto c'è scritto sopra è una cavolata immane perché non hai nessuna garanzia del corretto funzionamento del componente.

in conclusione tornando al reset nel mio caso voglio avere la necessità di fare un reset HARDWARE cosa molto diversa da farlo via SOFTWARE quando questo supporta la funzione cosa che I MICRO CONTROLLER ECONOMICI ARDUINO NON ORIGINALI NON SUPPORTANO!....

Cosa non ti è chiaro del fatto che il watchdog esegue un reset hardware ?
Cosa non ti è chiaro del fatto che tutti gli AVR hanno il watchdog ed è una funzione che non ha nulla a che vedere con Arduino e il suo costo ?

teoria e una cosa, la pratica e un'altra cosa, e io passo dalla teria alla pratica prima di dire che non funziona!
saluti!

La teoria e la pratica sono due facce della stessa medaglia, non possono esistere da sole, poi se uno vuole fare lo "smanettone della Domenica", ignorando la teoria, liberissimo di farlo, però poi non venite a lamentarvi quando le cose non funzionano come atteso.
Sopratutto non lamentatevi quando venite contraddetti e bacchettati quando raccontate cavolate, la gente ha il diritto di ricevere una corretta informazione tecnica.
Non è giusto far perdere tempo, ma anche denaro, a chi non è esperto perché segue i consigli di che ne sa meno di lui o, peggio, copiaincolla da qualche sito che contiene cavolate a sua volte copiaincollate da qualche "somaro" che l'elettronica la conosce solo perché l'ha studiata su youtube.

PersonalProject:
insomma ok la presnetazione, ok il code ora mi si contestano le troppe righe,inizia ad essere seccante.

Come mi sembra di averti ben spiegato, è una questione di rispetto verso molti utenti che NON si collegano da desktop, ma da dispositivi mobili.

E' inoltre un problema di leggibilità ... post così lunghi e mal formattati sono difficili da legge e da seguire.

Naturalmente NON è che sono cose che impone il "regolamento", ci mancherebbe ... sono solo da una forma di cortesia verso chi legge e dovrebbe aiutarti.

Poi ... vedi tu ... ::slight_smile:

Guglielmo

astrobeed:
Ma dove l'hai letta questa ?
Tutti, ripeto tutti, gli AVR utilizzati su Arduino hanno il watchdog, non c'entra nulla con la versione di Arduino o il suo prezzo, semmai questo è una questione di qualità della board, il watchdog è una funzione interna del micro non di Arduino.
Il datasheet di un componente è la bibbia, le sue Application Note sono i vangeli, distorcere a proprio uso e consumo quanto c'è scritto sopra è una cavolata immane perché non hai nessuna garanzia del corretto funzionamento del componente.

Cosa non ti è chiaro del fatto che il watchdog esegue un reset hardware ?
Cosa non ti è chiaro del fatto che tutti gli AVR hanno il watchdog ed è una funzione che non ha nulla a che vedere con Arduino e il suo costo ?

La teoria e la pratica sono due facce della stessa medaglia, non possono esistere da sole, poi se uno vuole fare lo "smanettone della Domenica", ignorando la teoria, liberissimo di farlo, però poi non venite a lamentarvi quando le cose non funzionano come atteso.
Sopratutto non lamentatevi quando venite contraddetti e bacchettati quando raccontate cavolate, la gente ha il diritto di ricevere una corretta informazione tecnica.
Non è giusto far perdere tempo, ma anche denaro, a chi non è esperto perché segue i consigli di che ne sa meno di lui o, peggio, copiaincolla da qualche sito che contiene cavolate a sua volte copiaincollate da qualche "somaro" che l'elettronica la conosce solo perché l'ha studiata su youtube.

certo, smanettone della domenica, non funziona, e sbagliato.

abbiamo il laureato!.....come al solito....cosa non ti e chiaro che su alcuni come il mio NON FUNZIONA!

cosa non e chiaro che in questo caso il reset no e lo stesso!!!

ho un atimega 328p e spesso via software tutte le porte non vengono resettate.

a giusto sicuramente da smanettone della domenica copiando da qualche altra parte oppure ho interpretato male il video su youtube

daltronde io sono lo smanettone della domenica, che ha preso qua e la e che ha copiato e che ha visto su youtube come si fa.

a dare retta a te e presentarti teorie funzionanti di progetti che ho realizzato e funzionano da oltre 15 non si potrebbe fare, e uno smanettamento della domenica ecc...

>PersonalProject: ... ho idea che tu non sappia chi è Astrobeed e quale è la sua esperienza e professionalità, altrimenti non risponderesti in questo modo ... ::slight_smile:

Comuque, essendo ormai divenuto questo solo un post di polemica e di battibecchi, onde evitare che la cosa degeneri ed io mi veda costretto poi a fare cose che non mi piace fare ...
... chiudo qui la discussione.

Grazie a tutti i partecipanti.

Guglielmo