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