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
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

ON OFF

I due bit di DCxB permettono un controllo più preciso sul duty cycle: corrispondono a "un quarto di ciclo"

PIC18F25K22 ha 5 CCP, ognuno configurabile indipendentemente in una delle 3 modalità, e ognuno con i suoi pin di I/O

Pin: ogni CCP ha un pin di I/O condiviso con una porta I/O:

  • CCP1 => RC2
  • CCP2 => RC1 o RB3 (configurabile)
  • CCP3 => RC6 o RB5 (configurabile)
  • CCP4 => RB0
  • CCP5 => RA4

SFR:

  • CCPRxH, CCPRxL (CCPx Register): l'uso dipende dalla modalità del CCP (in XC8 esiste la variabile unica CCPRx)
  • CCPTMRS0, CCPTMRS1 (CCP Timer Select): seleziona quale timer deve usare ogni CCP

CxTSEL (CCPx Timer Select): selezione timer da usare per ogni CCP

  • 00: Capture/compare usa TIMER1, PWM usa TIMER2
  • 01: Capture/compare usa TIMER3, PWM usa TIMER4
  • 10: Capture/compare usa TIMER5, PWM usa TIMER6

CCPxCON (CCPx Control): configurazione di CCPx

  • DCxB (CCPx Duty Cycle Bits): bit
8 e 9 del duty cycle (modalità PWM)
  1. CCPxM (CCPx Mode): modalità CCP:
    • 0000 - Spento
    • 0010 - Compare
    • 1000 - Capture
    • 1001 - PWM
    • 0100 - Toggle
    • 0101 - 1
    • 0110 - 0
    • 0111 - Discesa
    • 11xx - Salita
    • Ogni 4 salite
    • Ogni 16 salite
Flag di interrupt:
  • CCP1IF => PIR1
  • CCP2IF => PIR2
  • CCP3IF => PIR4
  • CCP4IF => PIR4
  • CCP5IF => PIR4
Sintesi LAP 1 - UniCT Informatica Mario Cianciolo 52I I CNTERFACCIA BUS
  1. Inter-Integrated Circuit Bus - bus digitale (ideato da Philips), standard per connettere diversi IC sulla stessa scheda
  2. Ogni periferica ha un ruolo:
    • 2Master - avvia la comunicazione, un solo master ammesso in una rete I C, in genere un MCU
    • Slave - tutte le altre periferiche, rispondono agli stimoli del master
  3. Interfaccia sincrona (velocità max teorica 400 Kbps), bus a due fili che connettono tutte le periferiche:
    • SDA: Serial DAta, bidirezionale, trasporta i dati serialmente
    • SCL: Serial CLock, unidirezionale, dal master

agli slave, temporizza le trasmissioni

  • I due fili usano resistori pull-up, per evitare collisioni elettriche:
    • Quando i MOS di output sono spenti, la linea è a tensione V tramite la resistenza di pull-up (1 logico)cc
    • Quando i MOS di output sono accesi, la linea è a tensione 0 perché connessa alla massa (0 logico)
    • Quindi trasmettere 0 e 1 in software provoca l'accensione o lo spegnimento dei MOS in hardware
  • Ogni slave ha un indirizzo noto
    • Due standard per gli indirizzi: 7 bit (diffuso) e 10 bit (solo casi particolari)
    • Ogni slave ha anche una register map: ogni registro ha un indirizzo (8 bit) e un valore (8 bit). Il master può leggere e scrivere questi registri tramite opportuni protocolli. Uso: configurare la periferica, inviare comandi, etc
  • Stati
    • Bus IDLE: SDA e SCL entrambi in stato 1
    • START CONDITION (S): avviata dal master – SCL=1, SDA transizione 1-0. Avvia la comunicazione sul bus
    • Trasferimento dati:
avviene serialmente e MSB-first:
  • Il valore del bit viene posto in <SDA>
  • Transizione 0-1-0 in <SCL> (impulso di clock)
  • 0-1: il byte è stabilmente sulla linea, lo slave ricevente può leggere
  • 1-0: il byte sta cambiando con il successivo
  • Prossimo bit
  • Dopo gli 8 bit, il master aspetta un ACK: trasmette un nono impulso di clock, e lo slave ricevente mantiene <SDA> a 0 per indicare la corretta ricezione del byte. Se ciò non accade (NACK) il master interrompe la comunicazione

STOP CONDITION (P): avviata dal master - <SCL>=1, <SDA> transizione 0-1. Termina ogni comunicazione, bus IDLE

Trasferimento dati

  • Master avvia la comunicazione con una Start Condition
  • Master invia Write Command (8 bit): 7 bit di indirizzo e un bit R/W a 0 (ovvero scrivere sullo slave) e attende ACK
  • Master invia il register number (8 bit) e attende ACK
  • PER INVIARE DATI:
    • Master invia il register data (8 bit) e attende ACK
  • PER RICEVERE DATI:
    • Master invia...

