Tutorials - PIC

 

Il RESET in pratica

 


 

Con questo intendiamo dare uno sguardo a come si implementa un sistema di reset esterno per i PIC18.

Innanzitutto va precisato che 

un Reset esterno è richiesto solo se è necessario  

per il funzionamento e i casi non sono poi molti :

  1. dilazionare l' avviamento del PIC per un certo tempo tale da dar modo a periferiche particolari di avviarsi

  2. resettare il micro con un contatto esterno

  3. fornire una temporizzazione di reset molto precisa, principalmente per compensare problemi sull' alimentazione

Se non ci sono queste premesse, il pin 1 può benissimo essere utilizzato come un ingresso generico (RE3), dato che la circuiteria interna del chip è in grado di valutare la tensione Vdd e regolare il reset su di essa, magari assieme al BrownOut e all' HLVD.

Questo è dovuto al fatto che il meccanismo del Reset all' arrivo della tensione (POR - Power On Reset) è interamente all' interno del chip e NON necessita di alcun segnale esterno, in quanto dipende dall' applicazione della tensione a relativi pin del package.
Questo vale anche per i PIC16F che hanno disponibilità analoga del MCLR come GPIO.

Un a serie di pagine dedicate al reset le trovate qui.

Quindi, come prima considerazione, si può dire che al pin 1 può essere collegato a un bel niente, programmandolo appunto come ingresso dal CONFIG. 
Questa situazione NON pregiudica per niente il funzionamento del processore, a patto che la tensione di alimentazione sia applicata secondo quanto specificato nel foglio dati. Non serve neppure la tipica resistenza da 10 k appesa alla Vdd, che serve praticamente solo come pull-up anti statico per il pin.

Se, però, MCLR non può essere disabilitato, oppure non si voglia disabilitare, dobbiamo collegare qualche componente esterno.

Al minimo, devo collegare la R di pull-up. Valore tipico tra 1k e 100k.

Da osservare che MCLR potrebbe essere collegato direttamente alla Vdd, come qualsiasi altro ingresso di una comune logica CMOS, ma non è una buona pratica: il pull up serve anche per evitare qualsiasi problema all' ingresso nel caso di sovratensioni o ESD. Inoltre, un collegamento diretto a Vdd impedirebbe di aggiungere il pulsante o altro elemento esterno.

Se però l' alimentazione ha problemi (tempo di salita lento o irregolare), occorre una temporizzazione o un reset esterno, allora il MCLR può riacquistare la sua funzione.

Il circuito esterno collegato al pin MCLR può essere ampliato aggiungendo un condensatore, il cui tempo di carica lo manterrà a livello basso per un certo tempo dopo l' arrivo della tensione di alimentazione e da un diodo che ha lo scopo di scaricare rapidamente il condensatore al mancare della Vdd. 

Questa aggiunta può rendersi necessaria nel caso in cui il tempo di salita della Vdd sia eccessivamente lento o soggetto a irregolarità o, per qualsiasi motivo, si voglia dilazionare il reset per un tempo pari a quello necessario alla sufficiente carica di C.

Cosa fa una rete C del genere? All' arrivo della tensione C si carica attraverso R e raggiunge la tensione di soglia in un tempo dipendente dai valori di R e C. 
Quindi la sua funzione è semplicemente quella di ritardare ulteriormente l' avvio del programma rispetto all' arrivo della tensione. Il diodo D consente, al mancare della tensione, di scaricare rapidamente C per prepararlo ad un successivo arrivo della tensione (altrimenti C si scaricherebbe attraverso R e questo richiederebbe un certo tempo; se la tensione ritornasse prima della scarica completa del condensatore, il tempo RC risulterebbe ridotto).
In quanto a R1, il suo scopo è quello di proteggere l' ingresso MCLR da sovratensioni, limitando la corrente.
Si ribadisce, però, che C NON è parte indispensabile, neppure sui PIC più datati. Se MCLR non viene dedicato a RE3, il pull-up è l' unica cosa obbligatoria. Per contro, il C potrebbe essere un piccolo filtro per annullare eventuali impulsi bassi sul pin.

