Baixe o app para aproveitar ainda mais
Prévia do material em texto
EBM3A: Sistemas Microprocessados – 3º Bimestre Nome: __________________________________Nº____ Prof.: Renato Zanetti Capture/Compare - Lista de exercícios de fixação 1) Qual a diferença entre o modo de captura e o modo de comparação do PIC24? 2) Supondo que FCLK do PIC24 seja 4MHz e que o programa ao lado espera um sinal de clock aplicado ao pino do Capture, responda: a. Qual a fonte de clock do Capture? b. Quanto tempo leva para incrementar uma unidade no timer do Capture? c. Em qual pino do PIC24 deve-se aplicar o sinal de entrada? d. O que é armazenado nas variáveis cap_p e cap_s? e. Qual a mínima frequência do sinal de entrada que pode ser medida? f. Proponha uma mudança no código para que um sinal de 1 Hz possa ser medido. g. Qual a utilizadade de cap_flag? 1. #define FCY 2e6 2. unsigned int cap_p=0, cap_s=0; 3. char cap_flag=0; 4. 5. int main(void) { 6. int freq; 7. AD1PCFG=0xFFFF; 8. RPINR7bits.IC1R=0; 9. IC1CON1=0; 10. IC1CON1=0x1C03; 11. IFS0bits.IC1IF=0; 12. IPC0bits.IC1IP=4; 13. IEC0bits.IC1IE=1; 14. while (1){ 15. if(cap_flag){ 16. cap_flag=0; 17. freq = FCY/(cap_s-cap_p); 18. } 19. } 20. return -1; 21. } 22. 23. void __attribute__((interrupt)) _IC1Interrupt(void) 24. { 25. IFS0bits.IC1IF=0; 26. cap_p = cap_s; 27. cap_s = IC1BUF; 28. cap_flag=1; 29. } 3) Supondo que FCLK do PIC24 seja 4MHz e que o programa ao lado tenha um LED conectado ao pino de saída do Compare. Responda: a. Qual o pino escolhido como saída do 1. int main(void) { 2. AD1PCFG=0xFFFF; 3. TRISF &= ~(1<<3); 4. RPOR14bits.RP29R=18; 5. T1CON=0; Compare? b. Qual o modo de operação do Compare e como o sinal de saída se comporta? c. O que acontece com o valor do timer interno ao Compare (OCxTMR) quanto a flag do timer 1 é ativada? d. Calcule a frequência do sinal no pino RF3 e no de saída do compare. e. Considerando a interrupção do Compare, qual a percentagem de variação do duty cicle do sinal de saída após cada interrupção? 6. T1CON |=1<<4; 7. PR1=31249; 8. _T1IF=0; 9. _T1IE=1; 10. _T1IP=5; 11. OC1CON1=0; 12. OC1CON2=0; 13. OC1CON2=0xB; 14. OC1CON1=0x1005; 15. OC1R = 15624; 16. OC1RS = 31249; 17. _OC1IF=0; 18. _OC1IP=4; 19. _OC1IE=1; 20. T1CONbits.TON=1; 21. while (1){} 22. return -1; 23. } 24. 25. void __attribute__((interrupt)) _OC1Interrupt(void){ 26. IFS0bits.OC1IF=0; 27. OC1R+=250; 28. if(OC1R>PR1) 29. OC1R=0; 30. } 31. void __attribute__((interrupt)) _T1Interrupt(void){ 32. _T1IF=0; 33. LATF ^=1<<3; 34. } 4) Supondo que FCLK do PIC24 seja 8MHz e que o programa ao lado tenha um LED conectado ao pino de saída do Compare. Responda: a. Que tipo de sinal temos na saída do Compare? b. Qual a frequência desse sinal? c. Qual a variação, em percentagem, do duty cicle do sinal? d. Explique o que ocorre dentro da interrupção? 1. int main(void) { 2. AD1PCFG=0xFFFF; 3. RPOR14bits.RP29R=18; 4. OC1CON1=0; 5. OC1CON2=0; 6. OC1CON2=0x1F; 7. OC1CON1=0x1C06; 8. OC1R = 0; 9. OC1RS = 62499; 10. _OC1IF=0; 11. _OC1IP=4; 12. _OC1IE=1; 13. 14. while (1){} 15. return -1; 16. } 17. 18. void __attribute__((interrupt)) _OC1Interrupt(void){ 19. IFS0bits.OC1IF=0; 20. OC1R+=500; 21. if(OC1R>OC1RS) 22. OC1R=0; 23. } Respostas: 1) - 2) a. 2MHz b. 500ns c. pino 16 (RB0) d. Considerando duas bordas de subida sequenciais, cap_p armazena o valor de OC1TMR na primeira borda e cap_s o da segunda borda. e. Fmin = 30,52 Hz f. Alterar a fonte de clock para um dos timers independentes, utilizando prescaler de pelo menos 1:64 ou mudar o modo de operação do Capture para 32 bits. g. Garantir que o cálculo da frequência no loop infinito seja feito 1 vez interrupção do Capture 1, já que o loop é executado várias vezes dentre interrupções. 3) a. Pino 30 (RB15) b. Evento periódico, geração de sequência de pulsos retangulares. Trata-se de um sinal retangular, periódico, cuja borda de subida ocorre quando OC1TMR = OC1R e a de descida quando OC1TMR = OC1RS e com período determinado por PR1 devido ao sincronismo de OC1TMR com TMR1. c. É zerado devido ao sincronismo (SYNCSEL) com o TMR1, que é zerado logo antes da flag ser ativada. d. FRF3 = 4Hz; FRB15 = 8Hz e. Δd = 0,8% 4) a. PWM. b. 32Hz c. Δd = 0,8% d. A cada interrupção OC1R é incrementado em 500, limitado ao valor de OC1RS. Como OC1R é diretamente relacionado ao tempo em nível alto do sinal de saída (de OCxTMR=0 até OCxTMR=OCxR), o duty cicle aumenta proporcionalmente a 500/OC1RS dentro da interrupção.
Compartilhar