Il RESET
Dobbiamo spendere qualche parola anche su questa funzione, propria di tutti
i sistemi a microprocessore e micro controller, perchè non è semplice come
si può pensare e, nel caso dei PIC Baseline, assume una importanza
particolare.
Per questi PIC il reset può essere generato da varie fonti:
- Power-on Reset (POR)
- livello basso su MCLR durante il funzionamento normale
- livello basso su MCLR durante la condizione di Sleep
- WDT Time-out durante il funzionamento normale
- WDT Time-out durante la condizione di Sleep
- Wake-up dalla condizione di Sleep per cambio di stato di un pin
- Wake-up dalla condizione di Sleep per cambio di stato del comparatore
Va ricordato che questi Baseline non hanno una gestione di interrupt e vaie
condizioni, come il cambio di stato dei pin o il timeout del WDT generano un
reset. Ne deriva la necessità di discriminare la causa dei vari reset: tutti
riportano il PC al vettore di reset, ma in ogni caso i flag dello STATUS si
trovano in condizoni diverse. Dall' analisi di questi flag si può capire
quale è la causa.
Il vettore di reset tipico dei PIC è 00h.
Possiamo considerarlo valido per questi PIC, iniziando il programma a 00h.
In effetti il PC al reset si posiziona su 0x0FF per i tipi con 256 di memoria
programma e a 0x1FF per quelli con 512.
In questa locazione si trova il valore, determinato in fabbrica, a assegnare
al registro OSSCAL per la calibrazione di
fabbrica dell' oscillatore interno.
Questo valore si trova nella forma di una istruzione
movlw valore_calibrazione.
L' ALU esegue questa istruzione ed avanza il PC che, essendo al termine
delle memoria, si posiziona al passo successivo su 00h, dove iniziano le
istruzioni introdotte dall' utente.
Tipicamente, le prime riguarderanno la scrittura del valore in WREG
nel registro OSSCAL per un valore di clock
ottimale.
Nell' esempio qui sotto, il bit 0 viene per sicurezza azzerato onde
assegnare a GP2 una funzione diversa da
quella di FOSC/4.
; calibrazione oscillatore interno
andlw 0xFE
; clear bit0, no Fosc out
movwf OSCCAL |
Se si desidera l' uscita di FOSC/4 sul GP2 il
bit 0 andrà posto a 1.
Attenzione:
Il bit 0 di
OSCCAL a livello 1 sovrascrive qualsiasi
altra assegnazione del pin GP2. |
Per contro, la destinazione di GP2
dipende solo
dagli SFR e quindi può essere modificata in qualsiasi momento durante il
programma. Ad esempio, il pin potrà operare normalmente da GPIO, ma passare
in uscita della frequenza del clock interno nell' ambito di un programma con
diagnostica.
Il valore di calibrazione in uscita dalla fabbrica è scritto in una
locazione di Flash, quindi sovra scrivibile o cancellabile.
Nel programmare il
componente occorre
avere cura di NON cancellare la calibrazione dell' oscillatore
impostata dalla fabbrica.
Se il dispositivo di programmazione non permette una esclusione di
questa locazione, occorre leggerla e salvarne il valore PRIMA di
avviare la programmazione e riscriverla durante la programmazione. |
I tools di programmazione di Microchip (Pickit, ICD, RealIce) dispongono
dell' opzione di non cancellazione del valore di calibrazione di fabbrica.
Non c'è un modulo PWRT programmabile, ma è comunque implementato un
modulo DRT (Device Reset Timer), non programmabile, che genera un
ritardo di circa 18ms al rilascio del reset interno dopo un impulso basso su
MCLR o al POR. Questo consente nella gran parte dei casi di non avere necessità
di una rete RC esterna sul pin.
I reset diversi dal POR e da MCLR sono temporizzati di 10 us.
La mancanza di un BOR integrato può, però, richiedere per applicazioni
particolari, l' aggiunta esterna di un voltage supervisor.
Va ricordato anche che la condizione di reset posiziona vari bit dei
registri SFR nei valori di default.
Da questa tabella possiamo rilevare come i default al POR e dopo un altro
tipo di reset possano essere differenti.
in particolare, si noterà che alcuni biti non vengono modificati dal reset
diverso da POR (u nella tabella), mentre altri, come in OPTION
e TRISGPIO, vengono nuovamente caricati con
i default. Altri registri, come ADCON0 sono
modificati parzialmente.
Analisi delle cause del reset
WDT, comparatore, wakeup per cambio livello sui pin non generano
interrupt, ma reset, che riporta il program counter a 00h. Se
vengono utilizzate queste funzioni, occorre discriminare quale è la causa del
reset analizzando i bit dello STATUS.
Le condizioni sono presentate in questa tabella:
Possiamo osservare che, per ogni situazione di reset, i flag dello STATUS
permettono di risalire alla causa.
Maggiori informazioni sono rilevabili dalla pubblicazione Understanding
Reset Events on the PIC10F20X
DRT
Un ulteriore particolare che può essere utile conoscere è questo: i
Baseline non dispongono di timer di power on (PWRT) programmabile, ma hanno
comunque un timer, detto DRT, che inserisce un periodo di wait dal rilascio
del reset da parte del modulo di POR integrato al momento in cui viene
rilasciato il reset generale del microcontroller.
DRT opera in dipendenza di un free running on-chip oscillator, diverso da
INTOSC.
|
DRT mantiene il PIC in reset per un determinato periodo, come indicato nella
tabella a lato.
Il ritardo generato da DRT non ha una elevata precisione e può
variare a causa di VDD, della variazione di temperatura e dele
tolleranze di lavorazione dei chip. |
Il ritardo introdotto dopo l' arrivo della Vdd minima permette ad essa di
assestarsi e agli oscillatori di stabilizzarsi.
Infatti, oscillatori esterni, basati su cristalli o risonatori ceramici,
richiedono un certo tempo dopo l'accensione per stabilizzare la frequenza
generata, tempo maggiore di quello richiesto da una rete RC.
|
MCLR può essere utilizzato solamente nel caso in cui si applichi
una rete RC esterna se si intende generare ritardi maggiori al POR.
Quindi, una eventuale azione su MCLR ha come scopo solamente il reset
indotto da un comando esterno (pulsante) o per allungare il ritardo
iniziale prodotto dal contatore DRT. |
Occorre avere ben chiaro che il reset all' arrivo della tensione (POR) non
ha nulla a che fare con il reset prodotto da un livello basso applicato sul
pin MCLR.
POR è generato
in maniera indipendente da un modulo interno che dipende dal valore della Vdd.
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.
MCLR potrà rivelarsi necessario in alcuni casi particolari:
-
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)
-
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
|
La più classica applicazione su MCLR è il pulsante di
RESET: premendolo, si porta il livello di MCLR a 0, collegandolo alla Vss.
In questo caso il condensatore ha anche una funzione anti rimbalzi.
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.
|
Di conseguenza, questi chip con un basso numero di pin consentono di
escludere la funzione MCLR, dove essa non servisse, ed utilizzare il pin come
ingresso digitale GP3.
I Baseline non hanno un modulo BOR, che rileva le situazioni di
abbassamento della tensione di alimentazione e questa mancanza può essere
sentita in alcune condizioni.
|
In questi casi sarà utile l' aggiunta di un integrato supervisore
di tensione che possa resettare il processore per abbassamenti della
Vdd al di sotto di un determinato limite di sicurezza.
Perchè questo? Semplicemente perchè il modulo POR agisce SOLO durante la fase di salita della tensione. Quando la tensione scende, il POR non ha alcun effetto. |
Ulteriori
informazioni sul reset sono consultabili qui.
|