ریموت کدلرن و چگونگی دکد کردن آن + سورس برنامه

2
2543
ریموت کدلرن
ریموت کدلرن

متأسفانه سورس‌های زیادی وجود دارند که از منابع متن‌باز (Open Source) کپی شده‌اند و به‌صورت تجاری در فضای اینترنت به فروش می‌رسند. سورس ریموت‌های کدلرن نیز از این دسته است. اگر سورس های متن‌باز وجود نداشتند شاید این میزان از پیشرفت در حوزه علم و تکنولوژی حاصل نمی‌شد. پس شایسته است که به‌جای منفعت شخصی خود به منفعت جمعی بیندیشم و سورس‌هایی ازاین‌دست را بفروش نرسانیم و با انتشار رایگان آنها نقشی در بالابردن سطح دانش داشته باشیم.

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است.

بسترهای متفاوتی برای ارسال اطلاعات وجود دارد که از پرکاربردترین آن‌ها، امواج مادون‌قرمز است که نمونه‌اش را همگی در ریموت‌های تلویزیون و وسایل خانگی دیده‌ایم و نوع دیگر، ریموت‌های رادیویی هستند که از امواج رادیویی برای ارسال داده‌ها استفاده می‌کنند.

موضوع بحث ما، مورد دوم است: ریموت‌های رادیویی. این ریموت‌ها برای این‌که بتونند اطلاعات را منتقل کنند نیاز دارند که اول اطلاعات را روی یه موج دیگر که به آن موج حامل گفته می‌شود سوار (مدولاسیون) کنند. با این کار اطلاعات قابلیت انتشار در فضا را به‌دست خواهند آورد.

انواع مدلاسیون

مدلاسیون دو نوع آنالوگ و دیجیتال دارد که خود به انواع دیگری تقسیم‌بندی می‌شوند. در مدولاسیون، سیگنال فرکانس بالا (حامل) براساس سیگنال پیام تغییر داده می‌شود. سیگنال حامل خواص مختلفی ازجمله دامنه، فرکانس و فاز دارد که می‌توانند بر اساس سیگنال پیام تغییر داده شوند و ازاین‌رو انواع مختلفی از مدولاسیون پدید می‌آید. (عکس زیر)

انواع مدلاسیون
انواع مدلاسیون

 

همان‌طور که در عکس فوق مشاهده می‌کنید، در مدلاسیون AM سیگنال داده بر روی دامنه‌ی موج حامل تأثیر می‌گذارد و در مدلاسیون FM سیگنال داده بر روی فشردگی سیگنال حامل (فرکانس) تأثیر می‌گذارد. این مدلاسیون به‌مراتب دارای برد بیشتری نسبت به مدلاسیون AM است؛ چراکه در مدلاسیون AM کاهش دامنه به معنی کاهش توان فرستنده است. نوع بعدی مدلاسیون دیجیتال (Keying) است که درواقع نوعی از مدلاسیون FM محسوب می‌شود.

در مدارات دیجیتال ما با دو منطق صفر و یک سروکار داریم که برای انتقال به فرکانس‌های F0 و F1 تبدیل می‌شوند. فرکانس F0 یعنی منطق 0 و فرکانس F1 یعنی منطق 1. در این روش کار گیرنده خیلی ساده است و باید بتواند تفاوت بین فرکانس F0 و F1 را تشخیص دهد و آشکار کند. در ریموت‌کنترل‌های رادیویی برای ارسال داده از این نوع مدلاسیون یا مدلاسیون های مشابه استفاده می‌شود.

ریموت‌های کدلرن از مدلاسیون ASK برای ارسال داده استفاده می‌کنند. مدلاسیون ASK زیرشاخه‌ی ساده‌شده‌ای از مدلاسیون دیجیتال است؛ فرکانس F0 از آن حذف شده است و فقط فرکانس F1 در آن استفاده می‌شود. یعنی وقتی‌که منطق 1 باشد فرکانس F1 تولید می‌شود و وقتی‌که منطق صفر است فرستنده خاموش می‌شود و هیچ سیگنالی تولید نمی‌شود.

مدلاسیون ASK
مدلاسیون ASK

 

