سلام
امیدوارم همگی خوب باشید
من تو این پروِزه می خوام از دو تا پایه input capture و int1 به صورت همزمان استفاده کنم به این صورت که دو تا پالس با فرکانس های مختلف داریم و من می خوام فرکانس های اینها رو اندازه بگیرم.به این صورت که پالسی که به input capture می دیم مثلا 100 بار اندازه گیری بشه و نشون داده بشه سپس یک بار وقفه خارجی فعال بشه و پالس مربوط به اون اندازه گیری بشه و نشون داده بشه!من طریقه محاسباتشو می دونم ولی تو فعال و غیر فعال کردن اینا مشکل دارم
.من این برنامه رو نوشتم
امیدوارم همگی خوب باشید
من تو این پروِزه می خوام از دو تا پایه input capture و int1 به صورت همزمان استفاده کنم به این صورت که دو تا پالس با فرکانس های مختلف داریم و من می خوام فرکانس های اینها رو اندازه بگیرم.به این صورت که پالسی که به input capture می دیم مثلا 100 بار اندازه گیری بشه و نشون داده بشه سپس یک بار وقفه خارجی فعال بشه و پالس مربوط به اون اندازه گیری بشه و نشون داده بشه!من طریقه محاسباتشو می دونم ولی تو فعال و غیر فعال کردن اینا مشکل دارم
.من این برنامه رو نوشتم
// Global enable interrupts
#asm("sei"
PORTA=0b00000000;
PORTB=0b00000000;
//GICR=0x00;
while (1)
{
count = count + 1;
if
(count == 1000)
{
TIMSK=0x00;
//GICR=0x80;
}
if
(show_cap==1)
{
TIMSK=0x00;
PORTA.2 = !PORTA.2;
delay_ms(1);
show_cap = 0;
TIMSK=0x24;
}
if
(show_int==1)
{
GICR=0x00;
PORTB.3 = !PORTB.3;
delay_ms(100) ;
count = 0;
show_int = 0;
TIMSK=0x24;
}
};
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if
(m == 0 )
{
m = 1 ;
}
else
if
( m == 1 )
{
show_int = 1 ;
m = 0 ;
}
}
// Timer 1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
if
(n == 0 )
{
n = 1 ;
}
else
if
(n == 1)
{
show_cap = 1 ;
n = 0 ;
}
}
#asm("sei"

PORTA=0b00000000;
PORTB=0b00000000;
//GICR=0x00;
while (1)
{
count = count + 1;
if
(count == 1000)
{
TIMSK=0x00;
//GICR=0x80;
}
if
(show_cap==1)
{
TIMSK=0x00;
PORTA.2 = !PORTA.2;
delay_ms(1);
show_cap = 0;
TIMSK=0x24;
}
if
(show_int==1)
{
GICR=0x00;
PORTB.3 = !PORTB.3;
delay_ms(100) ;
count = 0;
show_int = 0;
TIMSK=0x24;
}
};
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if
(m == 0 )
{
m = 1 ;
}
else
if
( m == 1 )
{
show_int = 1 ;
m = 0 ;
}
}
// Timer 1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
if
(n == 0 )
{
n = 1 ;
}
else
if
(n == 1)
{
show_cap = 1 ;
n = 0 ;
}
}
تو این برنامه پایه اینتراپتمون حتی اگه چیزی بهش وصل هم نشده باشه پالس می گیره!!!!! و پورتمون رو تاگل می کنه !
میشه کمک کنید بگید چی کار کنم؟؟؟؟ممنون
من کلا می خوام پالس رو که به اینپوت کپچر می دم 100 بار اندازه بگیرم و نشون بدم و بعد یک بار پالس اینراپت رو اندازه بگیرم و نشون بدم و همین روند ادامه داشته باشه؟
پالس input capture در حد 200 هرتز
پالس int1 در حد 50 هرتز
دیدگاه