Su gran parte delle schede demo di Microchip il circuito di reset assume queste configurazioni :

con o senza condensatore e con il pulsante di reset. 
La resistenza di pull up varia tra 4k7 e 10 k (in alcuni fogli dati si indica un valore massimo di 40 k, per non superare le caratteristiche di tensione al pin di MCLR). 
La resistenza in serie, invece, è tipicamente tra 100 ohm e 1 k ed ha lo scopo di limitare la corrente di scarica del condensatore nel caso di un breakdown sul pin MCLR dovuto a cariche elettrostatiche (ESD) o overstress elettrico (EOS) . In questo caso il condensatore ha anche una funzione anti rimbalzi che è indispensabile: dal diagramma visto prima abbiamo osservato che al momento del rilascio di MCLR, l' Internal Reset è rilasciato.
Ma se il nostro pulsantino fa un mare di rimbalzi, la logica interna del microcontroller potrebbe prenderla male.
Si deve ricordare che il debounce di un pulsante con una rete RC è valido solamente se il tempo dipendente da RC è maggiore di quello dei rimbalzi, il che può richiedere anche 5-10ms addizionali nell' avviamento del microcontroller. Inoltre, la tensione di carica del condensatore non è lineare e richiede, per un punto di intervento preciso, almeno uno schmitt trigger: fortunatamente i progettisti hanno considerato questo e l' ingresso MCLR è appunto di questo genere.

