Architettura dei Microcontrollori Microchip PIC18F



Documenti analoghi
Architettura del PIC 18F452

8 Microcontrollori PIC

INTRODUZIONE alla PROGRAMMAZIONE di MICROCONTROLLORI

Introduzione ai microcontrollori PIC

introduzione I MICROCONTROLLORI

A/D CON PIC 16F877. Sommario INTRODUZIONE... 2 SELEZIONARE I BANCHI... 2 ADCON ADCS1, ADCS CH2, CH1 E CH GO/DONE... 6 ADON...

Nicola Amoroso. Corso introduttivo sui microcontrollori A. S Microcontrollori Microchip PIC 8 bit. namoroso@mrscuole.

Corso di Informatica Applicata. Lezione 7. Università degli studi di Cassino

Davide Gennaretti, Matteo Nicolini

Lezione 8. Figura 1. Configurazione del registro INTCON

Arduino: Programmazione

FONDAMENTI di INFORMATICA L. Mezzalira

Architettura hardware

Gestione dei File in C

Il sensore ad ultrasuoni

I PIC Partendo da Zero By link_89

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

Esame di INFORMATICA

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Embedded Software Sviluppo di uno Scheduler di base per PIC18. Tutorial. Embedded Software. Sviluppo di uno Scheduler di base per PIC18.

C. P. U. MEMORIA CENTRALE

Introduzione alla programmazione in C

Linguaggio C. Fondamenti. Struttura di un programma.

Architettura del calcolatore

Ing. Paolo Domenici PREFAZIONE

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Che cos è la barriera luminosa?

I microcontrollori. In sostanza i pic hanno le seguenti caratteristiche:

Sistemi Elettronici #1. Sistemi Elettronici. Definizioni e concetti generali. Sistemi Elettronici Laurea Triennale in Elettronica A.A.

Architettura degli elaboratori (A)

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

STRUTTURE DEI SISTEMI DI CALCOLO

L architettura di riferimento

Architettura dei computer

Categorie di sistemi Digitali

Corso Base Arduino ed Elettronica

DMA Accesso Diretto alla Memoria

CPU. Maurizio Palesi

Capitolo. Interfacciamento di periferiche I/O con il PC. 1.1 Il BUS di espansione del PC

Il microprocessore 8086

INFORMATICA 1 L. Mezzalira

Sistema operativo: Gestione della memoria

Architettura di un sistema di calcolo

Un micro FPGA. skills. come il core ABC. il core ABC sia la suite di sviluppo di AC-

INTERFACCIA PER PC MEDIANTE PORTA SERIALE

MICROCONTROLLORE PIC16F84A

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro

La tecnica DDS. Un generatore di toni DTMF

Il Processore: i registri

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti

LABORATORIO DI SISTEMI

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori


Qualche informazione sul microcontrollore PIC

Architettura di un calcolatore

Il processore. Il processore. Il processore. Il processore. Architettura dell elaboratore

I puntatori e l allocazione dinamica di memoria

Informatica - A.A. 2010/11

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

Arduino UNO. Single board microcontroller

Calcolatori Elettronici

Funzioni in C. Violetta Lonati

La struttura dati ad albero binario

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Hardware di un Computer

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Calcolatori Elettronici. La memoria gerarchica La memoria virtuale

ARCHITETTURE MICROPROGRAMMATE. 1. Necessità di un architettura microprogrammata 1. Cos è un architettura microprogrammata? 4

OSCILLOSCOPIO SOFTWARE

