پروتکل انتقال مادون قرمز NEC، از رمزگذاری طول پالس بیت های پیغام استفاده می کنه. طول هر پالس به اندازه 562.5 میکروثانیه روی موج حامل با فرکانس 38KHz هست. برای اینکه بتونیم درک بهتری از نحوه ارسال داده توسط این پروتکل داشته باشیم، شکل زیر به ما کمک شایانی میکنه
مطابق تصویر بالا، هر بار که کلیدی رو ریموت کنترل فشرده میشه، پیغام ارسالی شامل موارد زیر خواهد بود:
- یک پالس با طول 9 میلی ثانیه(16 برابر طول پالسی که برای ارسال صفر و یک منطقی استفاده میشه)
- 4.5 میلی ثانیه سطح پایین سیگنال یا اصطلاحا space
- 8 بیت داده برای آدرس دستگاه دریافت کننده address
- 8 بیت داده برای معکوس آدرس دستگاه دریافت کننده inverse of the address
- 8 بیت داده فرمانcommand
- 8 بیت داده معکوس فرمان inverse command
- یک پالس به طول 562.5 میکروثانیه، نشان دهنده پایان پیام
به صورت کلی در پروتکل NEC، برای ارسال بیت های منطقی به صورت زیر عمل میشه:
- سطح 0 صفر: پالس به طول 562.5 میکروثانیه و space به اندازه 562.5 میکروثانیه
- سطح 1 یک: پالس به طول 562.5 میکروثانیه و space به اندازه 1.6875 میلی ثانیه
همین حد اطلاعات در مورد تئوری کار کفایت میکنه. از الان به بعد ما باید با هم بررسی کنیم که کد خودمون رو برای این قضیه چجوری بنویسیم.
با توجه به شکل بالا، ما در میکروکنترلر خودمون پایه دیتای ماژول رو به عنوان اینتراپت خارجی با لبه پایین رونده تنظیم میکنیم. همچنین یک تایمر رو هم که هر بار شمارش اون 1 میکروثانیه طول میکشه با حداکثر مقدار ARR پیکربندی میکنیم.
در صورتی که اینتراپت ما تحریک یا اصطلاحا trigger بشه، زمان اندازه گیری شده توسط تایمر رو بررسی میکنیم. اگر این زمان از 8000 میکروثانیه بیشتر باشه، ما اون رو به عنوان شروع ارسال پیام در نظر میگیریم.
برای تشخیص صفر و یک منطقی هم کار به طور مشابه انجام میشه! در صورتی که زمان اندازه گیری شده توسط تایمر از 1700 میکرو ثانیه بیشتر بشه، داده دریافتی رو 1 در نظر میگیریم و در صورتی که کانتر تایمر زمانی بیشتر از 1000 میکروثانیه رو نشون بده ما اون رو 0 منطقی در نظر میگیریم.
در نهایت هم 8 بیت مربوط به معکوس فرمان رو با تبدیل مناسبی که روی اون انجام میدیم، با 8 بیت فرمان مقایسه میکنیم. در صورتی که این دو بایت با هم برابر باشند، داده به صورت صحیح دریافت شده و ما مشکلی نخواهیم داشت و به سادگی میتونیم داده دریافتی رو تحلیل کنیم.
نیاز به توضیح بیشتری نیست و گام به گام در نرم افزار stm32cubemx و IDE خودمون پیکربندی های مورد نیاز رو انجام میدیم و کد خودمون رو مینویسیم. ما برای این آموزش از میکروکنترلر STM32F030R8T6 استفاده خواهیم کرد.
فعالسازی دیباگ
تنظیمات کلاک
تنظیمات اینتراپت خارجی
تنظیمات تایمر
سورس کد برنامه
نتیجه اجرای برنامه با ریموت کنترل IR دلخواه
در نظر داشته باشید که راه های بسیار زیادی برای دریافت و تحلیل داده مثلا جدا کردن صفر و یک های منطقی پیغام هست و ما تو این جلسه یکی از ساده ترین ها که البته دارای دقت مناسبی هم هست رو برای شما معرفی کردیم
امیدواریم که از این آموزش استفاده برده باشید!
دانلود فایل پروژه
با سایر آموزش های اصفهان درایو همراه باشید!