In generale, però, si può dire che la presenza del condensatore (e dell' eventuale diodo) non è necessaria, in quanto al momento dell' applicazione della tensione di alimentazione anche il segnale interno POR collabora alla generazione del reset. Inoltre, se si prevedono condizioni di alimentazione irregolare, sarà di aiuto l' abilitazione della funzione interna di BOR (Brown Out Reset), che è programmabile sia come azione che come livello di intervento; essa è più che adeguata per generare reset nel caso di fluttuazioni eccessive della tensione durante il funzionamento. 

Quindi, la presenza di C potrà essere utile solo se si intendono allungare i tempi del reset iniziale o come debounce del pulsante.

Comunque , il tempo di salita previsto dal foglio dati del PIC per la tensione di alimentazione Vdd è di 5mV per ms, ovvero ci si aspetta che Vdd raggiunga da zero il valore nominale in circa 100ms (a 5V) e il condensatore dovrà essere calcolato adeguatamente nel caso si abbia a che fare con fronti di salita più lenti.

Si può commentare che, consultando molti fogli dati di schede demo di Microchip, non pare che lo stesso costruttore abbia una linea guida unica riguardo a cosa collegare al pin MCLR, in quanto alcune schede hanno una soluzione, altre una diversa.
Si può dire che, mediamente, nei PIC18 le configurazioni più gettonate delle Demo Board sono quelle presentate negli ultimi schemi qui sopra.

Sui fogli dati di alcuni PIC16 (ad esempio PIC16F628) c'è anche una soluzione più complessa, da utilizzare per alimentazioni disturbate o critiche. Qui si tratta di situazioni in cui la tensione di alimentazione è soggetta a fluttuazioni o disturbi tali da creare situazioni critiche attorno alle tensioni di reset e BOR.
Si richiede allora un qualcosa che funzioni da trigger ad il livello determinato, al di sotto del quale il pin MCLR sarà mantenuto a livello basso.

Questa necessità deriva dal fatto che il meccanismo di reset deve poter con sicurezza riportare tutti i registri da lui dipendenti ai rispettivi valori di default e fare si che il Program Counter riavvi il programma dal suo punto di partenza (vettore del Reset). Se, una volta raggiunta la tensione limite del reset, in breve tempo questo limite viene superato in su o in giù ripetutamente, è possibile che la logica interna non sia in grado di completare correttamente le sue funzioni e il processore sia riavviato in condizioni improprie.
Perchè questo? Semplicemente perchè il modulo POR agisce SOLO durante la fase di salita della tensione. Quando la tensione scende, o risale stando al di sopra del limite di soglia, il POR non ha alcun effetto.

Nel circuito a destra, il transistor passa in conduzione quando la tensione Vdd supera la tensione dello zener + 0.7V. In quello a destra l transistor passa in conduzione quando il partitore R1/R2 fornisce una tensione superiore a 0.7V. Il foglio dati raccomanda di non attivare il Broun-out se si utilizzano questi schemi.  
Che, però, paiono poco interessanti (la stessa Microchip non li replica nei fogli dati più recenti), sia per la bassa precisione ottenibile per la soglia, dovuta alle tolleranze dei componenti, sia perchè, probabilmente, il sistema di Brown-out interno al chip è stato migliorato e non richiede add-on esterni.

Più correttamente, nel caso sia necessaria una particolare precisione e temporizzazione di intervento, oppure dove il tempo di salita della tensione di alimentazione sia eccessivo o irregolare o la tensione stessa possa subire disturbi intensi o forti fluttuazioni, la rete RC è da escludere in quanto non risolve certo il problema. 

Consideriamo un caso caso: la tensione è salita oltre il limite di scatto posto ad esempio a 1,5V e si trova a 5V, il modulo POR ha eseguito la sua sequenza e rilasciato l' internal reset. Ora, se la tensione cade a 2.5V e questo non permette nè un funzionamento regolare del sistema (le periferiche collegate, ad esempio display LCD, non funzionano più), nè un intervento del POR, in quanto la tensione è superiore alla soglia.  Si tratta di quello che gli anglofoni chiamano BrownOut.
Vediamolo in un diagramma:

La Vdd, ormai assestata, ha un "sobbalzo", (1) ad esempio dovuto ad una breve caduta della rete di alimentazione primaria. Questo si riflette in una discesa al di sotto del valore di trigger del BOR. Se questo livello improprio permane per un tempo maggiore di Tbod (typ. 100 us), il modulo di BrownOut avvia un reset interno, con il tempo di ritardo al rilascio simile a quello del POR.
Se il brown out si ripete, (2) ad ogni ripetizione si ricarica il counter del tempo indicato.
Se la situazione di brown out permane a lungo (3), per tutto il tempo in cui la Vdd è presente, ma di valore inferiore a quello della soglia Vbod, la linea Internal Reset è bloccata a livello basso e si sblocca solamente 72 ms dopo il ritorno della Vdd al valore nominale.
Ripetiamo che il modulo POR interno non interviene per due ragioni:

  • la Vdd è superiore alla soglia del POR

  • il modulo POR agisce solamente sul fronte di salita della Vdd

Il circuto visto sopra resetterà se la tensione Vdd è al di sotto della soglia dello zener. 
Anche qui si tratta di "poor circuit" da (evitare perchè la precisione di uno zener non è meravigliosa e l' insieme determina una soglia di scatto in un range molto ampio di tolleranza), da usare solo nel caso in cui il processore non disponga di un modulo BOR integrato.
Da notare che però non tutti i moduli BOR hanno le stesse possibilità. In molti chip la soglia di intervento è fissata su un valore determinato dal costruttore, mentre in altri il valore è programmabile in un range più o meno ampio. Però è possibile che ci occorra il reset del processore per un valore che non è compreso tra questi.

Dai fogli dati notiamo che l' unica criticità del modulo POR è la necessità che la tensione passi da 0 al livello di soglia in un tempo non superiore a un certo limite, ovvero abbia una rampa di salita di breve durata. Se la tensione sale così lentamente da arrivare a stabilizzarsi solo dopo l' esaurimento dei tempi TPWRT e TOST, il modulo POR avrà dato l' ok all' avvio delle funzioni logiche del processore senza che però sia assicurato il livello di alimentazione. In questo frangente, l' uso della rete RC sul MCLR, o , meglio decisamente, l' uso di un voltage detector, risolve il problema.
In pratica, è altamente difficile che un sistema dotato di un qualsiasi comune sistema di alimentazione non abbia una salita della tensione adeguata; dovrebbe trattarsi di qualcosa di molto particolare o di molto malfatto. Quindi, le preoccupazioni riguardo ad un eventuale problema di reset sono, in genere, infondate.
Piuttosto, vanno considerato i casi di possibili oscillazioni della tensione alla chiusura del circuito di alimentazione o durante il funzionamento. Queste sono sicuramente più probabili della eccessiva lentezza del fronte di salita e sono insidiosamente più dannose. Di nuovo, l' attivazione del modulo BOR interno o un voltage detector esterno risolvono il problema (anche se sarebbe meglio risolverlo, dove possibile, adeguando la sorgente di alimentazione...).

Il pin MCLR, allora, dovrà essere guidato dal segnale proveniente da un gestore di reset o supervisore della tensione.  Ne sono disponibili sul mercato moltissime varietà , dai semplici a tre pin in package tipo transistor a quelli più complessi e dotati di altre funzioni addizionali.  

La stessa Microchip ne produce diversi modelli. 
Qui a lato l' application degli MCP111/112 .

Si tratta di componenti tre pin in package TO-92 o SOT, quindi analoghi a piccoli transistor, che hanno funzione di Voltage Detector. MCP111 è un open drain (richiede un pull up), mentre MCP112 è un push pull.
Hanno 3 pin, non necessita di componenti esterni e occupano pochissimo spazio sul circuito
.

Sono disponibili in diverse tensioni di soglia e garantiscono livelli di intervento e tempi molto precisi.

Quindi, nel caso di alimentazioni problematiche, questi chip sono la soluzione adeguata.

Di supervisori di tensione/reset ne esiste una grande varietà e praticamente tutti i principali brand ne hanno a catalogo vari modelli, più o meno complessi.

Ad esempio Micrel produce questo MIC1232 con la possibilità di collegare un pulsante per il reset manuale e che comprende anche un Watchdog.

Un IO del controller viene utilizzato per neutralizzare il watchdog , collegandolo all' ingresso ST del supervisore.
Un chip come questo è disponibile in package a 8 pin.

L' uso di uno di questi integrati, se pure fa lievitare (minimamente) il costo del sistema, è  garanzia del sicuro reset in tempi e modi ben definiti,  necessari in applicazioni industriali, automazione e in ogni campo dove è richiesta una elevata sicurezza di funzionamento anche in ambienti elettricamente non perfetti.


AVVERTENZA MOLTO IMPORTANTE

Va ricordato che un dispositivo che funziona bene sul banco, collegato ad un alimentatore da laboratorio o a buone batterie, potrà avere problemi una volta posto in ambiente reale di lavoro, sopratutto se alimentato in modo non ideale e se non vengono rispettate le minime regole di una buona realizzazione.

L' impiego di supervisori di tensione riguarda proprio l' area delle applicazioni critiche, dove si deve avere la massima sicurezza; anche in applicazioni generali sono una soluzione pratica e sicura, se pure i PIC non ne hanno necessità, a patto di realizzare un circuito di contorno decente, sopratutto per quello che riguarda l' alimentazione.

Il pin MCLR può tornare utile quando è richiesto un sincronismo di avviamento dipendente da altri circuiti, ad esempio bloccando il processore fino a che le periferiche non saranno nelle condizioni di funzionamento adeguate.  Ad esempio, una interfaccia RS-232 con alimentazione charge pump avrà un ritardo di alcuni millisecondi per diventare operativa dopo l' applicazione dell' alimentazione e in quel tratto di tempo non avrà la possibilità di trasmettere segnali adeguati, per cui può essere utile far dipendere l' avviamento del PIC da questo ritardo.

Invece il pin MCLR è necessario per la Vpp durante la programmazione in-circuit (ICSP). In questa condizione, condensatori o altri circuiti collegati a MCLR dovranno essere separati adeguatamente dal segnale dell' ICSP. Ad esempio, una resistenza R1 in serie (tipicamente 1kohm) è utile a limitare la corrente al pin e lo isola nel caso in cui si utilizzi una programmazione ICSP che invierà una tensione più elevata  (Vpp) rispetto alla Vdd.  

Allo stesso scopo, questa resistenza può essere meglio sostituita con un diodo schottky (a bassa caduta di tensione) in serie al pull up.

In pratica si potrà utilizzare un piccolo diodo della serie BAT e una resistenza da 1/8 W.

Da ricordare che la Vpp, circa 13 V, è superiore alla tensione di alimentazione del PIC e non va applicata ad altri pin o a circuiti che ne potrebbero essere danneggiati. Maggiori dettagli sull' ICSP nella sezione relativa.


Conclusione

Possiamo concludere con le seguenti constatazioni :

  1. Se non è richiesto un controllo del RESET esterno e il PIC consente di escludere la funzione di MCLR (come ad esempio nei PIC18), questa funzione NON SERVE !!!
    Il circuito di reset interno POR è ben implementato, tanto da non richiedere alcun componente esterno e il pin può essere usato come IO. Ovvero si può fare a meno anche della resistenza di pull up (a patto di disporre di una alimentazione decente), impostando nel CONFIG il pin MCLR come ingresso digitale, senza pregiudicare minimamente il funzionamento del processore.
     
    Il pin MCLR sarà dedicato al RESET quando occorre comandare questa funzione dall' esterno (pulsante, supervisore di tensione, sincronismo con altri dispositivi, ecc.).

  2. Se si utilizza il pin come MCLR, va mantenuto ad un livello adeguato,  anche con la sola resistenza da 10k di pull up: nel caso di impiego come MCLR serve a mantenere un livello alto, nel caso di uso come RE3 serve ad evitare fenomeni dovuti all' elettricità statica o ai disturbi elettromagnetici (vedere a riguardo le pagine relative al collegamento dei pin non utilizzati).
     

  3. L' aggiunta di un condensatore non è particolarmente interessante. Il suo scopo è quello di ridurre l' effetto dei rimbalzi su un contatto o pulsante e/o di prolungare il tempo in cui il pin MCLR è a livello basso all' arrivo della tensione. Se necessita un reset temporizzato o comunque controllato, molto meglio usare voltage supervisor (indispensabile per alimentazioni/ambienti ostili).

  4. Nel caso in cui si utilizzi l' ICSP,  il pull up sul reset deve essere separato in qualche modo dal dispositivo di programmazione



NOTA: Quanto mai spesso vengono attribuiti al Reset problemi di funzionamento sul campo, che, invece, sono dovuti ad altre cause e, in particolare, a:
  • pin non utilizzati collegati malamente
     
  • cablaggio disordinato con link tra segnali di ingresso e di uscita o fili non connessi che fungono da antenne per disturbi elettromagnetici e d elettrostatici.
     
  • loop di terra dovuti a mancanza di isolamento tra PIC e periferiche alimentati da sorgenti diverse
  • mancanza di isolamento tra il processore e il carico, sopratutto se si tratta di motori, solenoidi o altri apparecchi che creano forti disturbi elettromagnetici.
     
  • alimentazioni raffazzonate o inadeguate.

Ripetiamo che un dispositivo che funziona bene sul banco, collegato ad un alimentatore da laboratorio o a buone batterie, potrà avere problemi una volta posto in ambiente reale di lavoro se mancano le nozioni necessarie per la realizzazione di un circuito adeguato.

In questi casi, qualsiasi azione sul pin di reset non sarà risolutiva, essendo le cause del problema da ricercarsi altrove.

 


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 28/04/13.