Valutazione delle Prestazioni. Valutazione delle Prestazioni. Architetture dei Calcolatori (Lettere. Tempo di risposta e throughput

Il calcolatore elettronico. Parte dei lucidi sono stati gentilmente forniti dal Prof. Beraldi

Allocazione dinamica della memoria - riepilogo

L organizzazione interna della memoria e del banco di registri prevedono generalmente che le uscite di 2 o più componenti

Esempio di moltiplicazione come somma e spostamento

UNA INTRODUZIONE AL MONDO DEI MICROCONTROLLORI

CIRCUITO DI TEST E SOFTWARE UTILIZZATI

PROGRAMMA DI SISTEMI TERZA AET 2014/2015

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Protocolli di Comunicazione Elettronica dei Sistemi Digitali L-A Università di Bologna, Cesena

Testi di Esercizi e Quesiti 1

La memoria centrale (RAM)

Lezione 4. Figura 1. Schema di una tastiera a matrice di 4x4 tasti

Esame di Stato Materia: SISTEMI AUTOMATICI PRIMA PARTE

Introduzione all'architettura dei Calcolatori

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Esercizi per il recupero del debito formativo:

Corso di Sistemi di Elaborazione delle informazioni

Inizializzazione, Assegnamento e Distruzione di Classi

Progetto di Microcontrollori. Cronotermostato per Caldaia

Struttura del calcolatore

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Laboratorio di Ingegneria del software Sistema di controllo di un ascensore Requisisti preliminari

GESTIONE DEI PROCESSI

Transcript:

Architettura dei Microcontrollori Microchip PIC18F A. Romani Elettronica dei Sistemi Digitali L-A

Cos è un microcontrollore? Differenza tra Microprocessore e Microcontrollore à Microprocessore: normalmente si intende un dispositivo limitato alla sola CPU, che richiede memoria, clock e componenti/periferiche esterni (maggior complessità di progetto) Es. Intel x86 à Microcontrollore: normalmente si intende un sistema incluso in un unico package che comprende una CPU, memoria (RAM, ROM/Flash), periferiche digitali (registri I/O, timer, etc.) e analogiche (ADC, comparatori, etc.), oscillatori per generare il clock, etc. Es. Microchip PIC, Texas Instruments MSP430, etc. MCU = Micro-Controller Unit

Architettura di un Microcontrollore Una MCU PIC contiene: à datapath con ALU à decoder per POCHE istruzioni. à Oscillatori/PLL per la generazione del clock à Registri generali (RAM) à Registri con funzioni speciali (SFR) à Interrupt Controller à RAM per dati. à FLASH per codice. à Porte di I/O digitale. à Altre periferiche Timer interno AD Converter USART (seriale) SPI/I2C PWM EEPROM dati

Microcontrollori Microchip PIC18 Con pochissimi componenti esterni e poche righe di programma si può ottenere un SISTEMA COMPLETO FUNZIONANTE. Facilità di lavoro à Semplice montaggio su scheda à E tutto dentro (anche il clock!) à Non serve progettare una MotherBoard! Programmazione à Assembler con poche, semplici istruzioni à Disponibili compilatori C, basic, Una volta programmato VA! Limiti nelle prestazioni à c e quello che c è (RAM e frequenza limitate) à potenza di calcolo limitata

MCU Microchip Diverse famiglie di Microcontrollori à 8, 16, 32 bit Ogni famiglia è composta da numerosi componenti, distinti per: à Memoria dati à Memoria codice à Periferiche à Frequenza di clock à Consumi di potenza

Famiglia PIC18 Caratteristiche: à Architettura a 8 bit à Instruction word a 16 bit à Architettura di memoria Harvard Frequenza massima: à 32MHz 64MHz (Internal PLL x4) Memoria codice: à 4KB 128KB Costo: à 1.20$ - 8.44$ Data EEPROM à 0B 1024B Numero di pin: à 18 100 pin Tensione di lavoro: à 1.8V 5.5V

PIC18 Part numbering Es. condizioni di utilizzo tipo di package PIC18F 87 20 I/PT memoria codice flash 1 = 18 pin 2 = 28 pin 4 = 40/44 pin 6 = 64 pin 8 = 80 pin 2 1 = 2K bytes 2 2 = 4K bytes 2 3 = 8K bytes 2 4 = 16K bytes 2 5 = 32K bytes 2 6 = 64K bytes 2 7 = 128K bytes

Architettura di memoria I PIC18 includono 3 tipi di memoria: à Memoria codice (max 128KB) programma dati permanenti (es. da ricopiare in RAM durante l esecuzione) à Memoria dati RAM (max 3968B) dati temporanei à Memoria E 2 PROM (max 1024B) Mem Flash Codice dati permanenti bus istruzioni CPU bus dati RAM dati periferiche EEPROM

Architettura Data-path Esecuzione controllata da un clock a 4 fasi non sovrapposte Struttura della pipeline: à à A regime viene completata un istruzione ogni 4 cicli di clock (eccetto branch). Latenza 8 cicli di clock. MIPS = f CK (MHz)/4

PIC18 Spazio di indirizzamento RAM dati vista come insieme di registri à (GPR, General Purpose Registers) Le periferiche sono accessibili attraverso registri di controllo à detti Special Function Register à mappati alle locazioni alte dello spazio di indirizzamento (quindi omogenei alla RAM) Indirizzamento à a 12 bit à A 8 bit + 4 bit per selezione banco

Programmazione C E il modo più semplice per programmare un microcontrollore I produttori forniscono Header files e Librerie per utilizzare il dispositivo à L header file definisce tutti i tipi e strutture dati necessarie alla programmazione, à Definisce costanti simboliche per accedere ai registri di controllo delle periferiche à Definisce costanti simboliche per i valori di configurazione dei registri di controllo Es. à /* Esempio programma C */ #include <p18f452.h> #include <adc.h> [ ]

Registri di controllo Solitamente l header file definisce nomi simbolici per i registri associandoli alla locazione di memoria corrispondente à es. #define PORTA (*((volatile unsigned char *) (0xF60))) à unsigned char: intero a 8 bit senza segno (0..255) à à à à volatile: keyword del linguaggio utilizzata per indicare al compilatore che la locazione di memoria può essere modificata anche da agenti esterni alla CPU (es. porta I/O in lettura da un pulsante esterno, o il valore di un timer, etc). Se non indicata il compilatore potrebbe fare caching sui registri interni e non rileggere dalla periferica il valore attuale. *: in C indica un puntatore, cioè un tipo di dato/variabile che contiene l indirizzo di una locazione di memoria (che contiene un intero senza segno a 8 bit in queto caso) (tipo di dato): in C indica l operazione di casting : cioè il valore o la variabile che seguono devono essere considerati dal compilatore come il tipo di dato entro parentesi. Es. 0xF60 da solo è un intero a 12 bit, ma con il casting (volatile unsigned char *) (0xF60) diventa un indirizzo di memoria a cui è contenuto un intero senza segno a 8 bit volatile. * in C indica anche l operatore di dereferenziazione. Deve essere seguito da un puntatore. Es. *p = 12; scrive il valore 12 nella locazione di memoria contenuta nella variabile p, definita magari come int *p; (puntatore a intero). Quindi: *( (volatile unsigned char *) (0xF60)) dereferenzia la locazione di memoria 0xF60 e quindi consente di leggere o scrivere a questo indirizzo, dove c è la porta di I/O A: à Es. *( (volatile unsigned char *) (0xF60)) = 12; // scrive 12 nel // registro PORTA variabile1 = *( (volatile unsigned char *) (0xF60)); //copia il valore // del registor PORTA in variabile1 #define simbolo espressione implementa una macro : cioè una sostituzione testuale nel listato della parola simbolo con espressione à Dunque per accedere alla locazione di memoria F60 dove c è la porta dati A basta usare il simbolo PORTA invece della espressione corrispondente; Es. PORTA = 0b00001111; //scrive 4 zeri e 4 uni nella porta di uscita A

Programmazione C Come deve essere impostato un programma per un microcontrollore? Deve essere gestito come un LOOP INFINITO à Es. Non c è uscita o ritorno dal programma: A chi dovrebbe ritornare il programma? E quando? à /* Esempio programma C */ #include <p18f452.h> #include <adc.h> void main(void) /* Inizializzazione dati e periferiche */ [ ] Ogni MCU ha il suo header file, poiché ha una diversa architettura interna! /* Loop principale */ while(1) [ ] Esistono header file anche per le periferiche più complesse

Esempio: Controllo di un semaforo pedonale Esempio di schematico Vdd PGC GND PGD VDD MCLR 5.6k Vdd 10k Vdd 10k 100nF 33pF 1k 1k 1k

Programmazione C Es. Controllo di un semaforo. à Supponiamo luci verde, gialla, rossa e pulsante collegate come in slide precedente #include <p18f452.h> #define VERDE PORTBbits.RB1 #define GIALLO PORTBbits.RB2 #define ROSSO PORTBbits.RB4 #define PULSANTE PORTBbits.RB5 extern void delay_ms(unsigned int millisec); void main(void) /* Inizializzazione *) TRISB = 0b00100000; // porta B tutta in output tranne //il bit 5 ROSSO = 0; GIALLO = 0; VERDE = 1; while(1) while (!PULSANTE) ; // il pulsante se premuto // manda a 1 il segnale // esterno ed esco dal loop GIALLO = 1; delay_ms(2000); VERDE = 0; GIALLO = 0; ROSSO = 1; delay_ms(30000); ROSSO = 0; VERDE = 1; Indica che l oggetto è definito in un altro modulo (già compilato) e che verrà agganciato nella fase di linking quando viene creato il file binario ( eseguibile )

PIC18 - Periferiche Porte I/O digitali: à Servono per Generare segnali digitali in uscita Leggere segnali digitali in ingresso à Registri di uscita (PORTx) collegati: al bus dati come periferiche (ogni reg. ha un suo indirizzo nello spazio di indirizzamento) ai pin del dispositivo in uscita à Registro di controllo (TRISx) Collegato al bus dati come periferica al suo spazio di indirizzamento à Registro di ingresso LAT o I/O pin

DATA BUS PIC18 - Periferiche Le porte di I/O sono raggruppate in registri a 8 bit, accessibili individualmente o in parallelo à PORTA, PORTB,, PORTE, etc. PORTB.RB0 PORTB.RB1 PORTB.RB7

Programmazione C Porte I/O Esempio: à /* PIC18F458 @ 10MHz */ #include <p18f458.h> void MSDelay(unsigned int); void main(void) TRISB = 0x00; /* configura la porta B come 8 output */ while(1) /* loop infinito */ PORTB = 0b00000000; MSDelay(250); PORTB = 0b11111111; MSDelay(250); void MSDelay(unsigned int itime) unsigned int i; unsigned char j; for (i=0;i<itime;i++) for (j=0; j<165;j++); /* ritardo gestito contando le iterazioni comprese in 1 ms. */

PIC18 Convertitore A/D Periferica che converte grandezze analogiche (tensioni) in numeri binari

PIC18 Convertitore A/D Risoluzione: 10 bit 4-28 canali analogici Funzione di trasferimento Es. #define GODONE ADCON0bits.GO #define ADON ADCON0bits.ADON #define ADFM ADCON1bits.ADFM void ADC_Init(void) TRISA = 0b00000001; //1=input ADCON1 = 0b00001110; //1=digital //0=analog ADFM=1; //10 bit ADON=1; int ADC_Convert(void) GODONE=1; //faccio partire la //conversione e while(godone) //aspetto che //sia finita return (ADRESH<<8) ADRESL;

Scelta della frequenza di clock Diverse modalità 1. Quarzo esterno (quando è richiesta precisione o frequenza elevate) 2. Generatore di onda quadra esterno (es. quando lo stesso clock deve arrivare a più dispositivi) 3. Oscillatore con RC esterno (semplice ed economico ma non troppo preciso e stabile) 4. Oscillatore interno configurabile (non servono componenti esterni, ed è possibile solo un insieme limitato di frequenze)

Le interruzioni Un meccanismo molto potente nella programmazione dei microcontrollori è la gestione delle interruzioni (interrupt) à In risposta ad eventi esterni, il micro sospende l esecuzione del programma principale, esegue apposite routine di servizio, e poi ritorna all esecuzione principale à Es. Posso programmare una periferica Timer (contatori) per generare un interrupt ogni secondo. Il micro può ad es. avere un programma principale in cui legge dati continuamente da un sensore con l ADC e, ogni secondo grazie all interrupt, aggiornare un display con l indicazione dell ora.

Gestione delle interruzioni Al RESET il micro esegue l istruzione contenuta alla locazione 0000H (detta reset vector) Il RESET vector causa un salto all entry point main 0020H, il programma inizia ad essere eseguito Se durante l esecuzione si verifica un interrupt a bassa priorità il micro automaticamente salta all indirizzo 0018H ed esegue l istruzione ivi contenuta Un nuovo salto ci porta all indirizzo 0040H dove risiede la procedura di gestione degli interrupt Verificando i FLAG è possibile capire quale periferica ha fatto scattare l interruzione, per poi eseguire la routine corrispondente Terminata la routine di gestione il micro ritorna al punto del programma in cui era stato interrotto indirizzo 0000H 0008H 0018H 0020H 0040H memoria codice GOTO 0020H GOTO 0040H GOTO 0040H main: inizializzazioni; GIE=1; while (1) main loop; Check interrupt flag if TMRIF==1 Routine_Timer; if ADCIF==1; Routine_ADC; reset vector High priority int. vector Low priority int. vector main program start

Gestione delle interruzioni Esempio #include <p18c452.h> void main (void); void InterruptHandlerHigh (void); // Definisco l high priority interrupt vector #pragma code InterruptVectorHigh = 0x08 void InterruptVectorHigh (void) _asm goto InterruptHandlerHigh //jump to interrupt routine _endasm // Definisco la routine di servizio #pragma code #pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh () if (INTCONbits.TMR0IF) //check for TMR0 overflow INTCONbits.TMR0IF = 0; //clear int.flag Flags.Bit.Timeout = 1; //indicate timeout LATBbits.LATB0 =!LATBbits.LATB0; //toggle LED on RB0 union struct unsigned Timeout:1; TMR0 timeout unsigned None:7; Bit; unsigned char Byte; Flags; //------------------------------- // Main routine //flag to indicate a Void main () // Inizializzazioni Flags.Byte = 0; INTCON = 0x20; //disable global and enable TMR0 interrupt INTCON2 = 0x84; //TMR0 high priority RCONbits.IPEN = 1; //enable priority levels TMR0H = 0; //clear timer TMR0L = 0; //clear timer T0CON = 0x82; //set up timer0 - prescaler 1:8 INTCONbits.GIEH = 1; //enable interrupts TRISB = 0; while (1) if (Flags.Bit.Timeout == 1) //timeout? Flags.Bit.Timeout = 0; //clear timeout indicor LATBbits.LATB7 = LATBbits.LATB0; //copy LED state from RB0 to RB7