Microcontrollori
Transcript
Microcontrollori
Seminario sui Microcontrollori Davide Gennaretti, Matteo Nicolini AA 2003-04 II Facoltà di Ingegneria Elettronica Cesena Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Cosa sono i microcontrollori? Piccoli computer concentrati in un chip… • Un Datapath con – Una ALU. – Decoder per POCHE istruzioni. – Registri generali (e funzione) – Eventuale Interrupt Controller • • • • RAM x dati. EPROM (o FLASH) x codice. Porte di I/O digitale. Altre periferiche – – – – – Timer interno AD Converter USART (seriale) EEPROM dati … Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini A cosa servono i “micro”? Tutto quello che è difficile fare a componenti discreti, ma metterci un PC è troppo! • Applicazioni “stand alone”, semplici e poco costose: – Distributori Automatici – Strumenti ‘intelligenti’ – Centraline: • Macchine automatiche • Automotive – Sistemi Distribuiti Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Caratteristiche Essenziali Facile ed affidabile, basta non chiedere troppo … • Facilità di lavoro – Semplice montaggio su scheda • E’ tutto dentro (oggi anche il clock!) • Non serve progettare una MotherBoard! – Semplice Programmazione • ASM con poche, semplici istruzioni • Disponibili compilatori Asm, C, basic, … • Molte funzionalità Hardware integrate • Affidabilità e robustezza – Una volta programmato … VA! • Limiti nelle prestazioni – Flessibilità (c’e’ quello che c’è …) – Potenza di calcolo limitata Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Cosa offre il Mercato … Tutto e di più: attenzione alla scelta. • Varie Marche – Microchip, Motorola, STM, NEC, etc… • Vari “tagli” – – – – – Processore: RISC, 8 bit e 16 Bit (pochi a 32). Memorie: 1K-1M (codice), 128-16K (dati). Pinout: da 8 pin a 80. Interrupt, Power Saving, Periferiche: • • • • Porte digitali Comunicazione Seriali, Parallela, CAN, USB, etc. ADC – DAC – driver PWM – comparatori Analogici Timer, Oscillatori secondari • Varie tipologie di programmazione – Assembler, Compilatori C, Basic, etc. Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Noi qui oggi parliamo del Microchip PIC • • • Caratteristiche Hardware Architettura Interna Organizzazione di Memoria – Istruzioni e Stack – Dati (RAM e EEPROM) • • • • • • • Instruction Set Main Code vs Interrupt Routine Service Programmazione in C … poi vediamo. Alimentazione e Reset Oscillatore di Sistema Porte di Ingresso e Uscita Porte con funzioni Speciali: – PortA à ADC – PortB à Interrupt On Change – PortC à USART e SPI-I2C • Periferiche: Timer 1 Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini PIC 18x: Caratteristiche HW Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini PIC 18x: Architettura Interna • Instruction Path: – – – • Data Path: – – • PC à Flash Program Memory à Istruzione Corrente: Decodifica Esecuzione ALU su W-Register e MUX-Value Porte, Periferiche… Configuration: – – – Oscillatore WatchDog … Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Organizzazione della Memoria • Due blocchi di memoria separati (Harward Architecture): • Instruction Memory (& Stack): – 21 Bit di Program Counter – 2 Interrupt location (2 Level IRQ) – Single Bank Instruction Memory Cesena, 15/03/2004 • Data Memory (& EEPROM): – 4/16 Banks da 256 byte – SFR nella parte ALTA, GPR in basso. Davide Gennaretti – Matteo Nicolini PIC 18x: Instruction Set Aritmetiche e Logiche su Byte e “Letterali” Operazioni su Singolo Bit Controllo Programma e Stack (Interrupt, Subroutines) Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Main Flow vs Interrupt Routine Service (IRS) Cosa succede quando arriva un interrupt ? Alla partenza (dopo ogni Reset) si parte dalla locazione 0000H, e si salta al Main, che fa le inizializzazioni, attiva il Global Interrupt Enable e parte il suo ciclo infinito. All’arrivo di un Interrupt (di livello 0) il PIC passa a eseguire la locazione 0008H, che rimanda alla IRS0, dove è eseguito il segmento relativo al Interrupt che si è attivato, poi si ritorna al Main Flow. Cesena, 15/03/2004 0000H (Reset Vector) Goto Main (0020H) 0008H (IRQ0 Vector) Goto IRS0 (2000H) 0018H (IRQ1 Vector) Goto IRS1 (2000H) 0020H (Main Start) Main Flow: Inizializzazioni, GIE=1 CICLO INFINITO (Macchina a Stati) 2000H (IRS Start) IRS0: Test Interrupt Flag: Se TMR1IF à Segmento Timer1 Se ADCIF à Segmento ADC Davide Gennaretti – Matteo Nicolini Return from Interrupt PIC 18x: Programmazione in ‘C’ ovvero come faccio convivere la gestione degli Interrupt con la programmazione in C… void main () { • Impostazioni iniziali – – – – – • • Direzione delle PORTE Valore iniziale delle PORTE Periferiche di Comunicazione Timer Altre Periferiche Attivazione del GIE (Global Interrupt Enable) Ciclo infinito… while (1) { Macchina a Stati, che attiva: – – – – Comunicazioni Misure Temporizzazioni … }} Cesena, 15/03/2004 BASE DATI = STATO Int Time; Char * RX-Seriale; Int Dato-ADC; Void isr () { • If ( timer ) { routine gestione timer Aggiorna ‘Time’ } • If ( RX Seriale ) { Salva il byte ricevuto nel buffer ‘RX-Seriale’ } • If ( ADC Conversion Finita ) { Salva il dato letto nel buffer } • ... } Davide Gennaretti – Matteo Nicolini Alimentazione e Reset • Alimentazioni Due versioni per ogni Chip – Flash (F) • Funzionamento a 5V, ± 10% • Velocità anche molto alta – Flash Low Voltage (LF) • Da 2 Volt a 5,5V • Velocità ridotta • Rete R-C per il Power On Reset (POR) – Basso costo Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Oscillatore di Sistema • Diverse soluzioni possibili (mediante il registro di configurazione del PIC) – Quarzo o Risonatore Ceramico • • • • • Altissima Precisione Velocità di Clock anche molto alta Consumo elevato Innesco “lento” Due pin necessari (osc. IN-OUT) – Oscillatore Esterno (Quarzo o no) • Solo un pin necessario (osc. IN) • Maggior Costo – Rete R-C • Bassa precisione (10-20%) • Basso costo • Solo un pin necessario Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Porte di Ingresso/Uscita Digitali • Organizzate in “PORT” da 8 bit ciascuno: – Registro di Direzione TRIS (contiene ‘1’ nei bit relativi ai pin che saranno USCITE) – Registro di Valore PORT (contiene ‘1’ nei bit relativi ai pin che saranno ALTI) • Read-Write diretto • Alta corrente di uscita • RIN à 8 Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Porte con Funzioni Speciali: PortA à ADC • possibile uso come ingressi analogici: (ADC da 8-10 bit) – TRIS e PORT – Registri di Controllo ADC Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Porte con Funzioni Speciali: Port B à IRQ On Change; Port C à RS232 PortB: IRQ On Change Cesena, 15/03/2004 PortC: USART & (I2C o SPI) Davide Gennaretti – Matteo Nicolini Periferiche: Timer 1 Timer 0,1,2: sono CONTATORI PROGRAMMABILI con ingresso ESTERNO o INTERNO (CLK); Prescaler fisso (1,2,4,8) e Conteggio a 8 o 16 bit. A fine conteggio attivano un INTERRUPT (TMR1IF) Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Demo: MPLAB à ICD2 à PICDEM2+ • Software MPLAB (PC) – Editor – Compilatore C – Debugger • Interfaccia USB à In Circuit Debugger 2 – Programmatore – Debugger • Solo quattro fili à PIC 18F242 su Scheda di Test PICDEM2 Plus: – – – – Led e Tasti, Display LCD Ingressi Analogici RS232, etc… Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Schema Elettrico Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini MPLAB: esempi di programma • Analisi delle Routine di Basso livello – – – – – • Inizializzazione Porte LCD Setup e Attivazione ADC Setup del Timer, IRS Setup e Utilizzo RS232 Conteggio di S2 e visualizzazione sui LED – Solo fronte di Salita… – Debounce – Uscita anche sul LCD • Lettura del ADC – Scrittura sul LCD – Frame Rate? Timer. – Uscita sulla RS232. Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini MPLAB Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Organizzazione del software void main () { • Impostazioni iniziali – – – – – • • Direzione delle PORTE Valore iniziale delle PORTE Periferiche di Comunicazione Timer Altre Periferiche Eventuale attivazione del GIE (Global Interrupt Enable) Ciclo infinito… while (1) { Macchina a Stati, che attiva: – – – – LCD ADC Temporizzazioni Seriale }} Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Organizzazione del software §Libreria di funzioni che vengono “incluse” nel main flow §Chiamata diretta ad alto livello §Implementazione a basso livello trasparente §Maggior leggibilità del software Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Utilizzo delle porte ovvero operazioni di INPUT-OUTPUT su TASTI, LED §Inizializzazione Porte §Rilevazione della pressione di un tasto §Conteggio del numero di pressioni del tasto üProblema del bounce §Scrittura sui LED collegati a PORTB Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Utilizzo delle porte ovvero operazioni di INPUT-OUTPUT su TASTI, LED e LCD §Inizializzazione Porte §Inzializzazione LCD §Cancellazione LCD §Scrittura su LCD (cont=) §Rilevazione della pressione di un tasto con debounce SW §Scrittura del risultato su LCD Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini Utilizzo del convertitore AD ovvero lettura di un segnale analogico e sua visualizzazione a display §Inizializzazione Porte §Inzializzazione LCD §Inizializzazione ADC §Cancellazione LCD §Scrittura su LCD (adc=) §Rilevazione della pressione di un tasto §Conversione analogico-digitale §Conversione dei dati binari in esadecimale §Scrittura su LCD in esadecimale Cesena, 15/03/2004 Davide Gennaretti – Matteo Nicolini