Tutorials - PIC

 

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:

PIC

16F84A 16F628A 16F1827
CPU MIPS 5 5 8
RAM 68 224 384
Linear Memory - - 384
Program memory 1 k 2 k 8 k
EEPROM 64 128 256
Livelli stack 8 8 16
Interrupt context saving no no si
FSR - 1 2
Opcodes 35 35 49
I/O Pin 13 16 16
Comparatori - 2 2
Timer a 8 bit 1 2 4
Timer a 16 bit - 1 1
Timer1 Gate - - si
Canali PWM - 1 4
CCP - 1 2
ECCP - - 2
USART - USART EUSART
MSSP - - 2
ADC - - 10bit 12 ch
DAC - - si
VFR - - si
Capacitive Sensing Module - - 12 ch
DSM - - si
SR latch - - si
Reference Clock module - - si
Interrupt on change - - si
Temperature Indicator - - si
Low Voltage programming - si si
Oscillator mode 4 6 8
Clock massimo 20 MHz 20 MHz 32 MHz
Oscillatore interno - 4 MHz 32 MHz
XLP no no si
Tensione operativa 2-5.5 V 3-5.5 V 1.8-5.5 V
Package DIL 18 pin
Costo * 2.74 € 1.57 € 1.23 €
Data sheet (pdf)
Dimensione foglio dati 86 pag. 170 pag 406 pag.

* costo alla data di stesura della pagina, con riferimento a Microchp Direct.

In particolare vediamo in cosa 16F1827 si differenzia dai suoi predecessori :

  • Più memoria :

    • Più RAM, più FLASH, più EEPROM

    • Linear memory

    • Stack a 16 livelli
       

  • Più funzioni hardware:

    • oltre alle periferiche standard sono disponibile periferiche di nuova generazione
       

  • Più prestazioni :

    • 8 MIPS, clock intern o fino a 32 MHz

    • operatività fino a 1.8V, XLP

    • 49 istruzioni, più efficienza in C

    • Save e restore automatico del contesto all' interrupt
       

  • Compatibilità hardware e software

    • Stesso pinout nel package a 18 pin: stessi pin, stesse funzioni di base.

    • Un programma scritto per un processore gira su un altro con poche modifiche.
       

  • Costo

    • il prodotto più recente, nonostante le sensibili migliorie, costa meno dei prodotti più datati.

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.

 

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