una nuova Start Condition

Master invia Read Command (8 bit): 7 bit di indirizzo e un bit R/W a 1 (ovvero leggere dallo slave) e attende ACK

Lo slave invia gli 8 bit e attende ACK dal master. Continua ad inviare 8 bit alla volta dai registri consecutivi finché non riceve un NACK (SDA a 1) dal master, che indica che il master non ha bisogno di altri dati.

Master termina la comunicazione con una Stop Condition

2MSSP (Master Synchronous Serial Port) - Periferica per comunicazioni I C e SPI. Può agire da master o slave

SFR:

2SSPxCON1: imposta la modalità di funzionamento: es I C/SPI, master/slave

SSPxCON2: in master mode, genera eventi (S, P, ACK, NACK)

ACKSTAT, ACKDT: ACK status e data

ACKEN: invia ACK data (resettato dall'hardware appena completato)

RCEN: attiva ricevitore (resettato dall'hardware appena completato)

PEN: invia Stop Condition (resettato dall'hardware appena completato)

SEN, RSEN:

invia Start Condition e Start Condition ripetuta (resettato dall'hardware appena completato)

SSPxCON3: specifica gli eventi che generano interrupt

SSPxSTAT: indica il verificarsi di eventi

  • D/!A: indica se dati o indirizzo
  • P: indica una Stop Condition
  • S: indica una Start Condition
  • BF: buffer pieno (durante la ricezione 1: ricezione completa; durante l'invio 1=trasmissione in corso)

Baud Rate Register: imposta la velocità di comunicazione (master mode)

Data Register: contiene i dati letti o da scrivere

Sintesi LAP 1 – UniCT Informatica Mario Cianciolo 6A A – E SFRPPENDICE LENCO UTILI

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF

INTCONbits INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 - TMR0IP - RBIP

INTCON3 INT2IP INT1IP - INT2IE INT1IE - INT2IF INT1IF

STATUS - - - N OV Z DC CRCON IPEN SBOREN - RI TO PD POR BOR

TMR0H High byte di Timer0 – registro completo a 16 bit: TMR0

TMR0L Low byte di Timer0

T0CON TMR0ON

T08BIT T0CS T0SE PSA T0PS<2:0>TMR1H High byte per Timer1 – registro completo a 16 bit: TMR1TMR1/3/5 TMR1L Low byte per Timer1T1CIB TMR1CS<1:0> T1CKPS<1:0> T1SOSCEN !T1SYNC T1RD16 TMR1ONT1GCON TMR1GE T1GPOL T1GTM T1GSPM T1GGO/!DONE T1GVAL T1GSS<1:0>ADRESH High byte del convertitore A/D – registro completo a 16 bit: ADRESADRES ADRESL Low byte del convertitore A/DADCON0 - CHS<4:0> GO/DONE ADONADCONbits ADCON1 TRIGSEL - - - PVCFG<1:0> NVCFG<1:0>ADCON2 ADFM - ACQT<2:0> ADCS<2:0>TMR2 Valore di Timer2TMR2/4/6 PR2 Periodo di reset di Timer2T2CON - T2OUTPS<3:0> TMR2ON T2CKPS<1:0>CCP1CO - - DC1B<1:0> CCP1M<3:0>NCCP1/2/3/4/5 CCPR1H High byte di CCP1 (usato solo con timer a 16 bit, no PWM) – registro completo a 16 bit: CCPR1CCPR1L Low byte di CCP1CCPTMR C3TSEL<1:0> - C2TSEL<1:0> - C1TSEL<1:0>S0CCPTMR - - - - C5TSEL<1:0> C4TSEL<1:0>S1BAUDCO ABDOVF RCIDL DTRXP CKTXP BRG16 -

WUE ABDENN1SPBRGHEUSART1/2 High byte del Baud Rate Generator di EUSART11SPBRG1 Low byte del Baud Rate Generator di EUSART1RCREG1 Registro ricezione di EUSART1TXREG1 Registro trasmissione di EUSART1TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9DRCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9DANSELA ANSELA7 ANSELA6 ANSELA5 ANSELA4 ANSELA3 ANSELA2 ANSELA1 ANSELA0A/B/C/D/E TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0LATA LATA7 LATA6 LATA5 LATA4 LATA3 LATA2 LATA1 LATA0PORTA PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0PIE1 - ADIE RC1IE TX1IE SSP1IE CCP1IE TMR2IE TMR1IEPIR1 - ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IFIPR1 - ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IPPIE2 OSCFIE C1IE C2IE EEIE BCL1IE HLVDIE TMR3IE CCP2IEPIR2 OSCFIF C1IF C2IF EEIF BCL1IF HLVDIF TMR3IF CCP2IFinterrupt IPR2 OSCFIP C1IP C2IP EEIP BCL1IP HLVDIP TMR3IP CCP2IPPIE3 SSP2IE BCL2IE RC2IE TX2IE CTMUIE TMR5GIE TMR3GIE TMR1GIEPIR3 SSP2IF BCL2IF RC2IF TX2IF CTMUIF TMR5GIF TMR3GIF TMR1GIFvari IPR3SSP2IP BCL2IP RC2IP TX2IP CTMUIP TMR5GIP TMR3GIP TMR1GIPSFR PIE4 - - - - - CCP5IE CCP4IE CCP3IEPIR4 - - - - - CCP5IF CCP4IF CCP3IFIPR4 - - - - - CCP5IP CCP4IP CCP3IPPIE5 - - - - - TMR6IE TMR5IE TMR4IEPIR5 - - - - - TMR6IF TMR5IF TMR4IFIPR5 - - - - - TMR6IP TMR5IP TMR4IPSintesi LAP 1 – UniCT Informatica Mario Cianciolo 7A B – P PIC18F25K22PPENDICE IEDINATURAVpp !MCLR RE3 1 28 RB7 IOC3 RX2 DT2 PGDAN0 RA0 2 27 RB6 IOC2 TX2 CK2 PGCAN1 RA1 3 26 RB5 IOC1 P2B P3A CCP3 T3CKI T1G AN13DACOUT Vref- RA2 4 25 RB4 IOC0 P1D T5G AN11Vref+ AN3 RA3 5 24 RB3 P2A CCP2 SDO2 AN9CCP5 T0CKI RA4 6 23 RB2 INT2 P1B SDI1 SDA2 AN8!SS1 HLVDIN AN4 RA5 7 22 RB1 INT1 P1C SCK2 SCL2 AN10Vss 8 21 RB0 INT0 CCP4 FLT0 !SS2 AN12CLKI OSC1 RA7 9 20 VddCLKO OSC2 RA6 10 19 VssP2B T3CKI T3G T1CKI SOSCO RC0 11 18 RC7 P3B RX1 DT1 AN19P2A CCP2 SOSCI RC1 12 17 RC6 P3A CCP3 TX1 CK1 AN18P1A CCP1 T5CKI AN14 RC2 13 16 RC5 SDO1 AN17SCK1 SCL1 AN15 RC3 14 15 RC4 SDI1 SDA1 AN16LEGENDA:Per non appesantire lo schema, sono staterimosse le funzioni non utili per l'esame (comparatore, latch, CTMU, etc) I/O digitale ADC (Analog-Digital Converter) Riferimenti 2CCP (Capture-Compare-PWM) EUSART MSSP (I C) Timer Interrupt Base Sintesi LAP 1 – UniCT Informatica Mario Cianciolo 8A C – E : I/O ( C) APPENDICE SEMPI OPERATIVI E INTERRUPT CODICE Porte I/O: <TRISAbits.TRISA3 = 1; // RA3: input TRISCbits.TRISC4 = 0; // RC4: output int x = PORTAbits.RA3; // legge RA3 LATCbits.LATC4 = x; // scrive su RC4 Evitare busy waits: // in questo modo il main loop può eseguire altre operazioni mentre attende il release dei pulsanti #define CHECK_FOR_PRESS 1 #define CHECK_FOR_RELEASE 2 int main(int argc, char** argv) { int stateRA1 = CHECK_FOR_PRESS; for (;;) { // main loop if (stateRA1 == CHECK_FOR_PRESS && PORTAbits.RA1 == 0) { //...azioni necessarie stateRA1 = CHECK_FOR_RELEASE; } else if (stateRA1 == CHECK_FOR_RELEASE && PORTAbits.RA1 == 1) { stateRA1 = CHECK_FOR_PRESS; } // ...ripetere per ogni } }

pulsante

void enable_interrupts() {
    INTCONbits.GIE = 1; // abilita gli interrupts (switch globale)
    INTCONbits.PEIE = 1; // abilita gli interrupts delle periferiche
    RCONbits.IPEN = 0; // no priorità
}

// interrupt service routine – purché abbia l'attributo interrupt può avere qualsiasi nome. Chiamata ad ogni interrupt
void interrupt isr() {
    /*if (xxxIF == 1) {... eseguire le azioni necessariexxxIF = 0;}*/
}

ADC

void setup_adc() {
    TRISAbits.TRISA0 = 1; // RA0 = input
    ANSELAbits.AN
Dettagli
Publisher
A.A. 2015-2016
12 pagine
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.