Una introduzione al PIC16F1827
|
Sicuramente PIC16C84, PIC16F84 e PIC16F84A sono stati il "must"
di Microchip per lungo tempo: migliaia di pagine di descrizione ed
applicazione e migliaia di righe di codice sono disponibili sul WEB per questi
processori, che risalgono agli anni '90.
Infatti PIC16C84 risale al 1993 e 16F84 al
1998,
ovvero ad un tempo che, per l' elettronica, è pari a un'era.
Però, il PIC16x84A è ancora vitale, nonostante da gran
tempo esistano delle
alternative più recenti: nella fascia 16F esistono da tempo diverse
possibilità decisamente competitive, ad esempio 16F88, 16F648A e
16F628 o anche 16F819 e 16F676.
Ma Microchip è una azienda moto attiva nel
competitivo mercato degli embedded e non passa mese senza che sia sfornata una
qualche novità, se non un prodotto così innovativo da dare origine ad una
nuova famiglia. E nei molti anni che ci separano dalla nascita di PIC16F84
ampie parti della struttura degli 8 bit è stata migliorata, pur mantenendo
quella compatibilità di base tipica dei prodotti di Microchip.
Se tralasciamo la famiglia Enhanced, ovvero i PIC18F,
che, con la loro struttura della memoria programma e della memoria RAM, oltre
al set di istruzioni esteso, costituiscono una base di partenza ideale, sia
per le applicazioni in Assembly sia per quelle in C, possiamo osservare che
Microchip sta da un certo tempo implementando funzioni nuove sulla fascia
economica dei PIC16F.
Questo ha originato una nuova famiglia che il costruttore
definisce Enhanced Mid-range e che comprende i più recenti PIC12F1xxx
e PIC16F1xxx. I componenti di questa famiglia superano i loro predecessori per
prestazioni, estensione del set di istruzioni, basso costo e disponibilità di
periferiche, comprese quelle della "next
generation".
Uno dei più noti "next generation" è il PIC16F1827, disponibile anche come low power
16LF1827 e con il suo parente
16F1826 che dispone di meno memoria programma o il maggiore 16F1847/16F1937
a 28 pin.
Questo chip è fornito dal costruttore sulla sua PICkit 18-pin Demo Board,
part number DM164120-4
, una pratica low cost adatta ad essere usata in coppia con il
PICKit3.
Più di tante parole, la tabella seguente visualizza queste differenze:
* costo alla data di stesura della pagina, con riferimento a Microchp
Direct.
In particolare vediamo in cosa 16F1827 si differenzia
dai suoi predecessori :
Quindi, dato che 16F1827 costa meno, è più
performante, ha più funzioni,
può utilizzare il software e l' hardware scritto per 16F628, perchè continuare
ad usare 16F628 se non addirittura il "nonnetto" 16F84 ?
Le motivazioni sono le stesse di quelle che hanno ritardato,
negli utenti meno attenti e, sopratutto nei principianti, il passaggio da
16F84 a 16F628. Ovvero:
-
è disponibile più letteratura, esempi, pagine WEB sui
componenti datati che su quelli più recenti
-
esiste una certa inerzia che fa
trovare comodo usare un componente collaudato senza andare a verificare
che il costruttore è andato ben più avanti.
-
sentire la necessità di mantenersi aggiornati non è cosa comune, non solo per i principianti, ma anche
per molti professionisti.
Inoltre, dobbiamo dire che, senza dubbio, in primo luogo
il "foglio dati" di un embedded come 16F1827, composto da ben
406 pagine, in inglese, spaventa molti utenti (anche di lingua
inglese...).
E, in secondo luogo, la marea di nuove periferiche
implementate hanno spesso una applicazione, a prima vista, molto
"specialistica" e non è facile, senza un qualche tutorial, venirne
a capo e quindi saperle impiegare per il loro scopo principale, nè tanto meno
intuirne altre applicazioni (ad esempio, Microchip descrive ben 48 diverse
possibili applicazioni base per il modulo CTMU, principalmente previsto per
interfacciare tasti a sfioramento).
Questo fa si che l' affrontare il nuovo prodotto sia
una impresa che si tende a rimandare.
|
Anche perchè, pigrizia a parte, entrano in gioco un paio di opinioni comuni:
Entrambe sono, però, da considerarsi erronee e fuorvianti.
Sicuramente l' approccio ad un nuovo ambiente avviene per
gradi, a partire dalla conoscenza della logica che lo muove. Ma pensare sia
meglio, nel mondo degli embedded, iniziare a impratichirsi su un componente
di 10 e più anni fa è identico al fatto che una scuola guida faccia
esercitare gli allievi sul carro
di Cugnot.
Dove, per guidare le auto attuali, sarebbe limitante anche la Ford modello T.
Con questo si intende dire che è secondario conoscere la
"storia" e l' evoluzione di un ambiente per comprenderne lo stato
attuale; semplicemente non occorre ripercorrerne tutta la catena evolutiva !
Utilizzando un embedded recentissimo si potrà benissimo iniziare da un livello
minimale (il solito LED acceso...) senza difficoltà molto maggiori che
con un chip anziano e, nel
contempo, si potrà spaziare gradualmente verso applicazioni più complesse
che il componente datato non avrebbe reso possibili.
Va anche evidenziato che, negli embedded, il componente
più anziano non è "il più semplice", ma solamente quello dotato
di minori "features"; all' interno di una certa struttura
fondante, come nel caso dei PIC16, questa struttura è presente a partire dal
capostipite ed il costruttore cercherà di mantenerla quanto più possibile
costante per permettere un semplice passaggio ai dispositivi più
recenti.
Ogni passaggio successivo è essenzialmente un miglioramento della struttura
per correggerne i problemi. Ad esempio, la divisone in banchi e pagine della
memoria è sempre stato uno degli elementi più odiosetti dei PIC a 8 bit;
questo è stato in gran parte corretto nei PIC18F, ma anche negli Enhanced
Mid-range Microchip inizia a implementare soluzioni (Linear Memory, istruzioni
BSW, più FSR, ecc) che rendono più semplice la vita al programmatore.
Si potrebbe qui obiettare che, ad esempio, anche se sul
16F84 non c'è un UART, una comunicazione seriale si può implementare
ugualmente in bit-banging. Ma si tratta di una obiezione
insignificante: se, ad un costo minore, ho disponibile un EUSART, le
cui prestazioni, semplicità di uso e quantità di codice necessario alla
gestione non sono neppure lontanamente comparabili con un bit-banging, perchè
limitarsi a quest'ultimo ?
Se voglio sviluppare una struttura bit-banging per simulare l' UART lo posso
benissimo fare anche sul componente dotato di EUSART !
Ma se nel componente senza UART non potevo andare più in là del bit-banging,
nel componente con EUSART mi si aprono molte maggiori possibilità (e,
oltre tutto,
a costo minore...).
Così potrò, senza cambiare componente, sperimentare il modulo MSSP, le
funzioni a bassissimo consumo (XLP), sfruttare il range di tensione di
alimentazione più ampio, gli oscillatori interni ad alta frequenza, il DAC,
ecc.
Tutte cose che non posso fare col componente più datato.
Qui si vede l' erroneità del secondo punto prima indicato: il
fatto che un chip sia inzeppato di funzioni, delle quali per la maggior parte,
al momento, non saprei cosa farmene, non è un fatto limitante, anzi, è
l'opposto. E come se, per fare un esempio, disponessimo di una libreria
con dieci volumi ed una con mille volumi. Nella seconda libreria sono presenti
anche i dieci della prima e nessuno mi obbliga a leggere tutti gli
altri novecentonovanta fino a che non lo ritengo necessario. Nella
libreria con dieci volumi, gli altri novecentonovanta non li ho e quindi se
voglio consultarli, devo acquistare la nuova libreria. Se ho già la libreria
completa, non ho bisogno di altro.
E, di nuovo, siccome la libreria con mille volumi costa meno di quella con
dieci volumi, che senso ha continuare ad usare questa ? Altra
obiezione insensata è quella di considerare inutile per una didattica
l' uso di un chip performante.
Se devo implementare una applicazione minimale per didattica, tipo "accendi il
LED", posso farlo in maniera del tutto identica sia su un chip con 1 k di
memoria programma sia su uno con 28 k, sia su un chip con 10 periferiche che su
uno con 100. Le risorse non usate saranno lì in attesa di un futuro impiego.
Ma nell' usare il chip più "dotato" non ci sarà nè aumento di
costo, dato che il chip più recente costa meno
del suo predecessore, nè spreco di energia, perchè il componente recente
avrà consumi specifici minori del predecessore, nonostante le maggiori
prestazioni.
L' unica ragione per mantenere la didattica legata a componenti obsoleti è la
pigrizia mentale (ove non si tratti di convenienza economica) dell' evitare la modifica di quanto
già scritto per questi, allo scopo di adattarlo ai nuovi dispositivi. Inoltre,
la struttura innovativa degli Enhanced Mid-range costituisce una base
molti migliore per il C anche su componente PIC16F: dove un compilato C
appena più che semplicistico facilmente eccede la capacità della memoria di
un mid-range, nel caso delle nuove disponibilità di RAM, FLASH, istruzioni,
stack, ecc. la base di supporto diventa molto simile a quella offerta dagli
Enhanced PIC18F.
Sicuramente, però, la limitata presenza di esempi sul WEB
e il voluminoso foglio dati (e, non ultimo, dalla lingua inglese
che, pervicacemente, non si vuole apprendere) costituiscono un limite anche
per il meglio intenzionato.
In questo senso, come abbiamo fatto per il passaggio
16F84-->16F628, proveremo a stilare qualche pagina di aiuto anche
per questo componente più recente.
|