La home page di Lorenzo
Home

FidoCAD
    Introduzione
    FidoCAD Win
    FidoCAD FAQ
    FidoCAD sources

Elettronica
    Oscilloscopio
    Misurare la potenza
    CS low-cost
    SMD for dummies
    PIC16x84
    Propic2clone
    IR-displ

Software
    EZ Tunnel
    Varie

Varie
    Segnalare lo spam

Links
Forum
Guestbook
Contattami

Ritirare le truppe italiane dall'IRAQ:

Si

No

Risultati

PIC16x84

 

La teoria

Il PIC 16F84 (e 16C84, che si differenzia per molto poco) della Microchip è un microcontrollore RISC a 8 bit molto interessante. Si distingue dai suoi concorrenti per una serie di motivi:

  • Architettura Harvard: il bus dei dati (a 8 bit) è distinto dal bus del programma (a 13 bit). A differenza della marea dei microprocessori che per ridurre i costi di produzione adottano l'architettura Von Neumann, i PIC non condividono la stessa memoria per codice e dati. Ciò gli consente di accedere contemporaneamente a entrambi;

  • RISC: i PIC 16x dispongono di un set di appena 35 istruzioni, già inclusi tutti i tipi di indirizzamento (immediato, diretto, indiretto); qualsiasi istruzione occupa una sola word di codice (14 bit). Grazie a una 2-stage pipeline, mentre un'istruzione viene decodificata/eseguita l'istruzione successiva viene caricata (fetch). In questo modo il tempo di esecuzione di una generica istruzione si riduce a un solo ciclo macchina (eccetto le istruzioni di salto, che ne richiedono due). Dato che ogni ciclo macchina corrisponde a quattro cicli di clock, diventa davvero banale calcolare i cicli di clock necessari per eseguire un determinato spezzone di codice;

  • EEPROM seriale interna per codice/dati: sia la memoria del programma che la memoria per i dati non volatile sono implementate grazie a delle EEPROM interne, programmabili serialmente con grande facilità. Ciò permette di ridurre al minimo la circuiteria di contorno al PIC; per farlo funzionare bastano un quarzo e due condensatori!

  • 13 pin di ingresso/uscita, alcuni dei quali utilizzabili per generare diversi tipi di interrupt. Questo potrebbe non sembrarvi un pregio rispetto ai concorrenti, ma se considerate che il 16F84 è contenuto in un banale DIL a 18 pin potreste anche cambiare idea!

Il resto è routine: timer (interno o pilotabile da un segnale esterno) più relativo divisore programmabile, interrupt generati da 4 diverse fonti (watchdog, timer, piedino RB0/INT, ingressi con change notification RB4,5,6,7), frequenze di clock fino a 10MHz, stack a 8 livelli separato da dati e codice, 36 registri general-pourpose, ingressi/uscite TTL compatibili piuttosto robusti (20mA source, 25mA sink) e un sacco di funzioni aggiuntive come Power-On Reset (POR), Sleep mode e cifratura dei dati.

Tutto questo in un dispositivo che costa orientativamente attorno alle 10 mila lire... non male, vero?

È necessario comunque parlare anche degli svantaggi:

  • Scarsa memoria dati a disposizione. Il 16F84 dispone di 1K di memoria per il codice (1024 istruzioni da 14 bit l'una), il che è buono e in linea con i concorrenti, ma soltanto di 68 bytes di data SRAM (36 nel 16C84) e 64 bytes di data EEPROM. La EEPROM viene utilizzata per memorizzare dati in modo non volatile e deve essere considerata una memoria secondaria, sia per la sua particolare lentezza (tempo di cancellazione/scrittura 10 ms) che per la sua deperibilità (tempo minimo di vita 1 milione di riscritture); quindi la memoria "di lavoro" è la sola SRAM: scordatevi di memorizzare una grossa mole di dati.
    Si potrebbe pensare di utilizzare una RAM esterna, ma in questo modo si occuperebbero molti pin (anche multiplexando tutto il multiplexabile, 8 pin sarebbero comunque necessari).

  • Scarsa longevità della program EEPROM. Il tempo minimo di vita è di sole 100 riscritture, il che rende il PIC un dispositivo quasi "da colpo sicuro": bisogna adottare una certa parsimonia nel riprogrammarlo, quindi buona parte del debug deve essere fatta col simulatore (a onor del vero devo dire che certi PIC "di prova" li programmo praticamente da anni, e non hanno ancora nemmeno una cella danneggiata... la Microchip è sicuramente stata molto prudente nel dichiarare il numero minimo di riscritture).



La pratica

Questo è ciò che serve per iniziare a lavorare con i PIC:

Il datasheet. Se avete già esperienze di programmazione su altre CPU o microcontrollori, nel datasheet troverete tutto ciò che vi serve. È praticamente un manuale di programmazione. Potete trovare la versione più aggiornata su www.microchip.com.

Il compilatore/assembler. Esistono diverse alternative, sia gratuite che a pagamento, per diversi linguaggi di programmazione. Secondo il mio modo di vedere le cose programmare in BASIC un microcontrollore RISC con 68 byte di RAM è un abominio, quindi consiglio di usare direttamente il linguaggio assembly. Personalmente consiglio di usare MPLAB, la suite per Windows fornita gratuitamente dalla Microchip che comprende ambiente di sviluppo grafico, assembler e debugger. L'interfaccia utente sa di antico, ma trasmette comunque una sensazione di professionalità e robustezza molto rassicurante. Manco a dirlo, potete trovare l'ultima versione di MPLAB sul sito della Microchip.

Il programmatore e relativo software. In questo caso c'è ancora più scelta che per quanto riguarda il compilatore. Si spazia dai kit di sviluppo prodotti dalla stessa Microchip (che spesso comprendono anche programmatore e in-circuit debugger, sono direttamente supportati da MPLAB e costano una barca di soldi) ai circuiti composti da un paio di diodi e due transistor. C'è purtroppo da dire che la pirateria della TV via satellite ha dato una notevole diffusione ad alcuni programmatori a basso prezzo e qualità ancora inferiore; vi sconsiglio vivamente di costruire o comperare dei programmatori autoalimentati, che prendono cioè l'alimentazione dalla porta parallela o seriale. Per due lire in più (oppure diverse decine di mila lire in meno, se ve li autocostruite) ci sono delle alternative decisamente migliori. In questa sede ve ne propongo due:

  • Un clone del propic2. Il propic2 è un programmatore che si collega sulla porta parallela che supporta una vasta gamma di PIC delle famiglie 12x, 16x e altre ancora, nonché le memorie EEPROM seriali su bus I2C. Gli schemi elettrici del propic2 sono di pubblico dominio, io non ho fatto altro che progettare una versione singola faccia del circuito stampato (quello proposto sul sito originale è doppia faccia) che non supporta il "production mode". Il software "ufficiale" del propic2 è a pagamento e non consiglio proprio di comprarlo: lo trovo decisamente brutto, e oltretutto non funziona sotto a Windows NT/2000. Consiglio invece di usare IC-Prog: è free, supporta il propic2 nonché molti altri programmatori, funziona anche sotto a Windows NT/2000 e ha un'interfaccia molto migliore. Per il programma ICprog rimando al siti dell'autore; per quanto riguarda invece il PCB del programmatore in formato FidoCAD e BMP, potete scaricarlo da qui assieme a qualche informazione utile per costruirlo. Qui trovate la versione online del pacchetto.

  • Un programmatore derivato direttamente dalla Application Note AN589 della Microchip: A PC-Based Development Programmer for the PIC 16C84. Anche questo programmatore si collega alla porta parallela, ma supporta solo ed esclusivamente i PIC16x84. Il software di programmazione è mio, l'ho scritto ex-novo; funziona anche sotto a Windows NT/2000 e non ha particolari problemi. Comunque anche IC-Prog lo supporta. Vi consiglio comunque di costruire il clone del propic2; in ogni caso il necessario per questo programmatore lo trovate qui.