Ma allora comprati un cellularino di quelli da 20 euri, ci metti dentro una SIM qualunque, poi fai un circuito collegato alla linea dell'altoparlantino. Quando sente arrivare il segnale, perché tu hai chiamato il numero, resetta il tutto per 1 secondo.
pablos71:
Pero' il discorso del reset via software è molto importante a me servirebbe parecchio, dovro' farlo usando un pin ed eventualmente un circuito timer RC, se necessario un secondo controllore o un combinatore gsm .... non posso fare 30 km per premere un reset o sentirmi dire qui non funziona piu' un caxxo ehehehehhe
la mia ethernet shield per partire dopo un assenza di tensione, un crash del software, o modifica dello sketch necessita sempre di 2 reset consecutivi altrimenti ciccia non c'e' verso di farla partire ormai sono 2 mesi che ci lavoro e ci ho fatto il callo.
Del resto i migliori impianti di automazione sono composti da una cpu master e una cpu slave identica di riserva
allora non hai letto
ma non è una polemica nei tuoi confronti o di chi ha progettato arduino, dico solo che in alcune applicazioni puo' essere importante e cmq implementato magari nelle versioni future semplificandone l'utilizzo senza essere scienziati informatici.
Ovvio che se compro un plc siemens con 8 digital input, 8 digital output, 4 analog input, con relativo software cavetterie ecc spendo 1600 euro+ iva e non si inchioda mai. Arduino mi da qualcosa in più con anche qualche incertezza in più ad un costo inferiore. Le altre certezze me le devo creare io
Lo hai aggiunto dopo, il trafiletto sulla Ethernet. Mi pare che il tuo post originale si fermasse a "non funziona piu' un caxxo ehehehehhe ".
Poi ho risposto ad altre cose e quando son tornato avevi fatto l'aggiunta, mi pare.
leo72:
Ma allora comprati un cellularino di quelli da 20 euri, ci metti dentro una SIM qualunque, poi fai un circuito collegato alla linea dell'altoparlantino. Quando sente arrivare il segnale, perché tu hai chiamato il numero, resetta il tutto per 1 secondo.
sono io troppo giovane ma antico?
comunque scusate ma il reset si scatena ad un change dello stato logico del pin di reset?
se si non si può fare che invece che dovere inviare uno stato HIGH non si debba inviare uno stato LOW così durante il reset se le porte vengono resettate rimangono LOW e il reset finisce?
pablos71:
ma non è una polemica nei tuoi confronti o di chi ha progettato arduino, dico solo che in alcune applicazioni puo' essere importante e cmq implementato magari nelle versioni future semplificandone l'utilizzi senza essere scienziati informatici.
Io non me la prendo mica. Stiamo parlando... di una cosa che non è mica mia
Cmq secondo il mio modesto punto di vista, un circuito di reset esterno implica l'uso di un qualcosa per gestirlo, non so quanto economico possa essere.
superlol:
comunque scusate ma il reset si scatena ad un change dello stato logico del pin di reset?
se si non si può fare che invece che dovere inviare uno stato HIGH non si debba inviare uno stato LOW così durante il reset se le porte vengono resettate rimangono LOW e il reset finisce?
Il reset si attiva quando viene presentato per più di 2,5 uS lo stato LOW sul relativo pin dell'Atmega328.
Durate del segnale inferiori a questo tempo non garantisco il reset (stando al datasheet).
Al reset i pin dell'Arduino vengono posti in alta impedenza, ecco perché l'autoreset tramite piedino dell'Atmega su piedino RST sempre dell'Atmega non funziona.
ma in attesa di qualche release nuova, un piccolo tiny non potrebbe farlo e costare poco?
pablos71:
ma in attesa di qualche release nuova, un piccolo tiny non potrebbe farlo e costare poco?
Senz'altro!
Se prendi un Attiny25 sei a posto.
Però il Tiny deve capire QUANDO fare il reset.
già deve capire quando ..... bisogna collegarlo in modo che riceva l'ordine quando arduino sta bene e fare in modo che il tiny si accorga che Arduino non sta tanto bene il battito cardiaco è andato
Premetto che non ho seguito tutta la discussione, ma per fare il reset con u piedino, per risolvere il problema del tempo che il reset deve essere attivo, perché non utilizzare un multivibratore monostabile?
Sì, difatti era la soluz. proposta da superlol.
Cmq un NE555 ha bisogno di circuiteria accessoria, un Tiny in standalone no.
Puo' sembrare inutile o una stupidaggine che qualcosa debba verificare se il controllore si inchioda. Ti viene spontaneo dire, se si inchioda è perchè ha sbagliato qualcosa nel software, secondo me non è sempre così.
Pensa, se un sistema nel suo complesso fosse in grado di capire se qualcosa è andato storto e fa ripartire tutto, nel mio programma quando Arduino riparte scrive nel log che c'e' stato un restart, tu potresti vederlo dal log se effettivamente c'e' stato un autorestart ed eventualmente risolvere il problema in un secodo tempo, ma il tutto sarebbe in grado di stare inpiedi senza il tuo intervento. Ovviamente il restart resetterebbe tutti gli stati, ma anche qui nel mio piccolo software tutti gli output vengono salvati e riletti al riavvio per riportare tutto come era prima del reset.
Anche una modifica dei setup richiedono un riavvio che sia remoto o locale, ecco perchè ritengo che un autoreset sia importante
ciao
Se devi fare solo il log di un reset, non è un grosso problema. Basta che nel tuo sketch, in setup(), ci sia una registrazione dell'avvio. Quindi, ogni votla che lo sketch parte salva data e ora. E' un riavvio, quindi abbiamo risolto il problema che volevi salvate tutte le volte che la scheda veniva resettata.
Adesso veniamo al "come". Un circuito completamente esterno è da scartare, perché deve essere attivato manualmente (da un segnale via telefono o dal micro stesso) per cui non va bene: non potrebbe capire cosa succede all'interno della scheda.
Se pensi di usare un reset software, devi esser certo che il tuo codice non si pianti mai, altrimenti non potrebbe funzionare. Dicendo che se il tuo codice si infila in un loop infinito, questo potrebbe dipendere da tante cose (non so cosa fa e come lo fa, il tuo sketch).
Resta la soluzione del watchdog, magari impostato per un tempo molto lungo, il più possibile lungo (non per tempi dell'ordine dei ms). E qui forse potresti trovare la soluzione. Imposti il watchdog su questo tempo e se lo sketch si infila in un vicolo cieco, viene resettato.
A questo punto, non esiste un reset software per il wiznet?
Non conosco i Wiznet, non so come funzionano.
leo72:
Adesso veniamo al "come". Un circuito completamente esterno è da scartare, perché deve essere attivato manualmente (da un segnale via telefono o dal micro stesso) per cui non va bene: non potrebbe capire cosa succede all'interno della scheda.
State facendo un sacco di confusione, prima di tutto se il micro va in crash per motivi software oppure a causa di disturbi elettrici, ed è questa la causa più frequente, non c'è modo di resettarlo da software visto che è stato perso il controllo, il reset deve essere da hardware tramite circuiteria indipendente, ovvero il watchdog.
Se il micro non ha un suo watchdog interno esistono appositi ic esterni che svolgono questa funzione, in pratica sono dei timer programmabili che se non ricevono un impulso su un loro pin entro il tempo limite attivano il reset del micro agendo direttamente sul relativo pin, ovviamente questa soluzione prevede l'utilizzo di un pin del micro sul quale il software deve generare l'impulso di ripristino entro il tempo limite.
Il reset da software si usa solamente se è necessario far partire del software ausiliario normalmente non eseguito, p.e. un bootloader che voglio attivare a richiesta dal software sul pc senza dover resettare il micro a mano, in questo caso il jump alla locazione zero è il modo classico di procedere per ottenere il reset software se non è presente la specifica istruzione assembly RESET che effettua un vero e proprio reset hardware.
Per quanto riguarda l'eventuale log degli errori che richiedono un reset non è possibile farlo a software per il semplice motivo che nel momento in cui il micro si pianta non puoi eseguire nessuna operazione prestabilita visto che o si è bloccato nel vero senso della parola oppure esegue operazioni a casaccio, alcuni micro hanno un apposito registro che riporta gli eventuali stati che hanno causato il reset o una sospensione temporanea dell'esecuzione come nel caso del brown out, registro che è gestito in hardware e viene resettato solo dalla condizione POR (Power On Reset) o manualmente da software.
Ma è quello che ho detto io nei precedenti interventi
Se il codice è piantato, un reset software (il classico "jump") non funziona perché il flusso del programma non arriverebbe mai a richiamare la funzione.
Se il micro è controllato esternamente da un altro circuito che "veglia" mediante la conta di un impulso su un pin, anche in questo caso il segnale andrebbe dato via software, e come lo fai: con un interrupt il segnale arriverebbe sempre ma non è detto che sia tutto il micro piantato. La CPU potrebbe essere in un loop infinito dello sketch ma l'interrupt dovrebbe comunque proseguire, giusto?
A 'sto punto il watchdog mi pare l'unica soluzione percorribile.
Il log non è invece difficile. Basta metterlo nel setup(), così da registrare tutte le volte che il micro viene riavviato. Se poi vogliamo fare le cose fatte bene, esiste un registro che tiene conto di quale causa ha scatenato il reset, se esterno o interno (watchdog). All'avvio basta verificare che non sia un reset esterno (pulsantino) e loggare la data e l'ora del riavvio.
ma fare un salto a 0x00 non equivale a mantenere la memoria ram?
in tal caso si può fare un "backup" della ram da salvare ai crash e vedere se qualcosa non torna..
superlol:
ma fare un salto a 0x00 non equivale a mantenere la memoria ram?
In teoria sì.
in tal caso si può fare un "backup" della ram da salvare ai crash e vedere se qualcosa non torna..
Servirebbe un dispositivo esterno per leggerla e salvarla in un file senza alterarla.
Che io sappia non ci sono istruzioni di Arduino che permettono (come nel caso della EEPROM interna) di leggere/scrivere direttamente nella SRAM: devi usare l'assembly direttamente. Però si pone un problema: nella SRAM vengono creati l'heap e lo stack, oltre alle variabili dichiarate dall'utente. Al riavvio il suo contenuto verrebbe alterato. Servirebbe un circuito esterno che:
- venga informato del reset sull'Arduino o Atmega328
- blocchi il micro tenendo un segnale LOW sul pin di reset
- avvii un sistema di comunicazione ISP verso il micro per dare un dump della SRAM in un file
- sblocchi il micro rilasciando il segnale sul pin di reset
Lo vedo complesso