Sintesi delle slide di C.S. del prof. Mario Cianciolo
Università di Catania - Laurea in Informatica A.A. 2015-2016
Per comodità, le entità sono contrassegnate: SFR (corsivo, grassetto e blu), flag/bit (corsivo), pin (corsivo, grassetto e rosso).
Indice
- Microcontrollori
- Periferica I/O digitale
- Gestione di eventi sincroni e asincroni
- Timer
- PWM
- Interrupt
- Convertitore A/D
- UART
- Circuito CCP (Capture-Compare-PWM)
- Interfaccia bus I2C
- Appendice A – Elenco SFR utili
- Appendice B – Piedinatura PIC18F25K22
- Appendice C – Esempi operativi: I/O e interrupt (codice C)
- Appendice C – Esempi operativi: Timer (codice C)
- Appendice C – Esempi operativi: CCP e PWM (codice C)
- Appendice C – Esempi operativi: UART (codice C)
Microcontrollori
- Definizione e componenti (CPU, RAM, memoria flash, periferiche interne, periferiche I/O, BUS interno)
- Periferiche I/O: corrispondono ai pin del MCU (nei MCU il bus è interno e non esterno); tipiche periferiche I/O
- SFR (definizione) – accessibili tramite puntatori C (a locazioni hardcoded in base al device)
Periferica I/O digitale
- Definizione (livelli 1 e 0, configurazione come input o come output)
- Digital input
- Floating input: input non collegato, il suo valore non può essere determinato
- Collegare un interruttore ad un pin I/O: pull-up resistor (evita floating input); condensatore in parallelo (evita il bouncing)
- Collegare un sensore industriale (12/24V) ad un pin I/O (partitore di tensione)
- Digital output
- Uso di un LED (current source o current sink, calcolo del resistore per il LED)
- Porte del PIC18F25K22 (PORTA...PORTE)
- SFR per le porte: TRISx, PORTx, LATx – varianti struct (TRISxbits, PORTxbits, LATxbits)
Gestione di eventi sincroni e asincroni
- Busy waits e come evitarle – CHECK_FOR_PRESS e CHECK_FOR_RELEASE
- Paradigma FSM (macchina a stati finiti) – int state; switch per compiere azioni in base allo stato; tali azioni cambiano lo stato
Timer
- Definizione e componenti di un timer (clock source, prescaler, SFR)
- SFR condivisi da tutti i timer:
- TMRx: valore del timer. A 16 bit, i registri sono due: TMRxH/TMRxL, XC8 fornisce una variabile unica TMRx a 16 bit
- Timer0: 8/16 bit, clock source selezionabile, prescaler 1/2/4/.../256
- SFR: T0CON (TIMER0 Control)
- TMR0ON (TIMER0 On): avvia (1) e interrompe (0) il timer
- T08BIT (TIMER0 8 bit): 1=8 bit, 0=16 bit
- T0CS (TIMER0 Clock Source): 0=interno: F/4 (16MHz); 1=esterno: pin T0CKIosc
- T0SE (TIMER0 Source Edge): controlla il fronte di T0CKI da cui prendere il clock se T0CS=1
- PSA (Prescaler Active): se 0, attiva il prescaler
- T0PS (TIMER0 Prescaler): 3 bit, se PSA=0 divide la frequenza per 2^(T0PS+1)
- Timer overflow (se T08BIT=0, vantaggio a controllare l'overflow rispetto al valore del timer), flag INTCONbits.T0IF
- Timer2/4/6: 8 bit; clock source sempre interno (Fosc/4=16 Mhz); prescaler 1/4/16
- SFR
- TxCON (TIMERx Control)
- TMRxON (TIMERx On): avvia (1) e interrompe (0) il timer
- TxOUTPS (TIMERx Out Postscaler): valore numerico (4 bit) del postscaler (0-15)
- TxCKPS (Timerx Clock Prescaler): valore del prescaler: 00=1:1, 01=1:4, 1x=1:16
- PRx (Period register): quando TMRx=PRx viene generato un evento EQ, e TMRx viene resettato
- Evento EQ: incrementa il postscaler; dopo n incrementi (TxOUTPS) attiva flag interrupt TMRxIF
- TMR2IF => PIR1, TMR4IF => PIR5, TMR6IF => PIR5
- SFR
- Timer1/3/5: 16 bit, clock source selezionabile, prescaler 1/2/4/8, gated
- Timer gated: può essere attivato anche da un segnale esterno (pin TxG) o da altri eventi generati dalle periferiche
- SFR:
- TxCON (TIMERx Control)
- TMRxON (TIMERx On): avvia (1) e interrompe (0) il timer
- TMRxCS (TIMERx Clock Source): 00=F/4; 01=F, 10=esterno: pin TxCKI o cristallo esternoosc osc
- TxCKPS (TIMERx Clock Prescaler): valore del prescaler: 00=1:1, 01=1:/2, 10=1:4, 11=1:8
- TxRD16 (TIMERx 16bit RW): Una sola lettura/scrittura a 16 bit del valore del timer, invece che due a 8 bit
- TxGCON (TIMERx Gate Control)
- TMRxGE (TIMERx Gate Enable): 0: gate disattivato, 1: gate attivato (gestito da flag opportuni)
- Bit di interrupt dei timer:
- TMR1IF => PIR1, TMR3IF => PIR2, TMR5IF => PIR5
PWM
- Definizione (onda quadra, duty cycle)
- Usi (trasmissioni analogiche in digitale, modulare un sistema on/off, controllare apparati di potenza come DC motors)
- I MCU spesso hanno periferiche apposite per PWM, ma basta un timer appositamente configurato
Interrupt
- Eventi che generano interrupt: overflow di un timer, ricezione di un byte da UART, fine della conversione ADC, etc.
- Sorgente dell'interrupt: periferica che lo genera
- ISR = Interrupt Service Routine, eseguita ad ogni interrupt, al suo termine si riprende l'esecuzione normale
- Definire una funzione void interrupt nome()
- All'interno controllare lo stato dei vari xxxIF, effettuare le opportune operazioni e resettare xxxIF
- Flag per gli interrupt
- Praticamente ogni sorgente di interrupt ha:
- xxxIF (Interrupt Flag): “set by hardware, reset by software” – resettare manualmente, in main o in ISR
- xxxIE (Interrupt Enable): se 1, dopo aver impostato xxxIF=1, viene generato un interrupt hardware (ed eseguita ISR)
- xxxIP (Interrupt Priority): se 1, l'interrupt ad alta priorità (la priorità ha senso solo se RCONbits.IPEN=1)
- Flag globali:
- RCONbits.IPEN (Interrupt Priorities Enable): se 1, divide gli interrupt in due classi (bassa priorità e alta priorità)
- Se IPEN=0: modalità “compatibilità” con altri PIC, ignora i flag di priorità xxxIP – noi useremo questa modalità
- INTCONbits.GIE (Global Interrupt Enable): attiva gli interrupt, switch globale
- INTCONbits.PEIE (Peripheral Interrupt Enable): attiva gli interrupt dalle periferiche (richiede GIE=1)
- Se IPEN=1: gestisce le priorità. Invece dei due bit precedenti, usare i seguenti:
- INTCONbits.GIEH, INTCONbits.GIEL: attiva soltanto gli interrupt a priorità alta (H) o bassa (L)
- Workflow:
- Programmare la periferica secondo le necessità
- xxxIF=0, xxxIE=1 (se IPEN=1, decidere xxxIP)
- GIE=1, PEIE=1 (oppure, se IPEN=1 decidere GIEH e GIEL)
- Questi SFR contengono gran parte degli interrupt:
- PIRx: Interrupt flag (es. PIR1bits.TMR1IF)
- PIEx: Interrupt enable (es. PIE1bits.TMR1IE)
- IPRx: Interrupt priority (es. IPR1bits.TMR1IP)
- Praticamente ogni sorgente di interrupt ha:
Convertitore A/D
- Circuito sequenziale che ottiene una variabile a 10 bit da un segnale di tensione analogico tramite approssimazioni successive.
- Caratteristiche di un ADC: range (tipici range: 0-5V o 0-3.3V) e risoluzione (10 bit nel nostro caso)
- Sample and hold: condensatore caricato per un istante dal pin. Un flag segnala la fine della conversione.
- Workflow: Configurare il convertitore, attivarlo con ADON=1, e avviare l'acquisizione con GO/DONE=1. Fissato il clocksource (ADCS), la fase di acquisizione dura ACQT cicli di clock, in cui il condensatore si carica dall'input. Subito dopo il condensatore è isolato, e inizia la fase di conversione che dura 12 cicli (valore fisso). Al termine GO/DONE=0 e viene generato l'interrupt ADIF (se attivo). Il risultato è posto in ADRESH/ADRESL.
- SFR
- ANSELA...ANSELE (Analogic Select A...E): configura ogni input analogico (1) o digitale (0). Stessa sintassi di TRISx
- ADCON0 (A/D Control – parte 0)
- CHS (Channel Select): seleziona il canale (pin di input) da usare per la conversione, da 0 (AN0) a 19 (AN19)
- GO/DONE: se 1, avvia la conversione. Torna a 0 automaticamente al termine della conversione
- ADON (A/D On): accende (1) e spegne (0) il convertitore A/D
- ADCON1 (A/D Control – parte 1)
- PVCFG (Positive Voltage Config): riferimento di tensione positivo (00: Vref+, 01: pin Vdd, …)
- NVCFG (Negative Voltage Config): riferimento di tensione negativo (00: Vref-, 01: pin Vss, ...)
- ADCON2 (A/D Control – parte 2)
- ADFM (A/D Format): allineamento risultante della conversione
-
Riassunto esame Sociologia dei nuovi Media, prof. Santoro, libro consigliato Nuovi media, vecchi media, M. Santoro
-
Riassunto esame Filosofia del Diritto, Prof. Re Lucia, libro consigliato Diritto e Diritti (Santoro), Emilio Santor…
-
Riassunto esame Diritto del lavoro, Prof. Santoro Passarelli Giuseppe, libro consigliato Diritto del lavoro e dell'…
-
Riassunto esame Diritto del Lavoro, prof. Santoro-Passarelli, libro consigliato Diritto dei Lavori, Santoro Passare…