PDA

View Full Version : برنامه مربوط به سنسور SRF05



poya121
جمعه 27 مرداد 1391, 09:08 صبح
سلام.من دارم يك ربات مين ياب درست ميكنم،كه از سنسور SRF05 براي اون استفاده كردم.حالا براي برنامه نويسي اين سنسور گير كردم!در ضمن ميخوام برنامه به زبان سي باشه!كسي ميتونه توبرنامه نويسيش بهم كمك كنه؟اگه نمونه كد هم داريد برام خواهشن بفرستيد.فقط دوستان من خيلي خيلي عجله دارم!!خواهش ميكنم يكي زود جوابمو بده!!ممنون.

Abbas Amiri
جمعه 27 مرداد 1391, 12:46 عصر
دوست عزیز اگر یکی از تایمرهای 16بیتی میکرو آزاد باشد، با استفاده از Input Capture میکرو میتوانید براحتی اینکاررا انجام دهید کافیست تنظیمات آن را انجام داده و کدهای زیر را به برنامه اضافه کنید . دراین مثال از تایمر1 استفاده شده است. البته خروجی ماژول مربوطه باید به پایه IC1 میکرو وصل شود.


int measure; //SRF05 Result in cm
//*********************************
// Speed of sound in 20 degree =34000 cm/s
// (1/34000) * 1000000 = 29.4
// if Timer1_Period =2 us , scale_factor= 29.4 * 2 = 59
flash int scale_factor = 59 ; // scale_factor = 29.4 * Timer1_Period(uSecond)
//*********************************
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{ int t_meas;

if (TCCR1B & 0x40) { //if Start Edge
TCCR1B &= ~(0x40); //Change trigger edge
TCNT1 = 0; //Initialize Timer1
}
else { //if End Edge
TCCR1B |= 0x40; //Change trigger edge
t_meas = (ICR1H << 8) | ICR1L ;
measure = (int)(t_meas / scale_factor); //Calculate distance
}
}

poya121
جمعه 27 مرداد 1391, 13:53 عصر
ممنون دوست عزيز.فقط يك سوال ديگه هم دارم؟
ميكرو من ATmega128 است،اين دستورات روش جواب ميده؟

Abbas Amiri
جمعه 27 مرداد 1391, 15:22 عصر
ميكرو من ATmega128 است،اين دستورات روش جواب ميده؟
باتوجه به راهنمای ماژول SRF05 به احتمال خیلی زیاد مشکلی نخواهدداشت . فقط بایستی اینتراپت ICP تایمر موردنظر فعال شده باشد . همچنین ارسال پالس تحریک ماژول میتواند در یکی ازوقفه های تایمرها در فواصل زمانی باتوجه به اقتضای پروژه بایستی انجام شود (با عرض حداقل 10میکروثانیه )

poya121
جمعه 27 مرداد 1391, 19:51 عصر
ممنونم از راهنماييتون.

h.torabi
چهارشنبه 16 مرداد 1392, 17:32 عصر
سلام داداش دمت گرم من از روش capture استفاده نکردم میشه یه اموزش معرفی کنی برای کار باهاش ؟؟؟؟؟
من ازتایمر 1 برای اندازه گیری زمان سطح 1 پالس استفاده کردم
ولی هرکاری میکنم یک عدد ثابت بمن نشون میدهد
ااز وقفه خارجی 1 در atmega32l استفاده کردم
به این صورت که با دیدن لبه بالا رونده تایمر 1 از اول شروع به کار کنه وبا دیدن لبه پایین رونده مقدار تایمر1 بخوانه وبعد اون 0کنه ولی اصلا جواب نداد
باید چیکار کنم.........................

Abbas Amiri
پنج شنبه 17 مرداد 1392, 20:18 عصر
سلام داداش دمت گرم من از روش capture استفاده نکردم میشه یه اموزش معرفی کنی برای کار باهاش ؟؟؟؟؟
من ازتایمر 1 برای اندازه گیری زمان سطح 1 پالس استفاده کردم
ولی هرکاری میکنم یک عدد ثابت بمن نشون میدهد
ااز وقفه خارجی 1 در atmega32l استفاده کردم
به این صورت که با دیدن لبه بالا رونده تایمر 1 از اول شروع به کار کنه وبا دیدن لبه پایین رونده مقدار تایمر1 بخوانه وبعد اون 0کنه ولی اصلا جواب نداد
باید چیکار کنم.........................

ممکنه دوره کاری تایمر خیلی کوتاه باشد . از تقسیم فرکانس بزرگتر و تایمر 16 بیتی استفاده کنید