Buscar

CCP (Capture Compare PWM)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

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.

Continue navegando