Lezione 4
Hardware di un microprocessore
Abbiamo visto nella lezione precedente l'utilità di un sistema a logica programmata e quali siano i vantaggi
evidenti rispetto ad un sistema in cui le funzioni siano realizzate mediante componenti logici discreti e cioè
a logica cablata.
In un passato piuttosto recente però un sistema programmabile a microprocessore rimaneva sempre
piuttosto complesso. Per un sistema anche solo minimo infatti occorrevano comunque almeno i seguenti
componenti:
● Un core di calcolo, o microprocessore
● Una memoria ROM dove memorizzare i programmi in maniera permanente
● Una memoria RAM per immagazzinare le variabili di funzionamento
● porte di ingresso­uscita digitali
La minima richiesta di funzionalità supplettive complicava ulteriormente il sistema con ulteriori dispositivi:
● Convertitori analogico­digitali o digitali­analogici
● Contatori veloci hardware
● Interfacce seriali
Ognuno di questi dispositivi richiedeva 10­14 linee di cablaggio nella migliore delle ipotesi, per non parlare
delle memorie RAM­ROM che tipicamente chiedevano 20 connessioni ciascuna !
Poi occorreva una logica di controllo e sincronizzazione:
● Linee di strobe lettura/scrittura
● Linee di selezione memoria o porte di I/O
● Linee di interrupt
Aggiungiamo qualche integrato per la decodifica degli indirizzi... si comprende che anche un sistema
minimo occupava almeno 150x150 mm !
Giusto a titolo di cuiriosità si riporta nella pagina seguente lo schema di un sistema basato su un
popolarissimo chip tanto in voga negli anni 80
l'8085:
Corso microprocessori PIC ARI CARPI
Come potete vedere ci sono un sacco di chip e di connessioni !
Tutto questo pe poter leggere quattro sonde di temperatura, 9 pulsanti, un misero display da 6 cifre e
pilotare quattro relè !
Curiosità: non disprezzate l'8085 !
Ricordate la sonda Mars Pathfinder lanciata pochi anni fa dalla Nasa su Marte ?
Ebbene usava un'8085 !
Perché ? Affidabilità assoluta maturata in 20 anni di esperienza nell' hardware e nel software. Corso microprocessori PIC ARI CARPI
L'aumento della densità di integrazione nei microchip ha portato però a incorporare buona parte degli
elementi prima citati in un unico dispositivo più specializzato. Nel 1982 l'INTEL presentava al mondo il
primo microprocessore single chip , l' 8051.
Dopo una prima fase di incertezza, il mercato dei microprocessori single chip è letteralmente esploso,
68H05, AVR, COP, sono tutte famiglie di piccoli micro che in un singolo componente a 20­40 piedini
incorporano tutte le funzioni e l'hardware necessario a portare un po di intelligenza in dispositivi elettronici
di largo uso. Televisori, lavatrici, HI­FI, walkman, radio ma anche automobili apparecchi medicali o
strumenti musicali, tutti ormai portano al loro interno un qualche microprocessore single chip.
E per ultimi i PIC.
Questi infatti sono praticamente gli ultimi arrivati in termini di età, ma hanno ben presto invaso il mercato
per alcune indovinate caratteristiche hardware:
● Porte di I/O molto flessibili
● Versioni riprogrammabili più volte
● Estrema flessibilità dell'hardware
● Programmazione della Rom in seriale, che consente la costruzione di semplicissimi programmatori di
device a bassissimo costo
La riprogrammabilità è probabilmente la caratteristica più gettonata. La memoria programmi è cioè di tipo
Eerom o Flash­rom, vale a dire che con semplici strumenti è possibile cambiare il programma da noi scritto
senza dover sostituire il chip. Oggigiorno questo puo sembrare scontato, ma fino a una decina di anni fa era
assolutamente normale utilizzare microprocessori single chip cosiddetti OTP cioè one time programmable.
Per gli esperimenti si utilizzava una versione speciale del chip in cui la memoria programmi era
costituita da una Eprom che come ben sappiamo va cancellata con raggi ultravioletti, ma questa
versione di chip costava mediamente 20­30 volte quanto un chip OTP. Inoltre per immagazzinare il
programma dentro al dispositivo occorreva trasferire i dati in modo parallelo rendendo necessario
l'uso di molto hardware con conseguenti costi elevati.
La famiglia PIC
La microchip, costruttrice dei pic, hasuddiviso la produzione dei pripri chip in tre famiglie:
● Low end device, siglati 12C...
● Medium end device, siglati 16C/F...
● High end device, siglati 17/18C/F...
Il costo e la complessità ovviamente crescono spostandosi dalla famiglia low alla high.
Agli sperimentatori come noi interessano però esclusivamente i dispositivi delle prime due famiglie,
anzi della seconda !
Si accennerà brevemente al fatto che la serie 12 ha caratteristiche hardware veramente minime, al
massimo 512 byte di memoria programma e assenza di interrupt.
Se ne pensi all'uso ad esempio in un piccolo radiocomando.
La famiglia 17/18 è estremamente complessa, ma il target d'uso è per sistemi di medie dimensioni,
mancano infatti periferiche integrate come ADC o porte seriali.
Questi microprocessori vanno infatti attorniati da periferiche esterne e possono conseguentemente
lavorare con quantità medie di memoria, tipicamente 64 o 128 Kbyte.
Corso microprocessori PIC ARI CARPI
L'uso di questi chip può essere ad esempio in un grosso strumento da laboratorio con molte
funzioni.
Arriviamo finalmente alla serie che a noi interessa, la 16C/F...
Il 16F84 è l'esempio più famoso, e proprio di questo inizieremo ad analizzarne la struttura interna.
NON VI SPAVENTATE !
L'apparente complessità del sistema vi sarà presto chiarita !
Cominciamo analizzando i singoli blocchi di cui il sistema è composto.
Partendo dallo spigolo superiore sinistro troviamo la Flash Program Memory.
Come indica chiaramente il nome anglofono si tratta della memoria in cui immagazzineremo le
istruzioni dei nostri programmi. Flash indica la tipologia costruttiva che ne permette la facile
riprogrammazione innumerevoli volte anche, con qualche limite, a chip montato nel circuito di
destinazione finale. E' costituita da una serie sequenziale di locazioni di 14 bit ciascuna.
Corso microprocessori PIC ARI CARPI
Procedendo verso destra troviamo il Program Counter. Si tratta di un contatore che serve ad
indirizzare la memoria programmi appena descritta per poterne estrarre il contenuto in maniera più
o meno sequenziale. In pratica questo dispositivo è responsabile dell'ordine in cui le nostre
istruzioni verranno eseguite. Se il programma non contenesse alcun salto, questo contatore si
comporterebbe come qualunque contatore hardware: conterebbe ciclicamente da zero al massimo
valore consentito che nel nostro caso è l'estensione della memoria programmi.
Appena sotto troviamo lo Stack. E' un tipo di memoria ram specializzata che può memorizzare
solamente il contenuto del progra counter ad un dato momento. Ci servirà per poter salvare la
posizione di esecuzione corrente del nostro programma in talune situazioni. Per ora accententatevi
di sapere che essendo di 8 locazioni, potrete annidare un massimo di 8 subroutine.
Segue a destra la memoria RAM contenente svariate locazioni di 8 bit ciascuna e che la Microchip
ha fantasiosamente chiamato file register.
Questa area di memoria va suddivisa in due gruppi di registri:
● registri generici
● registri speciali o SFR
i registri generici non sono niente altro che comune ram statica in cui potete immagazzinare
qualunque dato vi interessi, mentre gli Sfr sono registri, ampiamente descritti nel datasheet del
micro, che servono a settare o interrogare il funzionamento hardware del microprocessore.
La descrizione completa la trovate sul datasheet, qualche altra informazione vi verrà fornita più
avanti.
In alto a destra c'è la Eeprom che potremo utilizzare per memorizzare dati in modo non volatile
rispetto all'alimentazione. Per accedere alle celle di questa memoria occorre passare per due registri
SFR dato che non e' direttamente visibile come ad esempio la ram. Occorre quindi prima scrivere
l'indirizzo della locazione a cui si vuole accedere in un registro chiamato EEADR (Eeprom
AddRess) e poi leggere o scrivere i dati tramite un'altro SFR chiamato EEDATA (Eeprom DATA).
Scendendo verso il basso incontriamo il Timer0. E' un circuito temporizzatore che può essere
configurato in diversi modi per contare impulsi o generare frequenze. E' un contatore ad 8 bit con
una capacita' massima di 256, ma puo essere preceduto da un prescaler con un fattore di divisione
2/256. Caratteristica importante di questo prescaler è la massima frequenza in ingresso... fino a 40
Mhz ! Questo ne ha permesso l'uso radioamatoriale come frequenzimetro .....
Sotto ancora ci sono le porte di ingresso uscita.
Da appositi SFR sono configurabili con ingressi o uscite in totem pole, e sono in grado di erogare o
assorbire fino a 20 mA ciascuna, cosa utile per poter pilotare direttamente dei diodi led.
Spostandoci a sinistra dalle porte di I/O troviamo la ALU e il registro W che abbiamo incontrato la
lezione scorsa. La ALU (Aritmetic­Logic Unit) è responsabile di tutte le operazioni di calcolo
matematico o logico, sia una somma che un or a bit, ed il risultato viene sempre riportato nel
registro W, così pure come uno dei due operandi di tutte le operazioni proviene sempre dal W
stesso. Così per eseguire una somma fra due numeri, occorrerà dapprima caricare in W in primo
operando, indicare nell'istruzione aritmetica­logica il secondo operando in RAM ed il risultato lo
troveremo in W.
Corso microprocessori PIC ARI CARPI
A sinistra ancora c'è la circuitazione di clock e controllo dell'intero microprocessore, vi vanno
collegati l'oscillatore che temporizza tutte le operazioni sia esso un quarzo o una rete RC (a seconda
della precisione richiesta). Vi si trova anche il circuito di reset esterno se impiegato.
Per ultimo menzioniamo al centro dello schema un SFR speciale: lo Status Register.
Questo SFR riporta lo stato delle operazioni matematiche fatte nella ALU.
Bit indicano se il risultato è zero, negativo o c'è stato un riporto.
Altri bit sono settabili da software e selezionano banchi diversi di memoria SFR etc...
LA MEMORIA
Cominciamo analizzando meglio la memoria del nostro processore.
Ci sono due blocchi distinti di memoria nel pic16c84. Queste sono la memoria programmi e la
memoria dati. Ogni blocco ha il suo bus separato in modo che l'accesso ad entrambi i blocchi sia
possibile in un solo ciclo di clock del processore.
La memoria dati può essere a sua volta divisa in ram generica e Sfr o registri speciali. Gli Sfr
servono per controllare il funzionamento dell'hardware del processore. Le operazioni che ogni SFR
compie sono descritte separatamente per ognuno.
La memoria dati contiene anche la Eeprom per dati permanenti. Questa memoria NON è
direttamente mappata nella memroia dati, ma accessibile indirettamente. Cioè un puntatore apposito
specifica l'indirizzo a cui si vuole accedere, mentre tramite un altro registro vi si leggono/scrivono i
dati. I 64 byte di cui questa è composta hanno un indirizzo compreso fra 0 e 3fh.
Organizzazione della memoria programmi.
Il pic16c84 ha un contatore di programma di 13 bit capace di indirizzare uno spazio di 8K x 14 bit.
Nel pic16c84 solo il primo 1K x 14 (0000­03ffh) è fisicamente implementato. Accedere ad una
locazione sopra questo limite causerà uno salto circolare ad inizio memoria. Ad esempio le
locazioni 20h, 420h, 820h, C20h, 1020h, 1420h, 1820h, e 1C20h conterranno la stessa istruzione e
si riferiranno alla stessa cella fisica di memoria .
Un reset del micro costringerà l'esecuzione del programma alla locazione 0000h, mentre un
interrupt porterà alla locazione 0004h.
Corso microprocessori PIC ARI CARPI
Organizzazione della memoria dati.
La memoria dati è partizionata in due aree. La prima e' l'area SFR, mentre la seconda e' la ram
generica.
Porzioni della memoria sono in due banchi. Questo vale per entrambe la RAM e gli SFR. I due
banchi degli SFR sono per i registri che controllano le funzioni periferiche. La selezione di quale
banco utilizzare viene fatta mediante due bit del registro STATUS (che ovviamente è accessibile
identicamente da entrambi i banchi !).
Istruzioni come MOVWF o MOVF possono muovere valori dal registro W a qualunque locazione
di questo file (“F”) register.
All'intera memoria dati si può accedere direttamente o indirettamente mediante il File Select
Register (FSR). L'indirizzamento indiretto usa sempre e comunque i due bit del registro STATUS
per decidere a quale banco accedere.
Il banco 0 è selezionato azzerando il bit RP0 (bit 5 del registro STATUS). Settare questo stesso bit
causa la selezione del banco 1. Ciascun banco si estende fino a 7Fh (128 byte).
RAM:
Genericamente parlando di pic occorrerebbe dire che l'uso dei banchi di memoria consente l'accesso
di oltre 96 byte di RAM , cosa altrimenti impossibile. Corso microprocessori PIC ARI CARPI
Nel caso del 16C84 però la quantità implementa ammonta a 36 byte, e questa quantità di memoria
sta comodamente in un banco solo, con il risultato che per qualunque banco si selezioni, la memoria
a cui si accede è la stessa, siate in banco 0 che nell' 1.
Corso microprocessori PIC ARI CARPI
Nel pic16F84 la quantità di memoria RAM ammonta a 68 byte secondo la mappa che segue. Anche
questa quantità però sta comodamente nel banco 1, quindi vi si accede in modo identico al
precedente .
Corso microprocessori PIC ARI CARPI
Sommario degli SFR
Corso microprocessori PIC ARI CARPI
Registro STATUS
Il registro status contiene lo stato aritmetico della ALU, lo stato di reset e i bit di selezione per la
memoria dati.
Come con qualunque registro, lo STATUS può essere la destinazione di qualunque istruzione, se
però l'istruzione che lo sovrascrive comporta un'alterazione dei bit Z, DC o C la scrittura di questi
viene disabilitata. Questi bit vengono settati in base allo stato logico del processore.
TO e PD inoltre non sono scrivibili.
Per questi motivi, scrivere qualcosa su STATUS può avere risultati imprevedibili.
Per esempio l'istruzione CLRF STATUS dovrebbe azzerare l'intero registro, mentre in realtà alla
fine troveremo 000uu1uu (dove u = non cambiato).
Se vogliamo modificare i bit di stato occorre usare BCF, BSF, SWAPF e MOVWF dato che queste
istruzioni NON alterano i bit di stato.
Che un'istruzione alteri o meno lo stato delle flag lo potete semplicemente controllare nelle
specifiche dell'istruzione stessa sul datasheet del processore.
Corso microprocessori PIC ARI CARPI
Registro OPTION
Il registro OPTION può essere letto/scritto e contiene vari bits per configurare il timer0/watchdog
prescaler, il pin di interrupt esterno, Timer0 e i pullup di PORTB.
NB il prescaler è unico, se lo si assegna al Watchdog (PSA = 1) il timer se ne trova sprovvisto.
Corso microprocessori PIC ARI CARPI
Registro INTCON.
Come dice il nome INTCON regola il funzionamento delle sorgenti di interrupt.
NB: T0IF, INTF o RBIF saranno settati dall'hardware all'occorrenza delle rispettive condizioni
anche se il bit di abilitazione è zero o pure è zero il GIE (abilitazione di tutti gli interrupt).
Corso microprocessori PIC ARI CARPI
Demoboard
Costruiamoci la nostra schedina di sperimentazione.
Seguite questo schema, vi sarà utile per le prove che suggeriremo nelle prossime lezioni !
Corso microprocessori PIC ARI CARPI
Per il Pic usate uno zoccolo lamellare a 18 pin, in numerose prove si è dimostrato più affidabile che
i tanto decantati zoccoli a tulipano (o torniti che dir si voglia...).
Il display lcd è un modello con controller HD44780 o compatibile, praticamente uno standard
assoluto ! se cercate al prossimo mercatino lo troverete facilmente sotto i 7 euro, in un negozio
specializzato difficilmente lo reperirete a meno di 15... ma ai radioamatori in questo campo c'è poco
da insegnare... Per ora non montatelo ! limitatevi ad un connettore da flat cable a 14poli, il display lo collegheremo
in un secondo tempo, e poi ci occorre che sia rimovibile.
La piedinatura è pure essa standard, in caso di dubbi guardate il datasheet del modello in vostro
possesso, personalmente non ho MAI trovato display con HD44780 che avessero una piedinatura
differente dallo standard. Il significato dei segnali è pure unificato. I numeri riportati a fianco del display sono riferiti alla fila di contatti present sul display stesso. Se
però lo collegate tramite un flat cable (saldandovi direttamente i fili) , la stessa piedinatura vale per
il connettore sul circuito principale.
I pulsanti sono piu comodi se del tipo da circuito stampato, metteteli direttamente sulla basetta.
Il quarzo è del tipo per microprocessori, a basso costo. Tenete tutte le connessioni del quarzo il più
corte possibile ! stesso discorso vale per i condensatori da 33pf e la relativa massa.
Per l'alimentazione usate un comune regolatore 7805 anche senza dissipatore, il consumo di
corrente è minimo. Importante la presenza dei due condensatori di disaccoppiamento da 100nF fra i
piedini in/out e la massa.
Attenzione alle polarità dei condensatori facenti capo al MAX232, alcune sono opposte al normale !
Per l'uscita RS232 potete usare un connettore da stampato, che però ha i piedini fuori standard di
una basetta millefori, vi consiglio invece di uscire dalla basetta con un cavetto schermato di 1mt
circa terminante con un connettore volante femmina, lo collegherete direttamente alla presa del pc.
Usate una basetta millefori per costruire il circuito... creare un circuito stampato ad hoc per un
circuito sperimentale è una perdita di tempo e non vi consentirà di aggiungere espansioni !
Sempre nell'ottica sperimentale tenete le dimensioni della basetta un po abbondanti e non prevedete
nessun contenitore. Usate dei morsetti a vite per l'alimentazione, così pure come per l'ingresso del
fotoaccoppiatore 4n25 e le uscite dell'ULN2004.
Corso microprocessori PIC ARI CARPI