|
|
View previous topic :: View next topic |
Author |
Message |
ruijing2
Joined: 30 Apr 2008 Posts: 4
|
how to use PWM and CCP_CAPTURE_FE ? |
Posted: Wed Apr 30, 2008 4:04 am |
|
|
hi can u help me?
i use ccs c and PIC18F452.
i want to use PWM and CCP_CAPTURE_FE.
Try it but when i on PWM and CCP_CARTURE_FE TOGETHER as ccp1 and ccp2. The PWM(ccp2) did something to the CCP_CARTURE_FE(ccp1) interrupt.
Code: |
#elif defined(__PCH__)
#include <18F452.h>
#device ICD=true
#fuses HS,NOWDT,NOLVP,WDT128,NOPUT,NOBROWNOUT,NOPROTECT,NOWRTD,CPD
#use delay(clock=20000000)
#use rs232(parity=N,BITS=8,xmit=PIN_C6,rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#endif
int32 en=0;
int32 countstore=0,countstore2=0;
unsigned int32 count=0,duty=128;
int32 ans=0,ans3=0,ans2=0;
int32 in=0,count2=0;
#INT_TIMER1
void time1()
{
// for(;;)
count++;
}
#INT_CCP1
void hahah()
{
// if(count2>=1 && count2 <17 )
// {
countstore2=CCP_1;
countstore=count;
count=0;
// }
//else if(count2==0)
// {
// en=CCP_1;
// count2++;
// count=0;
// }
ans3=((countstore*65536)+countstore2)-en;
// printf("en=%lu \r\n ",en);
// printf("countstore2=%lu \r\n ",countstore2);
// printf("countstore=%lu \r\n ",countstore);
// printf("count2=%lu \r\n ",count2);
// printf("ans=%lu \r\n ",ans);
countstore=0;
in=0;
if(en!=countstore2)
{
en=countstore2;
// count2++;
// count=0;
}
if(count2!=0)
{
ans2+=ans3;
}
count2++;
if(count2==17)
{
ans=ans2/(count2-1);
// printf("countstore2=%lu \r\n ",countstore2);
// printf("countstore=%lu \r\n ",countstore);
// printf("count2=%lu \r\n ",count2-1);
printf("ans=%lu \r\n ",ans);
// countstore=0;
count2=0;
// countstore2=0;
in=0;
ans2=0;
}
// countstore2=CCP_1;
// countstore=count;
}
void main() {
set_uart_speed(9600);
setup_ccp1(CCP_CAPTURE_FE);
setup_ccp2(CCP_PWM);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
setup_timer_2 ( T2_DIV_BY_1, 255, 1);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
for(;;)
{
if(in==0)
{
if(ans>10000001 && duty >0)
{
duty--;
}else if(ans<9999999 && duty <128)
{
duty++;
}
in=1;
}
set_pwm2_duty(10L);
}
}
|
|
|
|
Matro Guest
|
|
Posted: Wed Apr 30, 2008 4:16 am |
|
|
Please post a small clean compilable code that demonstrates the problem and try to provide a deeper explanation of the issue you are encountering.
Matro |
|
|
ruijing2
Joined: 30 Apr 2008 Posts: 4
|
|
Posted: Wed Apr 30, 2008 4:22 am |
|
|
#INT_TIMER1
void time1()
{
}
#INT_CCP1
void hahah()
{
}
void main() {
set_uart_speed(9600);
setup_ccp1(CCP_CAPTURE_FE);
setup_ccp2(CCP_PWM);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
setup_timer_2 ( T2_DIV_BY_1, 255, 1);
enable_interrupts(INT_TIMER1);
enable_interrupts(INT_CCP1);
enable_interrupts(GLOBAL);
for(;;)
{
set_pwm2_duty(10L);
}
} |
|
|
ruijing2
Joined: 30 Apr 2008 Posts: 4
|
re: |
Posted: Wed Apr 30, 2008 4:34 am |
|
|
it keep interrupt the ccp1 as it will interrupt at 1s only |
|
|
Matro Guest
|
|
Posted: Wed Apr 30, 2008 5:16 am |
|
|
I definitely don't understand what is the "problem".
What is your hardware?
What are you trying to do?
What did you expect?
What do you really obtain?
Matro |
|
|
ruijing2
Joined: 30 Apr 2008 Posts: 4
|
|
Posted: Wed Apr 30, 2008 5:47 am |
|
|
i want to use EXTERNAL 1pps to read 10M count from EXTERNAL 10MHz clock. And to control the PWM. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|