Il DS1232 di Maxim è un versatile ed efficace supervisore per microprocessori e microcontrollori. Nonostante il minuto package esso svolge tre funzioni estremamente utili e critiche quali controllo della tensione di alimentazione, debounce per il reset manuale e watchdog programmabile.
L’istante di accensione di qualsiasi sistema digitale rappresenta sicuramente un momento particolarmente critico. Nei primi millisecondi di funzionamento infatti si hanno forti assorbimenti di corrente da parte dell’intera scheda ed in particolare di alcuni suoi componenti. A causa delle capacità distribuite sulla scheda, delle cadute di tensione sui collegamenti e della resistenza equivalente del generatore, la tensione di alimentazione dei componenti cresce in maniera relativamente lenta (rispetto alle tipiche velocità di funzionamento), e spesso con velocità differente nelle diverse parti del circuito. Oltre a questo, i singoli componenti possono iniziare a funzionare a tensioni leggermente differenti (cioè hanno tolleranze diverse nei confronti della tensione di alimentazione) e possono richiedere tempi diversi prima di porsi nello stato attivo. Il risultato di questa situazione è che risulta fondamentale, soprattutto per sistemi che richiedano particolare affidabilità, assicurarsi che prima che il firmware inizi la sua esecuzione, tutti i componenti abbiano raggiunto uno stato di funzionamento stabile. In caso contrario qualsiasi interazione tra il firmware e le periferiche esterne (e perfino quelle interne in qualche caso) potrebbe fornire risultati errati. Una soluzione molto semplice e spesso utilizzata per ritardare l’avvio del microcontrollore (e quindi del programma) è quello di utilizzare il classico schema di figura 1, costituito da un semplice circuito RC che ha la funzione di mantenere basso il livello del piedino di reset (attivo basso) del microcontrollore.
Il diodo svolge la funzione di rendere più veloce la transizione alto-basso quando la tensione viene tolta. Questa soluzione, sebbene molto utilizzata, non può garantire il corretto funzionamento del sistema in ogni situazione, e sicuramente non lo fa in almeno tre casi abbastanza comuni. Il primo caso si verifica quando il tempo di salita della tensione di alimentazione è o diventa piuttosto lento (paragonato alla costante di tempo del circuito), in tal caso il reset non sarà ritardato. Un secondo caso è quello che viene definito “brown-out”, cioè quando la tensione di alimentazione, dopo avere raggiunto e mantenuto per diverso tempo il suo valore nominale, scende momentaneamente sotto il minimo valore tollerato. In questo caso il sistema potrebbe non essere resettato, o non essere resettato con sufficiente prontezza (in simili frangenti invece altre periferiche potrebbero farlo e generare errori nel caso di comunicazione con il microprocessore). Un terzo caso si verifica quando si ha l’esigenza di determinare con precisione le soglie di tensione di funzionamento. Questa soluzione risulta quindi parziale o comunque non soddisfacente in molti casi.
Il reset manuale
La maggior parte dei sistemi digitali è dotata di un pulsante per for nire manualmente il comando di reset al microprocessore. Il segnale prodotto dal pulsante ha in genere delle pessime caratteristiche in termini di tempo di salita e soprattutto di stabilità (rimbalzi). Questo può portare ad un riavvio non perfetto del microprocessore e del firmware, infatti alcuni registri o periferiche potrebbero essere avviate in maniera incorretta. Lo stesso firmware, che in genere contiene nella prima parte alcune inizializzazioni abbastanza critiche (tra cui le impostazioni relative alle interruzioni ed alle modalità di funzionamento) potrebbe avviarsi in condizioni non corrette e non facilmente individuabili, dando luogo a malfunzionamenti del sistema. Anche per il pulsante di reset manuale sarebbe quindi necessario prevedere dei circuiti di condizionamento, aumentando il numero di componenti e la complessità del sistema.
Watchdog affidabile
Una misura di sicurezza spesso utilizzata in molti sistemi è l’impiego del cosiddetto “watchdog”: un dispositivo che ha il compito di resettare il microprocessore nel caso questo si blocchi a causa di un errore o malfunzionamento. In genere il watchdog fornisce un impulso di reset al microprocessore se non viene a sua volta resettato dal programma prima che scada il suo timeout. Attualmente quasi tutti i microcontrollori dispongono di un watchdog integrato, che può essere controllato dal software. Tuttavia proprio questa ultima caratteristica rende il dispositivo non completamente affidabile. Un software fuori controllo infatti potrebbe resettare e perfino disabilitare il watchdog interno. Inoltre un’eventuale avaria temporanea del componente potrebbe portare al blocco dello stesso watchdog. Per questo motivo in applicazioni particolarmente critiche è comune l’impiego di watchdog esterni, che funzionano in maniera completamente indipendente dal microcontrollore.
Il MicroMonitor DS1232
Tutte le funzioni viste prima possono essere gestite con un solo componente prodotto da Maxim-Dallas, definito “MicroMonitor” e siglato DS1232. Questo dispositivo si occupa del monitoraggio continuo e della gestione dei tre parametri fondamentali visti prima: la tensione di alimentazione del microprocessore, l’esecuzione del software, e il reset esterno, evitando malfunzionamenti dovuti a condizioni impreviste su questi parametri. In particolare il MicroMonitor controlla la tensione di alimentazione del microprocessore, confrontando la con un preciso riferimento interno compensato in temperatura, e assicurandosi che questa non scenda sotto un livello di tolleranza prescelto. In questo caso il dispositivo attiva l’uscita di reset, fermando l’esecuzione, fino a quando la tensione non si riporta al livello nominale. Il segnale di reset è mantenuto basso per un minimo di 250ms, in questo modo si evitano funzionamenti intermittenti e potenzialmente dannosi. La seconda funzione svolta dall’integrato è quella di fornire un segnale di reset “pulito” a partire da un segnale esterno (derivato da un pulsante o da altri dispositivi). Anche in questo caso l’uscita presenta fronti netti ed una durata minima dell’impulso di 250ms. La terza funzione è quella di watchdog: il dispositivo provvede a resettare il microcontrollore se non riceve un segnale da questo entro lo scadere del timeout. E’ possibile programmare il timeout in un intervallo compreso tra 150ms e 1,2 secondi. Lo schema interno del MicroMonitor è mostrato in figura 2, mentre la sua piedinatura è visibile in figura 3.
L’ingresso PBRST\ è quello a cui può essere collegato un pulsante di reset o un segnale di reset esterno, TD permette di impostare gli intervalli di tempo da utilizzare, TOL la tolleranza per il brownout reset (5% o 10% di Vcc), ST è l’ingresso di “strobe” per resettare periodicamente il watchdog. Come si può notare sono disponibili due uscite complementari per il reset: RST\ ed RST. Questa utile caratteristica permette di collegare facilmente il componente a ingressi di reset attivi alti o bassi.
Utilizzo con in sistema basato 8051
Utilizzare il DS1232 in un sistema basato su microcontrollore 8051 (ma anche altri microcontrollori e microprocessori) non presenta alcuna difficoltà: è sufficiente collegare il dispositivo all’ingresso di reset, alimentarlo e collegarvi il pulsante di reset, come mostrato in figura 4.
L’uscita di reset utilizzata per il microcontrollore è quella diretta, quella negata può essere lasciata libera o collegata ad una resistenza di pull-up come in questo caso per osservare dall’esterno il comportamento del circuito. Il segnale ST, utilizzato per il watchdog è collegato alla porta P3.4 del microcontrollore, che provvederà periodicamente ad attivarla per evitare il timeout. Il comportamento del sistema all’accensione è mostrato in figura 5, in cui è mostrata la tensione di alimentazione (traccia 1) e il reset generato dal componente.
Come si può vedere, all’avvio il microcontrollore è tenuto nello stato di reset per circa 400ms. Un simile comportamento si ha quando viene premuto il pulsante di reset (figura 6): anche in questo caso a seguito di un impulso di reset piuttosto breve e potenzialmente affetto da rimbalzi, si ha un immediato segnale di reset pulito e di durata pari a circa 600ms, che previene eventuali reset multipli e/o parziali.
Infine nelle figure 7 e 8 è mostrato il comportamento del sistema nel caso di brownout. Come si vede non appena la tensione di alimentazione (traccia 1) scende sotto il valore di tolleranza impostato viene generato un reset, che viene mantenuto fintantoché la tensione non raggiunge nuovamente il valore nominale (figura 8).