ترفند هم باعث ساده‌سازی فرستنده و هم گیرنده می‌شود؛ چراکه در فرستنده فقط باید فرکانس حامل با فرکانس F1 تولید شود و در گیرنده هم فقط باید فرکانس F1 شناسایی شود.

انواع گیرنده ریموت

تا اینجا با نحوه‌ی ارسال اطلاعات آشنا شدیم.

برای ساخت یک ریموت کنترل ابتدا لازم است که امواج ارسالی از ریموت (فرستنده) را دریافت کنیم که بعد از پردازش بتوانیم عملی مناسب با درخواست کاربر را اجرا کنیم. با توجه به نوع فرستنده نیاز داریم که یک گیرنده ASK داشته باشیم که فرکانس آن با فرکانس ریموت یکی باشد، یعنی اگر از ریموت با فرکانس 433 مگاهرتز استفاده می‌کنیم گیرنده ASK نیز باید با همان فرکانس کار کند. در غیر این صورت مدار به‌درستی کار نخواهد کرد.

مطابق عکس زیر می‌توانیم مدار گیرنده را خودمان بسازیم؛ اما با توجه به پیچیدگی‌های بحث RF این کار توصیه نمی‌شود و بهتر است که از مدارها و ماژول‌های آماده‌ی موجود در بازار استفاده کنید.

مدار گیرنده ASK
مدار گیرنده ASK

 

معمولاً ریموت‌ها در دو فرکانس ۴۳۳ و ۳۱۵ مگاهرتز موجود هستند. در خرید گیرنده دقت کنید که گیرنده‌ی تهیه‌شده با فرکانس ریموت شما هم‌خوانی داشته باشد. در حال حاضر دو نوع گیرنده ASK در بازار ایران یافت می‌شود:

مدل قدیمی‌تر درواقع یک گیرنده‌ی ترانزیستوری ساده از نوع super regenerative است که دارای حساسیت و دقت کمتر و قیمت پایین‌تری است. این گیرنده نیاز به ولتاژ کاری ۵ ولت دارد و خروجی داده صفر و یک دارد، ولی به دلیل ساختار و نحوه آشکارسازی، بسیار تحت تأثیر نویزهای محیطی قرار می‌گیرد. (عکس زیر)

ASK Regenerative Receiver
ASK Regenerative Receiver

 

مدل جدیدتر درواقع یک گیرنده super heterodyne است و دارای مدار پیچیده‌تری برای آشکار‌سازی داده است. این گیرنده از کریستال کوارتز استفاده می کند؛ همین امر سبب می‌شود که هم کیفیت گیرندگی و هم دقت بالاتری داشته باشد.

ASK super heterodyne
ASK super heterodyne

 

این گیرنده‌ها علاوه بر ۵ ولت قادرند با ۳.۳ ولت نیز به خوبی کار کنند و خروجی داده هم دارند. درواقع چینش پایه‌های این دو نمونه گیرنده به نحوی است که به‌راحتی می‌توان آن‌ها را جایگزین هم کرد. پس اگر گیرنده‌ای دارید که از برد آن راضی نیستید می‌توانید فقط ماژول ASK را به super heterodyne تغییر دهید و شاهد برد بهتر باشید.

 

پروتکل ریموت کدلرن

بعد از دریافت داده‌ها و هموار شدن مسیر، نیاز است که پروتکل ارسال اطلاعات این‌گونه ریموت ها را بشناسیم تا قادر به رمزگشایی آن‌ها باشیم. اولین نکته‌ی مبهی که در خصوص ریموت‌های کدلرن به ذهن می‌آید، خود واژه کدلرن است. درواقع تا قبل از فراگیر شدن این نوع ریموت‌ها، ریموت‌های کدفیکس وجود داشتند. ریموت‌های کدفیکس دارای ۸ پایه بودند که برای کد کردن آن‌ها باید این پایه‌ها را در حالات مختلفی به صفر و یک وصل می‌کردید و همین کار را در گیرنده نیز تکرار می‌کردید تا گیرنده و فرستنده باهم هم‌خوانی داشته باشند و کار کنند. این عمل را کد دادن می‌گفتند.

کد کردن ریموت کدفیکس
کد کردن ریموت کدفیکس

 

