AVR, آردوینو arduino, پروژه, پروژه آردوینو, پروژه های سیسوگ, توصیه شده

پروژه ریموت کنترل 4 کاناله کاملا رایگان به همراه مستندات

ریموت کنترل 4 کاناله

در مقاله‌های قبل راجع به ریموت کدلرن و نحوه دکد کردن آن به‌تفصیل توضیح داده‌ایم و سورس کتابخانه‌ی مربوط به دکد ریموت‌های مبتنی بر چیپست EV15xx را منتشر کرده‌ایم. سورس مربوطه به زبان C و برای میکروکنترلر atmega8 نوشته شده بود. البته سورس فقط مربوط به نحوه دکد کردن کد ریموت بود و برای ساخت یک ریموت واقعی باید قسمت‌های موردنظر را خود به آن اضافه می‌کردید. با توجه به استقبال و درخواست دوستان در خصوص تکمیل کد کتابخانه و همچنین ایجاد یک پروژه عملی، بر آن شدیم که با استفاده از کتابخانه مذکور، یک ریموت کنترل 4 کاناله کاملاً عملی بسازیم. برای ساخت ریموت کنترل 4 کاناله‌ی رادیویی با سیسوگ همراه باشید.

مجوز انتشار

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

توضیح اجمالی در خصوص پروژه ریموت کنترل 4 کاناله:

برای ساخت پروژه از میکروکنترلر ATmega328p استفاده شده است. البته به‌راحتی و با کمترین تغییر می‌توان کد را برای دیگر میکروکنترلرها ازجمله mega8 نیز تغییر داد. دلیل استفاده از این میکروکنترلر وجود آن بر روی بردهای آردوینو است تا استفاده‌کنندگان قادر باشند در کمترین زمان ممکن با استفاده از بردهای آردوینو مدار را بسازند. در نمونه تست‌شده از برد Arduino Nano  استفاده شده است با فرکانس کاری 16 مگاهرتز؛ چراکه مقدار پیش‌فرض بردهای آردوینو همین مقدار است ولی به‌سادگی و با تعویض مقدار فرکانس در کامپایلر می‌توان کد را روی پردازنده‌های دیگر نیز کامپایل کرد.

جهت نوشتن کد از کامپایلر GCC و محیط توسعه Eclipse استفاده شده است. اما در صورت نیاز و با ساخت یک Makefile ساده می‌توان کد را در محیط Shell یا کامپایلر Winavr نیز کامپایل کرد. البته برای استفاده در شبه کامپایلر کدویژن لازم است تغییرات مربوط به کامپایلر را در کد لحاظ کنید. البته تغییرات زیاد نخواهد بود و این کار به‌راحتی قابل انجام است.

اصلاحات مربوط به کتابخانه‌ی ریموت کدلرن

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

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

فرکانس 1 مگاهرتز و 2 مگاهرتز به‌عنوان فرکانس شمارش تایمر مورد تست قرار گرفت که در هیچ‌کدام مشکلی وجود نداشت و برنامه به‌درستی کار می‌کرد.

تغییر صورت گرفته‌ی بعدی، مربوط به روال ذخیره‌سازی بیت‌های دریافتی از ریموت است. در کتابخانه قدیمی از یک آرایه برای نگهداری هر بیت استفاده می‌شد که 24 بایت از حافظه Ram را اشغال می‌کرد.

در بازنویسی کتابخانه، هر بیت واقعاً یک بیت از حافظه را اشغال می‌کند و داده‌ها در یک متغییر Long ذخیره می‌شوند که تنها 4 بایت از حافظه را اشغال می‌کند. البته جدول lookup برای افزایش سرعت اضافه شده است که 128 بایت از حافظه Flash را اشغال می‌کند که با توجه به حجم 32 کیلوبایتی فلش، مقدار زیادی نیست.

و البته چند تغییر کوچک دیگر که باعث بهبود عملکرد کتابخانه شده است.

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

سخت افزاری

جهت مونتاژ و فراگیری اتصالات، می‌توانید توضیحات فوق را مشاهده کنید. تمام پایه‌ها به‌جز RF_IN در برنامه قابل‌تغییر هستند.

در برنامه از Timer1 به‌عنوان شمارنده استفاده شده است. دقت داشته باشید که به خاطر مسئله دقت در اندازه‌گیری طول پالس‌ها، نیاز به یک تایمر 16 بیتی است. پس اگر قصد تغییر تایمر را دارید حتماً یک تایمر 16 بیتی را جهت انتقال انتخاب کنید.

توضیح عملکرد برنامه ریموت 4 کاناله

برنامه دارای 3 حالت مختلف، جهت عملکرد است:

  • حالت نرمال
  • حالت لرن
  • حالت پاک کردن

حالت نرمال:

بعد از روشن شدن مدار، دستگاه در حالت نرمال است. در این حالت، LED بر روی برد، یک ثانیه روشن و یک ثانیه خاموش است.

در حالت نرمال، با فشردن هر یک از کلیدهای ریموت خروجی مربوطه تغییر وضعیت می‌دهد.

حالت لرن:

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

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

 

حالت پاک کردن:

برای حذف ریموت‌های ذخیره‌شده در حافظه‌ی دستگاه، باید کلید را به مدت 10 ثانیه بفشارید و سپس رها کنید. LED  به مدت 3 ثانیه روشن می‌شود و خاموش می‌شود. بعد از این کار تمام ریموت‌های ذخیره‌شده از حافظه‌ی دستگاه پاک خواهند شد.

دانلود سورس کد پروژه ریموت کنترل 4 کاناله


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

برای مشاهده repositorie می‌توانید به این آدرس مراجعه کنید.

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

 



انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

 

نوشته های مشابه

یک دیدگاه در “102”

  1. Avatar سعید گفت:

    با تشکر از زحمات جنابعالی.

    1. زئوس Zeus زئوس Zeus گفت:

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

  2. Avatar reza گفت:

    آقا دمت گرم حل شد uart راه افتاد!سوتی از خودم بود فیوز بیتاشو پروگرام نکرده بودم!
    الان حالا گیر کردم تو دیکد!ببخشیدا بازم سوال دارم یکی اینکه برای eeprom باید اون رو هم پروگرام کنم یا همون پروگرام avr کافیه؟فیوز بیت خاصی میخواد؟؟
    و سوال دیگه اینکه تو توضیحات زدی برای شناسایی پالس ها تایمر باید 1 میکرو باشه ولی به من گفتی 1 میلی!راستش یکم گیج شدم میشه بیشتر توضیح بدی
    تایمر1 رو رو چند تنظیم کنم؟الان led هر ثانیه 2 تا میزنه
    ممنون

    1. زئوس Zeus زئوس Zeus گفت:

      استفاده از eeprom نیاز به فیوز بیت خاصی نداره ؛ تنها یک فیوز بیت هست که میگه وقتی آیسی رو پاک میکنید حافظه eeprom باهاش پاک نشه ؛ که خیلی هم کاربردی هست ؛ ممکنه مشکل شما هم از این قضیه باشه
      1 میکرو درسته ؛ احتمالا اشتباه گفتم ببخشید.

      1. Avatar Reza گفت:

        ببخشيد من از eprom خارجي استفاده كردم اون هم كاري نميخواد؟خود ميكرو ميشناستش؟
        باز هم ممنون

        1. زئوس Zeus زئوس Zeus گفت:

          خوب اگر از eeprom خارجی استفاده میکنید باید کتابخونه اونو بنویسید یا به پروژتون اضافه کنید ؛ اگر نه میکرو که خودش نمیشناسه اونو 😐

  3. Avatar REZA گفت:

    ممنون از لطفت دوست من.شما درست میفرمایید مین اجرا میشه ولی یکم سرعتش تغییر میکنه به خاطر اینتراپت حالا دارم روش کار میکنم…
    ولی تایمرش راه افتاد ممنون
    و اینکه هر کاری میکنم نمیدونم چرا usart را نمیافته تا از کامپیوتر و سریال پیغاماشو بگیرم میشه یه توضیح راجع به تنظیماتش بگی هر کاری میکنم با این atmega8a راش بندازم همش کاراکتر چرت میفرسته همش کد 80 هگز میفرسته ممنون میشم راهنماییم کنی

    1. زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar REZA گفت:

        8mhz int روی
        کجا باید تنظیم کنم باوود ریت رو؟
        من با atmel studio دارم کار میکنم

        1. زئوس Zeus زئوس Zeus گفت:

          خیلی عالیه که کدویژن کار نمیکنید 🙂
          برای تنظیمات صحیح باوود ریت میتونید به صفحه زیر سر بزنید
          تنظمیات باوود ریت

          1. Avatar reza گفت:

            ممنون لطف داری!
            آقا این uart با ما راه نمیاد!هر کاری کردم نشد همش کاراکتر چرت میفرسته!تنظیم باود ریتمم درسته ولی نمیشه!چیکار کنممم؟!
            امکان داره از کریستال داخلی باشه؟چون الان روی 8 مگ داخلی تنظیمه و کریستال خارجی استفاده نشده.

          2. زئوس Zeus زئوس Zeus گفت:

            امم خوب بهترین کار اینه که اول با کریستال خارجی تست کنید ؛ چون RC داخلی چندان دقیق نیست و احتمالا اگر کارکتر اشتباه دریافت میکنید میتونه دقیقا دلیلش همین باشه
            اگر با کریستال خارجی هم نشد ، کدتون رو بفرستید که بررسی کنم.

  4. Avatar reza گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و درود دوست عزیز ؛ ببینید این مساله که میکرو مدام میپیره توی اینتراپت اجتناب ناپذیره ؛ چون ماژول های گیرنده از نوع ASK هستند و محیط هم پره از نویز ! برای همین هم ماژول این نویز ها رو به عنوان پالس شناسایی میکنه!

      1. Avatar Reza گفت:

        دوست من يعني راهي نداره؟
        اينجوري كه برنامه شما هم هيچ وقت تو main نميره و همش تو اينتراپت ميمونه و نميتونه درست كار كنه؟؟؟يعني شما و دوستاني كه درست كار كرده براشون هيچ نويزي تو محيطشون نبوده و ماژول هيچ پالسي تو حالت عادي نميده؟!

        1. زئوس Zeus زئوس Zeus گفت:

          امم فکر نمیکنم اینقدر زمان پردازنده رو بگیره – میکروکنترلرتون چی هست و توی چه فرکانسی داره کار میکنه ؛
          چون قادتا نباید اینقدر زمان بر باشه طوری که اصلا مین اصلی اجرا نشه – شاید نهایتا 10 تا 20 درصد پردازنده رو اشغال کنه – نه همش رو

          1. Avatar Reza گفت:

            اهان يعني ميگي اگه پشت هم هم هي ماژول سيگنال بفرسته باز سرعت اينقد زياد هست كه بره مين رو اجرا كنه؟اخه من براي تست يه رله رو گذاشتم تو مين ست كنه ولي اصلا اين كارو نميكنه
            ميكرو من atmega8a هست و فركانس داخلي ٨ مگ
            و اينكه راستي دوست من ميشه بگي براي اين مشخصات تايمر هاشو چجوري بايد تنظيم كنم؟
            بازم ممنون

          2. زئوس Zeus زئوس Zeus گفت:

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

  5. Avatar alimgr گفت:

    ممنون
    هر چه می خواستم تو این سایت پیداکردم.
    نوکرتم

  6. Avatar محمد گفت:

    زئوس Zeus گفت:
    مهر ۱۵, ۱۳۹۷ در ۹:۲۰ ق.ظ

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

    سلام منریموت را بازکردم آی سیش 1721 بود آیا تفاوتی میکنه

    1. زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar محمد گفت:

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

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

        1. زئوس Zeus زئوس Zeus گفت:

          یه سوال داشتم – ریموت شما چرا 5 کلید داره ؟ ، میشه خروجی کلید ها رو که برنامه میده ارسال کنید ؟
          یا عکسی از ریموت مورد استفاده خودتون در اختیار بذارید ؟

          1. Avatar محمد گفت:

            عکس راکجا بفرستم؟
            البته مشکل من بالرن وریموت حل شد اما عکسها رامیفرستم اگه کسی مشکل داشت حل
            الان میخوام تا 20 تا ریموت set کنم با اینکد میشه این کارا کرد؟

          2. زئوس Zeus زئوس Zeus گفت:

            برای آپلود من معمولا از سایت picofile.com استفاده میکنم
            خوب خوشحالم که مشکل حل شده ؛ خوب برای ذخیره 20 تا ریموت شما نیاز به 20*4 بایت حافظه فلش خواهید داشت ؛ اگر چنین حافظه ای رو در دسترس داشته باشید نباید مشکل خاصی وجود داشته باشه

    2. Avatar محمد گفت:

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

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

      ییکک سوال دیگه
      من برای حالت لرن نرمافزار را اینجور تغییر دادم(چون از کدویژن استفاده میکنم)
      else if(Work_Mode==Learn)
      {
      // if(!EE_ISValidCode(Rcode&0xFFFFFFF0)) /*If Not Have Code*/
      // {
      printf(“Learn This Remote…\n”);
      // printf(“Learn This Remote…\n”);
      // //EE_StoreCode(Rcode&0xFFFFFFF0);
      RcodeEE=(Rcode&0xFFFFFFF0);
      // }
      Work_Mode = Nurmal;
      }
      اما 2 مسئله
      1-من از پورت سریال دارم استفاده میکنم واین دسستور فکر کنم مشکل درست میکنه
      printf(“Learn This Remote…\n”);
      وفکرکنم این دستور ریموت را درحالت لرن نگه میداره تا دکمه ای از زده شود به جاش از چه دستوری استفاده کنم؟
      2- من دادههای دیگری هم در e2 دارم که بعدد لرن همه بهم میریزه للطفا راهنماییی کنید ممنوم

      1. زئوس Zeus زئوس Zeus گفت:

        خوب به نظر کد یه مشکلی نداره ، اول مشخص کنید که متغییر RcodeEE چطور تعریف شده ؛ دوم این که مشخصا روال های ذخیره سازی EEPROM در کدویژن و GCC خیلی متفاوت بودن ولی کدویژن توی ورژن جدیدش اصلاح کرده و مثداری شبیه GCC شده اگر اشتباه نکنم
        چون میشه بگید چرا فکر میکنید که دستور printf مشکل ایجاد میکنه ؟ من گمان میکنم مشکل از ذخیره سازی متغییر باشه مشکل !

  7. Sanaz H Sanaz H گفت:

    سلام ممنون بابت اطلاعاتتون اما من چون زیاد از میکرو سر در نمیارم نمیدونم که باید چکار کنم برای این پروژه ای که دارم ممنون میشم هم از لحاظ تنظیمات codewizard برای تایمر کانتر یا حافظه ای که برای پروژم لازمه هم بررنامه ای که باید بنویسم راهنماییم کنید
    پروژم اینه: یک ریموت 4 کاناله کدلرن 315MHZدارم و دو گیرنده super heterodyne 315MHZ . میخام وقتی کلید 1 از روی ریموت فشار میدم buzzer که به میکرو atmega8 و گیرندم وصله صدا بده و وقتی کلید 2 از روی ریموت فشار میدم buzzer که به میکرو atmega8 و گیرندم وصله صدا بده.
    برای set کردن کلید های ریموت با گیرنده استادم گفت کلیدی که روی گیرنده است با یک کلید از روی ریموت همزمان فشار بدم باهم set میشن درسته؟
    شکل مدار گیرندم اینه
    http://uupload.ir/files/mfsx_untitleaad.png

    1. زئوس Zeus زئوس Zeus گفت:

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

  8. Avatar بابک گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

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

  9. Avatar علی گفت:

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

    ممنون

    1. زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar علی گفت:

        سلام
        فکر میکنم میشه یه کار کرد.
        ریموت کد فیکسی که من دارم کد هشت بیت آخری کلیدها به صورت:
        03 یا 0C یا 30 یا C0
        نمیدونم همه ریموت های کد فیکس اینطورین یا نه

        ولی کد لرن چهار بیت آخری:
        1 یا 2 یا 4 یا 8

        اگه ریموت کد فیکس همگی این کد رو در آخر تولید میکنن
        (03 یا 0C یا 30 یا C0)

        در نتیجه هیچ ریموت کد لرنی هشت بیت آخر آن (03 یا 0C یا 30 یا C0)
        نمی شود.
        یعنی می تونیم تو شرط قبل از ذخیره ریموت در حافظه چک کنیم که این کد ها نباشد.

        فقط باید مطمئن بشیم که همه کد فیکس ها اینطورین (که من 99 درصد احتمال میدم!!!)

        1. زئوس Zeus زئوس Zeus گفت:

          سلام پیشنهاد هوشمندانه ای است ولی ، مشکلاتی رو ممکنه ایجاد کنه که عرض میکنم خدممتون
          توی ریموت های فیکس ؛ 4 بیت پایین به کلید ها اختصاص داره ، و باقی بیت ها هر مقداری میتونه داشته باشه (توسط کارخانه اعمال میشه) اما توی ریموت های کدلرن 8 بیت پایین تحت تاثیر کلید ها قرار میگیره ؛ پس در واقع رفرنس مقایسه ای ما 4 بیت انتهایی خواهد بود.
          اگر فرض کنیم کاربر ممکنه دو کلید رو با هم فشار بده احتمال ارسال کد های 3 (کلید 1 و 2) و کد C (کلید 3 و 4) وجود داره ! مگر این که بگیم ارسال ترکیبی کلید ها رو کلا رد میکنیم که باز برای دسته ای از ریموت هایی که 5 کلید دارند دچار مشکل خواهیم شد.

  10. Avatar علی گفت:

    سلام
    این برنامه حالتی نداره که ریموت رو تکی حذف کنه؟؟

    بعضی وقتا نیاز میشه از بین 20 ریموت إخیره شده یکی رو حذف کنیم و حالت سوم برنامه کل 20 تا رو حذف میکنه!!!!

    یا داره من اشتباه میکنم؟؟

    ممنون

    1. زئوس Zeus زئوس Zeus گفت:

      بله حذف تکی رو نذاشتم ، البته به راحتی خودتون میتونید کدش رو بنویسید ! به نظر من چندان کاربردی نبود.

      1. Avatar علی گفت:

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

        1. زئوس Zeus زئوس Zeus گفت:

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

  11. Avatar علی گفت:

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

    ولی یه مشکلی داره کلید خوب کار نمی کنه!!؟؟

    حالا بیشتر چک میکنم ببینم چیه مشکلش شاید تو تبدبل جای رو اشتباهی تغییر دادم.

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

    تشکر

    1. زئوس Zeus زئوس Zeus گفت:

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

  12. Avatar علی گفت:

    سلام
    من میخوام برنامه رو با کدویژن اجرا کنم atmega8

    میشه یه راهنمایی کنید این تابع
    const uint32_t Bit_Shift[32] PROGMEM =
    رو باید چی کار کنم
    آیا میشه از flash استفاده کرد؟

    با تشکر

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز ؛ بله توی کدویژن از معادل flash میتونید استفاده کنید.

  13. Avatar محمد گفت:

    سلام
    من میخوام از 5کلید برای ریموت استفاده کنم وتغییر زیر در برنامه دادم اما عمل نکرد
    //if(Rkey&15)
    ممکنه راهنمایی کنید باید چکار کنم؟

    1. زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar محمد گفت:

        سلام
        ممنون از پاسختان
        مشکل اینه عددی که قبل از and کلید 5 برمیگردونه عدد 44 است که وقتی با 16 اند میشه 0میشه وبا 15 که اند میشه حاصل میشه 12 الان درست چیه با 16 باید اند بشه یا 15 ؟درضمن وقتی با 15 اند میشه تابع بدون فشردن کلید هم موقع فشردن کلید عدد 12 را برمیگردونه الان مشکل کجا میتونه باشه؟

        1. زئوس Zeus زئوس Zeus گفت:

          سلام دوست عزیز !
          میشه مدل ریموتی که استفاده میکنید رو معرفی کنید ؛ شاید اصلا انکدر متفاوتی داشته باشه
          این قضیه که دارید مطرح می کنید مقداری مشکوکه ! توی چیپ های Ev15xx تنها 4 بیت برای ارسال وجود داره که میشه 16 حالت ، شما چطور عدد 44 دریافت میکنید ؟

          1. Avatar محمد گفت:

            سلام
            ریموت از مدلهایی که روش نوشته beta
            اینم کد
            if(IS_Recive_Valid_Remote())
            {
            //Get_Remote_Code(Code);//code is a var
            Rcode = Get_Remote_Code_long();
            Rkey = Rcode&0xFF;
            if(Rkey&1)
            {
            SendData(16,1);
            //gen_7seg(1);
            }
            اعدادی که گفتم خروج rkey هست

          2. زئوس Zeus زئوس Zeus گفت:

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

  14. Avatar محمد گفت:

    سلام من از این برنامه شما استفاده کردم با چهارکلید مشکلی نبود اما من میخوام از پنج کلید استفاده کنم و این تغییر در برنامه دادم
    //if(Rkey&16)
    اما کلید پنجم کار نکرد آیا تغییر دیگری باید در برنامه بدم؟
    ممنون میشم اگربراتون مقدور بود پاسخ بدید

    1. زئوس Zeus زئوس Zeus گفت:

      چرا 16 رو گذاشتید ، اولین کاری که باید بکنید اینه که ببنید کلید 5 چه بیت هایی رو ست میکنه ، فرض میکنیم کلید 5 بیت های 1 و 4 رو یک میکنه ؛ پس دقیقا باید عدد 5 رو اند کنید با مقدار خوانده شده.

      1. Avatar محمد گفت:

        نقل قول : //چرا 16 رو گذاشتید ، اولین کاری که باید بکنید اینه که ببنید کلید 5 چه بیت هایی رو ست میکنه ، فرض میکنیم کلید 5 بیت های 1 و 4 رو یک میکنه ؛ پس دقیقا باید عدد 5 رو اند کنید با مقدار خوانده شده.//
        طبق فرمایش شما یعنی اول ببینیم کدام بیت از چهار بیت آخر 1 میشه؟ یعنی اینجا برای عدد 5 بیتهای 1و 3 یک میشود؟
        اعدادی که کلیدهای من برمیگردونه 30-33-34-40-44 میباشد
        آیا با ریموتهای مختلف خروجی مختلف برمیگردونه؟

        1. زئوس Zeus زئوس Zeus گفت:

          الان من شک دارم که ریموت شما از چیپ ev15xx استفاده کنه !ً
          یا باگی توی برنامه وجود داره ؛ اول مطمئن بشید چیپ مورد استفاده در ریموت شما چی هست

  15. Avatar محمد گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

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

  16. Avatar صابر گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

      به قسمت سخت افزار مراجعه کنید ، توضیح پایه های مورد استفاده وجود دارد.

  17. Avatar دارابی گفت:

    سلام ، من میخام از اردوینو برای این پروژه استفاده کنم اما نمیدونم از کپام فایل استفاده کنم .
    میشه مستقیما از arduino ide کامپایل کرد ؟
    لطفا راهنمایی کنید

    1. زئوس Zeus زئوس Zeus گفت:

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

  18. Avatar یاس محمدی . گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

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

  19. Avatar آرش گفت:

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

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

    من برنامه ی قبلی رو به راحتی روی مگا 8 توسط کدویژن اجرا کردم و خوب هم کار کرد .
    ولی این برنامه ی جدید رو نتونستم و خیلی تلاش کردم ولی مثل اینکه مشکل اساسی دارم .

    اگه لطف کنید و به من و دوستانی مثل من که فعلا فقط با کدویژن کار میکنیم و امیدوارم بعد از تسلط روی برنامه ها به توصیه ی شما بتونیم با GCC ادامه بدیم ، از ابتدا راهنمایی کنید و در تغییر این کد برای کرویژن کمک کنید ، من مطمئنم همین تغییرات کمک بسیاری به پیشرفت ما میکنه ، واقعا ممنون میشم .

    برای شروع فرض کنید من میخوام با مگا 32 روی کدویژن اجرا کنم .
    لطفا در صورت امکان ابتدا در مورد تغییر تایمر و رجیسترهاش توضیح بدید .

    باز هم یک دنیا ممنون

    1. زئوس Zeus زئوس Zeus گفت:

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

  20. Avatar علی گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

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

  21. Avatar س.ج. گفت:

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

    ۱- چرا داخل تابع stop_read_timer کانتر تایمر ضرب در ۲ رو به عنوان خروجی میده ولی تو read_timer تو ۲ ضرب نمیشه؟

    ۲- اگه ممکنه یه توضیح کوچیک در مورد sreg بدید. داکیومنت کامپایلر و توضیحاتش تو دیتاشیت رو خوندم اما حس میکنم کامل نفهمیدم. چرا باید برای خوندن تایمر وقفه گلوبال غیر فعال بشه و حالتوش رو جایی ذخیره کنیم و بعد از اینکه خوندن تامیر تموم شد همه چیو به حالت اول برگردونیم؟ نمیشه فقط تایمرو بخونیم؟

    ۳- کاربرد bit_shift و نحوه ی کار باهاش رو نفهمیدم. چرا مقدار دهی اولیش به این صورت هست و اینکه چرا از یه متغیر معمولی ۳۲ بیتی برای کد ریموت های استفاده نکردید و به جاش از این آره bit_shift استفاده کردید؟

    ۴- چرا توی کدی که نوشتید برای overflow تایمر فکری نکردید؟

    ۵- چرا از تایمر ۱ استفاده کردید؟ تنها دلیل استفاده از تایمر ۱ داشتن جای بیشتر برای شمارش بوده؟ چون از هیچ برتری تایمر ۱ نسبت به دوتا تایمر دیگه استفاده نکردید. اگه تنها دلیلش اینه به نظر شما میشه با تایمر ۰ و در نظر گرفتن overflow همین برنامه رو بازنویسی کرد؟

    ممنون از زحماتتون

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و درود خدمت شما
      1 – تابع read_timer در برنامه استفاده نشده و میتوانید از آن صرف نظر کنید ، خروجی تابع stop_read_timer هم به دلیل این که فرکانس تایمر 500 کیلو در نظر گرفته شده در 2 ضرب می شود تا بیس زمانی 1 میلی ثانیه ای تغییر نکند.
      2 – خوب SREG که رجیستر وضعیت هستش ، برای این هنگام خوندن تایمر وقفه ها رو غیر فعال میکنیم تا مقدار مورد نظر هنگام خوندن تغییر نکنه ، فرض کنید هنگام خوندن تایمر یه وقفه اتفاق بیفته که اولویت بالاتری نسبت به وقفه جاری داشته باشه ، اگر وقفه ها رو غیر فعال نکرده باشید ، عملیات خوندن متوفق میشه و رسیدگی به کار وقفه جدید در دستور کار CPU قرار میگیره بعد از بازگشت قطعا تایمر مقدار قبلی رو نخواهد داشت و مقدار مورد نظر تغییر کرده است ، برای جلوگیری از چنین اتفاق هایی این کارو انجام می دیم.
      3 – منظور شما رو درست متوجه نشدم ، برای کد ریموت ما از متغییر 32 بیتی استفاده کردیم دیگه ! کار bit_shift هم در واقع شیفت دادن یک بیت به سمت راست هست ، از روش معمول (>>) استفاده نکردیم چون توی پردازنده های 8 بیتی این عملیات بر روی متغییر های 32 بیتی خیلی زمان بر هستش
      4 – اتفاقا فکر کرده ایم 🙂 ، فرض کنید مقدار قبلی تایمر FFFD بوده باشد و 9 میلی ثانیه بعد که تایمر رو میخونیم مقدار 6 رو داراست ، حالا کافیه 6 رو منهای FFFD کنید ، زمان انتظار یعنی 9 میلی ثانیه حاصل میشه ، به همین راحتی.
      5 – بخاطر 16 بیتی بودن ، شما از هر تایمر دیگه ای یا هر روش دیگه ای که بتونید زمانی با دقت 1 میلی ثانیه ایجاد کنید ، برای برنامه فرقی نمیکنه و قابل قبول هستش.

      خواهش میکنم

      1. Avatar سینا گفت:

        آهان تشکر از توضیحاتتون. ????

        1. زئوس Zeus زئوس Zeus گفت:

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

  22. Avatar سینا گفت:

    با عرض سلام و خسته نباشید
    من سعی کردم کد هاتون رو توی atmel studio 7 باز کنم. اما هرچی گشتم نتونستم تعریف تابع _BV رو پیدا کنم تو هدر فایل هاتون و … ممکنه راهنمایی کنید؟ آیا این تابع رو خودتون تعریف کردید یا از توابع از پیش تعریف شده ی کامپایلر هست؟

    ممنون

    1. زئوس Zeus زئوس Zeus گفت:

      سلام و دورود خدمت شما دوست عزیز
      بسیار عالی ، آتمل استودیو هم از GCC استفاده میکنه ، و به راحتی میتونید کد را بر روی آن اجرا نمایید.
      _BV رو میتونید به صورت زیر تعریف کنید.
      #define _BV(x) (1 < < x)

      1. Avatar س.ج. گفت:

        آهان ممنون. با موفقیت کامپایل شد و روی اتمگا ۳۲ و ۳۲۸ دیپ کار کرد. البته با کریستال داخلی که سرعتش کمتر بود تست کردم و یکم سخت تشخیص میداد کد ریموت رو. اما وقتی به ۳۲۸ کریستال ۱۶ مگ وصل کردم عالی کار کرد.

        1. زئوس Zeus زئوس Zeus گفت:

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

  23. سیما درزی علی گفت:

    سلام مجدد مهندس

    آقا تونستم تغییراتی توی برنامه بدم و بصورت دلخواهم درش بیارم. خیلی هم خوب کار می کنه با سه مدل ریموت با مقاومت اسلاتورهای مختلف استفاده کردم که براحتی همه رو تشخیص میده.

    AVRDUDE 6.3 کلا ATMega8A نداره. فعلا که با همین ATMega328p جوابای خوبی گرفتم. باز هم تشکر

    1. Sisoog Os Sisoog Os گفت:

      خبر خوبی بود موفق باشید

    2. زئوس Zeus زئوس Zeus گفت:

      بسیار عالی دوست عزیز ، خوشحالم که بلاخره موفق شدید
      اما در مورد Avrdude ، من چک کردم و بارها باهش mega8 رو پروگرام کردم ، اگر جزئیات رو بگید شاید بتونم کمکتون کنم

      1. سیما درزی علی گفت:

        سلام و تشکر بابت پیگیری های شما.

        من پروژه رو چندین بار برای میکروهای مختلف کامپایل کردم. ولی فقط برای ATMega328 و ATMega328P جواب میده. برای بقیه میکروها پیغام خطایی میده در قسمت رجیسترهای وقفه صفر میکرو. البته این پیغام برای سری های معمولی درسته ولی برای سری های A نباید این پیغامو بده.

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

        در مورد ATMega8 من خودم بارها با AVRDUDE پروگرم کردم. ولی سری Aشو ساپورت نمی کنه. حالا این مهم نیست. چون من با نرم افزارهای دیگه میتونم میکرومو پروگرم کنم.

        اما فعلا مشکل سر کامپایل نشدن پروژه هست.

        عکس پیغام خطا : http://uupload.ir/files/2nm2_32123.png

        1. زئوس Zeus زئوس Zeus گفت:

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

          EICRA=(0 < < ISC11) | (0 << ISC10) | (0 << ISC01) | (1 << ISC00); EIMSK=(0 << INT1) | (1 << INT0); EIFR=(0 << INTF1) | (1 << INTF0); PCICR=(0 << PCIE2) | (0 << PCIE1) | (0 << PCIE0);

          و مثلا توی میکروی Mega8 کدهای زیر رو


          GICR|=(0 < < INT1) | (1 << INT0); MCUCR=(0 << ISC11) | (0 << ISC10) | (0 << ISC01) | (1 << ISC00); GIFR=(0 << INTF1) | (1 << INTF0);

          پس می بینید که کلا تنظیمات متفاوت هست.
          برای وقفه هم من از Any change برای وقفه استفاده کردم ، این قبلیت توی همه خانواده های AVR وجود داره ، نگران نیاشید، در ضمن به لحاظ ساختار برنامه نویسی و رجیستری و پروتکلی سری A و سری معمولی هیچ فرقی با هم ندارند ، متاسفانه به دلیل دانش کم برخی افراد در این خصوص فکر میکنن سری A قابلیت های بیشتری داره توی این زمینه ها در صورتی که نه ، تنها تفاوت توی ولتاژ کاری و فرکانس کاری هستش ، اگر بخاطر داشته باشید قبلا سری L وجود داشت که با اومدن سری A ، اون سری توقف تولید شد ، برای توضیحات بیشتر میتونید به یوزر منوال مراجعه کنید.
          برای پرورگارامر هم همونطور که قبلا گفتم سری A و غیر A نداره ، با خیال راحت Mega8 رو انتخاب و پروگرام کنید.

          1. Avatar علی گفت:

            ممنون
            ولی تا جائیکه من توی دیتاشیت ها نگاه کردم تقریبا 70 الی 80 رجیسترها هم نام هستن. حالا بیت هایی توی بعضی رجیترها کم و زیاد باشه. مثلا تایمر صفر توی همه سری های مگای AVR اسمش یکیه و یا موارد دیگه.

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

            اما اینو نمیدونستم که سری معمولی هم از مد وقفه Any Change پشتیبانی می کنه!!! فک می کردم فقط توی سری A هست. چون بسکام این قابلیت رو مثلا برای اتمگا8 نداره ولی برای اتمگا8A داره.

            ممنون از لطفتون. حالا من برم ببینم می تونم این رجیسترهارو اوکی کنم یا نه؟؟!!

          2. زئوس Zeus زئوس Zeus گفت:

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

    3. Avatar حسین گفت:

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

      1. زئوس Zeus زئوس Zeus گفت:

        سلام دوست عزیز
        لینک دانلود سورس کد در اتنهای پست موجود است
        https://github.com/Sisoog/4Ch_learnRemote/releases

        1. Avatar حسین گفت:

          سلام ممنون از پاسختون
          من منظورم برنامه علی بود
          ایشون گفته بود که گویا تو Code vision تغییرش داده

  24. سیما درزی علی گفت:

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

    راستش من چنتا گزینه رو برای بازکردن پروژه شما امتحان کردم که از بین اونها فقط با گزینه Makefile Project With Existing Code تونستم کل پروژه رو باز کنم.

    1. زئوس Zeus زئوس Zeus گفت:

      خوب دوست عزیز ، برای وارد کردن پروژه باید از Git استفاده کنید
      ابتدا از منوی File زیر منوی Import را انتخاب کنید
      در پنجره باز شده ، پوشه Git را انتخاب کنید و در آن گزینه Project From Git را انتخاب کنید و دکمه Next را بزنید.
      گزینه Clone URL را انتخاب کنید و Next را بزنید
      در پنجره باز شده قسمت URL متن زیر را پیست کنید
      https://github.com/Sisoog/4Ch_learnRemote.git
      و بعد Next و Next و Finish 🙂
      به همین سادگی

      1. سیما درزی علی گفت:

        ممنون مهندس. بالاخره تونستم پروژه رو کامپایل کنم. جالب بود! تا حالا تحت وب برای AVR کامپایل نکرده بودم.

        آیا بعداز کامپایل فایل هگز ساخته شده میره توی Release در همون آدرس اینترنتی Git ؟

        حالا برای تغییر نوع میکروکنترلر و فرکانس کاریش و همچنین تغییر باودریت باید چیکار کنم؟

        ضمن اینکه توی برنامه ATMega8A رو ندیدم. ولی ATMega8 بود یا مثلا ATMega32A بود.

        1. سیما درزی علی گفت:

          آقا فایل هگزو پیدا کردم. توی پوشه User و بعدش پوشه git قرار داره.

          فقط الان می خوام تغییرات مورد نظرمو اعمال کنم.

          1. نوع میکروکنترلر
          2. تغییر باودریت ارتباط سریال
          3. تغییر فرکانس کاری

          1. زئوس Zeus زئوس Zeus گفت:

            خوب برای این کار باید وارد تنظیمات پروژه بشید ،
            برای تغییر نوع میکرو و فرکانس کاری ، ابتدا پوشه پروژه رو انتخاب کنید از منوی Project زیر منوی Properties رو انتخاب کنید
            از پنجره باز شده از لیست سمت چپ گزینه AVR رو باز کنید و Target Hardware رو انتخاب کنید ، نوع میکرو و فرکانس کاری رو می تونید تعیین کنید

        2. زئوس Zeus زئوس Zeus گفت:

          سلام دوست عزیز
          تبریک میگم ، بلاخره موفق شدید 🙂
          ببینید ، شما از Git کمک گرفتید که سورس ها رو دانلود کنید ، پس هر اتفاقی از پس می افته توی کامپیوتر خودتون هست
          فایل هگز ایجاد شده هم توی همون ایکلیپس پوشه Release ایجاد میشه ، میتونید با Ctr+C کپیش کنید هر جا دوست دارید پیست کنید.

          1. سیما درزی علی گفت:

            خیلی ممنون از راهنمائی هاش شما.

            با کمک شما یاد گرفتم که چطور فرکانس میکرو و نوع میکرو رو عوض کنم. اما نکته ای که هست AVRDUDE 6.3 از ATmega8 پشتیبانی نمی کنه. چطور میشه این مشکلو حل کرد؟

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

            راستی می تونم تنظیمات تایمرو از کدویزارد کدویژن انجام بدم و بعد کپی کنم توی این پروژه؟ همچنین تنظیمات مربوط به باودریت پورت سریال.

          2. زئوس Zeus زئوس Zeus گفت:

            سلام دوست عزی
            خواهش میکنم
            AVRDUDE تقریبا همه خانواده AVR رو پشتیبانی میکنه ، کجا میخواستید تنظیم کنید که مگا هست توی لیستش نبود ؟
            خوب برای نصف کردن فرکانس هیچ مشکلی نیست ، ببینید فرکانس کاری تایمر رو جوری تغییر بدید که بیس زمانی 1 میلی ثانیه ای باشه ، یعنی فرکانس تایمر 1 مگاهرتز باشه
            بله از کدویژن میشه برای این مساله استفاده کرد ، یعنی کد ایجاد شده توسط کدویزارد رو کپی کنید توی برنامه 🙂

  25. سیما درزی علی گفت:

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

    من برای ایجاد تغییرات در این سورس AVR gCC 7.1 نصب کردم و Elclipse SDk 3.6 و الان می تونم پروژه رو باز کنم. اما کامپایلر فایل های هدر (سرآیند) رو نمی تونه پیدا کنه. مثلا فایل avr/interrupt.h رو نمی تونه پیدا کنه.

    باید دقیقا چیکار کنم؟ مگه فایل های سرآیند توی پوشه include نرم افزار AVR GCC نیستن؟ پس چرا نمی تونه پیداشون کنه؟

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      خواهش میکنم ، خوب بسیار عالی ، شما ابتدا باید پلاگین AVR-GCC را بر روی Eclipse نصب کنید و مسیر محل نصب کامپایلر را در Path سیستم وارد کنید تا Eclipse قادر به مشاهده هدر های مورد نیاز باشد
      برای آموزش نصب این این پلاگین میتوانید به آموزش نصب پلاگین AVR مراجعه کنید.
      اگر مشکلی بود – همینجا مطرح کنید

      1. سیما درزی علی گفت:

        تشکر از پاسخ شما

        بله. میدونم. نصب کردم. Path رو هم تنظیم کردم. ولی بازم نمی شناسه. ببینید من AVR GCC 7.1 نصب کردم. بعدش Eclipse SDK 3.6 نصب کردم. پلاگین هم نصب کردم. الان من در Eclipse توی قسمت Window و در Preferences گزینه AVR دارم که زیرش AVRDude و Path هستن.

        اینا یعنی پلاگینم نصبه دیگه. حتی من رفتم و بصورت دستی Pathهارو تغییر دادم. چون قبل از نصب AVR GCC من winavr داشتم که گزینه های Path بصورت پیشفرض روی پوشه های اون ست شده بود. ولی من کلا winavr رو پاک کردم و Pathهارو روی پوشه های AVR GCC ست کردم.

        1. زئوس Zeus زئوس Zeus گفت:

          سلام و درود خدمت شما دوست عزیز
          بسیار عالی – منظور من از Path ، در واقع Path موجود در Eclipse بوده است ، برای تنظیم Path در Eclipse ، ابتدا در منوی Window زیر منوی Perferences رو انتخاب کنید ، بعد مطابق این تصویر Path ها رو تعیین کنید.
          احتمالا در پک نصب کرده از AVR GCC فایل Make وجود ندارد که برای دسترسی به این فایل باید از این لینک ابزار لازم رو دانلود و نصب کنید.
          فایل مربوطه حدود 600 کیلو بایت بیشتر نیست. برای راهنمای نصب . پیکر بندی به مقاله آموزش برنامه نویسی رزبری پای قسمت چهارم زیر بخش نصب ابزار های لینوکسی مراجعه کنید.
          احتمالا بعد از این کار ها مشکلی وجود نداشته باشه ، اگر مشکلی بود ، حتما مطرح کنید.

          1. سیما درزی علی گفت:

            مهندس بالاخره بعداز کلی تلاش تونستم کارای نصب و راه اندازی رو تموم کنم. من نسخه Eclipse SDK نصب کرده بودم یکم فرق داشت. الان Oxygen نصب کردم و تمام مراحل رو همونطوری که توی آموزش بود رفتم.

            ولی هنوزم مشکل دارم. سه تام عکس آپلود کردم.

            بعداز کامپایل هم ارور زیر میاد:
            make all
            make: *** No rule to make target ‘all’. Stop.

            لینک عکس 1 : http://uupload.ir/files/boev_1.png

            لینک عکس 2 : http://uupload.ir/files/nx0t_2.png

            لینک عکس 3 : http://uupload.ir/files/9io_3.png

          2. سیما درزی علی گفت:

            مهندس مشکل قبلی رو حل کردم. از منوی Project و گزینه properties نوع Builder رو گذاشتم روی AVR GNU Toolchain و درست شد.

            الان فایل های سرآیند شناخته میشن و برنامه هم هیچ اروری نداره.

            ام بازم موقع کامپایل با ارور قبلی مواجه میشم. یعنی :

            make all
            make: *** No rule to make target ‘4Ch_learnRemote’, needed by ‘all’. Stop.

          3. زئوس Zeus زئوس Zeus گفت:

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

  26. Avatar حسینی گفت:

    با سلام
    ضمن تشکر از کد گذاشته شده.
    بنده دارم از یک چیپست دیگه بنام pt2240 استفاده میکنم که تنها تفاوت آن با ev1527 درجای syncbit است . لطفا راهنمایی بفرمائید کجای برنامه را تغییر دهم تا با کد شما بتوانم به راحتی دیتاهای دریافتی از pt2240 را تشخیص دهم ؟

    با تشکر
    حسینی

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      بله حق با شماست pt2240 الگوریتمی مشابه ev1527 دارد البته باید دقت شود که نسبت تایمینگ ها حفظ شده است یا خیر
      در مورد مساله syncbit که در انتهای هر فریم ارسالی ارسال میشود به نظرم نیاز به تغییر کد نیست چرا که فریم ها پشت سر هم ارسال می شود و برنامه syncbit انتهای فریم اول را در واقع شروعی برای فریم دوم فرض می کند و اگر تعداد بیت ها و زمان انها درست باشد بدون دست کاری برنامه باید قادر به دریافت کد این نوع آیسی نیز باشد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *