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

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

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

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

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

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

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

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

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

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

مدلاسیون ASK

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

 

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

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

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

مدار گیرنده ASK

 

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

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

ASK Regenerative Receiver

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

ASK super heterodyne

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

 

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

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

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

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

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

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

Otp Encoder

 

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

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

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

 

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

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

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

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

که درواقع مدت‌زمان لازم برای ارسال یک فریم داده را با مقدار ولتاژهای مختلف و مقاومت رزوناتورهای مختلف رسم کرده است. کمترین زمانی که این چیپ قادر به ارسال یک فریم از داده است (24 بیت به‌علاوه همزمانی) 1.34 میلی‌ثانیه است که با توجه به این‌که هر فریم شامل 128 پالس است طول هر پالس 10 میکروثانیه خواهد بود. پس اگر تایمر کانتر ما با فرکانس 1 مگاهرتز شروع به شمارش کند (1 میکروثانیه) قادر خواهیم بود طول یک پالس را با دقت بالایی اندازه بگیریم.

 

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

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

 

 

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

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

 


Sisoog_GNU_GCC_EV1527


Sisoog_CodeVision_EV1527


 

حمایت از Zeus ‌

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

1 نفر

پــــســنــدیـده انـد

توجه

Zeus ‌
Zeus ‌

زئوس هستم ساکن المپ

دیدگاه ها

177 دیدگاه

  • مجید کشمیری
    مجید کشمیری
    ۹ تیر ۱۴۰۱

    ببخشید دوباره مزاحم می شم من خیلی عجله دارم میشه این تنظیمات رو خودتون انجام بدید من هزینشو پرداخت کنم

    • Zeus ‌
      Zeus ‌
      ۹ تیر ۱۴۰۱

      ببخشید ولی برای من انجام چنین کاری مقدور نیست
      اگر پیدا کنید دقیقا کدام خط از برنامه باعث ربست میشود بهتر میشود مساله رو بررسی کرد.

  • مجید کشمیری
    مجید کشمیری
    ۹ تیر ۱۴۰۱

    سلام من از میکرو atmega32 با فرکانس 11.059200 استفاده می کنم و کدوژن هر بار کلید ریموت می زنم میکرو ریست می شه کثل اینکه واچ داگ عمل کنه

    • Zeus ‌
      Zeus ‌
      ۹ تیر ۱۴۰۱

      سلام دوست عزیز
      این که میگید هنگ میکنه میکنه برمیگرده به یه مشکل نرم افزاری
      مثلا میزان استک کم باشه یا چنین چیزهایی
      آیا توی برنامه از printf توی اینتراپت که استفاده نمیکنه
      تا جای ممکن باید سعی کنید توی اینراپت از دستوارات زمان بر استفاده نکنید

  • عرفان
    ۱۶ اردیبهشت ۱۴۰۱

    سلام وقت بخیر
    ببخشید من راجع به کتابخونه ای که نوشتید سوال داشتم.
    یجا دیفاین کردید که حداقل طول موج 200 میکرو ثانیه و حداکثرش 16000 میکروثانیه.من دلیلش رو متوجه نمیشم
    مگه حداقل طول موج طبق جدول زمانی نیست که 12V , 300k داشته باشیم؟ خب تو این حالت طول هر پالس 10 میکروثانیه میشه.
    و حداکثر مگه زمانی نیست که طبق جدول 4v,330k داشته باشیم؟خب تو این حالت طول هر پالس 23 میکروثانیه میشه که بلند ترین موجی که داریم همون 31 پالس هست . پس 713=23*31
    نمیدونم دارم کجا اشتباه میکنم لطفا راهنماییم کنید

    • Zeus ‌
      Zeus ‌
      ۲۱ اردیبهشت ۱۴۰۱

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

  • فرشاد
    ۲۹ مهر ۱۴۰۰

    با دروود فراوان خدمت شما

    فرمودید هر فریم 128 پالس هست اما هر فریم 24 بیت هست و تعداد پالس ها میشه 48 عدد

    ممکنه راهنمایی کنید من درست متوجه نشدم
    با تشکر

    • Zeus ‌
      Zeus
      ۱۴ آبان ۱۴۰۰

      خوب من دارم کلاک مصرف شده رو محاسبه میکنم
      هر صفر یا یک 4 کلاک (سه واحد صفر یک واحد یک یا برعکس) هست، همزمانی اولیه هم ۳۲ کلاک نیاز داره میشه به عبارتی
      ۲۴×۴ بعلاوه ۳۲ که میشه ۱۲۸

  • Amir Ali
    ۸ مهر ۱۴۰۰

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

  • علی
    ۷ خرداد ۱۴۰۰

    سلام
    در متن گفته شده طبق جدول 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 بیت).

    باز هم تشکر میکنم بابت مقاله بسیار خوب و کاربردی

    • IOElectro
      ۵ خرداد ۱۴۰۱

      کاملا درست، زمان داده شده در جدول موجود در دیتاشیت، تنها برای یک بایت داده است. به عنوان مثال 1.4ms بیانگر این است که برای ارسال یک بیت دیتای 0 باید پالس به مدت 1.4ms/4=350us یک شود و پس از آن مدت 350us*3=1050us صفر باشد. پس در این حالت، کوچکترین پالسی که باید اندازه گیری شود 350us است و زمان ارسال کل پکت 350us*128=44.8ms خواهد بود.

  • omid
    ۲۵ اردیبهشت ۱۴۰۰

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

  • محمد رضا
    ۹ اسفند ۱۳۹۹

    با سلام و تشکر از زحماتی که میکشید ومطالب آموزنده ومفید رو در اختیار بقیه قرار میدین . حقیقا کاملترین مباحث رو فقط در sisoog پیدا میکنم . قلبآ از شما تشکر و قدر دانی میکنم .
    زنده و پاینده باشید

    • Sisoog Os
      Sisoog Os
      ۱۰ اسفند ۱۳۹۹

      سلام دوست عزیز
      خیلی ممنون از نظر لطفتون

  • هادی نوروزی
    ۲۰ بهمن ۱۳۹۹

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

    • Zeus ‌
      zeus
      ۵ خرداد ۱۴۰۰

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

  • علی
    ۸ آذر ۱۳۹۹

    با سلام و خسته نباشید
    مطالب خیلی سودمند بود و بحث رو تخصصی باز کردید ممنونم از زحمات شما

  • saeed
    ۷ آبان ۱۳۹۹

    سلام و خسته نباشد متشکر بابت مطلب خوبتون .
    من اطلاعاتم کم هست در این زمینه . این 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 تا متوجه.
    سوال زیاد شدن شرمنده ! ممنون میشم اگر وقت داشتید راهنمایی کنید . باز هم تشکر .

    • Zeus ‌
      زئوس Zeus
      ۱۱ آبان ۱۳۹۹

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

      • saeed
        ۱۱ آبان ۱۳۹۹

        با تشکر بابت پاسخ گویی و پیشنهاد خوبتون .
        ممنون

  • محمد
    ۱۷ شهریور ۱۳۹۹

    سلام
    من یه ریموت کنترلر ساختم که تغذیه ev1527 در حد 5 ولت. برای همین با مقاومت ورودی بازی کردم تا به طول پالس برابر با ریموت های اماده برسم.
    برای این کار مجبور شدم مقاومت رو کمتر کنم. الان طول پالس با ریموت های آماده برابره . اما مشکلی که هست اینه که ریموت روی یه سری از مرکز کنترل ها ست نمیشه. به عنوان مثال روی مرکز کنترلرهای بتا خوب کار میکنه اما تو برندای مثل سیماران ست نمیشه. به نظرتون مشکل از کجا میتونه باشه؟

    • Zeus ‌
      زئوس Zeus
      ۱۸ شهریور ۱۳۹۹

      قطعا مشکل از مرکز کنتره 🙂
      منم قبلا ریموت ساختم ولی با میکروکنترلر و این مشکل رو دیدم روی مرکز کنترل های زیادی تست کردم و مشکلی نداشت ولی برخی از مرکز کنترل ها دچار مشکل بودن که من فکر میکنم مشکل اوناست 🙂
      البته فرکانس کاری هم دقت کنید منظور ۳۱۵ یا ۴۳۳ مگاهرتز هست بع غیر از این مشکلی نباید باشه

  • محمد
    ۲۰ مرداد ۱۳۹۹

    سلام شماتیک مدار رو قرار میدید اخه داخل پرتئوس پایه چهار وجود نداره و اگه خواسته باشیم از یه میکرو دیگه استفاده کنیم چجوری برنامه رو تغییر بدیم ممنون

    • Zeus ‌
      زئوس Zeus
      ۳۰ مرداد ۱۳۹۹

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

  • امیر
    ۱۹ مرداد ۱۳۹۹

    سلام
    طبق آزمایشی که من با لاجیک آنلایزر انجام دادم ، داده های مربوط به زمان موجود در دیتاشیت در واقع طول یک دیتا ( high or low ) می باشد و نه طول یک فریم . پس طول هر پالس 335 میکرو ثانیه می شود
    از طرفی طبق این ویدئو https://www.youtube.com/watch?v=PKowvbnIxso
    نهایت فرکانس ارسال 17 کیلو هرتز است که برابر با طول پالس 28 میکرو ثانیه و متناقض با طول پالس 10 میکرو ثانیه می باشد .
    البته شاید من دارم اشتباه می کنم

    • Zeus ‌
      زئوس Zeus
      ۳۰ مرداد ۱۳۹۹

      امم خوب الان شک کردم – باید این مساله رو بررسی کنم مساله مربوط به خیلی وقت پیشه و درست خاطرم نیست
      اجازه بدید بررسی میکنم – شاید من اشتباه نوشته باشم – ممنون برای توضیحتون

  • حسن
    ۲۷ تیر ۱۳۹۹

    با سلام و خسته نباشید بالاخره بعد کلی دردسر و فقط با کمک توضیحات جامع وکاربردیتون تونستم یه برنامه نسبتا خوب با بسکام بنویسم واقعا دستتون درد نکنه
    خواستم از شما تشکر کنم

    • Zeus ‌
      زئوس Zeus
      ۲۷ تیر ۱۳۹۹

      خواهش میکنم دوست عزیز
      ممنونم برای بازخورد خوبتون 🙂

  • شاهو
    ۱۳ تیر ۱۳۹۹

    سلام مرسی بابت مطالب خوبتون. اگر خروجی یکی از این ماژولای ASK رو به یک اسیلوسکوپ یا لاجیک آنالیزر وصل کنید می بینید که خروجیش بسیار ناپایدار است . حتی در حالتی که هیچ سگنالی وجود ندارد خروجی ماژول با فرکانس زیادی تغییر حالت میده . استفاده از وقفه خارجی برای راه اندازی این ماژول به نظرتون کار درستیه ؟ چون میکروکنترلر رو خیلی درگیر میکنه و در ثانیه صد ها بار وقفه فعال می شه . من از یک شرط برای صفر شدن خروجی بیشتر از 2 میلی ثانیه برای اجرای روتین دیکد استفاده می کنم روش خوبیه .

    • Zeus ‌
      زئوس Zeus
      ۱۶ تیر ۱۳۹۹

      سلام خواهش میکنم دوست عزیز
      با توجه به نوع میکروکنترلر مورد استفاده منطقی ترنی راه همینه ! – اونقدرا که فکر میکنید میکرو رو درگیر نمیکنه و زمان خیلی کمی هست – البته در نظر داشته باشید که فرکانس تاگل شدن ماژول ask اونقدرا هم زیاد نیست
      روش منطقی تر اینه که از مد کپچر تایمر استفاده بشه که خیلی بهینه تر عمل میکنه ولی با توجه به این که avr یک تایمر ۱۶ بیتی داره اگر بخوایم ازش استفاده کنیم ممکنه تو محصول واقعی با مشکل مواجه بشیم.

  • حمید
    ۱۲ تیر ۱۳۹۹

    با سلام و خدا قوت
    من یک گیرنده PC-JC02 بعلاوه یک برد آردینو UNO و یک ماژول رله 4 کانال دارم
    فقط هم با آردینو IDE کار کردم تا حالا.
    چطور میتونم از این برنامه استفاده کنم.

    • Zeus ‌
      زئوس Zeus
      ۱۶ تیر ۱۳۹۹

      سلام دوست عزیز
      کتایخانه نوشته شده برای GCC رو دانلود کنید و کد داخلش رو احتمالا اگر کپی کنید توی ادیتور آردوینو نباید مشکلی داشته باشه
      البته اگر آردوینو اونو یا نانو استفاده میکنید.

  • پیمان نادری
    ۱۳ خرداد ۱۳۹۹

    با سلام و درود من این مدار رو بستم و همین کد رو اپلود کردم به صورتی که دیتا گیرنده رو زدم به اینتراپت صفر و tx میکرو رو زدم به rx مبدل و داخل برنامه اردینو تو سریال منیتور زدم وقتی ریموت رو میزنم هیچ کدی به یوارتم نمیفرسته. ولی وقتی دیتا رو مستقیم میزنم به rx تو سریال مانیتور چیز الکی مینویسه مشکل کجاست؟

    • Zeus ‌
      زئوس Zeus
      ۴ تیر ۱۳۹۹

      سلام
      برای کار نکردن مدار دلایل مختلفی میتونه وجود داشته باشه ولی دم دستی ترین احتمال اول اینه که فیوز بیت های میکروکنترلر رو درست تنظیم نکرده باشید
      دوم اینه که فرکانس گیرنده و فرستنده یکی نبوده باشند و …

  • مجید
    ۱۹ اردیبهشت ۱۳۹۹

    با سلام و تشکر. فایلها باز نمیشه. روش خاصی داره؟

    • Sisoog Os
      Sisoog Os
      ۲۳ اردیبهشت ۱۳۹۹

      فایلها زیپ هشتند و مشکل خاصی برای باز شدن ندارند
      دقیقا مشکل شما چی هست؟

  • رمضان رسولی
    رمضان رسولی
    ۳۰ فروردین ۱۳۹۹

    سلام ضمن تشکر از توضیحات بسیار مفید شما
    بنظر در قسمتی از متن اشتباه وجود دارد
    1.حالت همزمانی: در این حالت اگر میزان یک بودن سیگنال مثلاً 1 میکروثانیه باشد، میزان صفر آن باید 30 میکروثانیه باشد.

    طبق عکس بالای متن میزان صفر آن باید 31 میکروثانیه باشد

    • Zeus ‌
      زئوس Zeus
      ۳۰ فروردین ۱۳۹۹

      بله کاملا حق با شماست
      متشکر برای دقت و تذکر تون
      متن رو اصلاح می کنیم.

  • hadi
    ۲۲ فروردین ۱۳۹۹

    خیلی ممنون بسیار عالی و جامع توضیح دادین

    • Zeus ‌
      زئوس Zeus
      ۲۳ فروردین ۱۳۹۹

      خواهش میکنم دوست عزیز 🙂

  • پرویر
    ۱۱ فروردین ۱۳۹۹

    سلام خیلی خوب بود بود مهندس واقعا عالی بود

    • Zeus ‌
      زئوس Zeus
      ۱۱ فروردین ۱۳۹۹

      خواهش میکنم دوست عزیز 🙂

  • حسین
    ۳ فروردین ۱۳۹۹

    دوست عزیزم سلام. خیلی ممنونم از توضیحاتتون، خیلی عالی بود
    من یک سوال داشتم، البته شاید یکم بی ربط باشه به متن. ما با یه مسئله ای مواجه هستیم، توی بعضی از ریموت ها از این کریستال های بزرگ استفاده می شه و توی بعضی ها از کریستال های SMD. خواستم یه مقایسه ای بین اینا داشته باشین، مثلا از نظر برد، مقاومت و …، کدومیکی بهتر هستند؟
    مرسی

    • Zeus ‌
      زئوس Zeus
      ۵ فروردین ۱۳۹۹

      خواهش میکنم دوست عزیز.
      smd یا dpi بودن کریستال مشخص کننده کیفیت نیست بلکه مدار و طراحی آنتن خیلی تو این مساله تاثیر داره و نمیشه صرفا از نوع قطعات استفاده شده در خصوص کیفیت اونها نظر داد.

  • علی
    ۱۱ اسفند ۱۳۹۸

    سلام مهندس. سه چهار روزه هر کاری میکنم جواب نمیگیرم…
    کریستال، تایمینگ پروژه، پروگرامر و خود میکرو رو عوض کردم…گیرنده هم به خوبی کار میکنه…. همه چی سالم…
    .
    بعد از کلی برسی متوجه شدم میکرو داخل تابع main میره دستورات اونجا رو اجرا میکنه ولی وارد تابع وقفه خارجی نمیشه!!!!!!!!
    یک پروژه ساده و پروگرام کردم دیدم وقفه خارجی میکرو کاملا سالمه….
    .
    نمیدونم کدویژن برای پروژه های بزرگ داره اذیت میکنه چون نسخه کرک هست یا… واقعا نمیدونم… کدویژن نسخه 3.12 استفاده میکنم.
    مهندس جان شما چی فکر میکنید… واقعا هیچ راه حلی به ذهنم نمیرسه…

    • Zeus ‌
      زئوس Zeus
      ۱۲ اسفند ۱۳۹۸

      امم من فکر نمیکنم مشکل از کدویژن باشه – فکر کنم همین پروژه رو با کدویژن هم گذاشتم
      احتمالا مشکل از جای دیگه ای باشه – چطور رفتن رو اینتراپت رو چک کردید ؟

      • علی
        ۱۴ اسفند ۱۳۹۸

        یه دستور خروجی گذاشتم تو اولین خط اینتراپت که وقتی بره توی تابع مثلا یه ال ای دی روشن بشه.
        اخه شنیدم نرم افزار های کرک ممکنه درست کار نکنن…
        دیدم این پروژه رو با اکلیپس گذاشتید ولی واقعا هیچی از دستورات متوجه نمیشم…

        • Zeus ‌
          زئوس Zeus
          ۱۴ اسفند ۱۳۹۸

          خوب بسیار عالی تنها در صورتی ممکنه فعال نشه که اینتراپت رو فعال نکرده باشید یا پالس نداشته باشید
          غیر از این حالت ها ممکن نیست !!‌ اگر لاجیک آنالایزر داشته باشید خیلی راحت تر میتونید بررسی کنید
          آره این که شنیدید کاملا درسته و هیچ تضمینی برای کارکرد صحیحش وجود نداره و بد تر از اون این که براش پشتیبانی هم نمی تونید داشته باشید.
          شما دقیقا همین کد رو میتونید توی اتمل استودیو کامپایل کنید 🙂
          + توی همین پروژه سمپل کدویژن هم گذاشتم البته

  • علی
    ۱۰ اسفند ۱۳۹۸

    با سلام و عرض ادب.
    تو هدر فایل تایمر تابع
    Read_Timer
    چرا ریجیستر SREG رو ذخیره کردید و وقفه رو غیر فعال کردید.
    میشه توضیحی بدید.

    • Zeus ‌
      زئوس Zeus
      ۱۰ اسفند ۱۳۹۸

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

  • امیر معین
    ۲ بهمن ۱۳۹۸

    سلام .ممنون که از قرار دادن اطلاعات این پروژه برای سایرین.
    میخاستم بدونم من میتونم با یک ریموت چند عدد گیرنده کد لرن رو کنترل کنم .میخام داخل هر کدام از کلید های روشنایی خونه یک گیرنده بزارم و بایک ریموت 12 کانال کد لرن کنترلشون کنم.

    • Zeus ‌
      زئوس Zeus
      ۵ بهمن ۱۳۹۸

      سلام خواهش میکنم دوست عزیز
      بله دقیقا امکانش هست و یه کوچولو باید کد رو عوض کنید – این کاری هست که خیلی از سیستم های اتوماسیون خانه دارن الان انجام میدن

  • حمیدرضا
    ۱۱ دی ۱۳۹۸

    سلام
    از اینکه این همه مطالب خوب و مفید در سایت قرار می‌دهید، سپاسگزارم.
    اگر بخواهم به جای EV1527 ، از میکروکنترلر برای ارسال 24 بیت کد استفاده کنم، میزان باودریت پایه TXD میکرو چقدر باید باشد؟

    • Zeus ‌
      زئوس Zeus
      ۲۱ دی ۱۳۹۸

      دو تا راه دارید این که اول سیگنال ev1527 رو شبیه سازی کنید !!!
      یا اگر میخواید از خود میکرو و ارتباط سریال استفاده کنید فکر میکنم باوود ۹۶۰۰ باوود مناسبی باشه

  • SAEED
    ۱۲ آذر ۱۳۹۸

    سلام مهندس عزیز،و سپاس فراوان بابت اشتراک چنین مطالبی
    میتونم بپرسم که چرا این کتابخانه رو نمیشه به stm32 خوروند،من هرکاری میکنم تو stm اصلا جواب نمیده
    در کل میخوام بدونم اصلا این کد طبق توابع hall قابل اجرا به روی stm هست؟

    • Zeus ‌
      زئوس Zeus
      ۱۳ آذر ۱۳۹۸

      خواهش میکنم دوست عزیز
      باید بگم که کلیت برنامه نوشته شده ربطی به کتابخونه های hal و spl نداره و به راحتی میتونید با هرکدوم از کتابخونه های مورد نظرتون راه اندازیش کرد
      تنها نکته هایی که باید رعایت کنید فرکانس تایمر و اینتراپت پایه است که باید به شکل صحیح پیاده سازی کرد.

      • SAEED
        ۱۶ آذر ۱۳۹۸

        ممنونم از پاسختون
        من تو روتین اینتراپت شرط بالا رونده بودن یا پایین رونده بودن رو به این شکل چک کردم که نمیدونم درسته یانه
        (if (GPIO_InitStruct.Mode==GPIO_MODE_IT_RISING
        }
        ;GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING
        .
        .
        .
        .
        .
        {

        • Zeus ‌
          زئوس Zeus
          ۱۷ آذر ۱۳۹۸

          سلام دوست عزیز چرا این کار پیچیده رو کردید 😐
          اینتراپت رو برای تغییر لول تعریف کنید و توی اینتراپت وای صفر یا یک بود رجیستر IDR رو بخونید

          • Saeed
            ۲۱ آذر ۱۳۹۸

            درسته؛پس چرا تو برنامه خودتون تو avr این کارو نکردین؟

            0
          • Zeus ‌
            زئوس Zeus
            ۲۳ آذر ۱۳۹۸

            امم خوب درست میگید
            این کد مربوط به سالها پیشه اگه الان باز نویسیش کنم اینطور که گفتم باز نویسی میکنم

            0
          • saeed
            ۲۳ آذر ۱۳۹۸

            خیلی ممنونم مهندس،اوکی شد

            0
          • Zeus ‌
            زئوس Zeus
            ۲۳ آذر ۱۳۹۸

            خواهش میکنم بسیار عالی 🙂

            0
  • همه چیز درباره ریموت کنترل‌های هاپینگ - سیسوگ - Sisoog
    ۱ شهریور ۱۳۹۸

    […] ریموت‌های کدفیکس و کدلرن برخوردار هستند. قبلاً در پست ریموت کدلرن و چگونگی دکد بررسی کردیم که ریموت‌های کدلرن و یا کد فیکس چطور کار […]

  • بهنام
    ۲۹ مرداد ۱۳۹۸

    سلام من این کد رو کامپایل کردم یک بار یه صورت تصادفی اجرا شد و جواب داد ولی بعدش دیگه نتمی شه لطفا بهم راهنمایی کنید ، روی میکروatmega 32 چه تغییرلتی باید روی سورس برنامه بدم ممنون .

    • Zeus ‌
      زئوس Zeus
      ۱ شهریور ۱۳۹۸

      سلام
      تنها چیزی که به ذهنم میرسه اینه که فرکانس اسیلاتور رو درست تنظیم نکرده باشید ؛ اگر نه تا اونجا که اطلاع دارم نباید برای اجرا شدن روی atmega32 مشکلی داشته باشه
      البته فکر کنم پایه ورودی اینتراپن روی اتمگا 32 متفاوت باشه

      • بهنام
        ۶ شهریور ۱۳۹۸

        ممنون از جوابتون من از کریستال ۱۲مگاهرتز خارجی استفاده می کنم و تنظیمم کردم ،الان جواب داد ولی خود ب خود رسیو میشه مثل اینکه چون من بازر هم دارم برای اینکه چک کنم رسیورم عملکرد داره گاهی خود ب خود بوق میزنه

        • Zeus ‌
          زئوس Zeus
          ۱۰ شهریور ۱۳۹۸

          خوب بسیار عالی – بله این که می فرمایید کاملا صحیح و طبیعی ایت گاهی نوز های محیطی چنین شرایطی ایجاد می کنند ؛ برای برطرف شدن این مساله هم لازمه که دو کد ریموت رو مثلا در کمتر از یک ثانیه دریافت کنید و با هم مطابقت بدید
          در صورت یکسان بودن اونها رو ولید در نظر بگیرد به همین سادگی

  • احمدرضا
    ۲۲ مرداد ۱۳۹۸

    عرض سلام وادب
    /”با توجه به این‌که هر فریم شامل 128 پالس است”
    از کجا متوجه شدید، هر فریم 128 دارد؟

    • Zeus ‌
      زئوس Zeus
      ۲۶ مرداد ۱۳۹۸

      سلام دوست عزیز
      خوب ساده است ؛ برای ارسال 0 یا یک منطقی نیاز به 4 پالس است (یک پالس یک و سه پالس 0 برای ارسال صفر منطقی و برعکسش برای یک منطقی ) ؛ در کد ارسالی 24 بیت داده را نیاز است که ارسال کنیم ؛ 24 در 4 می شود 96 پالس ؛ preamble هم که 32 پالس نیاز دارد که مجموعا می شود 128 پالس 🙂

  • شیوا
    ۳۰ تیر ۱۳۹۸

    سلام ببخشید میشه یه مطلب هم درباره ریموت بلوتوثی بزارید؟
    ریموت های بلوتوثی که از هم کپی میشن ای سیشون فرق داره با ev1527?

    • Zeus ‌
      زئوس Zeus
      ۷ مرداد ۱۳۹۸

      ریموت بلوتوثی – پیشنهاد خوبیه !
      در واقع توی ریموت های بلوتوثی یه بخش گیرنده هم وجود داره که کار کپی کردن کد رو بر عهده داره و برای ارسال فکر میکنم سیگنال رو شبیه سازی میکنه و به همین دلیل نیازی به ev1527 نداره

  • صالح
    ۹ تیر ۱۳۹۸

    با سلام من از پوشه GCC قسمت دیباگ فایل هگزو پروگرم مسکنم این خطا رو میده
    GETTING ISP PARAMETER …SD=0X05 …OK THE SPECIFIEND FILE IS NOT A VALID INTEL HEX FILE

  • صالح
    ۹ تیر ۱۳۹۸

    با سلام من از فایل GCC از قسمت دیباگ هگزو پروگرم میکنم این خطا رو میده
    GETTING isp parameter …SD=0X05…OK THE SPECIFIEND FIL IS NOT A VALID INTEL HEX FILE مشکل چیه با تشکر

    • Zeus ‌
      زئوس Zeus
      ۹ تیر ۱۳۹۸

      امم از چه پروگرامر و میکرویی استفاده میکنید ؟

  • پژمان
    ۲۱ خرداد ۱۳۹۸

    سلام مهندس توی کانفیگ پروژه روی 8MHZ کلاک داخلی تنظیم شده آیا درسته؟؟

    • Zeus ‌
      زئوس Zeus
      ۲۲ خرداد ۱۳۹۸

      سلام دوست عزیز
      بله اونطور که خاطرم هست روی 8 مگ هست – خارجی و داخلی بودنش زیاد تفاوت نداره

  • صالح
    ۲۳ اردیبهشت ۱۳۹۸

    من با spi پروکرم میکنم

  • صالح
    ۲۳ اردیبهشت ۱۳۹۸

    با سلام من فایل هگزو از پوشه دیباگ با اتمل استادیو پروگرم میکنم ولی کلی خطا میگیره وپروگرم نمیشه من ی عکس از روی اون میفرستم به ادمین تلگرام مشاهده کنید ببینید مشکل چیه راهنمایی کنید با تشکر از شما

    • Zeus ‌
      زئوس Zeus
      ۲۴ اردیبهشت ۱۳۹۸

      برای پروگرام کردن فایل هگز که نباید خطایی بگیره اخه ؛ احتمالا مشکل جای دیگه ای است
      ممکنه فیوز بیت ها رو تغییر داده باشید به نحوی که دیگه پروگرامر میکرو رو شناسایی نکنه

  • شیوا
    ۱۴ اردیبهشت ۱۳۹۸

    سلام ممنون از مطلب خوبتون عالی بود
    یه سوال داشتم اینکه
    من می خوام ریموت رو خودم بسازم و گیرنده دارم اگه ولتاژ ریموت تلرانس داشته باشه زمان بندی پالس ها تغیر می کنه درسته؟ نمی خوام از باطری استفاده کنم و می خوام که از رگولاتور استفاده کنم نظرتون چیه؟
    ساخت ریموت که ملاحضه ی RF خاصی نداره داره؟ جز طراحی انتن؟

    • Zeus ‌
      زئوس Zeus
      ۱۵ اردیبهشت ۱۳۹۸

      سلام دوست عزیز ؛ خواهش میکنم
      خوب البته اینطور هست که و اون هم به دلیل Rc بود اسیلاتور چیپ هستش ؛ ببینید نکته ای که مهمه اینه که نسبت پالس ها درست باشه؛ که قائدتا درسته و نباید مشکلی پیش بیاد ؛ پس فکر میکنم نگران این موضوع نباشد ؛
      جز بحث RF بحث مهم دیگه ای نیست که بخواید نگرانش باشید.
      برای شروع میتونید از فرستنده های ASK که توی بازار هست الهام بگیرید.

      • شیوا
        ۱۸ اردیبهشت ۱۳۹۸

        سلام مجدد ممنون که جواب دادید
        مهندس منظورم اینه که چون من می خوام از سوییچ ماسفت به جای کلید ها استفاده کنم و چون یه افت ولتاژی هم روی ماسفت می افته فک کردم مثلا ولتاژ 6 ولت بشه 5.8 ولت ممکنه زمان بندی ها عوض بشه نظرتون چیه؟

        • Zeus ‌
          زئوس Zeus
          ۱۹ اردیبهشت ۱۳۹۸

          سلام خواهش میکنم
          بببیند اگر دارید از ماسفت استفاده میکنید و اگر ماسفت رو توی اشباء کامل ببرید ؛ مقاومتش در حد چند میلی اهم پایین میآد و اصولا ولتاژ خیلی کمی روی سورس و درین افت خواهد کرد.
          ببخشید ولی من درست متوحه نشدم که میخواید چکار کنید.

  • سعید
    ۱۰ اردیبهشت ۱۳۹۸

    بسیار عالی،با تشکر از زحمات شما.

    • Nasim Hematian
      electronic girl
      ۱۱ اردیبهشت ۱۳۹۸

      سلام. خواهش میکینم
      ممنون از شما

  • صالح
    ۸ اردیبهشت ۱۳۹۸

    با سلام فایل هگز رو که باز میکنم کلی ارور میده وفایل هگز هم همینطور و پروگرم نمیشه با تشکر

    • Zeus ‌
      زئوس Zeus
      ۹ اردیبهشت ۱۳۹۸

      ببخشید متوجه نشدم ؛ از چیه فایل هگز خطا میگیره ؟ ، فایل هگز رو پروگرام میکنید کار میکنه
      اگر منظورتون سورس کده ؛ خوب با چه نرم افزاری باز میکنید ؟

  • صالح
    ۲ اردیبهشت ۱۳۹۸

    با سلام این دو تا فایل هیچ فایل هگزی نداره که بخام پروگرام کنم دوما کدوم این فایلها برای atmega8 هست با تشکر

    • Zeus ‌
      زئوس Zeus
      ۳ اردیبهشت ۱۳۹۸

      سلام دوست عزیز
      فایل مربوط به کتابخانه GCC رو دانلود کنید ؛ توی پوشه Debug ، فایل هگز پروژه موجود هست.

  • سید علی پورطباطبایی
    ۲۵ فروردین ۱۳۹۸

    سلام
    ممنون از شما مهندس بابات راهنمایی هاتون

    مهندس ۲ سوال

    روش تشخیص فرکانس کاری این گیرنده ها چیه ؟
    مثلا روی بعضی هاش روی کریستالش نوشته jmr6.7458 ?

    و اگر مهندس بخوایم توی یه برد ۲ تا فرکانس کاری رو به صورت همزمان با یه میکرو داشته باشیم چه کار کنیم؟
    یعنی هم با ریموت ۳۱۵ کار کنیم هم با ۴۳۳

    • Zeus ‌
      زئوس Zeus
      ۲۶ فروردین ۱۳۹۸

      برای تشخیص فرکانس گیرنده میتونید به فرکانس کریستالش دقت کنید 6 مگاهرتز برای 433 و 4 مگاهرتز برای 315 مگاهرتز هست
      برای این که دو تا فرکانس رو دریافت داشته باشید حتما باید از دو عدد ماژول استفاده کنید .

      • سید علی پورطباطبایی
        ۲۶ فروردین ۱۳۹۸

        مهندس برای داشتن دو تا فرکانس با داشتن ۲ گیرنده در یک میکرو چه باید کرد؟
        میشه پایه دیتا هر دو گیرنده رو به پین ۴ میکرو که در این پروژه استفاده شده برای داشتن هر دو فرکانس استفاده کرد؟(به هم متصل کردن پایه هر دو گیرنده مشکلی ایجاد نمیکنه؟)

        یا اگر نمیشه چه راهکاری پیشنهاد میدید؟

        • Zeus ‌
          زئوس Zeus
          ۲۷ فروردین ۱۳۹۸

          خوب منطقی ترین راه اینه که از دو پایه اینتراپت استفاده کنید !
          نه مکانش نیست که پایه گیرنده ها رو به هم متصل کنید ؛ چون باعث ایجاد اختلال میشه

  • ali
    ۲۰ فروردین ۱۳۹۸

    سلام. ممنون از توضیحات کاملتون. فایل ها دانلود نمیشوند.
    51.55 درصد گیر میکنه و خطا میده.
    لطفا راهنمایی بفرمایید.

    • Zeus ‌
      زئوس Zeus
      ۲۰ فروردین ۱۳۹۸

      خواهش میکنم من چند بار سعی کردم برای دانلود و هر چند بارش بدون مشکل دانلود شد ؛ شما میتونید از GitHub سیسوگ این سورس کد رو نیز دریافت کنید.
      این آدرس GitHub هستش

  • سید علی پورطباطبایی
    ۱۹ فروردین ۱۳۹۸

    سلام خدمت شما و تشر بابت زحمات

    مهندس منظور از این کدها چیه:؟
    code[0]f
    code[1]f
    code[2]f
    در کد 2 ما باید دنبال آدرس کلید زده شده باشیم؟
    آخه کد 2 یه متغییر حاوی 6 بیته!
    یه سوال دیگه هم اینکه مثلا ریموت های کد لردن کد های کلید های فشرده شدشون همیشه 4 کد ثابته؟ فق ممکنه جای کلیداشون فرق کنه؟

    • Zeus ‌
      زئوس Zeus
      ۱۹ فروردین ۱۳۹۸

      سلام دوست عزیز ؛ همونطور که توی پست توضیح دادیم ؛ ریموت یک کد 24 بیتی رو ارسال میکنه ؛ خوب توی میکرو کنترلر ما متغییر 24 بیتی نداریم پس دو راه وجود داره یکی این که داده ها رو توی یه متغییر 32 بیتی ذخیره کنیم که با توجه به 8 بیتی بودن میکروکنترلر ؛ احتمالا مقداری کار پردازشی خواهد برد یا این که در 3 متغییر 8 بیتی این کار رو انجام بدیم و این همون کاری هست که ما کردیم
      بله درست متوجه شدید ؛ مقدار کلید ها در 4 بیت ابتدایی متغییر code[2]f ذخیره می شوند.
      بله امکان داره داری کلید ها جابجا بشه که بسته به ریموت متغییره !

  • حمید
    ۱۹ فروردین ۱۳۹۸

    سلام
    من نمیتوانم دانلود کنم.لطفا راهنمایی بفرمایید.

    • Zeus ‌
      زئوس Zeus
      ۱۹ فروردین ۱۳۹۸

      سلام دوست عزیز
      در اتنهای پست بخشی برای دانلود وجود داره به اسم ” دانلود سورس کد ریموت ” که میتونید کتابخانه ها رو هم برای کدویژن و هم برای GCC دانلود کنید.

  • reza
    ۲۱ اسفند ۱۳۹۷

    سلام مهندس جان مطلب خوبی بود استفاده کردیم …126 پالس رو کجا زده آیا در داکیومنت ماژول تعداد پالس در فریم زده شده است….

    • Zeus ‌
      زئوس Zeus
      ۲۱ اسفند ۱۳۹۷

      سلام دوست عزیز ؛ خوب اول این که اشتباه نوشته بودم 126 – درستش 128 پالسه ؛ خوب تعداد این پالس ها اینطور به دست میآد که 24 بیت آدرس و وضعیت کلید هست ؛ برای تعیین هر بین 4 پالس لازمه که میشه 96 پالس ؛ سینک هم زمانی هم که 32 تا پالس لازم داره که میشه عدد 128 پالس 🙂
      + مطلب اصلاح شد.

  • سجاد
    ۱۹ دی ۱۳۹۷

    سپاس.مطلب بسیار با ارزشی بود.

    • Zeus ‌
      زئوس Zeus
      ۱۹ دی ۱۳۹۷

      خواهش می کنم دوست عزیز

  • رضا
    ۸ دی ۱۳۹۷

    سلام دوست عزیز
    ضمن تشکر از شما
    میخواستم یه راهنمایی بکنید که چطور ریموت هارو در حافظه eeprome ذخیره کنم و در اصل کدام متغییر را باید ذخیره کنم؟
    یه کم گیج شدم، لطفا راهنماییم کنید

    • Zeus ‌
      زئوس Zeus
      ۹ دی ۱۳۹۷

      سلام دوست عزیز
      قبلا توضیح دادیم که هر ریموت 24 بیت داده ارسال میکنه ؛ 4 بیت کم ارزش وضعیت کلید ها رو نمایش میده و 20 بیت پر ارزش تر کد یونیک خود ریموت هست ؛ برای این که بعدا بتونیم مجداا ریموت رو شناسایی کنیم نیازه که این 20 بیت رو ذخیره کنیم از اونجایی که متغییر 20 بیتی وجود نداره ما داده ها رو توی متغییر های 32 بیتی ذخیره میکنیم به همین سادگی

  • عبدالله
    ۱۰ آذر ۱۳۹۷

    اگر کد ارسالی یک ریموت همیشه یکی باشه و کسی یک گیرنده بگذارد و کد را دریافت و همان را تکرار کند در این صورت امنیت این کد به چیست؟ یعنی به همین راحتی میشود مثلا درب منزل کسی را باز کرد؟

    • Zeus ‌
      زئوس Zeus
      ۱۲ آذر ۱۳۹۷

      بله دقیقا ، به همین راحتی میتوان این مدل ریموت ها رو هک کرد دوست عزیز ؛ به همین دلیل ریموت های هاپینگ به وجود اومدن
      قبلا در مورد ریموت های هاپینگ مقاله ای نوشتم که میتونید از سیسوگ مطالعه اش کنید.
      همه چیز در مورد ریموت هاپینگ

  • امیر
    ۹ آذر ۱۳۹۷

    دست شما درد نکنه امیدوارم هر روز پیشرفت داشته باشید

  • پورطباطبایی
    ۶ آذر ۱۳۹۷

    سلام
    اگر لطف کنید کد ها را دوباره آپلود کنید ممنون میشم
    مثل اینکه مشکلی ایجاد شده

    • Zeus ‌
      زئوس Zeus
      ۶ آذر ۱۳۹۷

      هر دو فایل چک شدند مشکلی مشاهده نشد ؛ در دانلود فایل ها مشکل دارید ؟

  • ايوب
    ۲۸ آبان ۱۳۹۷

    سلام مهندس
    ممنونم از مطالبتون.
    من برنامه Avr دانلود كردم ولى بوشهEEPRAM رو نداره ميشه يبار ديكه لطف كنيد توى تلكرام سوري برنامه رو واسم بفرستيد خيلي خيلي ممنون

    • Zeus ‌
      زئوس Zeus
      ۲۸ آبان ۱۳۹۷

      سلام دوست عزیز
      چزا فکر میکنید باید پوشه EEPROM وجود داشته باشه ؟ سورس رو چک کردم درسته و چیزی کم نداره

      • ایوب
        ۳۰ آبان ۱۳۹۷

        سلام مهندس
        ممنون
        فقط اگه مشه در مورد حالتهای همزمانی
        یک منطقی و صفر منطقی یه توضیحی بدید

        • Zeus ‌
          زئوس Zeus
          ۱ آذر ۱۳۹۷

          سلام دوست عزیز
          در واقع برای تشخص هر کدام از حالت ها تنها کافی است که مدت زمان یک بودن به صفر بودن سیگنال را اندازه گیری کنید ؛ در واقع یعنی نسبت را به دست بیاورید.

          • ايوب
            ۳ آذر ۱۳۹۷

            سلام مهندس جان خدايي من اين حالت همزمانى متوجه نميشم خواهشا اكه كتابى تو اين زمينه هست معرفى كنيد يا اينكه بزكوارى كنيد خيلي ساده توصيح بديد ممنون ممنون

            0
          • Zeus ‌
            زئوس Zeus
            ۵ آذر ۱۳۹۷

            امم والا کتابی که در این خصوص وجود نداره ؛ منوال خود چیپ در همین حدی که توضیح دادم اشاره کرده ؛ اگر به شکل دقت کنید به خوبی مشخص هست ؛ متوجه نمیشم کدوم بخشش بررای شما نامفهوم هست

            0
          • ايوب
            ۸ آذر ۱۳۹۷

            مهندس عزيز واقعا ممنونم كه اينقدر شكيبا هستيد ولي من تو عكس هيجى نفهميدم بخدا خيليم هم خنك نيستمم فقط ميخوام بفهمم نه كه كبي كنم حالا اكه ميشه بفرماييد رابطه اين نسبتها با ولناز باطري جيه و دوم اينكه نسبتهار و يكم دقيقتر توضيح بديد
            خيلي خيلى خيلى شرمنده و ممنون

            0
          • Zeus ‌
            زئوس Zeus
            ۱۲ آذر ۱۳۹۷

            سلام دوست عزیز ؛ خواهش میکنم ؛
            نسبت ها کاری به ولتاژ باتری نداره و همیشه ثابت خواهند بود ؛ اما چیزی که به ولتاژ باتری مربوط میشه فرکانس کلاک آیسی و در نتیجه دوره زمانی تکرار کد ارسال ریموت هست ؛ اما چرا این موضوع به ولتاژ باتری مربوط میشه ؛ خیلی ساده است چون آیسی از نوسان ساز RC استفاده میکنه که خیلی وابسته است به ولتاژ ! اگر از نوسان ساز کریستالی استفاده میشد وابستگی به ولتاژ از بین می رفت ! خوب بگذریم اما لازمه که بدونید این نسبت ها بهم نمیخوره تنها چیزی که ممکنه اتفاق بیفته اینه که پالس ها کوتاه تر یا کشیده تر بشن

            0
      • ايوب
        ۱۹ آذر ۱۳۹۷

        مهندس عزيز سلام شرمنده بزركوارى كنيد تو دستور زير منظور از T1و T2 جيه ؟
        T1> min_pulse_len
        T2<(T1*2(

        • Zeus ‌
          زئوس Zeus
          ۲۳ آذر ۱۳۹۷

          سلام دوست عزیز
          در واقع زمان یکی بیانگر زمان یک بودن و دیگری بیانگر مدت زمان صفر بودن یک سیکل هست !

  • مجید ملوندی
    ۱۹ آبان ۱۳۹۷

    درود بر شما.
    تشکر بابت به اشتراک گذاشتن مطالب زیبا
    موفق و پیروز و سربلند باشید

    • Zeus ‌
      زئوس Zeus
      ۱۹ آبان ۱۳۹۷

      متشکرم دوست عزیز
      متشکر از نظر دل گرم کننده شما

  • Milad
    ۱ آبان ۱۳۹۷

    سلام ممنون از اطلاعات خوبتون یک سوال داشتم خدمتتون در ریموت های بلوتوثی که بصورت روبروی هم قرار دادن کد هاشون گپی میشه از چه آی سی استفاده میکنن ؟ مثلا شما در ریموت لرن فرمودید از آی سی EV1527 استفاده میشه برای اون ریموت ها چه آی سی هستش؟

    • Zeus ‌
      زئوس Zeus
      ۲ آبان ۱۳۹۷

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

  • hamid
    ۳۰ مهر ۱۳۹۷

    سلام و خسته نباشید خدمت شما
    من برنامه نویسیم زیاد خوب نیست امکانش هست کدشو برام توضیح بدید که چجوری این مدار عمل لرن ریموت انجام میده؟

    • Zeus ‌
      زئوس Zeus
      ۲ آبان ۱۳۹۷

      سلام و درود
      ببینید برای ذخیره کد هر ریموت اول اونو به یع عدد 4 بایتی تبدیل میکنیم یعنی فشرده ترین حالت ممکن ؛ بعد داخل EEPROM ذخیره میکنیم کد رو ، به همین سادگی !
      اما چطور چند ریموت رو ذخیره میکنیم ، به این صورت که در ایتدا کل حافظه EEPROM رو با مقدار FF پر میکنیم ، برای ذخیره اولین چهار بایتی که FF باشند رو پیدا میکنیم و کد ریموت رو ذخیره میکنم ، و این روند ادامه پیدا میکنه تا کل حافظه EEPROM پر بشه.

  • hamid
    ۲۶ مهر ۱۳۹۷

    سلام و خسته نباشید خدمت شما و همکارانتون
    یه سوال داشتم من برنامه کد ویژن دیدم به این تابع برخوردم چرا +48 میشه؟
    putchar(Remode_Data[i]+48);

    • Zeus ‌
      زئوس Zeus
      ۲۷ مهر ۱۳۹۷

      سلام دوست عزیز ؛ ببینید کارکتر ‘0’ با عدد صفر متفاوت هستند ؛ برای نمایش کارکتر 0 باید عدد 48 ارسال شود و برای نمایش عدد 1 باید 49 و … تا عدد 9 همین روال پشت سر هم ادامه پیدا میکنه ؛ برای جزییات بیشتر به جدول Ascii کد کارکتر ها مراجعه کنید.
      خوب حالا برای این که اعداد توی ترمینال درست نشان داده شوند با توجه به جدول Ascii نیازه که اونها رو با عدد 48 جمع کنیم که اگر عدد صفر بود معادل اسکی اون یعنی 48 به ترمینال اسال بشه و کارکتر ‘0’ به نمایش در بیاد.

  • مجتبى
    ۱۰ شهریور ۱۳۹۷

    سلام من ريموت دزدگير رو گم كردم از كجا بفهمم گيرنده دزدگيرم فركانسش چيه؟به ريموت آوردم بازش كردم روى كريستاليش ١٣٣١٥ نوشته بود با ريسيور دزدگير مچ نشدممنون ميشم راهنماى كنيد

    • Zeus ‌
      زئوس Zeus
      ۱۰ شهریور ۱۳۹۷

      سلام دوست عزیز
      دزگیر شما احتمالا باید ماژول گیرنده RF داشته باشه – مثل همون چیزی که توی تصاویر این پست موجوده ، معمولا روی گیرنده ها یه کریستال هست که مقدار اون کریستال فرکانس کاری رو مشخص میکنه ! به همین سادگی
      در ضمن 315 که روی کریستال ریموت درج شده – نشون میده که فرکانس کاری ریموت شما احتمالا 315 مگاهرتز هست ، یه غیر از 315 مگاهرتز معمولا ریموت ها در فرکانس 433 مگاهرتز نیز موجود هستند
      در ضمن تنها فرکانس ریموت برای خرید ریموت کافی نیست ، ریموت ها انواع مختلفی دارن به لحاظ پروتکل که ممکنه هاپینگ باشه ، معمولی باشه و …
      اگر مدل دزگیر رو بگید شاید بشه بهتر در این مورد کمک کرد

  • ali
    ۲۹ مرداد ۱۳۹۷

    سلام باید به نوع ترانزیستوری 55 ولت برق بدیم؟؟؟

    • Zeus ‌
      زئوس Zeus
      ۲۹ مرداد ۱۳۹۷

      سلام
      سوالتون رو متوجه نشدم دوست عزیز

  • محمد
    ۳۰ تیر ۱۳۹۷

    با سلام
    ممنون از اطلاعات ارزشمندتون
    مدار را مونتاژ کردم و برنامه رو پروگرم کردن . ولی بعضی از اوقات کار می کنه بعضی اوقات نه. یک ال ای دی به خروجی ماژول وصل کردم که موقع فشاردادن ریموت چشمک میزنه. همه چیزی رو چک کردم ظاهرا مشکلی نیست اما گاهی اوقات کار نمی کنه

    • Zeus ‌
      زئوس Zeus
      ۳۱ تیر ۱۳۹۷

      سلام دوست عزیز ، چرا از ورژن جدید این کتابخونه استفاده نکردید ؟
      این کار نکردن میتونه دلایل مختلفی داشته باشه ، یکی از عمده ترین دلایلش عدم زمان بندی درست ریموت مروبط است ، که غالبا توی تشخیص بیت شروع اتفاق می افته و برای اینه که ما برای ساده تر شدن زمان ها رو محدود کردیم ، ممکنه ریموت شما با فاصله گرفتن از گیرنده از این زمان بندی خارج بشید ، در ضمن از چه نوع گیرنده ای استفاده کردید ؟

  • سعید
    ۲۸ تیر ۱۳۹۷

    بسیار ممنون.فقط زمانیکه ما این اطلاعاتو دریافت کردیم چطور بفرستیم؟

    • Zeus ‌
      زئوس Zeus
      ۳۰ تیر ۱۳۹۷

      خواهش میکنم دوست عزیز
      چرا باید بخواید دوباره بفرستید ؟

      • سعید
        ۳۰ تیر ۱۳۹۷

        خب وقتی ما کد ریموتو بگیریم،اصطلاحا لرن کنیم باز باید اینو واسه گیرنده بفرستیم.وقتی ما یک کانال از ریموتو لرن کنیم بقیشم لرن میشن؟

        • Zeus ‌
          زئوس Zeus
          ۳۰ تیر ۱۳۹۷

          آها یعنی شما میخواید چیزی شبیه ریموت های بلوتوثی بسازید ؟
          ببینید بعد از خودن کد یه کلید از ریموت شما در واقع کد ریموت رو دارید میشه به بیانی گفت هر 4 تا رو ، اگر مقاله ببینید گفتیم که کد ارسالی 24 بیت هست که 20 بیت اول ثابت است و برای همه کلید های اون ریموت تکرار میشه و 4 بیت آخر وضیعت کلید ها رو گزارش میکنه !
          برای ارسال مجدد کد باید سینگال رو شبیه سازی کنید

          • سعید
            ۳۰ تیر ۱۳۹۷

            بسیار عالی.
            متشکر از پاسختون

            0
          • Zeus ‌
            زئوس Zeus
            ۳۰ تیر ۱۳۹۷

            خواهش میکنم دوست عزیز 🙂
            موفق باشید
            اگر سوالی دارید حتما مطرح کنید

            0
  • سینا
    ۲۹ خرداد ۱۳۹۷

    متشکر برای این مطلب کاربردی و البته بسیار کامل

    • Zeus ‌
      زئوس Zeus
      ۲۹ خرداد ۱۳۹۷

      سلام
      خواهش میکنم دوست عزیز 🙂

  • مسعود
    ۱۲ اردیبهشت ۱۳۹۷

    “” با توجه به این‌که هر فریم شامل 126 پالس است طول هر پالس 10 میکروثانیه خواهد بود “”

    طول فریم از کجا بدست اومده

    • Zeus ‌
      زئوس Zeus
      ۱۵ اردیبهشت ۱۳۹۷

      جدول بالا رو نگاه کنید ، زمان کل فریم رو برای ولتاژ و مقاومت رزوناتور نوشته

  • مبین
    ۹ فروردین ۱۳۹۷

    سلام و خسته نباشید خدمت شما
    از مطالب اموزنده و کاربردی که در اختیار عموم میزارین بسیار ممنونم
    اگه امکانش هست این سورس رو به زبان بیسیک (بسکام)هم اضافه کنید.
    با تشکر

    • Zeus ‌
      زئوس Zeus
      ۱۵ فروردین ۱۳۹۷

      سلام و درود دوست عزیز
      متاسفانه تسلط چندانی به بیسکام ندارم و برای تبدیل اول باید بیسکام رو یادبگیرم :/
      ولی اگر فرصتی پیش اومد حتما این کار رو انجام میدم

  • محمدمهدی
    ۹ آذر ۱۳۹۶

    با عرض سلام و تشکر فراوان بابت مطلب خیلی خوبتون
    برای افزایش برد این ارتباط چیکار باید کرد ؟
    ریموت من کد لرن ، گیرنده هم rxb22 هستش
    حدودا بیست یا سی متر جواب میده حداکثر
    آنتن هم زدم به گیرنده

    • Zeus ‌
      زئوس Zeus
      ۲۲ آذر ۱۳۹۶

      شرایط تست رو باید دید ، ولی تا اونجایی که اطلاع دارم برد این نوع ریموت ها همین حدود است شاید تا 50 متر

  • dave
    ۱۶ آبان ۱۳۹۶

    سلام، خیلی ممنون متن بسیار مفیدیه! یه سوال داشتم
    #define Min_Pulse_Len 200 /* In us */
    #define Max_Pulse_Len 16000 /* In us*/
    این زمان ها رو از کجا بدست اوردید؟

    • Zeus ‌
      زئوس Zeus
      ۱۸ آبان ۱۳۹۶

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

  • علی
    ۱۴ شهریور ۱۳۹۶

    سلام
    ممنون از مطلب مفیدتون!
    من یه atmega 8a خریدم و برنامه رو روش پروگرم کردم.چه با کریستال خارجی ، چه با کریستال داخلی جواب نداد ( 8مگاهرتز)
    به نظرتون مشکل میتونه از کجا باشه!
    اینم بگم که من وقتی یه LED مستقیم به پایه دیتا ماژول متصل کردم و کلید ریموت رو فشار دادم روی LED تاثیر گذاشت (یعنی روشن و خاموش شد) آیا این موضوع میتونه گواه آن باشد که فرکانس فرستنده با فرکانس ماژول گیرنده برابر است؟! (همچنین وقتی LED رو به ماژول متصل کردم، LED روشن بود و چشمک میزد ولی وقتی کلید ریموت رو فشار میدادم با نور بیشتری چشمک میزد. مگه نباید LED کاملا خاموش باشد؟ مگر ماژول گیرنده هنگامی که ارسالی صورت نمیگیرد نباید در دیتا خروجی صفر داشته باشد؟)
    توی ریموت فرستنده یه کریستال 433 مگاهرتز وجود داره! اما نمیدونم چطور باید فرکانس گیرنده رو تسشیص بدم!؟
    ماژول گیرنده ای که استفاده میکنم ماژول pc-jc02 هست! (روی کریستال آن نوشته 6.7458) آیا این ماژول میتونه این کار رو به درستی انجام بده؟ (بدون آنتن) ماژول پیشنهادی شما کدام است؟!
    آیا میشه که دیتا ارسالی از فرستنده (با آیسی ev1527) کمتر یا بیشتر از 24 بیت باشه؟! یعنی با اینکه آیسی یکسان است اما دیتا ارسال متفاوت باشد؟ یا خیر حتما 24 بیت است؟!
    به نظر شما مشکل چیست؟
    با تشکر

    • Zeus ‌
      زئوس Zeus
      ۱۹ شهریور ۱۳۹۶

      سلام درود دوست عزیز
      اگر کریستال ماژول شما 6.7458 هست یعنی فرکانس ماژول شما 433 مگاهرتز هست
      اگر LED رو به خروجی ماژول وصل میکنید و بعد فشردن کلید ریموت چشمک زدن LED قائده مند و مرتب میشه یعنی فرکانس گیرنده و فرستنده با هم یکی است
      در مورد atmega8 هم سری a و غیر a فرقی نمی کنه و باید با هر دو به صورت صحیح کار کنه
      شما مطمئن هستید که فیوز بیت های میکرو رو درست تنظیم میکنید ؟ ، وقتی میکرو رو روشن میکنید روی پورت سریال چیزی میفرسته ؟

  • مجتبی
    ۱۳ مرداد ۱۳۹۶

    با تشکر از مطالب و سایت بسیار خوبتون

    • Sisoog Os
      Sisoog Os
      ۱۴ مرداد ۱۳۹۶

      متشکر از حسن توجه شما

  • هنرفر
    ۲ مرداد ۱۳۹۶

    سلام
    من میخوام ریموت کدفیکس رو بر روی میکروی خودم لرن کنم
    با این سورس فقط ریموت کدلرن عمل میکنه
    ظاهرا باید تغییراتی بر روی قسمت اینتراپت اعمال بشه ولی من هر کاری میکنم جواب نمیده
    در صورت امکان بفرمائید این تغییر چطوری باید صورت بگیره که ریموت کدفیکسم دارای آی سی pt هم لرن بشه
    ممنون

    • Zeus ‌
      زئوس Zeus
      ۳ مرداد ۱۳۹۶

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

  • علی فلاح
    ۲۷ تیر ۱۳۹۶

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

    • Zeus ‌
      زئوس Zeus
      ۲۷ تیر ۱۳۹۶

      خواهش میکنم دوست عزیز
      خواشحالم که این مقاله مورد توجه شما قرار گرفته

  • Hamed Akbari
    ۱۸ تیر ۱۳۹۶

    سلام
    اگر ممکن هست مطلبی در مورد ریموت های هاپینگ و دکد کردن آنها قرار دهید.
    با تشکر سایت خوبتون

    • Zeus ‌
      زئوس Zeus
      ۱۹ تیر ۱۳۹۶

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

  • m.a
    ۱۷ تیر ۱۳۹۶

    ممنون بابت اطلاعات مفیدتون

    • Zeus ‌
      زئوس Zeus
      ۱۷ تیر ۱۳۹۶

      خواهش میکنم دوست عزیز

  • reza
    ۲۰ اردیبهشت ۱۳۹۶

    سلام
    چرا نسخه GCC که گذاشتید کامپایل نمیشه ظاهرا مشکلی داره یا کتابخونه ها براش فراخوانی نشده ؟؟

    • Zeus ‌
      زئوس
      ۲۰ اردیبهشت ۱۳۹۶

      نسخه GCC مشکلی نداره ، اول باید توی نرم افزار ایکلیپس ایمپورت کنید بعد کامپایل کنید ، میک فایل مستقیم نداره که بتونید تو کامند لاین کامپایل کنید.

  • وحید
    ۱۹ اردیبهشت ۱۳۹۶

    باتشکر از برنامه خوبتون
    اگر بخواهیم از کریستال 16 مگا هرتز استفاده کنیم باید کجای برنامه تغییر کنه ؟
    کدوم دستورات رو باید تغییر بدیم ؟

    • Zeus ‌
      زئوس
      ۱۹ اردیبهشت ۱۳۹۶

      برای این تغییر اول باید از توی کانفیگ پروژه فرکانس رو 16 تغییر بدید که تاخیر ها درست انجام بشه
      بعد باید تایمر 0 رو جوری کانفیگ کنید که سرریزش 1 میکرو ثانیه بشه !
      البته شما از کدوم سورس استفاده میکنید ؟ کدویژن یا GCC ، توضیحات من برای کدویژن هست

      • وحید
        ۱۹ اردیبهشت ۱۳۹۶

        من با کد ویژن انجام دادم
        شما در کتابخانه تایمر مقدار Clock value: 1000.000 kHz انتخاب کردید در صورتی اگه بخوایم از کریستال 16 مگ استفاده کنیم باید مقدار آن و همچنین ریجیستر TCCR1B=0x02 تغییر کنه یعنی چون فرکانس ما دوبرابر میشه باید مقدار تایمر ما نصف بشه که تاثیری در برنامه نویسی نداشته باشه حالا از شما سوال داشتم که باید مقدار ریجیسترها چگونه تغییر کنه ؟؟ ممنون میشم راهنمایی کنید متشکر

        • Zeus ‌
          زئوس
          ۱۹ اردیبهشت ۱۳۹۶

          سلام دوست عزیز ، همانطور که مطلع هستید برنامه بر اساس زمان بندی 1 میکروثانیه نوشته شده است و زمان ها بر این اساس وارد شده است ، برای تغییر فرکانس میکرو ، باید زمان های مورد استفاده در قسمت کتابخانه EV رو اصلاح کنید.
          چرا که متاسفانه نمیتوان با استفاده از سخت افزار میکرو زمان 1 میکرو ثانیه را در فرکانس 16 مگ ایجاد کرد.

  • احمد رضا
    ۱۱ اردیبهشت ۱۳۹۶

    نه ببینید
    منظورم این بود که وقتی به عنوان مثال دکمه A ریموت فشرده شد و رها شد خروجی یک بمونه و وقتی که دوباره دکمه A زده شده خروجی صفر بشه و صفر بمونه تا وقتی که دوباره دکمه A زده بشه مثل کلید تاگل ( پوش باتن )
    بعد نکته بعدی اینکه شما گفتید اگر کد تغیییر کرد و کد جدید آمد حالت عوض بشه اصلا کد عوض نمیشه دکمه A ویا B در یک ریموت یک کد اختصاصی داره که هربار فشرده بشه همون کد ارسال میشه نرم افزار از کجا میخواد بفهمه که کد جدید آمده ؟؟ کد همون کده
    نکته آخر اینکه شما در برنامه تون در داخل whil از delay_ms استفاده کردید که یک اشتباه بزرگه و نباید استفاده بشه و تو کل سیستم تاخیر می اندازه کافیه این delay رو بردارید متوجه میشید مشکلات برنامه چیه
    ببیند من زیاد با این برنامه کار کردم و میخوام به کمک شما برنامه مشکلاتش حل بشه تا دوستان عزیز ازش استفاده کننند خواهشا اگه میتونید به آی دی بنده در تلگرام مراجعه کنید تا بهتر بشه روی این پروژه کار کرد کرد ممنون
    آی دی بنده :xxxxxxxxxxx

    • Zeus ‌
      زئوس
      ۱۱ اردیبهشت ۱۳۹۶

      ببینید دوست عزیز ، کدهایی که من به شما ارائه میدم فقط نمونه هست و برای کاربردی شدن خودتون باید کامل کنید. من راهکار رو عرض کردم خدمتتون. حالا شما اونطوری که دوست دارید یا نیاز دارید پیاده سازی کنید !
      ببینید همونطور که در توضیحات پست عرض کردم 20 بیت کد ثابت وجود داره و 4 بیت آخر وضعیت کلید ها رو ارائه میکنه ، پس شما باید وضعیت کلید ها رو از بیت های شناسه جدا کنید و مورد بررسی قرار بدید.
      دلیل وجود اون تاخیر هم این بوده که توی کدویژن ما نوع volatile نداریم به همین دلیل متغیر های موجود ممکنه توی اینتراپت مقدار درستی رو دریافت نکنند (البته راهکار داره)، و دلیل دوم هم این بوده که کد ها رو توی سریال نمایش میداده است و شما لزومی در استفاده از اونها ندارید.
      این کد مشکلی نداره به نظر من ، فکر میکنم منظور شما اینه که برای منظور خودتون تغییرش بدید ، مشکلی نیست ، اتفاقا خوشحال میشم که یه کد کاربردی هم در این زمینه منتشر کنیم !
      آیدیتون توی تلگرام موجود نبود :/

  • احمد رضا
    ۱۰ اردیبهشت ۱۳۹۶

    سلام خدمت شما
    با تشکر از برنامه خوبی که گذاشتید
    من با این برنامه کار کردم مشکلی نداره و بدرستی کار میکنه ولی یک مشکلی که داره هر روشی سعی کردم روش پیاده کنم که درستش کنم نشد اینه که وقتی دکمه ریموت رو نگه میدارید پورت خروجی حالت چشمک زن پیدا میکنه و برنامه یک بار اجرا نمیشه یعنی تا وقتی که دست روی دکمه ریموت هست دائم خروجی چشمک میزنه در صورتی که باید طوری باشه اگر دست روی کلید بود خروجی 1 بشه و وقتی که دست رو برداشتی و دوباره زدی 0 بشه
    امیدوارم درست سوالم رو مطرح کرده باشم بسیار بسیار ممنون میشم که مننو کمک کنید چون نزدیک به چند ماه دارم روش کار میکنم ولی نتیجه نگرفتم
    ممنون

    • Zeus ‌
      زئوس
      ۱۱ اردیبهشت ۱۳۹۶

      سلام دوست عزیز ، وقت شما بخیر
      خواهش می کنم
      خوب اگر درست متوجه شده باشم شما نیاز دارید کدی داشته باشید که تا مادامی که کلید ریموت فشرده هست خروجی مورد نظر 1 باشه و بعد از رها کردن خروجی صفر بشه !
      توجه داشته باشید که کد منتشر شده فقط یک مثال بوده جهت نحوه استفاده از کتابخانه مربوطه ، اما حالا چطور میشه کد رو به این شیوه تغییر داد ، باید عرض کنم خدمتتون که کار زیاد پیچیده ای نیست ، روش کار به این شکله که شما آخرین کد دریافتی از ریموت رو باید توی یک متغییر ذخیره کنید و کد جدید رو با کد آخر مقایسه کنید اگر یکی بودن یعنی همان کلید قبلی است و نیاز نیست عکس العملی انجام بشه و اگر به مدت مشخصی از ریموت کدی دریافت نکردید آخرین کد دریافتی رو صفر کنید تا با این کار رها شدن کلید شناسایی بشه
      به نمونه زیر دقت کنید

      https://paste.ofcode.org/JMPZdeVCupCuvm9D3PBebQ

  • علی
    ۳ اردیبهشت ۱۳۹۶

    سلام‌…در دیکد کردن ریموت های لرن چگونه سیگنال اصلی فرستنده را از نویز جدا کنم…لطفا هر کس بلده کمک کنه…نویز اجازه هیچ کاری نمیدهد…

    • Zeus ‌
      زئوس
      ۴ اردیبهشت ۱۳۹۶

      سلام دوست عزیز ، یک مقداری سوال شما مبهم هست. در خصوص این که اجازه هیچ کاری رو نمیده. ببینید محیط پیرامون ما مملو از انواع مختلف نویز هست !
      در واقع نیازی به جدا کردن نیست؛ شما باید سیگنال صحیح را شناسایی کنید. درست مثل وقتی که در یک جمع شلوغ ، کسی اسم شما را صدا میزند ، در میان تمام سر و صدای محیط ، مغز الگوی اسم شما را شناسایی میکند؛ اما باز جانب احتیاط را رعایت میکند و جواب نمیدهد. منتظر میماند تا دوباره صدا را بشنود !
      خوب اینجا هم دقیقا باید همین رفتار تکرار شود: یعنی اول اسم(الگوریتم ریموت) را درست تشخیص دهد که کد این کار رو انجام میده ، و در مرحله بالا تر ، چند بار یا حداقل دو بار اون الگوریتم درست تکرار بشه و این طور به راحتی میتونید بگید که ریموت بوده که کد رو فرستاده چراکه نویز قادر نخواهد بود دو بار پشت سر هم یک کد یونیک ایجاد کنه !

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک