Elementi di un computer
Caratteristiche principali
Il computer deve essere in grado di compiere operazioni logiche e aritmetiche, funzioni fornite dalla CPU (Central Processing Unit). Opera attraverso una serie di istruzioni, che compongono un programma, mantenuto in memoria. Molte istruzioni richiedono operazioni logiche e matematiche che vengono eseguite in una parte dedicata della CPU, detta ALU (Arithmetic Logic Unit).
- Deve essere provvisto di Input e Output (I/O)
- Deve essere in grado di memorizzare dati/istruzioni e di accedervi
La program memory contiene il programma da eseguire. È una memoria permanente (il programma viene mantenuto indefinitamente, se alimentato o meno, ed è pronto per essere eseguito non appena viene applicata l'alimentazione).
La data memory contiene dati temporanei utilizzati dal programma. È una memoria non permanente.
- Deve essere in grado di mettere in comunicazione le parti del sistema.
Tipi di CPU
Ogni CPU ha un set di istruzioni che riconosce e a cui risponde:
- CISC: Complex Instruction Set Computer
- Diversi livelli di complessità
- Istruzioni per operazioni molto complesse
- Differenti modalità di indirizzamento
- RISC: Reduced Instruction Set Computer
- Progetto più semplice
- Privilegiano la velocità
- Tipicamente ogni istruzione è contenuta in una singola word
- L'istruzione contiene sia il codice operativo che i dati o l'indirizzo ai dati
Memorie del computer
Le memorie possono essere di tipo:
- Volatili:
- Funzionano fintanto che il sistema è alimentato (perdita dei dati alla rimozione dell'alimentazione)
- Utilizzate per memorizzare dati temporanei
- Sono molto veloci
- Utilizzano tecnologie a semiconduttore piuttosto semplici
- Semplici da utilizzare per lettura e scrittura
- Comunemente indicate come RAM (Random Access Memory), anche se il termine più descrittivo è Data Memory.
- Non volatili:
- Permettono di conservare in memoria valori anche quando non alimentate
- Su computer desktop questa funzione è svolta dall'hard disk in un sistema embedded usando memoria non volatile a semiconduttore
- Utilizzano tecnologie a semiconduttore piuttosto complesse
- Più complicate da gestire
- Comunemente indicate come ROM (Read-Only Memory), anche se il termine più descrittivo è Program Memory.
Per interagire con la memoria, occorrono due informazioni: indirizzo della memoria e dati. Queste informazioni viaggiano su due serie di interconnessioni, chiamate bus indirizzi e bus dati. Bus dati e bus indirizzi devono raggiungere ogni area di memoria.
Categorie di computer
I computer trovano spazio in ogni ambito di attività. Alcuni sono sviluppati per essere il più potenti possibile, senza preoccupazione per il prezzo, per le applicazioni ad alta potenza nell'industria e nella ricerca. Altri sono sviluppati per applicazioni casa/ufficio, meno potenti ma anche meno costosi. Un'altra categoria di computer è quella degli embedded system. Questo tipo di computer è progettato all'interno di un prodotto e quindi spesso non è visibile o accessibile con mouse e tastiera. Di questa categoria fanno parte i microcontrollori.
Embedded system
L'idea di base di un sistema embedded è molto semplice; se prendiamo un prodotto che ha bisogno di un sistema di controllo, e se un computer viene incorporato all'interno di questo prodotto col fine di realizzare il controllo, allora abbiamo un sistema embedded.
In elettronica e informatica, con il termine sistema embedded si identificano genericamente tutti quei sistemi elettronici di elaborazione digitale a microprocessore progettati appositamente per una determinata applicazione (special purpose), ovvero non riprogrammabili dall'utente per altri scopi, spesso con una piattaforma hardware ad hoc, integrati nel sistema che controllano ed in grado di gestirne tutte o parte delle funzionalità richieste.
- Contrariamente ai computer generici riprogrammabili (general-purpose), un sistema embedded ha dei compiti noti già durante lo sviluppo, che eseguirà dunque grazie a una combinazione hardware/software specificamente studiata per tale applicazione.
- Grazie a ciò l'hardware può essere ridotto ai minimi termini per contenerne lo spazio occupato limitando così anche i consumi, i tempi di elaborazione (maggiore efficienza) ed il costo di fabbricazione.
- Inoltre l'esecuzione del software è spesso in tempo reale (real-time) per permettere un controllo deterministico dei tempi di esecuzione.
- I sistemi embedded sono sistemi di calcolo, nel significato più generale del termine.
Il software scritto per molti sistemi embedded, in particolare quelli senza hard disk, è talvolta chiamato firmware. Il firmware è un tipo di software che, ad esempio, è possibile trovare nei chip delle memorie ROM o Flash. I sistemi embedded spesso richiedono di essere attivi continuamente per anni senza errori, pertanto il software e il firmware sono progettati e testati con molta più attenzione rispetto al software dei personal computer.
Molti sistemi embedded, infatti, evitano di incorporare componenti con parti meccaniche in movimento (come gli hard disk), poiché meno affidabili rispetto a componenti allo stato solido come le memorie Flash. In aggiunta, i sistemi embedded possono essere fisicamente inaccessibili (come per le batterie di perforazione dei pozzi di petrolio, oppure i componenti lanciati nello spazio), pertanto i sistemi che li contengono devono essere capaci di resettarsi autonomamente in caso di perdita o corruzione dei dati. Questa funzionalità è molto spesso ottenuta con l'inserimento di un componente elettronico chiamato watchdog che ripristina il processore se il programma presente sullo stesso non azzera con una certa frequenza il timer interno del componente.
Microcontrollori
Un microcontrollore (microcontroller o MCU, MicroController Unit) è un single-chip computer, ovvero un microcalcolatore integrato su un singolo chip. Come suggerisce il nome, il microcontrollore è utilizzato principalmente per realizzare sistemi di controllo digitale e, in particolare, nei dispositivi cosiddetti embedded. Un microcontrollore è un dispositivo digitale programmabile con periferiche che scambiano segnali con l'esterno. Ha eccellenti capacità di I/O, ridotti consumi di potenza, auto contenuto (cioè in grado di includere nello stesso chip della CPU differenti tipi di memorie).
Il microcontrollore si differenzia rispetto al microprocessore in quanto al proprio interno contiene normalmente anche una certa quantità di memoria RAM e di EPROM e vari dispositivi periferici integrati, come timer, convertitori AD, ecc. Si tratta dunque di un vero e proprio computer completo di tutto ciò che occorre per il suo funzionamento.
Famiglie di microprocessori
Ogni famiglia di microprocessori si differenzia dalle altre dal tipo di processore utilizzato. Ogni famiglia ha il proprio "core", ma può avere combinazioni diverse di periferiche e memorie. Dato che il core è fisso per tutti i membri della famiglia, anche il set di istruzioni è lo stesso.
I PIC (Peripheral Interface Controller) costituiscono una delle famiglie più diffuse e usate di microcontrollori. Si tratta di microcontrollori con architettura Harvard prodotti da Microchip Technology. Sono molto popolari sia in ambito industriale che nelle applicazioni hobbystiche per il basso costo e la grande disponibilità di software e di strumenti di sviluppo disponibili. Tutti i microcontrollori PIC della Microchip hanno le seguenti caratteristiche:
- Basso costo
- Auto-contenuti
- 8-bit, 16-bit, 32-bit
- Harvard architecture
- Pipelined
- RISC
- Single accumulator (Working register)
- Fixed reset
- Interrupt vectors
PIC16F8XX
Implementa su un unico chip tutte le risorse necessarie per il calcolo, per l'acquisizione e memorizzazione dei dati e per l'interfacciamento e la comunicazione con il mondo esterno.
- La ROM (Read Only Memory) è solitamente utilizzata per la memorizzazione delle istruzioni del programma
- Nella RAM (Random Access Memory) vengono custoditi i dati prodotti e impiegati durante l'esecuzione del programma
- La EEPROM (Electrical Erasable Programmable Read Only Memory) serve per memorizzare i dati che devono essere conservati anche al termine del programma
- La CPU (Central Processing Unit) è l'unità che, comunicando con le varie periferiche interne attraverso i bus, si fa carico di eseguire il programma ed elaborare i dati. Per esempio, l'esecuzione di un programma consiste nella lettura sequenziale da parte della CPU delle istruzioni memorizzate nella memoria di programma
- I TIMER consentono al sistema di misurare e sincronizzare sia eventi interni che esterni. Sono impiegati anche per la generazione di segnali esterni di controllo
- Le I/O PORTS sono le porte di ingresso ed uscita solitamente utilizzate per acquisire dati o per pilotare componenti. Usualmente, una porta I/O è costituita da 8 pin (anche meno qualche volta), programmabili sia come ingressi che uscite
- Le INTERFACCE SERIALI sono utilizzate per scambiare dati con il mondo esterno. Sono frequenti periferiche di comunicazione sia sincrone (SPI, I2C) che asincrone (USART). Le prime sono utilizzate solitamente per la comunicazione con dispositivi esterni (memorie, sensori), le seconde per comunicare con PC o altri microcontrollori (comunicazione seriale RS232 o RS422/485)
- L'ADC (convertitore Analogico/digitale) converte un segnale esterno analogico (prelevato tipicamente in tensione) in una sua rappresentazione digitale. I microcontrollori che implementano tali dispositivi sono particolarmente adatti per essere impiegati in applicazioni di controllo
- Il WATCHDOG TIMER, se attivato, genera un reset ad un intervallo prestabilito in fase di programmazione. Questo riavvio ciclico è utile per far uscire il microcontrollore da eventuali situazioni di stallo
- Il PULSE WIDTH MODULATION SIGNAL GENERATOR è un dispositivo utilizzato per la generazione di segnali modulati in ampiezza d'impulso. È anche impiegato nella conversione DA per la generazione di segnali analogici facendo transitare il segnale in un filtro passa basso. Se la costante di tempo del filtro è scelta opportunamente, è possibile generare un segnale proporzionale in tensione al duty-cycle
Esempio di caratteristiche dei microcontrollori della famiglia PIC16F8XX
Descrizione generale del PIC16F8XX
- Program Memory (PM): memoria in cui risiede il programma di controllo
- Program Counter (PC): registro in cui viene memorizzato l'indirizzo della successiva istruzione da eseguire. Ha dimensione 13 bit, pari alla dimensione dello spazio di indirizzamento della ROM. PC è anche mappato in RAM.
- In fase di Power Up o Reset: 0 PC
- Dopo l'esecuzione di una istruzione: PC+1 PC
- Jump: PC±N PC
- Stack: Registro LIFO (Last Input First Output) temporaneo. Contiene 8 posizioni per il PC, in cui quest'ultimo viene salvato automaticamente alla chiamata di una subroutine o all'esecuzione di un interrupt, e ripristinato al termine. Non accessibile da codice utente. Prima che il micro inizi ad eseguire la subroutine CALL o quando si verifica un interrupt, allora l'indirizzo della prima istruzione successiva a quella attualmente in esecuzione, è inserito nello stack. In questo modo, al return il micro sa da dove riprendere la normale esecuzione del programma.
- Call: PC Stack
- Instruction Register (IR) e Decoder: contiene l'istruzione da eseguire. Non accessibile da codice utente. Esecuzione di una istruzione:
- Trasferimento del codice istruzione dalla PM IR
- Decodifica dell'istruzione dall'Instruction Decoder (è una rete combinatoria che seleziona le linee di controllo necessarie per eseguire l'istruzione)
- Timing e Controllo: La sequenza di programma è controllata da un clock. Frequenza 0 ÷ 20 MHz
- Reset riporta il PC 0: 0 PC
- !MCLR (Master Clear): Con !MCLR = High il programma si inizializza automaticamente all'indirizzo 0 della PM.
- Interrupt: Sono segnali asincroni interni o esterni che forzano un cambiamento nella sequenza di istruzioni. Quando si verifica un interrupt:
- 004 PC Sequenza di Interrupt (Interrupt Service Routine)
- Working Register (W): è un registro per lo scambio dati tra le varie unità, quando queste non sono accessibili direttamente. Accumulatore per le operazioni aritmetiche ed il trasferimento dei dati da e verso la memoria.
- Non è possibile PORTB RAM ma PORTB W RAM
- Status Register (STATUS): stato delle operazioni aritmetiche (Carry, Digit Carry, Zero), selezione banco RAM, informazioni su ultimo reset. Il registro STATUS è anche mappato in RAM.
- ALU: Rete combinatoria che esegue operazioni aritmetiche e logiche. Agisce su due operandi di cui uno è W.
- Port Registers: l'INPUT e l'OUTPUT del PIC avvengono tramite la lettura o scrittura dei Port Registers. La direzione del dato è definita tramite un bit di controllo nel Data Direction Register (DDR). Se la porta è selezionata come:
- INPUT (DDR = 1): il pin corrispondente è ad alta impedenza, il dato presente nel pin è memorizzato nel registro di porta.
- OUTPUT (DDR = 0): il pin corrispondente è a bassa impedenza, il dato memorizzato nel registro di porta è disponibile sul pin (se il pin è cortocircuitato a massa con uscita alta, la corrente elevata può danneggiare il dispositivo; il default in power up è DDR = 1)
- Special Function Register (SFRs): sono registri di controllo del programma e registri di stato.
- General Purpose Register (GPRs): sono registri per la memorizzazione temporanea di dati.
Lo stack è in grado di memorizzare l'indirizzo di ritorno (l'indirizzo dell'istruzione immediatamente successiva alla CALL). Quando si esegue un RETURN tale indirizzo viene ripescato dallo stack. Lo stack è una memoria di tipo LIFO (Last In, First Out) che nel PIC può contenere sino ad un massimo di otto indirizzi di programma. Si tratta di una piccola area di memoria autonoma, separata dalla RAM del PIC e non diversamente indirizzabile. L'uso dello stack consente di effettuare una CALL anche dentro una subroutine e ripetere tale processo ricorsivamente sino ad un massimo di otto volte (cioè otto CALL consecutive). In pratica, dal momento che il PIC gestisce autonomamente lo stack, possiamo tranquillamente dimenticarci della sua esistenza, a patto di non utilizzare più di otto CALL annidate (cioè otto subroutine che si chiamano l'una dentro l'altra). In caso contrario si viene a verificare un cosiddetto stack overflow, il quale provoca funzionamenti anomali e non prevedibili del programma.
Funzioni della CPU
- Trasferimento Dati
- Controllo di Flusso (operazioni di salto, jump)
- Elaborazioni Aritmetiche e Logiche (addizioni e sottrazioni, operazioni logiche, incrementi, decrementi, shift, rotazioni, ecc.)
Array register della CPU
- Un Registro Accumulatore (W)
- Il Program Counter (PC)
- L'Instruction Register (IR)
- Lo Stack Pointer (SP)
Progettato con il RISC (Reduced Instruction Set Computing, opposto a CISC), cioè un numero limitato di istruzioni (35) con pochi modi di indirizzamento.
- Pro:
- Semplicità di programmazione (a livello assembly)
- Tutte le istruzioni hanno una rappresentazione uniforme e sono lunghe esattamente 1 word
- Set di istruzioni limitato
- Architettura Harvard (opposta ad architettura von Neumann)
- Contro:
- Set di istruzioni limitato
- Maggior numero di istruzioni necessarie per eseguire un dato task
Ha un’architettura Harvard (opposta all’architettura von Neumann), memoria programma (ROM/Flash) e memoria dati (RAM) separate, ognuna con un proprio bus, e con dimensioni diverse sia per gli indirizzi che per il dato.
- Pro:
- Prestazioni maggiori, cioè le istruzioni ed i dati sono trasferiti su due bus separati e possono essere trasferiti contemporaneamente
- Dimensioni ottimizzate per ogni tipo di dato
- Contro:
- Architettura più complessa
- Operazioni più complesse per inter-operare tra le due memorie
Massima frequenza di funzionamento
- PIC16F84: = 10 MHz
- PIC16F877: = 20 MHz
- Frequenza di istruzione: = 4 1 istruzione ogni 4 colpi di clock
La program memory è composta da parole (word) di 14 bit, con uno spazio di indirizzamento di 13 bit (pari alla dimensione del program counter). In tutto è quindi possibile indirizzare 8k (213) parole di 14 bit (indirizzi da 0000 a 1FFF), anche se nel PIC16F84 solo 1k è presente (indirizzi da 0000 a 03FF). La locazione 0000 contiene il reset vector (prima istruzione da eseguire dopo il reset). La locazione 0004 contiene l'interrupt vector (istruzione da eseguire all'esecuzione di un interrupt). Nella maggior parte delle architetture è presente un interrupt vector per ogni sorgente di interrupt. Nel PIC16, i vettori contengono un'istruzione da eseguire. All'esecuzione di un reset o di un interrupt, il program counter viene settato all'indirizzo del vettore (0000 o 0004). Tale istruzione è tipicamente un salto all'indirizzo vero e proprio della routine da eseguire. In altre architetture i vettori contengono invece l'indirizzo della routine da eseguire; il program counter viene caricato con il contenuto del vettore.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Appunti Sistemi elettronici
-
Appunti Elettronica (Sistemi elettronici, tecnologie e misure)
-
Appunti Componenti elettronici
-
Appunti di Sistemi elettronici, tecnologie e misure