متأسفانه سورس های زیادی وجود دارند که از منابع متنباز (OpenSource) کپی شدهاند و بهصورت تجاری در فضای اینترنت به فروش میرسند. سورس ریموت های کدلرن نیز از این دسته است. اگر سورس های متنباز وجود نداشتند شاید این میزان از پیشرفت در حوزه علم و تکنولوژی حاصل نمیشد. پس شایسته است که بهجای منفعت شخصی خود به منفعت جمعی بیندیشم و سورس هایی ازایندست را بفروش نرسانیم و با انتشار رایگان آنها نقشی در بالا بردن سطح دانش داشته باشیم.
ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموتهای درب بازکن تا ریموتهای دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی میکنند و آنهم ارسال اطلاعات بهصورت بیسیم است. بسترهای متفاوتی برای ارسال اطلاعات وجود دارد که از پرکاربردترین آنها، امواج مادونقرمز است که نمونهاش را همگی در ریموتهای تلویزیون و وسایل خانگی دیدهایم و نوع دیگر، ریموتهای رادیویی هستند که از امواج رادیویی برای ارسال دادهها استفاده میکنند. موضوع بحث ما، مورد دوم است: ریموتهای رادیویی. این ریموتها برای اینکه بتونند اطلاعات را منتقل کنند نیاز دارند که اول اطلاعات را روی یه موج دیگر که به آن موج حامل گفته میشود سوار (مدولاسیون) کنند. با این کار اطلاعات قابلیت انتشار در فضا را بهدست خواهند آورد.
شاید برای شما مفید باشد: ساخت ریموت کنترل 4 کاناله
مدلاسیون دو نوع آنالوگ و دیجیتال دارد که خود به انواع دیگری تقسیمبندی میشوند. در مدولاسیون، سیگنال فرکانس بالا (حامل) بر اساس سیگنال پیام تغییر داده میشود. سیگنال حامل خواص مختلفی ازجمله دامنه، فرکانس و فاز دارد که میتوانند بر اساس سیگنال پیام تغییر داده شوند و ازاینرو انواع مختلفی از مدولاسیون پدید میآید. (عکس زیر)
همانطور که در عکس فوق مشاهده میکنید، در مدلاسیون AM سیگنال داده بر روی دامنهی موج حامل تأثیر میگذارد و در مدلاسیون FM سیگنال داده بر روی فشردگی سیگنال حامل (فرکانس) تأثیر میگذارد. این مدلاسیون بهمراتب داری برد بیشتری نسبت به مدلاسیون AM است؛ چراکه در مدلاسیون AM کاهش دامنه به معنی کاهش توان فرستنده است. نوع بعدی مدلاسیون دیجیتال (Keying) است که درواقع نوعی از مدلاسیون FM محسوب میشود.
در مدارات دیجیتال ما با دو منطق صفر و یک سروکار داریم که برای انتقال به فرکانسهای F0 و F1 تبدیل میشوند. فرکانس F0 یعنی منطق 0 و فرکانس F1 یعنی منطق 1. در این روش کار گیرنده خیلی ساده است و باید بتواند تفاوت بین فرکانس F0 و F1 را تشخیص دهد و آشکار کند. در ریموتکنترلهای رادیویی برای ارسال داده از این نوع مدلاسیون یا مدلاسیون های مشابه استفاده میشود.
شاید برای شما مفید باشد: ریموت هاپینگ چیست
ریموتهای کدلرن از مدلاسیون ASK برای ارسال داده استفاده میکنند. مدلاسیون ASK زیرشاخهی سادهشدهای از مدلاسیون دیجیتال است؛ فرکانس F0 از آن حذف شده است و فقط فرکانس F1 در آن استفاده میشود. یعنی وقتیکه منطق 1 باشد فرکانس F1 تولید میشود و وقتیکه منطق صفر است فرستنده خاموش میشود و هیچ سیگنالی تولید نمیشود.
ترفند هم باعث سادهسازی فرستنده و هم گیرنده میشود؛ چراکه در فرستنده فقط باید فرکانس حامل با فرکانس F1 تولید شود و در گیرنده هم فقط باید فرکانس F1 شناسایی شود.
انواع گیرنده ریموت
تا اینجا با نحوهی ارسال اطلاعات آشنا شدیم. برای ساخت یک ریموت کنترل ابتدا لازم است که امواج ارسالی از ریموت (فرستنده) را دریافت کنیم که بعد از پردازش بتوانیم عملی مناسب با درخواست کاربر را اجرا کنیم. با توجه به نوع فرستنده نیاز داریم که یک گیرنده ASK داشته باشیم که فرکانس آن با فرکانس ریموت یکی باشد، یعنی اگر از ریموت با فرکانس 433 مگاهرتز استفاده میکنیم گیرنده ASK نیز باید با همان فرکانس کار کند. در غیر این صورت مدار بهدرستی کار نخواهد کرد.
مطابق عکس زیر میتوانیم مدار گیرنده را خودمان بسازیم؛ اما با توجه به پیچیدگیهای بحث RF این کار توصیه نمیشود و بهتر است که از مدارها و ماژولهای آمادهی موجود در بازار استفاده کنید.
معمولاً ریموتها در دو فرکانس 433 و 315 مگاهرتز موجود هستند. در خرید گیرنده دقت کنید که گیرندهی تهیهشده با فرکانس ریموت شما همخوانی داشته باشد. در حال حاضر دو نوع گیرنده ASK در بازار ایران یافت میشود:
مدل قدیمیتر درواقع یک گیرندهی ترانزیستوری ساده از نوع super regenerative است که دارای حساسیت و دقت کمتر و قیمت پایینتری است. این گیرنده نیاز به ولتاژ کاری 5 ولت دارد و خروجی داده صفر و یک دارد، ولی به دلیل ساختار و نحوه آشکارسازی، بسیار تحت تأثیر نویزهای محیطی قرار میگیرد. (عکس زیر)
مدل جدیدتر درواقع یک گیرنده super heterodyne است و دارای مدار پیچیدهتری برای آشکارسازی داده است. این گیرنده از کریستال کوارتز استفاده می کند؛ همین امر سبب میشود که هم کیفیت گیرندگی و هم دقت بالاتری داشته باشد.
این گیرندهها علاوه بر 5 ولت قادرند با 3.3 ولت نیز به خوبی کار کنند و خروجی داده هم دارند. درواقع چینش پایههای این دو نمونه گیرنده به نحوی است که بهراحتی میتوان آنها را جایگزین هم کرد. پس اگر گیرندهای دارید که از برد آن راضی نیستید میتوانید فقط ماژول ASK را به super heterodyne تغییر دهید و شاهد برد بهتر باشید.
پروتکل ریموت کدلرن
بعد از دریافت دادهها و هموار شدن مسیر، نیاز است که پروتکل ارسال اطلاعات اینگونه ریموت ها را بشناسیم تا قادر به رمزگشایی آنها باشیم. اولین نکتهی مبهی که در خصوص ریموتهای کدلرن به ذهن میآید، خود واژه کدلرن است. درواقع تا قبل از فراگیر شدن این نوع ریموتها، ریموتهای کدفیکس وجود داشتند. ریموتهای کدفیکس دارای 8 پایه بودند که برای کد کردن آنها باید این پایهها را در حالات مختلفی به صفر و یک وصل میکردید و همین کار را در گیرنده نیز تکرار میکردید تا گیرنده و فرستنده باهم همخوانی داشته باشند و کار کنند. این عمل را کد دادن میگفتند.
دلیل نامگذاری کدفیکس هم این است که گیرندههای این نوع ریموت، کد ثابتی دارند و اگر بخواهید ریموت دیگری نیز با این گیرنده کار کند باید دقیقاً مطابق دیگر ریموتها کددهی شود. که البته این موضوع به لحاظ امنیتی مساله ساز است؛ چراکه اگر کد انتخابی شما را کسی متوجه شود بهراحتی میتواند یک ریموت سازگار با گیرنده شما بسازد.
اما ریموتهای کدلرن دارای امنیت بالاتری هستند. به این معنی که توسط شرکت یک کد 20 بیتی اتفاقی در حافظه آنها نوشته شده است. هر ریموت یک کد منحصربهفرد دارد و دو ریموت با کد یکسان وجود ندارد: بنابر این برای همگام کردن ریموتها با گیرنده، گیرنده باید قادر باشد که کد هر ریموت را در خود ذخیره کند تا در مواقع درخواست، چک کند که آیا ریموت معتبر هست یا نه. این عمل را اصطلاحاً لرن کردن میگویند. یعنی شما باید ریموت موردنظر خود را در گیرنده لرن کنید و برای همین هم به آنها ریموتهای کدلرن میگویند.
خوشبختانه پروتکل مورداستفاده در ریموتهای کد لرن مشابه است و فرقی نمیکند که شما از آیسی HS1527 یا EV1527 یا خانوادههای مشابه استفاده میکنید. همه از انکدر OTP استفاده میکنند.
در این روش 24 بیت داده از ریموت ارسال میشود که بیست بیت اول همان کد منحصربهفرد برای هر ریموت است و 4 بیت انتهایی مربوط به وضعیت کلیدهای فشردهشده ریموت است. در ابتدای هر ارسال، یک وضعیت همزمانی (Preamble) ارسال میشود که ما با دریافت این همزمانی باید منتظر دریافت 24 بیت داده باشیم. با توجه به توضیحات ارائهشده، ما نیاز 3 حالت منحصربهفرد داریم: حالت اول برای ایجاد سیگنال همزمانی (Preamble)، حالت دوم برای ایجاد وضعیت 1 منطقی و حالت سوم برای ایجاد 0 منطقی.
- حالت همزمانی: در این حالت اگر میزان یک بودن سیگنال مثلاً 1 میکروثانیه باشد، میزان صفر آن باید 31 میکروثانیه باشد.
- حالت یک منطقی : در این حالت اگر میزان یک بودن سیگنال مثلا 3 میکروثانیه باشد میزان صفر بودن آن باید 1 میکروثانیه باشد.
- حالت صفر منطقی: در این حالت اگر میزان یک بودن سیگنال مثلا 1 میکروثانیه باشد میزان صفر بودن آن باید 3 میکروثانیه باشد.
توجه داشته باشید زمانهای ذکرشده بهعنوان مثال هستند. برای روشنتر شدن موضوع و درواقع میزان این زمانها با توجه به نوسانساز داخلی آیسی تعیین میشود ولی نسبتها بهصورت توضیح داده شده حفظ میشوند.
توپولوژی برنامه ریموت
نمونه کدهای زیادی را در این راستا دیدهام؛ چه سورس هایی که در اینترنت به فروش میرسند و چه سورس هایی که بهصورت آموزشی منتشرشده است، هیچکدام از روش اصولی برای این کار استفاده نکردهاند. نمونههایی دیدهام که حتماً باید ریموت مورداستفاده مقاومت نوسان سازش مقداری خاص باشد (چون در کد صرفاً مقدار صفر بودن بررسی میشده)، برد خوبی نداشتهاند، با ضعیف شدن باطری ریموت درست کار نمیکنند و مسائل زیادی که به وجود میآورند.
اما حال که با نحوهی عملکرد ریموت آشنایی پیدا کردید، نوبت به آن میرسد که با توجه به امکانات و اختیارات موجود در میکروکنترلرها، برنامهای بنویسیم که قادر باشد کد دریافتی را شناسایی کند و نسبت به آن عکس العمل نشان دهد. برای اینکه بتوانید به بهترین نحو دادههای ارسالی را دکد کنید، باید به این صورت عمل کنید: با دریافت لبه بالارونده، یک کانتر شروع به شمارش کند و با لبه پایینرونده مقدار کانتر را خوانده و دوباره کانتر را صفر کنید و با لبه بالارونده بعدی مقدار قبلی خونده شده از کانتر را با وضعیت فعلی کانتر مقایسه کنید که باید شامل یکی از حالات بالا باشد. دقت داشته باشید که حتماً باید پترن ارسال داده توسط ریموت را دنبال کنید (اول همزمانی بعد 24 بیت داده معتبر) چراکه نویزهای محیطی خود باعث به وجود آمدن حالات بالا بهصورتی تصادفی میشوند که اگر پترن را رعایت نکرده باشید ممکن است گیرنده شما عکس العمل نشان دهد و خروجی را بهصورت اتفاقی قطع یا وصل نماید (اتفاقی که در برخی از گیرندهها شاهد آن هستیم).
خوب سؤال کلیدی این است که تایمر کانتر ما با چه سرعتی باید شروع به شمارش کند تا بتوانیم بهدرستی طول پالسها را با دقت مناسب اندازهگیری کنیم. برای پاسخ به این سؤال، به برگه مشخصات آیسی مذکور مراجعه میکنیم و با جدول زیر مواجه میشویم:
که درواقع مدتزمان لازم برای ارسال یک فریم داده را با مقدار ولتاژهای مختلف و مقاومت رزوناتورهای مختلف رسم کرده است. کمترین زمانی که این چیپ قادر به ارسال یک فریم از داده است (24 بیت بهعلاوه همزمانی) 1.34 میلیثانیه است که با توجه به اینکه هر فریم شامل 128 پالس است طول هر پالس 10 میکروثانیه خواهد بود. پس اگر تایمر کانتر ما با فرکانس 1 مگاهرتز شروع به شمارش کند (1 میکروثانیه) قادر خواهیم بود طول یک پالس را با دقت بالایی اندازه بگیریم.
توضیح سورس موجود
سورس قرارگرفته، در دو نسخه کدویژن و GCC موجود است که با استفاده از میکروکنترلر ATMega8 پیادهسازی شده است. خروجی داده ماژول گیرنده به پایه شماره 4 آیسی وصل شده است که درواقع پایه ورودی انتراپت صفر است (جهت تشخیص لبهها) و از تایمر کانتر صفر برای اندازهگیری طول هر پالس استفاده شده است. برنامه بهگونهای نوشتهشده که بهراحتی قابلحمل باشد و شما بتوانید آن را بر روی هر میکروکنترلر دلخواهی پیادهسازی کنید.
فرکانس کاری میکروکنترلر 8 مگاهرتز است که از کریستال خارجی تامین شده است.
این کد با سه نمونه ریموت آزمایش شده است؛ هم با فرکانس ۳۱۵ و هم با فرکانس ۴۳۳. با ریموت ۴۳۳ بدون آنتن گیرنده، تا حدود ۸ متر جواب داده است!
دانلود سورس کد ریموت
* برای دانلود ورژن جدید کتابخانه به “پروژه ریموت کنترل 4 کانال کاملا رایگان به همراه مستندات” پست مراجعه کنید.
خیلی عالی بود . تشکر از بیان گویا و روان شما
سلام. چرا فایل کد ویژن باز نمیشه. وقتی از حالت فشرده خارجش میکنی همینطور فشرده هست و دیگه باز نمیشه
سلام دوست عزیز من الان فایل رو چک کردم سالم بود
برای از حالت فشرده خارج کردن فایل دوم از نرم افزار 7zip استفاده کنید
عرض سلام و ادب
يک گيرنده با بسکام و avr و ماژول rxb61 ساختم.اما برد خوبي نداره.ميخواستم از راهنمايي شما استفاده کنم
منطق برنامه من اينجوريه که يک پايه ورودي تعريف کردم (ورودي سيگنال) و دائما با دستور whil & went پايه رو چک ميکنم.زماني که پايه يک ميشه تايمر شروع ميشه و طبق الگوي ريموت اول سيگنال همزماني رو چک ميکنم و اگر اوکي بود تک تک بيت ها رو بررسي ميکنم.هر بيت که خارج از رنج تعريف شده شمارش بود برنامه ريست ميشه و دوباره منتظر سيگنال همزماني ميمونه(با توجه به زمانبندي ريموت و تغييرات و ناپايداري ها، توي برنامه يک بازه تعريف کردم که ميگه همزماني بين x و y بايد باشه و بعد از اون اگر ديتاي يک بين z و w بود يک منطقي و اگر بين s و d بود صفر منطقي لحاظ ميشه و بعدش هم بقيه ماجرا.حالا نميدونم مشکل کجاست که برد کمه
ببخشید دوباره مزاحم می شم من خیلی عجله دارم میشه این تنظیمات رو خودتون انجام بدید من هزینشو پرداخت کنم
ببخشید ولی برای من انجام چنین کاری مقدور نیست
اگر پیدا کنید دقیقا کدام خط از برنامه باعث ربست میشود بهتر میشود مساله رو بررسی کرد.
عالی بود ممنون از توضیحات شما
سلام من از میکرو atmega32 با فرکانس 11.059200 استفاده می کنم و کدوژن هر بار کلید ریموت می زنم میکرو ریست می شه کثل اینکه واچ داگ عمل کنه
سلام دوست عزیز
این که میگید هنگ میکنه میکنه برمیگرده به یه مشکل نرم افزاری
مثلا میزان استک کم باشه یا چنین چیزهایی
آیا توی برنامه از printf توی اینتراپت که استفاده نمیکنه
تا جای ممکن باید سعی کنید توی اینراپت از دستوارات زمان بر استفاده نکنید
سلام وقت بخیر
ببخشید من راجع به کتابخونه ای که نوشتید سوال داشتم.
یجا دیفاین کردید که حداقل طول موج 200 میکرو ثانیه و حداکثرش 16000 میکروثانیه.من دلیلش رو متوجه نمیشم
مگه حداقل طول موج طبق جدول زمانی نیست که 12V , 300k داشته باشیم؟ خب تو این حالت طول هر پالس 10 میکروثانیه میشه.
و حداکثر مگه زمانی نیست که طبق جدول 4v,330k داشته باشیم؟خب تو این حالت طول هر پالس 23 میکروثانیه میشه که بلند ترین موجی که داریم همون 31 پالس هست . پس 713=23*31
نمیدونم دارم کجا اشتباه میکنم لطفا راهنماییم کنید
سلام و درود بر شما
این کد خیلی قدیمی هست و فکر میکنم برای این بوده که کلاه پالس های بزرگتر رو فیلتر کنه و پردازش نکنه
میشه این فیلتر رو دقیقتر هم کرد. همونطور که گفتید
با دروود فراوان خدمت شما
فرمودید هر فریم 128 پالس هست اما هر فریم 24 بیت هست و تعداد پالس ها میشه 48 عدد
ممکنه راهنمایی کنید من درست متوجه نشدم
با تشکر
خوب من دارم کلاک مصرف شده رو محاسبه میکنم
هر صفر یا یک 4 کلاک (سه واحد صفر یک واحد یک یا برعکس) هست، همزمانی اولیه هم ۳۲ کلاک نیاز داره میشه به عبارتی
۲۴×۴ بعلاوه ۳۲ که میشه ۱۲۸
با سلام و خسته نباشید. ممنون بابت زحماتتون. من مدار رو با ماژول گیرنده 433 مگاهرتز که چیپش آی سی LM هست بستم. بدون اینکه لیرن کنم ریموت اطلاعاتشو می فرسته. آیا بخاطر اینه که از این نوع ماژول استفاده کردم یا ایراد از جای دیگست.
سوال دومم چطور میشه دکمه های ریموت رو به میکرو فهموند تا با فشار دادن هر دکمه عملیات خاص خودشو انجام بده.
ممنونم.
سلام دوست عزیز
فکر میکنم مقاله زیر به شما کمک کنه 🙂
پروژه ریموت کنترل 4 کاناله کاملا رایگان به همراه مستندات
سلام وقت بخیر ممنون از زحماتتون
ولی من ب بسم الله به مشکل خوردم D:
ماژول گیرنده 2 تا پایه data داره ، یکیش باید NC بمونه یا زمین بشه یا چی؟!
بعد اینکه وقتی یه پایه data رو NC میذارم و یکیشو میدم به اینتراپت میکرو ، کلا در حال پالس دادنه، حتی وقتی هیچی با ریموت نمیفرستم.
سلام
در متن گفته شده طبق جدول datacycle دیتاشیت EV1527 به ازای هر فریم از داده چند ثانیه طول می کشد و هر فریم را 128 بیت در نظر گرفته اید.(مثلا گفته اید هر فریم 128 بیتی 1.34 میلی ثانیه طول می کشد)
اما مطابق دیتاشیت اصلی که در سایت سازنده اصلی هست (http://www.sc-tech.cn/EV1527.pdf) گفته شده این اعداد مربوط به هر بیت هست:
صفحه 3 دیتاشیت (http://www.sc-tech.cn/EV1527.pdf)
بخش 8.3
بند 1: (ترجمه):
The data in the table is 1-bit data (code 0 or code 1 as shown in the figure above), the width TD=4t
من از گوگل ترنسلیت برای ترجمه PDF چینی استفاده کردم. همچنین جداگانه کلمه 位数据 را در دیکشنری چینی سرچ کردم و ترجمه آن “data bit” است.
همچنین ورژن جدیدتر این مقاله در سیسوگ (پروژه ریموت کنترل 4 کاناله کاملا رایگان به همراه مستندات) هم بر همین اساس نوشته شده است که باید به این موضوع دقت شود.
این تفاوت بسیار مهم است. مخصوصا اگر کسی بخواهد از میکرو دیگری استفاده کند باید بداند هر فریم(128 بیت) چند ثانیه طول می کشد.
* حدس من این است که چون میکروشما Atmega 8/16/32 بوده تایمرتان 16 بیتی بوده و به همین دلیل به مشکل Overflow نخواهید خورد
من از میکرو Attiny میخواهم استفاده کنم و چون تایمر 8 بیتی دارد نیاز دارم که بدانم این زمان های داده شده در جدول مربوط به هر بیت است یا هر فریم(128 بیت).
باز هم تشکر میکنم بابت مقاله بسیار خوب و کاربردی
کاملا درست، زمان داده شده در جدول موجود در دیتاشیت، تنها برای یک بایت داده است. به عنوان مثال 1.4ms بیانگر این است که برای ارسال یک بیت دیتای 0 باید پالس به مدت 1.4ms/4=350us یک شود و پس از آن مدت 350us*3=1050us صفر باشد. پس در این حالت، کوچکترین پالسی که باید اندازه گیری شود 350us است و زمان ارسال کل پکت 350us*128=44.8ms خواهد بود.
واقعا از مطالب مفیدتون سپاسگذارم . زمان تحلیل کتابخانه ها و کد نویسی رو خیلی کم میکنه.
با سلام و تشکر از زحماتی که میکشید ومطالب آموزنده ومفید رو در اختیار بقیه قرار میدین . حقیقا کاملترین مباحث رو فقط در sisoog پیدا میکنم . قلبآ از شما تشکر و قدر دانی میکنم .
زنده و پاینده باشید
سلام دوست عزیز
خیلی ممنون از نظر لطفتون
سلام ممنون از سایت آموزنده و مفیدتون و ممنون از اینکه بصورت رایگان سورس و آموزش این مبحث رو در اختیار همه قرار دادید تا کمکی در بالا بردن سطح دانش جمعی کرده باشید
لطف میکنید برای من و دوستان دیگه که مثل من تازه کار هستن و جنبه آموزشی این مبحث براشون مهمه کمی موضوع رو بیشتر بشکافید و یا اینکه اگر منابع دیگه ای سراغ دارید معرفی کنید ؟
چون همان جور که میدونید خیلی از دوستان دیگه بخاطر جنبه مالی قضیه مایل به آموزش پروژه های سطح میانی و پیشرفته بصورت رایگان به دیگران نیستند
باز هم ممنون از احساس مسولیت شما در اشاعه علم دانش
سلام و درود بر شما دوست عزیز
تا اونجایی که برامون مقدور باشه سعی میکنیم که مساله رو باز کنیم ولی متاسفانه همه مشتاق مباحث تئوری نیستند و فقط دنیال حصول نتیجه هستند و این مقداری کار ما رو سخت تر میکنه برای همین سعی میکنیم که میانه رو نگه داریم و از هر بخش به اندازه لازم بیان کنیم
متشکرم برای کامنت شما
سلام و خسته نباشید
من فایلای مربوط به کدویژن رو دانلود کردم، دوتا سوال یکی اینکه از کجا میتونم پین های مربوط به رله هارو عوض کنم؟ و وقتی میزنم پروژه کامپایل شه این وارنینگ هارو میگیرم میخواستم بدونم اوکیه؟
Warning: C:\Users\Gerami\Desktop\Remote\Timer.h(33): unused function ‘Read_timer’ was removed by the linker
Warning: C:\Users\Gerami\Desktop\Remote\Timer.h(27): unused function ‘Stop_Timer’ was removed by the linker
Warning: C:\Users\Gerami\Desktop\Remote\mainC.c(7): global variable ‘a’ was declared, but not referenced
با سلام و خسته نباشید
مطالب خیلی سودمند بود و بحث رو تخصصی باز کردید ممنونم از زحمات شما
سلام
من میخواستم وقتی دکمه رو فشار میدیم و نگه میداریم پایه خروجی بشه و تا دست رو دکمه رو برداریم خروجی خاموش میشه
کجای کد رو باید تغغیر بدیم که همچین حالتی پیدا کنه ؟
سلام و خسته نباشد متشکر بابت مطلب خوبتون .
من اطلاعاتم کم هست در این زمینه . این ev1527 که نام بردید چه چیزی هست ، ای سی های فرستده ؟
من برای کاری نیاز به فرستنده و گیرنده دارم . یعنی فرضا دو میکرو رو بخوام از طریق بی سیم اطلاعاتش و رد و بدل کنم (در حد 3 الی 4 بایت) نیاز به مجموع 4 تا از این ماژول ها هست .
https://isee.sisoog.com/nc-products/397572155/%D9%85%D8%A7%DA%98%D9%88%D9%84%20%D9%81%D8%B1%D8%B3%D8%AA%D9%86%D8%AF%D9%87%20%D9%88%20%DA%AF%DB%8C%D8%B1%D9%86%D8%AF%D9%87%20%D8%B1%D8%A7%D8%AF%DB%8C%D9%88%DB%8C%DB%8C%20315MHz%20ASK
ایا این فرستنده ها هم 20 بیت ادرس دارن ؟ و چیکار کنم فقط فرستنده slave به گیرنده میکرو مستر دریافت اطلاعات کنه نه پایه بغلی خودش
با این روش ایا خوب هست:
مثلا اول دیتای کلمه رمز مورد نظر رو قرار داد ، برای دما t تا متوجه.
سوال زیاد شدن شرمنده ! ممنون میشم اگر وقت داشتید راهنمایی کنید . باز هم تشکر .
سلام دوست عزیز.
در واقع آیسی ev1527 آیسی کد کننده اطلاعات است و خودش کار فرستندگی رو انجام نمیده . اگر توی پروژتون نیاز دارید که بدونید گیرنده بایت هایی رو که ارسال کردید دریافت کرده یا نه استفاده از این ماژول ها مناسب نیست و توصیه میکنم از ماژوهایی که هندشلک دارند استفاده کنید مثل nrf24l01 استفاده کنید که تایید میکنند اطلاعات ارسالی توسط گیرنده دریافت شد یا نه
با تشکر بابت پاسخ گویی و پیشنهاد خوبتون .
ممنون
سلام
من یه ریموت کنترلر ساختم که تغذیه ev1527 در حد 5 ولت. برای همین با مقاومت ورودی بازی کردم تا به طول پالس برابر با ریموت های اماده برسم.
برای این کار مجبور شدم مقاومت رو کمتر کنم. الان طول پالس با ریموت های آماده برابره . اما مشکلی که هست اینه که ریموت روی یه سری از مرکز کنترل ها ست نمیشه. به عنوان مثال روی مرکز کنترلرهای بتا خوب کار میکنه اما تو برندای مثل سیماران ست نمیشه. به نظرتون مشکل از کجا میتونه باشه؟
قطعا مشکل از مرکز کنتره 🙂
منم قبلا ریموت ساختم ولی با میکروکنترلر و این مشکل رو دیدم روی مرکز کنترل های زیادی تست کردم و مشکلی نداشت ولی برخی از مرکز کنترل ها دچار مشکل بودن که من فکر میکنم مشکل اوناست 🙂
البته فرکانس کاری هم دقت کنید منظور ۳۱۵ یا ۴۳۳ مگاهرتز هست بع غیر از این مشکلی نباید باشه
سلام شماتیک مدار رو قرار میدید اخه داخل پرتئوس پایه چهار وجود نداره و اگه خواسته باشیم از یه میکرو دیگه استفاده کنیم چجوری برنامه رو تغییر بدیم ممنون
واقعا شماتیک خاصی نداره و به سادگی از تصویری که قرار دادم قابل استخراجه – دو تا پاسه است نهایتا که باید تشخیص داده بشه
یکی کلید و یکی ورودی سیگنال :/
برای پورت کردن توی برنامه توضیحات کافی فکر میکنم وجود داره – اگر سوالی بود مطرح کنید
سلام
طبق آزمایشی که من با لاجیک آنلایزر انجام دادم ، داده های مربوط به زمان موجود در دیتاشیت در واقع طول یک دیتا ( high or low ) می باشد و نه طول یک فریم . پس طول هر پالس 335 میکرو ثانیه می شود
از طرفی طبق این ویدئو https://www.youtube.com/watch?v=PKowvbnIxso
نهایت فرکانس ارسال 17 کیلو هرتز است که برابر با طول پالس 28 میکرو ثانیه و متناقض با طول پالس 10 میکرو ثانیه می باشد .
البته شاید من دارم اشتباه می کنم
امم خوب الان شک کردم – باید این مساله رو بررسی کنم مساله مربوط به خیلی وقت پیشه و درست خاطرم نیست
اجازه بدید بررسی میکنم – شاید من اشتباه نوشته باشم – ممنون برای توضیحتون
با سلام و خسته نباشید بالاخره بعد کلی دردسر و فقط با کمک توضیحات جامع وکاربردیتون تونستم یه برنامه نسبتا خوب با بسکام بنویسم واقعا دستتون درد نکنه
خواستم از شما تشکر کنم
خواهش میکنم دوست عزیز
ممنونم برای بازخورد خوبتون 🙂
سلام مرسی بابت مطالب خوبتون. اگر خروجی یکی از این ماژولای ASK رو به یک اسیلوسکوپ یا لاجیک آنالیزر وصل کنید می بینید که خروجیش بسیار ناپایدار است . حتی در حالتی که هیچ سگنالی وجود ندارد خروجی ماژول با فرکانس زیادی تغییر حالت میده . استفاده از وقفه خارجی برای راه اندازی این ماژول به نظرتون کار درستیه ؟ چون میکروکنترلر رو خیلی درگیر میکنه و در ثانیه صد ها بار وقفه فعال می شه . من از یک شرط برای صفر شدن خروجی بیشتر از 2 میلی ثانیه برای اجرای روتین دیکد استفاده می کنم روش خوبیه .
سلام خواهش میکنم دوست عزیز
با توجه به نوع میکروکنترلر مورد استفاده منطقی ترنی راه همینه ! – اونقدرا که فکر میکنید میکرو رو درگیر نمیکنه و زمان خیلی کمی هست – البته در نظر داشته باشید که فرکانس تاگل شدن ماژول ask اونقدرا هم زیاد نیست
روش منطقی تر اینه که از مد کپچر تایمر استفاده بشه که خیلی بهینه تر عمل میکنه ولی با توجه به این که avr یک تایمر ۱۶ بیتی داره اگر بخوایم ازش استفاده کنیم ممکنه تو محصول واقعی با مشکل مواجه بشیم.
با سلام و خدا قوت
من یک گیرنده PC-JC02 بعلاوه یک برد آردینو UNO و یک ماژول رله 4 کانال دارم
فقط هم با آردینو IDE کار کردم تا حالا.
چطور میتونم از این برنامه استفاده کنم.
سلام دوست عزیز
کتایخانه نوشته شده برای GCC رو دانلود کنید و کد داخلش رو احتمالا اگر کپی کنید توی ادیتور آردوینو نباید مشکلی داشته باشه
البته اگر آردوینو اونو یا نانو استفاده میکنید.
با سلام و درود من این مدار رو بستم و همین کد رو اپلود کردم به صورتی که دیتا گیرنده رو زدم به اینتراپت صفر و tx میکرو رو زدم به rx مبدل و داخل برنامه اردینو تو سریال منیتور زدم وقتی ریموت رو میزنم هیچ کدی به یوارتم نمیفرسته. ولی وقتی دیتا رو مستقیم میزنم به rx تو سریال مانیتور چیز الکی مینویسه مشکل کجاست؟
سلام
برای کار نکردن مدار دلایل مختلفی میتونه وجود داشته باشه ولی دم دستی ترین احتمال اول اینه که فیوز بیت های میکروکنترلر رو درست تنظیم نکرده باشید
دوم اینه که فرکانس گیرنده و فرستنده یکی نبوده باشند و …
با سلام و تشکر. فایلها باز نمیشه. روش خاصی داره؟
فایلها زیپ هشتند و مشکل خاصی برای باز شدن ندارند
دقیقا مشکل شما چی هست؟
سلام ضمن تشکر از توضیحات بسیار مفید شما
بنظر در قسمتی از متن اشتباه وجود دارد
1.حالت همزمانی: در این حالت اگر میزان یک بودن سیگنال مثلاً 1 میکروثانیه باشد، میزان صفر آن باید 30 میکروثانیه باشد.
طبق عکس بالای متن میزان صفر آن باید 31 میکروثانیه باشد
بله کاملا حق با شماست
متشکر برای دقت و تذکر تون
متن رو اصلاح می کنیم.
خیلی ممنون بسیار عالی و جامع توضیح دادین
خواهش میکنم دوست عزیز 🙂
سلام خیلی خوب بود بود مهندس واقعا عالی بود
خواهش میکنم دوست عزیز 🙂
دوست عزیزم سلام. خیلی ممنونم از توضیحاتتون، خیلی عالی بود
من یک سوال داشتم، البته شاید یکم بی ربط باشه به متن. ما با یه مسئله ای مواجه هستیم، توی بعضی از ریموت ها از این کریستال های بزرگ استفاده می شه و توی بعضی ها از کریستال های SMD. خواستم یه مقایسه ای بین اینا داشته باشین، مثلا از نظر برد، مقاومت و …، کدومیکی بهتر هستند؟
مرسی
خواهش میکنم دوست عزیز.
smd یا dpi بودن کریستال مشخص کننده کیفیت نیست بلکه مدار و طراحی آنتن خیلی تو این مساله تاثیر داره و نمیشه صرفا از نوع قطعات استفاده شده در خصوص کیفیت اونها نظر داد.
سلام مهندس. سه چهار روزه هر کاری میکنم جواب نمیگیرم…
کریستال، تایمینگ پروژه، پروگرامر و خود میکرو رو عوض کردم…گیرنده هم به خوبی کار میکنه…. همه چی سالم…
.
بعد از کلی برسی متوجه شدم میکرو داخل تابع main میره دستورات اونجا رو اجرا میکنه ولی وارد تابع وقفه خارجی نمیشه!!!!!!!!
یک پروژه ساده و پروگرام کردم دیدم وقفه خارجی میکرو کاملا سالمه….
.
نمیدونم کدویژن برای پروژه های بزرگ داره اذیت میکنه چون نسخه کرک هست یا… واقعا نمیدونم… کدویژن نسخه 3.12 استفاده میکنم.
مهندس جان شما چی فکر میکنید… واقعا هیچ راه حلی به ذهنم نمیرسه…
امم من فکر نمیکنم مشکل از کدویژن باشه – فکر کنم همین پروژه رو با کدویژن هم گذاشتم
احتمالا مشکل از جای دیگه ای باشه – چطور رفتن رو اینتراپت رو چک کردید ؟
یه دستور خروجی گذاشتم تو اولین خط اینتراپت که وقتی بره توی تابع مثلا یه ال ای دی روشن بشه.
اخه شنیدم نرم افزار های کرک ممکنه درست کار نکنن…
دیدم این پروژه رو با اکلیپس گذاشتید ولی واقعا هیچی از دستورات متوجه نمیشم…
خوب بسیار عالی تنها در صورتی ممکنه فعال نشه که اینتراپت رو فعال نکرده باشید یا پالس نداشته باشید
غیر از این حالت ها ممکن نیست !! اگر لاجیک آنالایزر داشته باشید خیلی راحت تر میتونید بررسی کنید
آره این که شنیدید کاملا درسته و هیچ تضمینی برای کارکرد صحیحش وجود نداره و بد تر از اون این که براش پشتیبانی هم نمی تونید داشته باشید.
شما دقیقا همین کد رو میتونید توی اتمل استودیو کامپایل کنید 🙂
+ توی همین پروژه سمپل کدویژن هم گذاشتم البته
با سلام و عرض ادب.
تو هدر فایل تایمر تابع
Read_Timer
چرا ریجیستر SREG رو ذخیره کردید و وقفه رو غیر فعال کردید.
میشه توضیحی بدید.
سلام و درود –
امم شاید الان دیگه لزومی نداشته باشه ولی وقتی اینو گذاشته بودم یه سری محاسبه هم اینجا یعنی تو این تابع انجام میشد که ممکن بود روی فلگ ها تاثیر بذاره برای همین اول وضعیت رو ذخیره میکردم که وضعیت فلگ های پیشین رو داشته باشم
الان میتونید حذفش کنید بعد از اصلاح کد فراموش کردم حذفش کنم
سلام .ممنون که از قرار دادن اطلاعات این پروژه برای سایرین.
میخاستم بدونم من میتونم با یک ریموت چند عدد گیرنده کد لرن رو کنترل کنم .میخام داخل هر کدام از کلید های روشنایی خونه یک گیرنده بزارم و بایک ریموت 12 کانال کد لرن کنترلشون کنم.
سلام خواهش میکنم دوست عزیز
بله دقیقا امکانش هست و یه کوچولو باید کد رو عوض کنید – این کاری هست که خیلی از سیستم های اتوماسیون خانه دارن الان انجام میدن
سلام
از اینکه این همه مطالب خوب و مفید در سایت قرار میدهید، سپاسگزارم.
اگر بخواهم به جای EV1527 ، از میکروکنترلر برای ارسال 24 بیت کد استفاده کنم، میزان باودریت پایه TXD میکرو چقدر باید باشد؟
دو تا راه دارید این که اول سیگنال ev1527 رو شبیه سازی کنید !!!
یا اگر میخواید از خود میکرو و ارتباط سریال استفاده کنید فکر میکنم باوود ۹۶۰۰ باوود مناسبی باشه
سلام مهندس عزیز،و سپاس فراوان بابت اشتراک چنین مطالبی
میتونم بپرسم که چرا این کتابخانه رو نمیشه به stm32 خوروند،من هرکاری میکنم تو stm اصلا جواب نمیده
در کل میخوام بدونم اصلا این کد طبق توابع hall قابل اجرا به روی stm هست؟
خواهش میکنم دوست عزیز
باید بگم که کلیت برنامه نوشته شده ربطی به کتابخونه های hal و spl نداره و به راحتی میتونید با هرکدوم از کتابخونه های مورد نظرتون راه اندازیش کرد
تنها نکته هایی که باید رعایت کنید فرکانس تایمر و اینتراپت پایه است که باید به شکل صحیح پیاده سازی کرد.
ممنونم از پاسختون
من تو روتین اینتراپت شرط بالا رونده بودن یا پایین رونده بودن رو به این شکل چک کردم که نمیدونم درسته یانه
(if (GPIO_InitStruct.Mode==GPIO_MODE_IT_RISING
}
;GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING
.
.
.
.
.
{
سلام دوست عزیز چرا این کار پیچیده رو کردید 😐
اینتراپت رو برای تغییر لول تعریف کنید و توی اینتراپت وای صفر یا یک بود رجیستر IDR رو بخونید
درسته؛پس چرا تو برنامه خودتون تو avr این کارو نکردین؟
امم خوب درست میگید
این کد مربوط به سالها پیشه اگه الان باز نویسیش کنم اینطور که گفتم باز نویسی میکنم
خیلی ممنونم مهندس،اوکی شد
خواهش میکنم بسیار عالی 🙂
سلام من این کد رو کامپایل کردم یک بار یه صورت تصادفی اجرا شد و جواب داد ولی بعدش دیگه نتمی شه لطفا بهم راهنمایی کنید ، روی میکروatmega 32 چه تغییرلتی باید روی سورس برنامه بدم ممنون .
سلام
تنها چیزی که به ذهنم میرسه اینه که فرکانس اسیلاتور رو درست تنظیم نکرده باشید ؛ اگر نه تا اونجا که اطلاع دارم نباید برای اجرا شدن روی atmega32 مشکلی داشته باشه
البته فکر کنم پایه ورودی اینتراپن روی اتمگا 32 متفاوت باشه
ممنون از جوابتون من از کریستال ۱۲مگاهرتز خارجی استفاده می کنم و تنظیمم کردم ،الان جواب داد ولی خود ب خود رسیو میشه مثل اینکه چون من بازر هم دارم برای اینکه چک کنم رسیورم عملکرد داره گاهی خود ب خود بوق میزنه
خوب بسیار عالی – بله این که می فرمایید کاملا صحیح و طبیعی ایت گاهی نوز های محیطی چنین شرایطی ایجاد می کنند ؛ برای برطرف شدن این مساله هم لازمه که دو کد ریموت رو مثلا در کمتر از یک ثانیه دریافت کنید و با هم مطابقت بدید
در صورت یکسان بودن اونها رو ولید در نظر بگیرد به همین سادگی
عرض سلام وادب
/”با توجه به اینکه هر فریم شامل 128 پالس است”
از کجا متوجه شدید، هر فریم 128 دارد؟
سلام دوست عزیز
خوب ساده است ؛ برای ارسال 0 یا یک منطقی نیاز به 4 پالس است (یک پالس یک و سه پالس 0 برای ارسال صفر منطقی و برعکسش برای یک منطقی ) ؛ در کد ارسالی 24 بیت داده را نیاز است که ارسال کنیم ؛ 24 در 4 می شود 96 پالس ؛ preamble هم که 32 پالس نیاز دارد که مجموعا می شود 128 پالس 🙂
سلام ببخشید میشه یه مطلب هم درباره ریموت بلوتوثی بزارید؟
ریموت های بلوتوثی که از هم کپی میشن ای سیشون فرق داره با ev1527?
ریموت بلوتوثی – پیشنهاد خوبیه !
در واقع توی ریموت های بلوتوثی یه بخش گیرنده هم وجود داره که کار کپی کردن کد رو بر عهده داره و برای ارسال فکر میکنم سیگنال رو شبیه سازی میکنه و به همین دلیل نیازی به ev1527 نداره
با سلام من از پوشه GCC قسمت دیباگ فایل هگزو پروگرم مسکنم این خطا رو میده
GETTING ISP PARAMETER …SD=0X05 …OK THE SPECIFIEND FILE IS NOT A VALID INTEL HEX FILE
از آدرس زیر فایل های hex رو دانلود کنید
https://github.com/Sisoog/4Ch_learnRemote/releases
این فایل ها بارها چک شده اند و مشکلی نداشته اند
با سلام من از فایل GCC از قسمت دیباگ هگزو پروگرم میکنم این خطا رو میده
GETTING isp parameter …SD=0X05…OK THE SPECIFIEND FIL IS NOT A VALID INTEL HEX FILE مشکل چیه با تشکر
امم از چه پروگرامر و میکرویی استفاده میکنید ؟
سلام مهندس توی کانفیگ پروژه روی 8MHZ کلاک داخلی تنظیم شده آیا درسته؟؟
سلام دوست عزیز
بله اونطور که خاطرم هست روی 8 مگ هست – خارجی و داخلی بودنش زیاد تفاوت نداره
من با spi پروکرم میکنم
با سلام من فایل هگزو از پوشه دیباگ با اتمل استادیو پروگرم میکنم ولی کلی خطا میگیره وپروگرم نمیشه من ی عکس از روی اون میفرستم به ادمین تلگرام مشاهده کنید ببینید مشکل چیه راهنمایی کنید با تشکر از شما
برای پروگرام کردن فایل هگز که نباید خطایی بگیره اخه ؛ احتمالا مشکل جای دیگه ای است
ممکنه فیوز بیت ها رو تغییر داده باشید به نحوی که دیگه پروگرامر میکرو رو شناسایی نکنه
سلام ممنون از مطلب خوبتون عالی بود
یه سوال داشتم اینکه
من می خوام ریموت رو خودم بسازم و گیرنده دارم اگه ولتاژ ریموت تلرانس داشته باشه زمان بندی پالس ها تغیر می کنه درسته؟ نمی خوام از باطری استفاده کنم و می خوام که از رگولاتور استفاده کنم نظرتون چیه؟
ساخت ریموت که ملاحضه ی RF خاصی نداره داره؟ جز طراحی انتن؟
سلام دوست عزیز ؛ خواهش میکنم
خوب البته اینطور هست که و اون هم به دلیل Rc بود اسیلاتور چیپ هستش ؛ ببینید نکته ای که مهمه اینه که نسبت پالس ها درست باشه؛ که قائدتا درسته و نباید مشکلی پیش بیاد ؛ پس فکر میکنم نگران این موضوع نباشد ؛
جز بحث RF بحث مهم دیگه ای نیست که بخواید نگرانش باشید.
برای شروع میتونید از فرستنده های ASK که توی بازار هست الهام بگیرید.
سلام مجدد ممنون که جواب دادید
مهندس منظورم اینه که چون من می خوام از سوییچ ماسفت به جای کلید ها استفاده کنم و چون یه افت ولتاژی هم روی ماسفت می افته فک کردم مثلا ولتاژ 6 ولت بشه 5.8 ولت ممکنه زمان بندی ها عوض بشه نظرتون چیه؟
سلام خواهش میکنم
بببیند اگر دارید از ماسفت استفاده میکنید و اگر ماسفت رو توی اشباء کامل ببرید ؛ مقاومتش در حد چند میلی اهم پایین میآد و اصولا ولتاژ خیلی کمی روی سورس و درین افت خواهد کرد.
ببخشید ولی من درست متوحه نشدم که میخواید چکار کنید.
بسیار عالی،با تشکر از زحمات شما.
سلام. خواهش میکینم
ممنون از شما
با سلام فایل هگز رو که باز میکنم کلی ارور میده وفایل هگز هم همینطور و پروگرم نمیشه با تشکر
ببخشید متوجه نشدم ؛ از چیه فایل هگز خطا میگیره ؟ ، فایل هگز رو پروگرام میکنید کار میکنه
اگر منظورتون سورس کده ؛ خوب با چه نرم افزاری باز میکنید ؟
با سلام این دو تا فایل هیچ فایل هگزی نداره که بخام پروگرام کنم دوما کدوم این فایلها برای atmega8 هست با تشکر
سلام دوست عزیز
فایل مربوط به کتابخانه GCC رو دانلود کنید ؛ توی پوشه Debug ، فایل هگز پروژه موجود هست.
سلام
ممنون از شما مهندس بابات راهنمایی هاتون
مهندس ۲ سوال
روش تشخیص فرکانس کاری این گیرنده ها چیه ؟
مثلا روی بعضی هاش روی کریستالش نوشته jmr6.7458 ?
و اگر مهندس بخوایم توی یه برد ۲ تا فرکانس کاری رو به صورت همزمان با یه میکرو داشته باشیم چه کار کنیم؟
یعنی هم با ریموت ۳۱۵ کار کنیم هم با ۴۳۳
برای تشخیص فرکانس گیرنده میتونید به فرکانس کریستالش دقت کنید 6 مگاهرتز برای 433 و 4 مگاهرتز برای 315 مگاهرتز هست
برای این که دو تا فرکانس رو دریافت داشته باشید حتما باید از دو عدد ماژول استفاده کنید .
مهندس برای داشتن دو تا فرکانس با داشتن ۲ گیرنده در یک میکرو چه باید کرد؟
میشه پایه دیتا هر دو گیرنده رو به پین ۴ میکرو که در این پروژه استفاده شده برای داشتن هر دو فرکانس استفاده کرد؟(به هم متصل کردن پایه هر دو گیرنده مشکلی ایجاد نمیکنه؟)
یا اگر نمیشه چه راهکاری پیشنهاد میدید؟
خوب منطقی ترین راه اینه که از دو پایه اینتراپت استفاده کنید !
نه مکانش نیست که پایه گیرنده ها رو به هم متصل کنید ؛ چون باعث ایجاد اختلال میشه
سلام. ممنون از توضیحات کاملتون. فایل ها دانلود نمیشوند.
51.55 درصد گیر میکنه و خطا میده.
لطفا راهنمایی بفرمایید.
خواهش میکنم من چند بار سعی کردم برای دانلود و هر چند بارش بدون مشکل دانلود شد ؛ شما میتونید از GitHub سیسوگ این سورس کد رو نیز دریافت کنید.
این آدرس GitHub هستش
سلام خدمت شما و تشر بابت زحمات
مهندس منظور از این کدها چیه:؟
code[0]f
code[1]f
code[2]f
در کد 2 ما باید دنبال آدرس کلید زده شده باشیم؟
آخه کد 2 یه متغییر حاوی 6 بیته!
یه سوال دیگه هم اینکه مثلا ریموت های کد لردن کد های کلید های فشرده شدشون همیشه 4 کد ثابته؟ فق ممکنه جای کلیداشون فرق کنه؟
سلام دوست عزیز ؛ همونطور که توی پست توضیح دادیم ؛ ریموت یک کد 24 بیتی رو ارسال میکنه ؛ خوب توی میکرو کنترلر ما متغییر 24 بیتی نداریم پس دو راه وجود داره یکی این که داده ها رو توی یه متغییر 32 بیتی ذخیره کنیم که با توجه به 8 بیتی بودن میکروکنترلر ؛ احتمالا مقداری کار پردازشی خواهد برد یا این که در 3 متغییر 8 بیتی این کار رو انجام بدیم و این همون کاری هست که ما کردیم
بله درست متوجه شدید ؛ مقدار کلید ها در 4 بیت ابتدایی متغییر code[2]f ذخیره می شوند.
بله امکان داره داری کلید ها جابجا بشه که بسته به ریموت متغییره !
سلام
من نمیتوانم دانلود کنم.لطفا راهنمایی بفرمایید.
سلام دوست عزیز
در اتنهای پست بخشی برای دانلود وجود داره به اسم ” دانلود سورس کد ریموت ” که میتونید کتابخانه ها رو هم برای کدویژن و هم برای GCC دانلود کنید.
سلام مهندس جان مطلب خوبی بود استفاده کردیم …126 پالس رو کجا زده آیا در داکیومنت ماژول تعداد پالس در فریم زده شده است….
سلام دوست عزیز ؛ خوب اول این که اشتباه نوشته بودم 126 – درستش 128 پالسه ؛ خوب تعداد این پالس ها اینطور به دست میآد که 24 بیت آدرس و وضعیت کلید هست ؛ برای تعیین هر بین 4 پالس لازمه که میشه 96 پالس ؛ سینک هم زمانی هم که 32 تا پالس لازم داره که میشه عدد 128 پالس 🙂
+ مطلب اصلاح شد.
سپاس.مطلب بسیار با ارزشی بود.
خواهش می کنم دوست عزیز
سلام دوست عزیز
ضمن تشکر از شما
میخواستم یه راهنمایی بکنید که چطور ریموت هارو در حافظه eeprome ذخیره کنم و در اصل کدام متغییر را باید ذخیره کنم؟
یه کم گیج شدم، لطفا راهنماییم کنید
سلام دوست عزیز
قبلا توضیح دادیم که هر ریموت 24 بیت داده ارسال میکنه ؛ 4 بیت کم ارزش وضعیت کلید ها رو نمایش میده و 20 بیت پر ارزش تر کد یونیک خود ریموت هست ؛ برای این که بعدا بتونیم مجداا ریموت رو شناسایی کنیم نیازه که این 20 بیت رو ذخیره کنیم از اونجایی که متغییر 20 بیتی وجود نداره ما داده ها رو توی متغییر های 32 بیتی ذخیره میکنیم به همین سادگی
اگر کد ارسالی یک ریموت همیشه یکی باشه و کسی یک گیرنده بگذارد و کد را دریافت و همان را تکرار کند در این صورت امنیت این کد به چیست؟ یعنی به همین راحتی میشود مثلا درب منزل کسی را باز کرد؟
بله دقیقا ، به همین راحتی میتوان این مدل ریموت ها رو هک کرد دوست عزیز ؛ به همین دلیل ریموت های هاپینگ به وجود اومدن
قبلا در مورد ریموت های هاپینگ مقاله ای نوشتم که میتونید از سیسوگ مطالعه اش کنید.
همه چیز در مورد ریموت هاپینگ
دست شما درد نکنه امیدوارم هر روز پیشرفت داشته باشید
متشکرم دوست عزیز
سلام
اگر لطف کنید کد ها را دوباره آپلود کنید ممنون میشم
مثل اینکه مشکلی ایجاد شده
هر دو فایل چک شدند مشکلی مشاهده نشد ؛ در دانلود فایل ها مشکل دارید ؟
سلام مهندس
ممنونم از مطالبتون.
من برنامه Avr دانلود كردم ولى بوشهEEPRAM رو نداره ميشه يبار ديكه لطف كنيد توى تلكرام سوري برنامه رو واسم بفرستيد خيلي خيلي ممنون
سلام دوست عزیز
چزا فکر میکنید باید پوشه EEPROM وجود داشته باشه ؟ سورس رو چک کردم درسته و چیزی کم نداره
سلام مهندس
ممنون
فقط اگه مشه در مورد حالتهای همزمانی
یک منطقی و صفر منطقی یه توضیحی بدید
سلام دوست عزیز
در واقع برای تشخص هر کدام از حالت ها تنها کافی است که مدت زمان یک بودن به صفر بودن سیگنال را اندازه گیری کنید ؛ در واقع یعنی نسبت را به دست بیاورید.
سلام مهندس جان خدايي من اين حالت همزمانى متوجه نميشم خواهشا اكه كتابى تو اين زمينه هست معرفى كنيد يا اينكه بزكوارى كنيد خيلي ساده توصيح بديد ممنون ممنون
امم والا کتابی که در این خصوص وجود نداره ؛ منوال خود چیپ در همین حدی که توضیح دادم اشاره کرده ؛ اگر به شکل دقت کنید به خوبی مشخص هست ؛ متوجه نمیشم کدوم بخشش بررای شما نامفهوم هست
مهندس عزيز واقعا ممنونم كه اينقدر شكيبا هستيد ولي من تو عكس هيجى نفهميدم بخدا خيليم هم خنك نيستمم فقط ميخوام بفهمم نه كه كبي كنم حالا اكه ميشه بفرماييد رابطه اين نسبتها با ولناز باطري جيه و دوم اينكه نسبتهار و يكم دقيقتر توضيح بديد
خيلي خيلى خيلى شرمنده و ممنون
سلام دوست عزیز ؛ خواهش میکنم ؛
نسبت ها کاری به ولتاژ باتری نداره و همیشه ثابت خواهند بود ؛ اما چیزی که به ولتاژ باتری مربوط میشه فرکانس کلاک آیسی و در نتیجه دوره زمانی تکرار کد ارسال ریموت هست ؛ اما چرا این موضوع به ولتاژ باتری مربوط میشه ؛ خیلی ساده است چون آیسی از نوسان ساز RC استفاده میکنه که خیلی وابسته است به ولتاژ ! اگر از نوسان ساز کریستالی استفاده میشد وابستگی به ولتاژ از بین می رفت ! خوب بگذریم اما لازمه که بدونید این نسبت ها بهم نمیخوره تنها چیزی که ممکنه اتفاق بیفته اینه که پالس ها کوتاه تر یا کشیده تر بشن
مهندس عزيز سلام شرمنده بزركوارى كنيد تو دستور زير منظور از T1و T2 جيه ؟
T1> min_pulse_len
T2<(T1*2(
سلام دوست عزیز
در واقع زمان یکی بیانگر زمان یک بودن و دیگری بیانگر مدت زمان صفر بودن یک سیکل هست !
درود بر شما.
تشکر بابت به اشتراک گذاشتن مطالب زیبا
موفق و پیروز و سربلند باشید
متشکرم دوست عزیز
متشکر از نظر دل گرم کننده شما
سلام ممنون از اطلاعات خوبتون یک سوال داشتم خدمتتون در ریموت های بلوتوثی که بصورت روبروی هم قرار دادن کد هاشون گپی میشه از چه آی سی استفاده میکنن ؟ مثلا شما در ریموت لرن فرمودید از آی سی EV1527 استفاده میشه برای اون ریموت ها چه آی سی هستش؟
سلام دوست عزیز
دو سه مدل ریموت بلوتوثی که باز کردم ؛ ظاهرا از میکروکنترلر استفاده می کنند ، در واقع کاری که ریموت بلوتوثی انجام میده اینه که احتمالا طول پالس ها رو میخونه و ذخیره میکنه و بعد موقع ارسال همون ها رو ارسال میکنه !
اگر قصد دارید چنین چیزی بسازید باید برنامه اش رو با میکروکنترلر بنویسید که کار چندان دشواری نیست
سلام و خسته نباشید خدمت شما
من برنامه نویسیم زیاد خوب نیست امکانش هست کدشو برام توضیح بدید که چجوری این مدار عمل لرن ریموت انجام میده؟
سلام و درود
ببینید برای ذخیره کد هر ریموت اول اونو به یع عدد 4 بایتی تبدیل میکنیم یعنی فشرده ترین حالت ممکن ؛ بعد داخل EEPROM ذخیره میکنیم کد رو ، به همین سادگی !
اما چطور چند ریموت رو ذخیره میکنیم ، به این صورت که در ایتدا کل حافظه EEPROM رو با مقدار FF پر میکنیم ، برای ذخیره اولین چهار بایتی که FF باشند رو پیدا میکنیم و کد ریموت رو ذخیره میکنم ، و این روند ادامه پیدا میکنه تا کل حافظه EEPROM پر بشه.
سلام و خسته نباشید خدمت شما و همکارانتون
یه سوال داشتم من برنامه کد ویژن دیدم به این تابع برخوردم چرا +48 میشه؟
putchar(Remode_Data[i]+48);
سلام دوست عزیز ؛ ببینید کارکتر ‘0’ با عدد صفر متفاوت هستند ؛ برای نمایش کارکتر 0 باید عدد 48 ارسال شود و برای نمایش عدد 1 باید 49 و … تا عدد 9 همین روال پشت سر هم ادامه پیدا میکنه ؛ برای جزییات بیشتر به جدول Ascii کد کارکتر ها مراجعه کنید.
خوب حالا برای این که اعداد توی ترمینال درست نشان داده شوند با توجه به جدول Ascii نیازه که اونها رو با عدد 48 جمع کنیم که اگر عدد صفر بود معادل اسکی اون یعنی 48 به ترمینال اسال بشه و کارکتر ‘0’ به نمایش در بیاد.
سلام من ريموت دزدگير رو گم كردم از كجا بفهمم گيرنده دزدگيرم فركانسش چيه؟به ريموت آوردم بازش كردم روى كريستاليش ١٣٣١٥ نوشته بود با ريسيور دزدگير مچ نشدممنون ميشم راهنماى كنيد
سلام دوست عزیز
دزگیر شما احتمالا باید ماژول گیرنده RF داشته باشه – مثل همون چیزی که توی تصاویر این پست موجوده ، معمولا روی گیرنده ها یه کریستال هست که مقدار اون کریستال فرکانس کاری رو مشخص میکنه ! به همین سادگی
در ضمن 315 که روی کریستال ریموت درج شده – نشون میده که فرکانس کاری ریموت شما احتمالا 315 مگاهرتز هست ، یه غیر از 315 مگاهرتز معمولا ریموت ها در فرکانس 433 مگاهرتز نیز موجود هستند
در ضمن تنها فرکانس ریموت برای خرید ریموت کافی نیست ، ریموت ها انواع مختلفی دارن به لحاظ پروتکل که ممکنه هاپینگ باشه ، معمولی باشه و …
اگر مدل دزگیر رو بگید شاید بشه بهتر در این مورد کمک کرد
سلام باید به نوع ترانزیستوری 55 ولت برق بدیم؟؟؟
سلام
سوالتون رو متوجه نشدم دوست عزیز
با سلام
ممنون از اطلاعات ارزشمندتون
مدار را مونتاژ کردم و برنامه رو پروگرم کردن . ولی بعضی از اوقات کار می کنه بعضی اوقات نه. یک ال ای دی به خروجی ماژول وصل کردم که موقع فشاردادن ریموت چشمک میزنه. همه چیزی رو چک کردم ظاهرا مشکلی نیست اما گاهی اوقات کار نمی کنه
سلام دوست عزیز ، چرا از ورژن جدید این کتابخونه استفاده نکردید ؟
این کار نکردن میتونه دلایل مختلفی داشته باشه ، یکی از عمده ترین دلایلش عدم زمان بندی درست ریموت مروبط است ، که غالبا توی تشخیص بیت شروع اتفاق می افته و برای اینه که ما برای ساده تر شدن زمان ها رو محدود کردیم ، ممکنه ریموت شما با فاصله گرفتن از گیرنده از این زمان بندی خارج بشید ، در ضمن از چه نوع گیرنده ای استفاده کردید ؟
بسیار ممنون.فقط زمانیکه ما این اطلاعاتو دریافت کردیم چطور بفرستیم؟
خواهش میکنم دوست عزیز
چرا باید بخواید دوباره بفرستید ؟
خب وقتی ما کد ریموتو بگیریم،اصطلاحا لرن کنیم باز باید اینو واسه گیرنده بفرستیم.وقتی ما یک کانال از ریموتو لرن کنیم بقیشم لرن میشن؟
آها یعنی شما میخواید چیزی شبیه ریموت های بلوتوثی بسازید ؟
ببینید بعد از خودن کد یه کلید از ریموت شما در واقع کد ریموت رو دارید میشه به بیانی گفت هر 4 تا رو ، اگر مقاله ببینید گفتیم که کد ارسالی 24 بیت هست که 20 بیت اول ثابت است و برای همه کلید های اون ریموت تکرار میشه و 4 بیت آخر وضیعت کلید ها رو گزارش میکنه !
برای ارسال مجدد کد باید سینگال رو شبیه سازی کنید
بسیار عالی.
متشکر از پاسختون
خواهش میکنم دوست عزیز 🙂
موفق باشید
اگر سوالی دارید حتما مطرح کنید
متشکر برای این مطلب کاربردی و البته بسیار کامل
سلام
خواهش میکنم دوست عزیز 🙂
“” با توجه به اینکه هر فریم شامل 126 پالس است طول هر پالس 10 میکروثانیه خواهد بود “”
طول فریم از کجا بدست اومده
جدول بالا رو نگاه کنید ، زمان کل فریم رو برای ولتاژ و مقاومت رزوناتور نوشته
سلام و خسته نباشید خدمت شما
از مطالب اموزنده و کاربردی که در اختیار عموم میزارین بسیار ممنونم
اگه امکانش هست این سورس رو به زبان بیسیک (بسکام)هم اضافه کنید.
با تشکر
سلام و درود دوست عزیز
متاسفانه تسلط چندانی به بیسکام ندارم و برای تبدیل اول باید بیسکام رو یادبگیرم :/
ولی اگر فرصتی پیش اومد حتما این کار رو انجام میدم
با عرض سلام و تشکر فراوان بابت مطلب خیلی خوبتون
برای افزایش برد این ارتباط چیکار باید کرد ؟
ریموت من کد لرن ، گیرنده هم rxb22 هستش
حدودا بیست یا سی متر جواب میده حداکثر
آنتن هم زدم به گیرنده
شرایط تست رو باید دید ، ولی تا اونجایی که اطلاع دارم برد این نوع ریموت ها همین حدود است شاید تا 50 متر
سلام، خیلی ممنون متن بسیار مفیدیه! یه سوال داشتم
#define Min_Pulse_Len 200 /* In us */
#define Max_Pulse_Len 16000 /* In us*/
این زمان ها رو از کجا بدست اوردید؟
سلام دوست گرامی
خوب با مراجعه به یوزرمنوال آیسی قسمت فرکانس اسیلاتور ، میتونید این زمان ها رو که بیشترین و کم ترین زمان های موجود قابل قبول هستند رو ببینید.
سلام
ممنون از مطلب مفیدتون!
من یه atmega 8a خریدم و برنامه رو روش پروگرم کردم.چه با کریستال خارجی ، چه با کریستال داخلی جواب نداد ( 8مگاهرتز)
به نظرتون مشکل میتونه از کجا باشه!
اینم بگم که من وقتی یه LED مستقیم به پایه دیتا ماژول متصل کردم و کلید ریموت رو فشار دادم روی LED تاثیر گذاشت (یعنی روشن و خاموش شد) آیا این موضوع میتونه گواه آن باشد که فرکانس فرستنده با فرکانس ماژول گیرنده برابر است؟! (همچنین وقتی LED رو به ماژول متصل کردم، LED روشن بود و چشمک میزد ولی وقتی کلید ریموت رو فشار میدادم با نور بیشتری چشمک میزد. مگه نباید LED کاملا خاموش باشد؟ مگر ماژول گیرنده هنگامی که ارسالی صورت نمیگیرد نباید در دیتا خروجی صفر داشته باشد؟)
توی ریموت فرستنده یه کریستال 433 مگاهرتز وجود داره! اما نمیدونم چطور باید فرکانس گیرنده رو تسشیص بدم!؟
ماژول گیرنده ای که استفاده میکنم ماژول pc-jc02 هست! (روی کریستال آن نوشته 6.7458) آیا این ماژول میتونه این کار رو به درستی انجام بده؟ (بدون آنتن) ماژول پیشنهادی شما کدام است؟!
آیا میشه که دیتا ارسالی از فرستنده (با آیسی ev1527) کمتر یا بیشتر از 24 بیت باشه؟! یعنی با اینکه آیسی یکسان است اما دیتا ارسال متفاوت باشد؟ یا خیر حتما 24 بیت است؟!
به نظر شما مشکل چیست؟
با تشکر
سلام درود دوست عزیز
اگر کریستال ماژول شما 6.7458 هست یعنی فرکانس ماژول شما 433 مگاهرتز هست
اگر LED رو به خروجی ماژول وصل میکنید و بعد فشردن کلید ریموت چشمک زدن LED قائده مند و مرتب میشه یعنی فرکانس گیرنده و فرستنده با هم یکی است
در مورد atmega8 هم سری a و غیر a فرقی نمی کنه و باید با هر دو به صورت صحیح کار کنه
شما مطمئن هستید که فیوز بیت های میکرو رو درست تنظیم میکنید ؟ ، وقتی میکرو رو روشن میکنید روی پورت سریال چیزی میفرسته ؟
با تشکر از مطالب و سایت بسیار خوبتون
متشکر از حسن توجه شما
سلام
من میخوام ریموت کدفیکس رو بر روی میکروی خودم لرن کنم
با این سورس فقط ریموت کدلرن عمل میکنه
ظاهرا باید تغییراتی بر روی قسمت اینتراپت اعمال بشه ولی من هر کاری میکنم جواب نمیده
در صورت امکان بفرمائید این تغییر چطوری باید صورت بگیره که ریموت کدفیکسم دارای آی سی pt هم لرن بشه
ممنون
سلام دوست عزیز
این کد فقط برای ریموت های کدلرن هست و برای ریموت های کدفیکس باید قسمت دکد رو عوض بفرمایید ، چرا که پروتکل ارسال ریموت های کدفیکس مقداری متفاوت هست ، اگر شما اصول کارکرد کد در خصوص دکد کردن کد های ارسالی رو درک کرده باشید به راحتی قادر خواهید بود که پروتکل ریموت های کدفیکس رو پیاده سازی کنید ، تفاوت ها شامل محل قرار گیری پالس همزمانی و نحوه ارسال صفر و یک منطقی هست بعلاوه این که در ریموت های کدفیکس علاوه بر صفر و یک حالت سومی هم وجود دارد برای آدرس دهی ، تمام این مشخصات را می توانید با مراجعه به برگه فنی مثلا آسی pt2262 پیدا کنید.
سلام
خیلی عالی بود
ممنون
خواهش میکنم دوست عزیز
خواشحالم که این مقاله مورد توجه شما قرار گرفته
سلام
اگر ممکن هست مطلبی در مورد ریموت های هاپینگ و دکد کردن آنها قرار دهید.
با تشکر سایت خوبتون
سلام دوست عزیز
خواشحالیم که مطالب مورد توجه شما قرار گرفته ،
بله در برنامه هست انشالله در فرصت مناسب در مورد این نوع ریموت ها مطلبی منتشر خواهیم کرد.
ممنون بابت اطلاعات مفیدتون
خواهش میکنم دوست عزیز
سلام
چرا نسخه GCC که گذاشتید کامپایل نمیشه ظاهرا مشکلی داره یا کتابخونه ها براش فراخوانی نشده ؟؟
نسخه GCC مشکلی نداره ، اول باید توی نرم افزار ایکلیپس ایمپورت کنید بعد کامپایل کنید ، میک فایل مستقیم نداره که بتونید تو کامند لاین کامپایل کنید.
باتشکر از برنامه خوبتون
اگر بخواهیم از کریستال 16 مگا هرتز استفاده کنیم باید کجای برنامه تغییر کنه ؟
کدوم دستورات رو باید تغییر بدیم ؟
برای این تغییر اول باید از توی کانفیگ پروژه فرکانس رو 16 تغییر بدید که تاخیر ها درست انجام بشه
بعد باید تایمر 0 رو جوری کانفیگ کنید که سرریزش 1 میکرو ثانیه بشه !
البته شما از کدوم سورس استفاده میکنید ؟ کدویژن یا GCC ، توضیحات من برای کدویژن هست
من با کد ویژن انجام دادم
شما در کتابخانه تایمر مقدار Clock value: 1000.000 kHz انتخاب کردید در صورتی اگه بخوایم از کریستال 16 مگ استفاده کنیم باید مقدار آن و همچنین ریجیستر TCCR1B=0x02 تغییر کنه یعنی چون فرکانس ما دوبرابر میشه باید مقدار تایمر ما نصف بشه که تاثیری در برنامه نویسی نداشته باشه حالا از شما سوال داشتم که باید مقدار ریجیسترها چگونه تغییر کنه ؟؟ ممنون میشم راهنمایی کنید متشکر
سلام دوست عزیز ، همانطور که مطلع هستید برنامه بر اساس زمان بندی 1 میکروثانیه نوشته شده است و زمان ها بر این اساس وارد شده است ، برای تغییر فرکانس میکرو ، باید زمان های مورد استفاده در قسمت کتابخانه EV رو اصلاح کنید.
چرا که متاسفانه نمیتوان با استفاده از سخت افزار میکرو زمان 1 میکرو ثانیه را در فرکانس 16 مگ ایجاد کرد.
نه ببینید
منظورم این بود که وقتی به عنوان مثال دکمه A ریموت فشرده شد و رها شد خروجی یک بمونه و وقتی که دوباره دکمه A زده شده خروجی صفر بشه و صفر بمونه تا وقتی که دوباره دکمه A زده بشه مثل کلید تاگل ( پوش باتن )
بعد نکته بعدی اینکه شما گفتید اگر کد تغیییر کرد و کد جدید آمد حالت عوض بشه اصلا کد عوض نمیشه دکمه A ویا B در یک ریموت یک کد اختصاصی داره که هربار فشرده بشه همون کد ارسال میشه نرم افزار از کجا میخواد بفهمه که کد جدید آمده ؟؟ کد همون کده
نکته آخر اینکه شما در برنامه تون در داخل whil از delay_ms استفاده کردید که یک اشتباه بزرگه و نباید استفاده بشه و تو کل سیستم تاخیر می اندازه کافیه این delay رو بردارید متوجه میشید مشکلات برنامه چیه
ببیند من زیاد با این برنامه کار کردم و میخوام به کمک شما برنامه مشکلاتش حل بشه تا دوستان عزیز ازش استفاده کننند خواهشا اگه میتونید به آی دی بنده در تلگرام مراجعه کنید تا بهتر بشه روی این پروژه کار کرد کرد ممنون
آی دی بنده :xxxxxxxxxxx
ببینید دوست عزیز ، کدهایی که من به شما ارائه میدم فقط نمونه هست و برای کاربردی شدن خودتون باید کامل کنید. من راهکار رو عرض کردم خدمتتون. حالا شما اونطوری که دوست دارید یا نیاز دارید پیاده سازی کنید !
ببینید همونطور که در توضیحات پست عرض کردم 20 بیت کد ثابت وجود داره و 4 بیت آخر وضعیت کلید ها رو ارائه میکنه ، پس شما باید وضعیت کلید ها رو از بیت های شناسه جدا کنید و مورد بررسی قرار بدید.
دلیل وجود اون تاخیر هم این بوده که توی کدویژن ما نوع volatile نداریم به همین دلیل متغیر های موجود ممکنه توی اینتراپت مقدار درستی رو دریافت نکنند (البته راهکار داره)، و دلیل دوم هم این بوده که کد ها رو توی سریال نمایش میداده است و شما لزومی در استفاده از اونها ندارید.
این کد مشکلی نداره به نظر من ، فکر میکنم منظور شما اینه که برای منظور خودتون تغییرش بدید ، مشکلی نیست ، اتفاقا خوشحال میشم که یه کد کاربردی هم در این زمینه منتشر کنیم !
آیدیتون توی تلگرام موجود نبود :/
سلام خدمت شما
با تشکر از برنامه خوبی که گذاشتید
من با این برنامه کار کردم مشکلی نداره و بدرستی کار میکنه ولی یک مشکلی که داره هر روشی سعی کردم روش پیاده کنم که درستش کنم نشد اینه که وقتی دکمه ریموت رو نگه میدارید پورت خروجی حالت چشمک زن پیدا میکنه و برنامه یک بار اجرا نمیشه یعنی تا وقتی که دست روی دکمه ریموت هست دائم خروجی چشمک میزنه در صورتی که باید طوری باشه اگر دست روی کلید بود خروجی 1 بشه و وقتی که دست رو برداشتی و دوباره زدی 0 بشه
امیدوارم درست سوالم رو مطرح کرده باشم بسیار بسیار ممنون میشم که مننو کمک کنید چون نزدیک به چند ماه دارم روش کار میکنم ولی نتیجه نگرفتم
ممنون
سلام دوست عزیز ، وقت شما بخیر
خواهش می کنم
خوب اگر درست متوجه شده باشم شما نیاز دارید کدی داشته باشید که تا مادامی که کلید ریموت فشرده هست خروجی مورد نظر 1 باشه و بعد از رها کردن خروجی صفر بشه !
توجه داشته باشید که کد منتشر شده فقط یک مثال بوده جهت نحوه استفاده از کتابخانه مربوطه ، اما حالا چطور میشه کد رو به این شیوه تغییر داد ، باید عرض کنم خدمتتون که کار زیاد پیچیده ای نیست ، روش کار به این شکله که شما آخرین کد دریافتی از ریموت رو باید توی یک متغییر ذخیره کنید و کد جدید رو با کد آخر مقایسه کنید اگر یکی بودن یعنی همان کلید قبلی است و نیاز نیست عکس العملی انجام بشه و اگر به مدت مشخصی از ریموت کدی دریافت نکردید آخرین کد دریافتی رو صفر کنید تا با این کار رها شدن کلید شناسایی بشه
سلام…در دیکد کردن ریموت های لرن چگونه سیگنال اصلی فرستنده را از نویز جدا کنم…لطفا هر کس بلده کمک کنه…نویز اجازه هیچ کاری نمیدهد…
سلام دوست عزیز ، یک مقداری سوال شما مبهم هست. در خصوص این که اجازه هیچ کاری رو نمیده. ببینید محیط پیرامون ما مملو از انواع مختلف نویز هست !
در واقع نیازی به جدا کردن نیست؛ شما باید سیگنال صحیح را شناسایی کنید. درست مثل وقتی که در یک جمع شلوغ ، کسی اسم شما را صدا میزند ، در میان تمام سر و صدای محیط ، مغز الگوی اسم شما را شناسایی میکند؛ اما باز جانب احتیاط را رعایت میکند و جواب نمیدهد. منتظر میماند تا دوباره صدا را بشنود !
خوب اینجا هم دقیقا باید همین رفتار تکرار شود: یعنی اول اسم(الگوریتم ریموت) را درست تشخیص دهد که کد این کار رو انجام میده ، و در مرحله بالا تر ، چند بار یا حداقل دو بار اون الگوریتم درست تکرار بشه و این طور به راحتی میتونید بگید که ریموت بوده که کد رو فرستاده چراکه نویز قادر نخواهد بود دو بار پشت سر هم یک کد یونیک ایجاد کنه !