Calcetto elettronico | |
PUNTO 1: IL PIC Il controllo di tutte le funzioni logiche del circuito con EEPROM è affidato ad un microcontrollore PIC opportunamente programmato. Per semplificare e per snellire il tempo necessario allo sviluppo del software ho utilizzato un metodo di programmazione che mi da la possibilità di poterne scrivere icomandi in Basic ed ho poi convertito tali istruzioni in linguaggio assembler utilizzando un compilatore. I vantaggi di un compilatore Basic rispetto al linguaggio assembler sono evidenti: l'apprendimento dei comandi è pressoché immediato; il tempo di sviluppo del programma viene ridotto drasticamente; le istruzioni disponibili possono essere intuitive e di semplice utilizzo; si possono realizzare programmi complessi con poche righe di istruzioni; si possono ottenere immediatamente funzioni che solo un esperto programmatore riesce a gestire in assembler.
Per entrare meglio nel dettaglio, un microcontrollore è in pratica un piccolo computer che necessita per funzionare di programmi scritti in modo tale da fargli svolgere le operazioni desiderate. Il "micro" presenta una serie di piedini INPUT/OUTPUT, le cui funzioni ed i relativi stati logici sono controllati direttamente dal programma inserito nel micro. Le funzioni applicative, quindi, del micro sono innumerevoli e possono variare dalla semlice accensione di un LED fino a gestire un impianto luce da discoteca, o quanto altro noi volessimo. Il microcontrollore è dunque un dispositivo che non si usa così come si compra poiché viene venduto senza alcun programma al suo interno. Il programma deve essere memorizzato al suo interno allo stesso modo in cui si programma una normale memoria EPROM, utilizzando però un programmatore apposito per una certa famiglia di microcontrollori. I programmi per il microcontrollori vengono generalmente scritti in un linguaggio assembler o in C. Il programma scritto in assembler o C viene poi compilato in una sequenza di byte che, memorizzata nella memoria interna del microcontrollore, permette al micro di lavorare nel modo desiderato. Nell'ambito dell'elettronica i microprocessori ed i microcontrollori sono sempre stati legati l'uno all'altro, ma, tra loro, persistono sostanziali differenze: i microcontrollori, oltre ad avere un nucleo operativo per eseguire le istruzioni di un certo programma, integrano nello stesso chip anche una memoria EPROM, nella quale il programma viene memorizzato, una memoria RAM per i dati temporanei, nonché tutti i dispositivi di interfaccia necessari a comunicare col mondo esterno. Oltre a questo, poi, le famiglie di microcontrollori più evolute integrano anche una serie di funzioni accessorie, quali timer, convertitori analogico/digitali, dispositivi per la comunicazione seriale e così via. In poche parole, mentre un microprocessore ha sempre bisogno di una serie di circuiti integrati esterni per poter funzionare ed interfacciarsi con altri dispositivi, i microcontrollori sono dispositivi che non necessitano di nulla. Il mondo dei microcontrollori è molto vasto ma è possibile scegliere il prodotto fra tanti che risponde meglio alle caratteristiche a noi necessarie proprio grazie alla grande concorrenza del mercato. I produttori dei micro sono svariati, ed ognuno presenta delle caratteristiche in comune agli altri, come il linguaggio di programmazione, l'organizzazione della memoria interna, la gestione delle periferiche, ecc All'interno di ogni famiglia vi sono diversi dispositivi con caratteristiche differenti, quali capacità di memoria (8,16,32 bit), velocità di funzionamento, presenza di periferiche analogiche come convertitori e così via.
Fra tutti i prodotti a disposizione è stato scelto il PIC 16C/F84, prodotto negli ultimi anni dalla Arizona Microchip, ditta americana specializzata nei microcontrollori a 8 bit e di memorie EPROM. Le caratteristiche peculiari di questo micro sono la presenza di una memoria EEPROM di programma da 64 byte, quindi significa che può essere programmato più volte elettronicamente, con capacità di 1Kbyte (1024 parole da 14 bit ognuna), una memoria RAM di 64 byte e 13 piedini IN/OUT (A di 5 linee; B di 8 linee) ed infine un timer integrato.
Questo microcontrollore dispone di un registro Program Counter a cui spetta il compito di indirizzare la memoria, caratterizzato da 13 bit: questo vuol dire che possono essere indirizzate fino a 2 con esponente tredici (8192) locazioni di memoria di programma. Tuttavia, di queste locazioni indirizzabili, vengono utilizzate solo quelle il cui indirizzo è compreso tra il numero esadecimale 0000 e il numero 03FF, per un complessivo di 1K di memoria. Il Program Counter è organizzato in due byte: PCL (Program Counter Low) e PCH (Program Counter High); PCL è un registro che può essere scritto e letto direttamente, mentre PCH può essere scritto solo attraverso il registro PCLATH. Il PIC 16C84 dispone di un'area di stack pari a 8 parole da 13 bit. L'area di stack è una particolare zona di memoria dove vengono memorizzati gli indirizzi di ritorno quando viene effettuata una istruzione di CALL, cioè quando il programma lascia il suo normale flusso di esecuzione per andare ad eseguire una subroutine localizzata in una differente zona di programma. La memoria dati è quella parte di memoria dove vengono memorizzati temporaneamente dei dati; si tratta quindi una memoria di tipo RAM che mantiene i dati finché permane la tensione di alimentazione e perde i dati quando al micro viene tolta alimentazione. Una parte di questa memoria è riservata ad alcuni registri di uso speciale mentre altre locazioni vengono lasciate libere per i dati veri e propri. La memoria RAM, che viene spesso denominata memoria dei file registri, è organizzata come un blocco di 128 locazioni di memoria da 8 bit (le locazioni vanno da 00h a 7Fh); questo blocco è doppio, nel senso che esistono due pagine , la pagina 0 e la pagina 1, ciascuna costituita appunto dalle 128 locazioni. Per accedere all'una o all'altra pagina occorre agire su alcuni bit di un registro particolare, denominato STATUS REGISTER; è anche possibile indirizzare direttamente le 128 locazioni per ogni pagina tenendo però presente che in realtà soltanto 48 di queste locazioni sono realmente implementate nel micro; concludendo è possibile accedere solo alle locazioni che vanno da 00h a 2Fh. Di queste 48 locazioni, le prime 12, cioè quelle con indirizzi che vanno da 00h a 0Bh sono occupate da registri dedicati, mentre le 36 locazioni da 0Ch a 2Fh sono registri di uso generale liberamente utilizzabili per i dati. La seconda pagina contiene nelle prime 12 locazioni (da 80h a 8Bh) dei registri dedicati, mentre le successive locazioni, quelle con indirizzo da 8Ch a Afh, corrispondenti contenute nella pagina 0. Tutto questo viene chiarito dallo schema riportato di seguito, guardando a grandi linee il significato dei registri dedicati: |
|
TMR0 e OPTION
sono due registri che controllano il funzionamento del timer integrato;
PCL, come già visto, costituisce la parte bassa del Program Counter; STATUS è un registro (contenente alcuni bit adattati alla sola lettura e altri che possono essere sia letti che scritti) che consente di controllare alcune modalità di funzionamento del micro, fra le quali l'indirizzamento della pagina nel File Registri, l'indicazione del rapporto nelle operazioni matematiche e così via; FSR è il File Select Register e serve per selezionare e accedere al file registri; PORTA e POTRB costituiscono le due porte del micro; se le porte sono configurate come uscite, scrivendo un bit su questi due registri lo si trova in uscita alla porta corrispondente; se le porte sono configurate come ingressi, leggendo questi registri si acquisisce lo stato logico disponibile sul piedino di I/O corrispondente; TRISA e TRISB sono i registri di configurazione delle porte A e B, e vengono utilizzati per determinare quali bit delle relative porte devono funzionare come uscite e quali come ingressi; un "1" configura il corrispondente bit di PORTA o di PORTB come ingresso, mentre uno "0" lo configura come uscita; EEDATA,EEADR,EECON,1EECON2 sono i registri che permettono di lavorare con la memoria EEPROM del micro; PCLATH serve per gestire il Program Counter; INTCON è il registro di controllo degli interrupt, termine con cui indichiamo un evento esterno (ad esempio il passaggio su un piedino di ingresso da livello logico alto o basso o viceversa) od interno (ad esempio, la fine conteggio del timer integrato) che costringe il microcontrollore ad abbandonare l'esecuzione del normale programma per processare altre istruzioni posizionate in una diversa area della memoria programma.
|
|
Nello schema seguente viene rappresentata la piedinatura del microcontrollore: | |
Pin 1 = RA2 (P10) Pin 2 = RA3 (P11) Pin 3 = RA4 (P12) Pin 4 = RESET Pin 5 = GND Pin 6 = RB0 (P0) Pin 7 = RB1 (P1) Pin 8 = RB2 (P2) Pin 9 = RB3 (P3) Pin 10 = RB4 (P4) Pin 11 = RB5 (P5) Pin 12 = RB6 (P6) Pin 13 = RB7 (P7) Pin 14 = +5V Pin 17 = RA0 (P8) Pin 18 = RA1 (P9) R1 = 10 kohm C2 = 100 nF C1 = 100 m F Q = 4Mhz |
|