PIC16x84 INTRODUZIONE 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. 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 ed altre funzioni aggiuntive come Power-On Reset (POR), Sleep mode e cifratura dei dati. 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 col quale occorre avere una certa parsimonia nel riprogrammarlo, quindi buona parte del debug deve essere fatta col simulatore La pratica Questo è ciò che serve per iniziare a lavorare con i PIC: Il compilatore/assembler. Esistono diverse alternative, sia gratuite che a pagamento, per diversi linguaggi di programmazione. Programmare in BASIC un microcontrollore RISC con 68 byte di RAM è sconsigliabile, quindi è consigliabile usare direttamente il linguaggio assembly. Es. MPLAB, la suite per Windows fornita gratuitamente dalla Microchip che comprende ambiente di sviluppo grafico, assembler e debugger. 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 ed hanno un costo elevato) ai circuiti composti da un paio di diodi e due transistor. PIEDINATURA Figura 1 - Piedinatura RA0 To RA4 RA è una porta bidirezionale. Cioè può essere configurata sia come una porta di input che di output. Il numero seguente si riferisce al bit ad essa relativo (0 to 4). Pertanto abbiamo una porta di 5 bit bidirezionale dove ciascun bit può essere configurato come Input o Output. RB0 To RB7 RB è una seconda porta bidirezionale. Si comporta esattamente come la RA, però ci sono 8 bit. VSS And VDD Sono i piedini di alimentazione del microcontrollore. VDD è il positivo, and VSS è il negativo, o 0V. La massima tensione applicabile è di 6V, e il minimo è 2V OSC1/CLK IN And OSC2/CLKOUT Sono i pin a cui si collega l’oscillatore esterno (external clock), in modo tale che il microcontrollore possa essere in grado di gestire il tempo. MCLR Pin utilizzato per cancellare la memoria del PIC (i.e. quando vogliamo riprogrammarlo). INT è un ingresso che può essere monitorato. Se questo pin va alto, possiamo far ripartire il programma, fermarlo o qualsiasi altra singola funzione noi si desideri. T0CK1 è un altro ingresso di clock, su questo opera un timer interno. È totalmente indipendente rispetto al clock principale.