Newsgroup: it.hobby.elettronica.digitale
Titolo: reset software su PIC

Ciao a tutti,
è possibile resettare un PIC da codice? Ho bisogno che se si verifca una 
certa situazione possa automaticamente effettuare un reset.
L'alternativa grezza è usare una linea di uscita per attivare un 
monostabile (forse anche solo RC) che a sua volta causi il reset... ma 
da codice risulta più elegante... :)
Marco / iw2nzm


jump all'indirizzo 0 ? non basta ?
allora dovrebbe essere sufficiente collegare una uscita al MCLR nel 
momento in cui la piloti bassa il micro si resetta e poi ci pensa lui 
stesso a riportare il pin nello stato di input e quindi isolarlo dal 
reset ( l'RC e' quello standard da usarsi per il reset iniziale
puoi usare watchdog se il micro ne e' dotato

 cosa???
Grazie a entrambi!
Oggi pomeriggio provo. Naturalmente dovrebbe funzionare anche in codice 
C usando l'operatore asm. Qualcosa del tipo
...
asm
{
    jmp 0
}
proverň e faccio sapere :)
Grazie,
Marco / iw2nzm

 Marco / iw2nzm
Ok, se ti puo' interessare, funziona, ma il restart non e' come con il MCLR.
Non so esserti preciso, ma nonostante avvenga il nuovo inizio del programma 
dalla locazione 0x00, la reinizializzazione del micro non e' totale e questa 
cosa e' meglio prenderla in considerazione.
ciao
Angelo

 Angelo
Grazie dell'informazione. A me interesserebbe il reset completo, come 
all'accensione, con inizializzazione di tutti i registri. Se serve 
unicamente a far ripartire il programma dall'inizio del main, non mi 
risulta utile.
Ad ogni modo proverò e vedo se può andar bene.
Ciao,
Marco / iw2nzm

 ha scritto nel messaggio 
news:R1GLe.16383$F23.1...@twister2.libero.it...


 ha scritto nel 
messaggio news:kkGLe.16396$F23.1...@twister2.libero.it...


Non so se Jmp 0 è una istruzione buona per il PIC.
Eventualmente convertila con quela appropriata (tipo goto 0. brech0,ecc).
"MarcoAngelo" <marcoange...@NOSPAMalice.it> ha scritto nel messaggio 
news:8BFLe.71323$fm.47...@news4.tin.it...


 MCLR.
Lo faccio sempre. Ma ho avuto occasione di riscontrare dei 
malfunzionamenti in installazioni non accessibili, molto probabilmente 
dovute a interferenze EM (l'ambiente da questo punto di vista era 
parecchio rumoroso). La cosa si è risolta forzando manualmente un reset.
E non si tratta di usare il WDT in quanto il programma funzionava 
correttamente, solo alcune celle di memoria (RAM) erano corrotte. 
Bisognerebbe sapere se un reset tipo jump 0 (o quel che sia per i PIC) è 
sufficiente a riprinstinare le condizioni iniziali.
Grazie per l'interessamento!!
Marco / iw2nzm

 
il jmp 0 riavvia il programma ma lascia inalterati lo stato dei registri 
di I/O per cui tanto per fare un esempio lascia inalterati i registri di 
direzione delle porte.
se vuoi un reset reale o segui la strada del MCLR o valuti l'uso 
occasionale del WDT , lo lasci comunque disabilitato , quando vuoi 
eseguire il reset lo abiliti com timeout minimo e ti blocchi in un ciclo 
di attesa, sono quasi certo che il reset derivato dal WDT e' equivalente 
a quello hardware ( un rapido controllo sul datasheet e ti levi il 
pensiero )


> Bisognerebbe sapere se un reset tipo jump 0 (o quel che sia per i PIC) è 