دلیل نام‌گذاری کدفیکس هم این است که گیرنده‌های این نوع ریموت، کد ثابتی دارند و اگر بخواهید ریموت دیگری نیز با این گیرنده کار کند باید دقیقاً مطابق دیگر ریموت‌ها کددهی شود. که البته این موضوع به لحاظ امنیتی مساله ساز است؛ چراکه اگر کد انتخابی شما را کسی متوجه شود به‌راحتی می‌تواند یک ریموت سازگار با گیرنده شما بسازد.

اما ریموت‌های کدلرن دارای امنیت بالاتری هستند. به این معنی که توسط شرکت یک کد ۲۰ بیتی اتفاقی در حافظه آنها نوشته شده است. هر ریموت یک کد منحصربه‌فرد دارد و دو ریموت با کد یکسان وجود ندارد: بنابراین برای همگام کردن ریموت‌ها با گیرنده، گیرنده باید قادر باشد که کد هر ریموت را در خود ذخیره کند تا در مواقع درخواست، چک کند که آیا ریموت معتبر هست یا نه؟ این عمل را اصطلاحاً لرن کردن می‌گویند. یعنی شما باید ریموت موردنظر خود را در گیرنده لرن کنید و برای همین هم به آنها ریموت‌های کدلرن می‌گویند.

خوشبختانه پروتکل مورداستفاده در ریموت‌های کد لرن مشابه است و فرقی نمی‌کند که شما از آی‌سی HS1527 یا EV1527 یا خانواده‌های مشابه استفاده می‌کنید. همه از انکدر OTP استفاده می‌کنند.

Otp Encoder
Otp Encoder

 

در این روش ۲۴ بیت داده از ریموت ارسال می‌شود که بیست بیت اول همان کد منحصربه‌فرد برای هر ریموت است و ۴ بیت انتهایی مربوط به وضعیت کلیدهای فشرده‌شده ریموت است. در ابتدای هر ارسال، یک وضعیت همزمانی (Preamble) ارسال می‌شود که ما با دریافت این همزمانی باید منتظر دریافت ۲۴ بیت داده باشیم. با توجه به توضیحات ارائه‌شده، ما نیاز 3 حالت منحصربه‌فرد داریم: حالت اول برای ایجاد سیگنال همزمانی (Preamble)، حالت دوم برای ایجاد وضعیت ۱ منطقی و حالت سوم برای ایجاد ۰ منطقی.

  1. حالت همزمانی: در این حالت اگر میزان یک بودن سیگنال مثلاً ۱ میکروثانیه باشد، میزان صفر آن باید ۳۱ میکروثانیه باشد.
  2. حالت یک منطقی : در این حالت اگر میزان یک بودن سیگنال مثلا ۳ میکروثانیه باشد میزان صفر بودن آن باید ۱ میکروثانیه باشد.
  3. حالت صفر منطقی: در این حالت اگر میزان یک بودن سیگنال مثلا ۱ میکروثانیه باشد میزان صفر بودن آن باید ۳ میکروثانیه باشد.

توجه داشته باشید زمان‌های ذکرشده به‌عنوان مثال هستند. برای روشن‌تر شدن موضوع و درواقع میزان این زمان‌ها با توجه به نوسان‌ساز داخلی آی‌سی تعیین می‌شود ولی نسبت‌ها به‌صورت توضیح داده شده حفظ می‌شوند.

توپولوژی برنامه ریموت

نمونه کدهای زیادی را در این راستا دیده‌ام؛ چه سورس هایی که در اینترنت به فروش می‌رسند و چه سورس‌هایی که به‌صورت آموزشی منتشرشده است، هیچکدام از روش اصولی برای این کار استفاده نکرده‌اند. نمونه‌هایی دیده‌ام که حتماً باید ریموت مورداستفاده مقاومت نوسان سازش مقداری خاص باشد (چون در کد صرفاً مقدار صفر بودن بررسی می‌شده)، برد خوبی نداشته‌اند،‌ با ضعیف شدن باطری ریموت درست کار نمی‌کنند و مسائل زیادی که به وجود می‌آورند.

