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 :
-
dilazionare l' avviamento del PIC per un certo tempo tale da
dar modo a periferiche particolari di avviarsi
-
resettare il micro con un contatto esterno
-
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:
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 :
-
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.).
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).
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).
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.
|