سلام
در http://www.eca.ir/forum2/index.php?topic=84522.0 دوستان یه کد برای کار با ماژول اوتراسونیک گذاشتن که بخش اصلیش هم اینه:
من هم همیشه با همین روش با اولتراسونیک ها کار می کنم .توی این کد پایه ی تریگر رو یک می کنن بعد به کمک یه حلقه ی while اینقدر ثبر می کنن تا پایه ی اکو از 1 به صفر بره و مدت زمان رو با تایمر کانتر می شمارن. بعد از روی زمان و سرعت صوت فاصله رو می گیرن.
حالا 2 تا سوال:
1- این تنها روش کار با این ماژوله(جور دیگه ای نمیشه باهاش کار کرد؟؟؟)
2- این روشی که گفته شد یه ایراد بزرگ داره! فرض کنید وقفه ی میکروتون هم فعاله و در شرایط خاصی یه وقفه ی خارجی میاد که روتینش باید یه عالمه دستور کند رو انجام بده. اگه از شانس وقفه دقیقا توی این while ها رخ بده یه دفعه میکرو میره سراغ وقفه و وقتی برمیگرده دیگه اولتراسونیک موجش رو دریافت کرده و پایه هاش تغییر نمی کنن و به همین دلیل توی while بی نهایت گیر می افته!!! من این مشکل رو تویه یه ربات با سه تا لولتراسونیک دارم!!!
در http://www.eca.ir/forum2/index.php?topic=84522.0 دوستان یه کد برای کار با ماژول اوتراسونیک گذاشتن که بخش اصلیش هم اینه:
کد:
PORTC.0 = 1; delay_us(20); PORTC.0 = 0; while(PINC.1 == 0); TCNT0 = 0; TCCR0=0x01; while(PINC.1 == 1) { }; TCCR0=0x00;
حالا 2 تا سوال:
1- این تنها روش کار با این ماژوله(جور دیگه ای نمیشه باهاش کار کرد؟؟؟)
2- این روشی که گفته شد یه ایراد بزرگ داره! فرض کنید وقفه ی میکروتون هم فعاله و در شرایط خاصی یه وقفه ی خارجی میاد که روتینش باید یه عالمه دستور کند رو انجام بده. اگه از شانس وقفه دقیقا توی این while ها رخ بده یه دفعه میکرو میره سراغ وقفه و وقتی برمیگرده دیگه اولتراسونیک موجش رو دریافت کرده و پایه هاش تغییر نمی کنن و به همین دلیل توی while بی نهایت گیر می افته!!! من این مشکل رو تویه یه ربات با سه تا لولتراسونیک دارم!!!
دیدگاه