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