Tutorials - PIC Peripherals

 

Il RESET


MCLR

Il pin MCLR permette un reset dovuto ad un segnale esterno. 

Occorre comprendere bene la differenza tra POR, che inizializza il processore al momento del collegamento con la tensione di alimentazione e MCLR che agisce in base ad un segnale esterno. 

Le caratteristiche generali del pin MCLR possono essere semplificate in una breve lista:

  • è attivato quando viene portato a livello basso. Non dispone di pull-up interno e non deve essere lasciato sconnesso.
    Da questo consegue che ordinariamente si impiega una resistenza di pull-up per imporre un livello alto certo e per evitare effetti dovuti a disturbi elettromagnetici indotti.
     

  • L' ingresso è un gate Schmitt trigger attivo a livello basso, allo scopo di avere la massima reiezione dei disturbi e delle condizioni di incertezza. Questo significa che per assicurare un reset, la tensione sul pin deve essere inferiore a quello di massimo input specificato nel foglio dati (sezione caratteristiche elettriche). Si tratta in genere di 1 volt per funzionamento a 5 volt. Per assicurare che il dispositivo non generi reset involontariamente durante il normale funzionamento, la tensione sul pin MCLR deve essere tenuta oltre la minima tensione di ingresso alta specificata nel foglio dati. Si tratta in genere di 4 volt per un funzionamento a 5 volt. Il progettista deve curare che questa specifica sia valida anche quando ci sono fluttuazioni o rumore sulla tensione di alimentazione. 
     

  • Oltre a funzioni di reset, MCLR consente di porre il dispositivo in modalità di programmazione con una tensione VPP, solitamente 13V, applicata sul pin (programmazione HVP). Per questo il pin MCLR non dispone di diodo di protezione per sovra tensione.
     

  • Sul molti PIC il pin MCLR è sempre attivo. Tuttavia, su altri, come il piccoli microcontrollori a 8 pin e 6 pin, il segnale MCLR può essere legato internamente a VDD e il pin relativo, quindi,  può assumere una funzione di GPIO (solo ingresso) digitale, solitamente associato a GP3/RB3/RE3 a seconda del tipi di microcontroller.

 

Quindi, per inizializzare il processore al momento dell' arrivo della tensione di alimentazione, è necessario e sufficiente il segnale interno POR, che è generato da un modulo integrato e non dipende, nè necessita di pin esterni.

Possiamo, anzi, affermare che del pin MCLR se ne potrebbe benissimo fare a meno.

Assai spesso non ha alcuna funzione nell' applicazione. Per questa ragione Microchip rende possibile, su molti PIC, l' assegnare una funzione di ingresso generico digitale a questo pin (la scelta si effettua nella configurazione con _MCLRE_OFF).

Quale è lo scopo di MCLR, allora? 
Semplicemente quello di azionare il modulo interno di reset con un livello basso, proveniente dall' esterno del chip, applicato al pin. Quindi, 

se non dovete resettare il micro dall' esterno, MCLR NON HA ALCUNA UTILITA', nè funzione. 

Si potrebbe obiettare che tutti gli schemi riportano una resistenza di pull up tra il pin MCLR e la Vdd e magari un pulsante verso massa. Ma questa è spesso solo una "tradizione".
Innanzitutto vanno considerate alcuni punti:

  • nel passato e ancora oggi i microprocessori dispongono di un ingresso di reset, ma non di modulo POR. La funzione è demandata completamente ad una circuiteria esterna. Il pin di reset, quindi, costituisce solamente la linea di ingresso del livello (solitamente basso, ma anche alto, dipendente dal tipo di chip) che comanda il sistema interno di avviamento del programma. Questo segnale, dipendente dalla tensione di alimentazione o da impulsi esterni, viene gestito da una circuiteria pure esterna.

  • i sistemi di sviluppo includono sempre un pulsante di reset manuale che ha lo scopo di riavviare il programma senza interrompere l' alimentazione.

  • Siccome i primi PIC, pur avendo un modulo POR integrato, non disponevano dell' opzione di disabilitazione del pin MCLR, era obbligatorio applicare la resistenza di pull-up a questo pin, che è un ingresso ad alta impedenza, con lo scopo di attribuirgli una polarizzazione tale da minimizzare i possibili disturbi indotti.

