
Primo microcontrollore al mondo ad essere presentato nel case SOT-23, il PIC10F20x offre una soluzione miniaturizzata, ma robusta ed efficace per il controllo in soli 6 pin.
Com’è chiaro agli utenti più attenti alle evoluzioni del mercato, Microchip ha negli ultimi anni spostato la strategia dei propri investimenti verso l’alta gamma (si pensi alle nuovissime famiglie a 16 bit PIC24, dsPIC30, dsPIC33 e ai moltissimi componenti usciti nella famiglia ad 8 bit PIC18). Pur avendo effettuato una scelta strategica di questo tipo però, la casa di Chandler cerca naturalmente di mantenere il proprio primato nella vendita di microcontrollori ad 8 bit, conquistato nel 2004. In quest’ottica nasce appunto la nuova famiglia di microcontrollori a 6 pin denominata PIC10F20x, presente nella line card con ben 6 esemplari, suddivisi per dimensione della memoria Flash e periferiche di ingresso. Ad oggi non esistono sul mercato altri microcontrollori di questo taglio, per cui Microchip si crea a tutti gli effetti un nuovo settore, quello della sostituzione dei componenti analogici e dei semplici integrati per la gestione delle funzioni logiche.
Analisi delle caratteristiche tecniche
Come consuetudine, risulta interessante l’analisi di uno dei componenti di questa famiglia, che conta come detto 6 componenti. Il componente preso in esame è il più prestante dei sei, ossia il PIC10F222. In figura 1 una tabella riassuntiva della famiglia: si noti che sono disponibili anche modelli con convertitore AD a 8 bit.
CARATTERISTICHE DEI MICRO DELLA FAMIGLIA PIC10F | |||||
DISPOSITIVO | PROGRAM FLASH (WORDS) |
DATA RAM (BYTES) |
OSCILLATORE INTERNO |
COMPARATORI | CANALI ADC (8-BIT) |
PIC10F200 | 256 | 16 | 4MHz | - | - |
PIC10F202 | 512 | 24 | 4MHz | - | - |
PIC10F204 | 256 | 16 | 4MHz | 1 | - |
PIC10F206 | 512 | 24 | 4MHz | 1 | - |
PIC10F220 | 256 | 16 | 4/8MHz | - | 2 |
PIC10F222 | 512 | 23 | 4/8MHz | - | 2 |
Figura 1. La famiglia PIC10F22x nel dettaglio |
PIC10F222, il più grande fra i piccoli
Questo oggetto è disponibile sia nel package SOT-23 che nel tradizionale 8DIP. Quest’ultimo è utile soprattutto al progettista che, durante la fase di debug del prodotto, ha bisogno di rimuovere con facilità il microcontrollore per la programmazione e la sostituzione. Chiaramente in questo caso vi sono due pin non connessi, segnati in figura 3 come NC. Il case SOT-23 (figura 2), al contrario, si presta decisamente a design dalle dimensioni contenute, come ad esempio sensori, applicazioni medicali a contatto col paziente, applicazioni consumer di nuova concezione. Il PIC10F222 è equipaggiato di 768 Byte di memoria programma di tipo Standard Flash, che nel linguaggio di Microchip significa una Flash in grado di operare da 2 a 5,5 Volt, priva di pompa di carica interna e quindi non in grado di esser riscritta durante il normale funzionamento. La Program Memory ha una larghezza di 12 bit, ragion per cui le effettive righe di programma scrivibili sono 512, come mostrato in figura 4.
Calcolo delle effettive righe di codice in un microcontrolloreOgni microcontrollore viene caratterizzato dal numero di Byte di Program Memory. Questo dato, tuttavia, rischia di essere male interpretato, perché da solo fornisce una indicazione parziale dell’effettiva quantità di codice che può esser scritta. L’altro dato fondamentale, infatti, è la larghezza di una riga di programma in bit. Questi due dati, opportunamente combinati fra loro, danno una indicazione precisa del numero di righe programma a disposizione. Poniamo ad esempio:
Il numero totale dei bit di flash sarà dato da 7168x8, quindi 57344. Dividendo il risultato ottenuto per la lunghezza della word si ottiene: |
Il microcontrollore, chiaramente, non può essere utilizzato con un clock esterno, dal momento che i 6 pin totali si riducono a 4 per l’imprescindibile presenza dei due pin di alimentazione Vdd e Vss. A questo scopo è stato invece implementato un oscillatore interno di precisione, funzionante a 4 o ad 8MHz e in grado di avere una precisione di ±1% operando a 3 Volt ed alla temperatura di 25 gradi. Lavorando invece nel range di temperatura industriale (0..85°C) e in tutto il range di tensione di alimentazione (2..5,5Volt) la precisione è del 2%, per arrivare fino al 5% che si ottiene lavorando in range di temperatura esteso (-40..+125°C). La tipologia di struttura architetturale rimane la consueta Harvard Modificata, quindi la memoria dati, ossia la RAM, è una regione di memoria fisicamente distinta dalla Program Memory. In particolare, la Data Memory ha larghezza di 8 bit, e così pure il Data Bus. Un’altra caratteristica dei microcontrollori basati su Architettura di Harvard consiste nell’avere un set di istruzioni ridotto (RISC), che nel caso del PIC10F222 è pari a 33. Ognuna di queste istruzioni è eseguita ogni 4 cicli di clock, ragion per cui si esegue una istruzione ogni microsecondo nel caso di clock a 4MHz oppure ogni 500 nanosecondi nel caso di clock a 8MHz. Ognuna di queste istruzioni, però, porta un contenuto informativo a sé stante, ad esempio una operazione di ADD esegue la somma in un ciclo macchina e così via. Questa caratteristica rende i microcontrollori RISC facilmente “controllabili” dal punto di vista dei tempi di esecuzione, dal momento che ogni istruzione esegue una ben precisa operazione logico-matematica o una azione sui registri speciali della macchina (SFR).
Calcolo del tempo di esecuzione di una istruzioneOgni microcontrollore è in grado di eseguire una istruzione sfruttando un certo numero di cicli di clock. Nel caso dei microcontrollori Microchip della famiglia PIC10F22x ogni istruzione necessita di 4 cicli di clock per poter essere eseguita. Considerando ad esempio che il clock interno del microcontrollore funziona ad 8MHz è possibile dedurre quanto segue:
|
I livelli di stack disponibili sono 2, per cui si potrà eseguire una sola CALL per volta, senza la possibilità di annidare altre chiamate a procedura. Questa caratteristica non deve però esser vista come una forte limitazione, dal momento che con sole 512 righe di programma sarà più che sufficiente l’utilizzo di una sola CALL per volta. Ogni pin di I/O, come consuetudine nei PIC, è in grado portare in uscita o di accettare in ingresso sino a 25mA di corrente ed è equipaggiato con diodi di clamp interni per la protezione della porta stessa.
Il microcontrollore è dotato di un Timer interno ad 8 bit, fondamentalmente utilizzabile per la base dei tempi, ossia il TIMER0. Questo registro può essere anche utilizzato con il Prescaler presente a bordo micro (figura 5), per poter effettuare un conteggio ad ogni numero fissato di colpi di clock. Con questa tecnica si potranno contare tempi pari a qualche decina di millisecondi. Questo Prescaler può anche essere utilizzato dal WatchDog di sistema, al fine di poter impostare un tempo di refresh più lungo rispetto a quello possibile con il solo utilizzo del Watchdog timer ad 8 bit. Com’è noto, Microchip ha da sempre puntato su prodotti adatti all’utilizzo su sistemi a batteria, e quindi caratterizzati dai bassissimi consumi. Da qualche anno è stata rilasciata una tecnologia altamente innovativa, denominata NanoWatt©, che consente di avere bassissimi consumi in modalità sleep e di poter “modulare” la potenza assorbita dal microcontrollore accendendo o spegnendo le varie periferiche. Nel caso del PIC10F222, infatti, è possibile ridurre la corrente assorbita sino a 100nA, in modalità sleep, mentre è possibile accendere il modulo AD Converter, effettuare la lettura del segnale analogico e successivamente spegnere il modulo, ottimizzando di conseguenza il consumo. É importante porre in evidenza le diverse modalità con le quali il micro può esser risvegliato dallo stato di sleep: la prima è il classico trigger esterno, noto come Wake up from Pin Change. Altre modalità di risveglio sono: tramite l’intervento del Watchdog Timer, l’utilizzo del comparatore (che percepirà l’informazione sul raggiungimento di una certa soglia logica esterna), una sul pin di Master Clear (reset di sistema).
In figura 6 la tabella delle caratteristiche elettriche, tratta dal Data Sheet del componente. Un cenno merita infine il citato stadio comparatore, il quale è in grado di accettare all’ingresso segnali di tipo multiplexato invertente e non invertente e genera il risultato della comparazione portandolo esternamente sul pinGP2 oppure salvando internamente il risultato logico sul bit 7 del registro CMCON0.
In figura 7 la struttura a blocchi del comparatore. Per rendere il componente quanto più possibile compatibile con le caratteristiche dei componenti Microchip di altre famiglie, anche la PIC10Fxxx è dotata dell’interfaccia di programmazione In Circuit Serial Programming®. Sarà quindi possibile programmare il dispositivo anche dopo il montaggio a bordo scheda, attraverso l’interfaccia standard ai dispositivi di programmazione. È pure possibile effettuare un debug avanzato del componente, facendo affidamento all’ “In Circuit Debugging Support”, che supporta anche la interessante possibilità di poter avere un Breakpoint Hardware, in cui l’ICD2 mantiene fisicamente ferma la macchina, consentendo una analisi attenta dei parametri della scheda tramite oscilloscopio.
I programmatori Microchip che supportano la famiglia PIC10F sono dunque il citato ICD2, il PicStart Plus (solo per la versione Dual In Line), il ProMate 2, ormai non più vendibile, ed il nuovo Pro Mate 3, che ha sostituito il modello obsoleto. Come tool di sviluppo è poi importante menzionare il PIcKit 1, tramite il quale è possibile debuggare ed analizzare tutte le periferiche sopra citate della famiglia PIC10F. Sia il PICKit1, che l’ICD2, che il PICStart Plus possono poi esser interfacciati comodamente ai PIC10F tramite l’Universal Programmer Adapter Board AC163020 della quale si riporta una foto in Figura 8.
Per finire, dal momento che questi dispositivi si prestano a funzioni davvero fini, quali sostituzione di elementi discreti o passivi, o di integrati che potrebbero esser critici per l’applicazione, è pure possibile mantenere protetto da letture esterne tramite il “Programmable Code Protection”.
Applicazioni tipiche
Glue Logic Universale
Le applicazioni cui la famiglia PIC10F2XX si presta sono molteplici. Ad esempio, il PIC10F2XX ben si presta ad interfacciare un ASIC ad una interfaccia esterna di cui non è noto a priori lo standard, realizzando quindi una sorta di Glue Logic universale (figura 9).
Sarà quindi possibile avere continui update di questa interfaccia, vista la riprogrammabilità del PIC, ed avere la necessaria duttilità al ricevere e trasmettere i dati nei diversi formati possibili (Manchester, PWM, e non; PPM etc…). Fatto certamente importante, il risparmio economico derivante dall’utilizzo di un ASIC privo di queste interfacce è notevolmente maggiore del costo del PIC, per cui anche dal punto di vista commerciale l’applicazione avrà un notevole valore aggiunto.
Generazione di sinusoidi
Un’altra applicazione certamente interessante è la generazione di una forma d’onda sinusoidale tramite PIC10F. Certamente, chi opera con la manipolazione dei segnali ben conosce le difficoltà ed il costo nella realizzazione di un buon Phase Shift Oscillator, non ultimo per la necessità di scegliere un ottimo operazionale a 4 stadi. Oggi, con un PIC10F200 e un RC esterno è possibile ottimizzare e semplificare la realizzazione di un circuito oscillante, oltre ad avere la possibilità di generare una ampiezza variabile cambiando il duty cycle dell’uscita. Nella figura 10 sono riportate le soluzioni classiche ad amplificatori operazionali e la soluzione con PIC10.
Un esempio di codice
Per completezza, si lascia ai lettori una base di lavoro, realizzata in Assembly in grado di porre il microcontrollore in un loop infinito, protetto da Watchdog (procedura chiamata “Loop Principale”). Non viene realizzata alcuna funzione, ma il semplice firmware può esser preso quale base di partenza per le numerosissime applicazioni cui il PIC10F222 si presta.
Inizio: list p=10f222 #include <p10f222.inc> __CONFIG _WDT_ON ERRORLEVEL -302 ;******************************** ;* Definizione Variabili ;******************************** FLAG0 EQU 0X09 ; Variabile per la creazione di FLAGS ;******************************** ;* Definizione Flags ;******************************** #define time FLAG0,0 ; Gestione dei Flags ;************************************************ ;* Vettore di Reset INIZIO DELLA PROGRAM MEMORY ;************************************************ ORG 0x000 NOP GOTO START ;**************************************** ;* Tabelle ;**************************************** ORG 0x006 TABLE_AD ADDWF PCL,F RETLW B'00000100' ; Scegli quale AD di PORTB leggere RETLW B'00001000' RETLW B'00010000' ORG 0x00B TABLE_LED ADDWF PCL,F ; Scegli quali LED accendere contemporaneamente! RETLW .0 RETLW .12 RETLW .24 RETLW .32 ;**************************************************************** ;**************************************************************** ;* INIZIO DEL PROGRAMMA ;**************************************************************** ;**************************************************************** START CALL INIT_PORT CALL INIT_TMR0 CALL INIT_VARIABILI ;************************************************ ; LOOP Principale ;************************************************ LOOP CLRWDT GOTO LOOP ;************************************************ ; Procedure chiamate ;************************************************ INIT_PORT CLRF GPIO TRIS GPIO RETURN INIT_TMR0 MOVLW .131 MOVWF TMR0 RETURN INIT_VARIABILI CLRF FLAG0 RETURN END

Un micro decisamente piccolo per implementare varie soluzioni di controllo. Mi viene in mente la demo board con questo tipo di mikro, il PIC10F Capacitive Touch.
“Primo microcontrollore al mondo ad essere presentato nel case SOT-23”
???
Da sempre Atmel e’ presente sul mercato con MCU sot23 a 6 pin, tutta la serie ATtiny_x
Anzi, visto che questa scelta e’ venuta poco dopo l’acquisizione di Atmel, probabilmente e’ una delle prime operazioni post acquisizione
Il PIC10F è stato il primo micro SOT23, gli ATtiny sono usciti dopo. Comunque ora che ATMEL è stata praticamente acquisita da Microchip non ci saranno più gare a chi “è stato prima” 😉
Allora sono sbagliati i tempi grammaticali dell’articolo, perché fa pensare che è un componente nuovo appena uscito.
A chi non conosce Pic cosa deve pensare leggendo: “in quest’ottica nasce appunto la nuova famiglia”
Potete consigliarmi un buon testo oppure link per imparare a programmare in ASM