Estratto del documento

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
  • 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)

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
Anteprima
Vedrai una selezione di 4 pagine su 12
Riassunto Laboratorio Avanzato di Programmazione 1, prof. Santoro Pag. 1 Riassunto Laboratorio Avanzato di Programmazione 1, prof. Santoro Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Riassunto Laboratorio Avanzato di Programmazione 1, prof. Santoro Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Riassunto Laboratorio Avanzato di Programmazione 1, prof. Santoro Pag. 11
1 su 12
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher udda di informazioni apprese con la frequenza delle lezioni di Laboratorio Avanzato di Programmazione e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Catania o del prof Santoro Corrado.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community