اما حال که با نحوه‌ی عملکرد ریموت آشنایی پیدا کردید، نوبت به آن می‌رسد که با توجه به امکانات و اختیارات موجود در میکروکنترلرها، برنامه‌ای بنویسیم که قادر باشد کد دریافتی را شناسایی کند و نسبت به آن عکس‌العمل نشان دهد. برای این‌که بتوانید به بهترین نحو داده‌های ارسالی را دیکد کنید، باید به این صورت عمل کنید: با دریافت لبه بالارونده، یک کانتر شروع به شمارش کند و با لبه پایین‌رونده مقدار کانتر را خوانده و دوباره کانتر را صفر کنید و با لبه بالارونده بعدی مقدار قبلی خونده شده از کانتر را با وضعیت فعلی کانتر مقایسه کنید که باید شامل یکی از حالات بالا باشد. دقت داشته باشید که حتماً باید پترن ارسال داده توسط ریموت را دنبال کنید (اول همزمانی بعد ۲۴ بیت داده معتبر) چراکه نویزهای محیطی خود باعث به وجود آمدن حالات بالا به‌صورتی تصادفی می‌شوند که اگر پترن را رعایت نکرده باشید ممکن است گیرنده شما عکس‌العمل نشان دهد و خروجی را به‌صورت اتفاقی قطع یا وصل نماید(اتفاقی که در برخی از گیرنده‌ها شاهد آن هستیم).

خوب سؤال کلیدی این است که تایمر کانتر ما با چه سرعتی باید شروع به شمارش کند تا بتوانیم به‌درستی طول پالس‌ها را با دقت مناسب اندازه‌گیری کنیم. برای پاسخ به این سؤال، به برگه‌ی مشخصات آی‌سی مذکور مراجعه می‌کنیم و با جدول زیر مواجه می‌شویم:

مشخصات آی‌سی
مشخصات آی‌سی

 

که درواقع مدت‌زمان لازم برای ارسال یک فریم داده را با مقدار ولتاژهای مختلف و مقاومت رزوناتورهای مختلف رسم کرده است. کمترین زمانی که این چیپ قادر به ارسال یک فریم از داده است (۲۴ بیت به‌علاوه همزمانی) ۱.۳۴ میلی‌ثانیه است که با توجه به این‌که هر فریم شامل ۱۲۸ پالس است طول هر پالس ۱۰ میکروثانیه خواهد بود. پس اگر تایمر کانتر ما با فرکانس ۱ مگاهرتز شروع به شمارش کند (۱ میکروثانیه) قادر خواهیم بود طول یک پالس را با دقت بالایی اندازه بگیریم.

 

توضیح سورس موجود

سورس قرارگرفته در دو نسخه کدویژن و GCC موجود است که با استفاده از میکروکنترلر ATMega8 پیاده‌سازی شده است. خروجی داده ماژول گیرنده به پایه شماره ۴ آی‌سی وصل شده است که درواقع پایه ورودی انتراپت صفر است (جهت تشخیص لبه‌ها) و از تایمر کانتر صفر برای اندازه‌گیری طول هر پالس استفاده شده است. برنامه به‌گونه‌ای نوشته‌شده که به‌راحتی قابل‌حمل باشد و شما بتوانید آن را بر روی هر میکروکنترلر دلخواهی پیاده‌سازی کنید.
فرکانس کاری میکروکنترلر ۸ مگاهرتز است که از کریستال خارجی تامین شده است.
این کد با سه نمونه ریموت آزمایش شده است؛ هم با فرکانس ۳۱۵ و هم با فرکانس ۴۳۳. با ریموت ۴۳۳ بدون آنتن گیرنده، تا حدود ۸ متر جواب داده است!

برد بورد نهایی
برد بورد نهایی

 

دانلود سورس کد ریموت

* برای دانلود ورژن جدید کتابخانه به “پروژه ریموت کنترل 4 کانال کاملا رایگان + مستندات” مراجعه کنید.

GNU_CodeVision_EV1527

GNU_GCC_EV1527

 

منبع: سیسوگ

مطلب قبلیپروژه ریموت کنترل 4 کاناله رایگان + مستندات
مطلب بعدیکامپایلر Code vision AVR در مقابل کامپایلر GCC و مقایسه تخصصی آنها

2 نظرات

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید