loading...
وب سایت تخصصی مدار منطقی
لیست پروژه دانشجویی برق الکترونیک ICT

آموزش TFT LCD

امین پاشایی بازدید : 3028 جمعه 07 شهریور 1393 نظرات (0)

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

با سلام به همه دوستان گرامی :) امروز قصد دارم که برنامه و سورسی رو قرار بدم که گاها دیده شده تو اینترنت به فروش می رسه، با این که چیز خاصی نداره !:o

چند وقت پیش این کد رو نوشته بودم ، فرصتی دست داد تا اون رو بهبود ببخشم و برای انتشار آماده کنم ، اول یه خلاصه در مورد کد موصوف عرض می کنم خدمت دوستان تا آن دسته از دوستانی که با موضوع آشنایی ندارند ، در جریان بحث قرار بگیرد:idea:،

اصولا ریموت کنترل ، امروزه کاربرد زیادی پیدا کرده ، از ریموت های درب بازکن تا ریموت های دزگیر و کنترل روشنایی و… همه از یک اصول اولیه پیروی می کنند، و اون هم ارسال اطلاعات به صورت بی سیم هست ، بستر های متفاوتی برای ارسال اطلاعات وجود داره که از پرکاربرد ترین اونها امواج مادون قرمز هست که همگی نمونش رو توی ریموت های تلویزیون و وسایل خونگی دیدم و نوع دیگه ریموت های رادیویی هستند که از امواج رادیویی داده ها رو منتقل می کنن ، موضوع بحث ما ، مورد دوم هست ، یعنی ریموت های رادیویی ، این ریموت ها برای این که بتونن اطلاعات رو منتقل کنن نیاز دارن که اول اطلاعات رو روی یه موج دیگه که بهش میگن موج حامل مدوله بکنن ، با این کار اطلاعات قابلیت انتشار در فضا رو خواهند داشت، برای اطلاعات بیشتر راجبه مدلاسوین میتونید به لینک های زیر مراجعه کنید

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

زیاد وارد بحث مودلاسیون نمی شم چون تقریبا باش کاری نداریم و از موضوع اصلی فاصله می گیرم ، نوع مدلاسیونی که برای این نوع ریموت ها استفاده میشه مدلاسیون ASK هست ، این نوع مدلاسیون بر روی دامنه موج حامل اثر گذاشته و به این ترتیب باعث انتقال اطلاعات میشه ، به عکس زیر دقت کنید ، نمونه ای از مدلاسیون ASK هست

Digital_wireless-ASK

مدلاسیون ASK یکی از ساده ترین انواع مدلاسوین هست ، و تاثیر پذیری خیلی شدیدی از عوامل محیطی داره ، بنابراین برای فرستنده های برد بالا معمولا از این نوع مدلاسیون استفاده نمیشه ، ولی برای استفاده در ریموت های برد نزدیک بسیار پرکاربرده و ارزان قیمت به نسبت انواع دیگر مدلاسیون ها ،

تا اینجا با نحوه ارسال اطلاعات آشنا شدیم ، حالا نیاز هست که داده های ارسالی از ریموت رو دریافت کرده و آنها رو آشکار سازی کنیم ، قبل از هر چیزی نیاز هست که یک گیرنده ASK داشته باشیم که به کمک اون امواج منتشر شده رو دریافت کرده و موج حامل رو از داده ها جدا کنیم ، برای این کار ماژول هایی آماده ای وجود داره که در زمان نگارش این نوشته قیمت آنها حدود ۳ الی ۷ هزار تومن هست ، تفاوت قیمت هم ناشی از کیفیت ساخت و حساسیت گیرندگی اونها هست.

ماژول گیرنده ASK DX-RF 433

البته توجه داشته باشید که باید گیرنده شما یا ریموت مود استفاده هم خوانی فرکانسی داشته باشند ، کلا دو نوع ریموت به لحاظ فرکانسی موجود هست ، ۳۱۵ مگاهرتز و ۴۳۳ مگاهرتز، باید گیرنده شما هم توی همون فرکانس باشه که بتونه داده ها رو به صورت صحیح دریافت کنه.

خوب حالا بریم سر خود ریموت ، اصولا دو نوع ریموت موجود هست که به نام های ریموت های کدلرن و ریموت های کدفیکس نامیده و شناخته میشن، ریموت های کدفیکس از یه کد که توسط خود شما ایجاد میشه برای کدگذاری داده ها استفاده میکنه ، و معمولا از آیسی های PT2262 استفاده میکنن که در حال حاضر موضوع بحث ما نیست ، ریموت های کدلرن که میشه گفت فراگیرتر هم هستد و در واقع موضوع بحث ما هم هستن ، ریموت هایی هستن که توسط کارخانه سازنده یک عدد ۲۰ بیتی ثابت بهش نصبت داده شده و داده ها رو بر اساس اون کد ده بیتی کدگذاری میکنه ، از این جهت بهش ریموت کدلرن میگن که برای استفاده از اونها باید به گیرنده شناسانده شوند یا به اصطلاح لرن شوند تا گیرنده اون ریموت رو به رسمیت بشناسه و از دستورات اون پیروی کنه.

اصولا این نوع ریموت ها از آیسی EV1527 برای این منظور استفاده میکنن و خوانده هایی مشابه ، این آیسی ها از انکدر OTP برای ارسال داده ها استفاده میکنن ، تو این نوع انکدینگ نسبت صفر بودن سیگنال به یک بدون اون مشخص گر منطق صفر یا یک است، مثلا اگر میزان صفر بودن دوبرابر میزان یک بود سیگنال تو یه سیکل نوسانی باشه اون موقه میشه صفر منطقی ، برای روشنتر شدن موضوع به تصویر زیر دقت کنید

ev1527همونطور که مشخصه ، کد ارسالی از سه بخش تشکیل شده ، یه قسمت شروع هست که باید نسبت صفر بودن ۳۱ برابر بزرگتر از یک بودن باشه ، با دریافت این وضعیت شما باید منتظر ۲۴ بایت داده باشید که مشخص کننده کد ریموت و وضعیت کلید های اون هست !

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

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

این کد رو به زبان سی نوشتم برای میکروی مگا۸ و برای کامپایلر GCC هست ، فرکانس میکرو هم ۸ مگاهرتزه که باید از طریق کریستال خارجی تامین بشه ، در ضمن به راحتی میتونید با اضافه کردن تیکه کد ساده ای گیرنده ۴ کاناله بسازید

در ضمن خروجی ماژول گیرنده باید به اینتراپت ۰ وصل بشه که برای مگا۸ میشه پایه ۴ ، این کد رو با سه نمونه ریموت آزمایش کردم موردی نداشته ، هم با فرکانس ۳۱۵ و هم با فرمانس ۴۳۳ ، با ریموت ۴۳۳ بدون آنتن گیرنده ، تا حدود ۸ متر جواب میده !

فراموش نشه ، این کد صرفا جهت آموزش بوده و برای هرگونه استفاده تجاری باید از نویسنده کسب اجازه شود.

نویسنده این بخش آقای محمد مزارعی

برای خرید این ماژول روی همین متن کلیک کنید

دانلود سورس کدها :

 

مطالب مرتبط
ارسال نظر برای این مطلب

کد امنیتی رفرش
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • آرشیو
    پیوندهای روزانه
    آمار سایت
  • کل مطالب : 41
  • کل نظرات : 24
  • افراد آنلاین : 2
  • تعداد اعضا : 286
  • آی پی امروز : 38
  • آی پی دیروز : 60
  • بازدید امروز : 58
  • باردید دیروز : 198
  • گوگل امروز : 4
  • گوگل دیروز : 1
  • بازدید هفته : 991
  • بازدید ماه : 3,167
  • بازدید سال : 18,763
  • بازدید کلی : 252,889
  • نویسندگان سایت مدار منطقی

     امین پاشایی