In relazione all' ultimo punto, MCLR è un ingresso CMOS ad alta impedenza e quindi sensibile ai disturbi indotti, anche a frequenza molto levata (il pin risponde a impulsi bassi di soli 2 us o meno), e all'elettricità statica, ed è per questa ragione che occorre un pull-up esterno. Esso determina una polarizzazione a livello alto stabile, per evitare quanto possibile effetti indesiderati dovuti ad altri circuiti vicini. Il valore ideale è attorno a 4V per una tensione di alimentazione di 5V.
Il livello basso a cui MCLR risponde è inferiore a  1V, sempre per Vdd = 5V.
In questo senso, la scelta dei classici 10k è del tutto arbitraria, in quanto andrebbe bene qualsiasi valore resistivo, da 1 ohm a 100k. Il valore di 10 k è comune, facilmente reperibile e garantisce una buona polarizzazione senza indurre una corrente troppo elevata nel circuito esterno che lo comanda. 
Quindi, valgono le seguenti affermazioni:

  • 10k non è un obbligo. Se volte usare 4k7 o 33k va bene lo stesso, dato che:
    dal suo valore non dipende in alcun modo il funzionamento del reset POR, che è a carico del modulo integrato.

  • Il pull-up su MCLR fa si che esso sia del tutto neutro rispetto all' azione POR interna: dal diagramma sopra vediamo che la tensione al pin sale parallelamente alla Vdd in quanto determinata dalla presenza del pull-up.

Abbiamo una contro prova della realtà di quanto detto, ovvero che MCLR non partecipi minimamente al POR, dal fatto che nella maggior parte dei PIC più recenti, Microchip ha implementato la possibilità di disabilitare la funzione di questo pin (_MCLRE_OFF nel config) e renderlo un ingresso digitale generico.

Dunque,il fatto che MCLR sia diventato un port NON influisce minimamente sul reset all' arrivo della tensione , che dipende, ripetiamo, dal modulo POR interno.

MCLR, come accennato prima, ha la specifica funzione di comandare il modulo di reset interno attraverso un segnale proveniente dall' esterno, in casi come questi:

  • sincronizzare il reset del micro con altre funzioni, ad esempio, una periferica esterna che richiede di aver completato il suo reset prima di poter essere utilizzata. In questo caso è inutile che il micro tenti accessi prima di questo tempo. Per sicurezza, il suo reset dipenderà dal completamento di quello della periferica.

  • disponibilità di un reset già presente in un sistema complesso dove interagiscono più microcontroller o microprocessori e in cui occorre una sincronizzazione, spesso concomitante con un clock comune.

  • utilizzo di un reset supervisor esterno, che mantiene con sicurezza a livello basso il pin MCLR fino a che la tensione non è stabilizzata ad un valore preciso (MCP100, MCP809, ecc), cosa spesso necessaria per chip che non dispongono di modulo BOR integrato

  • necessitare di un arresto di sicurezza che blocchi il processore su un comando di emergenza proveniente dall' esterno, dove non è possibile togliere la tensione di alimentazione

In altri casi, NON serve a nulla. Potrebbe essere utile implementarlo solamente in due condizioni:

  • resettare il tutto se il programma va in palla

  • riavviare l' hardware senza togliere la tensione di alimentazione per funzioni particolari (bootstrap, cambio di impostazioni con jumper e simili)

Nel secondo caso, è certo che si possano verificare situazioni in cui è scomodo o non possibile eliminare la tensione e un riavvio del microcontroller deve, allora, essere comandato manualmente; il pulsantino di reset serve.
Ma il primo caso, ovviamente, per un prodotto finito non deve esistere ! Potrà essere utile nella sperimentazione, ma necessitare del pulsante per bloccare la macchina perchè il programma è andato in palla non è certo una bella idea: il programma deve funzionare.

Per chiarire meglio la cosa, il foglio dati ci viene ancora in aiuto con due diagrammi in cui appare l' azione di MCLR durante il POR:


La sequenza è quella vista prima, solamente ora il pin MCLR è rimasto a livello basso, mantenuto così da una sorgente esterna, per un certo tempo. Il processo di POR si effettua come se il pin MCLR non esistesse: si genera il TPWRT (se abilitato) e il TOST. Se MCLR viene rilasciato (punto X) prima dello scadere di questi tempi, la procedura di reset è tutta a carico del modulo POR interno. E' chiaro che POR è generato indipendentemente da MCLR.
Vediamo ora il caso in cui MCLR è mantenuto a livello basso per un tempo maggiore di quello generato dai timer interni di avviamento:

Il modulo POR esegue le operazioni viste, ma al punto in cui è scaduto anche TOST (6 nei diagrammi precedenti), dove dovrebbe rilasciare il reset interno, non lo fa, in quanto è condizionato dal livello basso sul pin MCLR. Solamente quando questo livello andrà alto (punto X), l' Internal Reset sarà rilasciato e il programma potrà essere avviato.
Dunque, qui la funzione propria di MCLR è condizionare la durata del tempo di reset: fino a che MCLR è mantenuto a livello basso, non sarà possibile l' avvio del programma, anche se la tensione è applicata correttamente. L' azione del setup dei default, dell' assestamento dei registri e del PC a 00h dipende dalla linea Internal Reset.

Se il pin MCLR viene portato a livello basso durante il funzionamento (ovvero dopo che è stata esaurita la parte di avviamento e il programma sta girando, ha un effetto analogo a quello del POR. Per riassumere:

  • POR è automatico, gestito internamente, dipendente dal fronte di salita della Vdd ed agisce solo all' arrivo della tensione di alimentazione

  • MCLR è comandato dall' esterno ed agisce in qualsiasi momento in cui sia presente la Vdd

Per chiarire, facciamo ancora ricorso ad un diagramma del foglio dati

  1. All'arrivo della tensione si attiva la sequenza di POR, a cui MCLR non partecipa

  2. Esaurita questa, Internal Reset è rilasciato e il programma inizia a funzionare.

  3. Ad un certo punto il pin MCLR viene mandato a livello basso (al minimo 2us sono sufficienti, param. # 30). Questo manda a livello basso la linea Internal Reset e il processore è resettato

  4. Quando il livello al pin MCLR è rilasciato a livello alto, lo è anche la linea Internal Reset e il processore riparte dal vettore di reset, con l' hardware inizializzato e i default degli SFR caricati

Nell' azione di POR, MCLR ha solo effetto ritardante. Nell' azione di MCLR a processore avviato, il modulo POR non interviene minimamente (quindi niente TPWRT o TOST, dato che la tensione di alimentazione è già presente).

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.

Un circuito più "sofisticato" è quello a lato. 
R è il pull-up: è l'unico componente indispensabile se MCLR è attivo.
Ma c'è anche C...
Il condensatore, questo sconosciuto: se osserviamo, si tratta semplicemente di una rete RC. Dato che l' impedenza del pin è elevata, il suo apporto è trascurabile e quindi non va considerato

E se voglio mettere il pulsante per comandare manualmente il reset?

Ecco qua: La pressione del pulsante porta il livello di MCLR a 0, collegandolo alla Vss.

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 effetti, una ragione ben fondata per comandare il MCLR in base alla tensione, sovrapponendosi al modulo POR interno è, invece, quella di voler scegliere un diverso punto di intervento: dato che quello fissato dal costruttore è al di sotto dei 2V, è possibile che non si voglia far partire il micro fino a che la tensione ha raggiunto un valore diverso, ad esempio a causa di altri componenti collegati che a 2V non sono ancora pronti ad operare. Questa soluzione è interessante e va considerata anche dove l' alimentazione è soggetta a problematiche gravi.
Un' altra situazione è quella relativa ai casi in cui il microcontroller non integri il modulo BOR (come i Baseline).

Consideriamo anche un' altro 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

Da notare che però non tutti i moduli BOR hanno le stesse possibilità. In molti chip la soglia di intervento è fissta 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.

La soluzione corretta è l'uso di voltage detector.
Esistono piccoli integrati, in package TO-92 o SOT-23/SC-70 e simili, che svolgono la funzione di "zener" di grande precisione.
La stessa Microchip ne produce svariati modelli, con tensioni di scatto in una gamma di valori molto ampia (più di 20 valori da 1.37 a 4.56V). Il loro consumo è minimo (1-3 uA) e la precisione di intervento è elevatissima.

Dal sito di Microchip potete farvi una idea, ma praticamente tutti i costruttori che hanno in catalogo componenti lineari offrono prodotti analoghi.

Occorre sempre considerare che 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.

Maggiori informazioni qui su cosa cosa si può collegare al pin MCLR nei casi in cui non può essere disabilitato, oppure non si voglia disabilitare.


 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 16/05/13.