parecchio rumoroso). La cosa si č risolta forzando manualmente un reset.
stessa cosa č accaduta a me in un'applicazione che aveva diverse
installazioni in luoghi piu' disparati.
L'unico modo in cui sono riuscito a risolvere (oramai i circuiti sono
in funzione da anni in tutta italia e non hanno piu' dato problemi) č
stato quello di mettere un reset esterno sull'MCLR.
Io ho semplicemente messo un contatore con un bit del conteggio sul
pin di reset del pic
Quando il mio programma funziona correttamente manda ciclicamente un
reset al contatore che si riazzera
Se il pic non manda per un tempo elevato il reset al contatore questo
arriva ad abilitare il bit sul pin di reset del pic.
...spero di essermi spiegato... anche se con un discorso un po'
contorto!
:-)

 :-)
Hai realizzato un watch dog timer esterno, in pratica!
Ora mi studio bene la parte del datasheet relativa al reset e guardo un 
po' quali sono le differenze tra WDT e reset esterno.
Ciao,
Marco / iw2nzm

 po' quali sono le differenze tra WDT e reset esterno.
Il reset del watchdog e' identico al reset hardware.
L'unica differenza e' che vengono settati diversamente dei bit
di un registro in modo da permettere al software di distinguere
la causa del reset. Questo vale almeno per parecchi modelli
di pic, ma non so se vale per tutti.
Comunque sono interessanti le vostre testimonianze sulla
perdita di dati, dato che anch'io in passato avevo avuto problemi
causati da disturbi emi con i pic. Questo conferma le voci di
scarsa affidabilita' dei pic che sono sempre circolate.

 scarsa affidabilita' dei pic che sono sempre circolate.
Se è per questo una volta mi è capitato di perdere completamente i dati 
memorizzati nella EEPROM di un Atmel... ok che era vicino a un 
ricevitore radio ma la flash con il programma nn ha fatto una piega, 
mentre i dati salvati nella EEPROM si sono modificati!
Sai come ho risolto? O meglio, credo di aver risolto così visto che dopo 
non ho più avuto problemi... ho impostato tutti i pin non usati come 
ingressi e li ho connessi fisicamente a massa...
Marco / iw2nzm

>Il reset del watchdog e' identico al reset hardware.
Non so pero' se la funzionalità è la stessa.
E' vero... ho realizzato un watchdog esterno nella mia applicazione
ma....
questo dopo che, ad un seminario microchip feci presente il mio
problema di emi e chiesi se attraverso il firmware si potesse
resettare il pic ponendo il dubbio della condizione del pic di "stato
non permesso" o quanto meno non previsto.
A quei tempi il field engineer che era possibile che il pic entrasse
in uno stato 'non previsto' e non  ne potesse uscire.
Tutto questo diversi anni fa (la mia applicazione era con un F84)....
puo' darsi che da allora abbiano migliorato le cose.
In ogni caso allora mi fu confermato che solo con il reset esterno
potevo uscire dalla condizione di blocco.
P.S.
Per la cronaca
un mio amico lavora per una ditta che ha numerose istallazioni di
harware basato su Rabbit
Nonostante l'utilizzo del watchdog nel firmware ogni tanto mi diceva
che qualche scheda va in blocco e l'unica maniera di farla ripartire è
quella di un reset esterno effettuato manualmente.
...questo per spezzare una lancia in favore dei PIC osservando che
anche gli altri chip hanno qualche problemino qualche volta.

 pensiero )
Ho fatto cosě: wdt abilitato con time-out lunghissimo (qualche sec.) 
tanto il micro sta per lo piů in attesa. Quando ricevo il comando di 
reset remoto imposto il time-out del wdt al minimo con conseguente 
ripartenza. Tutto funziona a dovere.
Naturalmente la condizione necessaria affinchč serva a qualcosa č che il 
uC riesca ancora a decodificare i comandi in arrivo :) In effetti la 
soluzione di Marcello sembrerebbe risolvere anche questa situazione (per 
contro rimane piů complessa e costosa da implementare).
Ciao,
Marco / iw2nzm

 entrasse in uno stato 'non previsto' e non  ne potesse uscire.
Non per gufare... ma e' capitato (su una scheda molto semplice con lo Z80)
che neppure il reset hardware funzionasse... e' stato necessario togliere
alimentazione...
ciao
Claudio F

 Marco / iw2nzm
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it