۲۵ آبان ۱۳۹۷

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

زئوس Zeus

زئوس Zeus

زئوس هستم خدای المپزئوس هستم خدای المپ

مطالب مشابه

68 Comments

  1. 19

    بابک

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

    پاسخ
    1. 19.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  2. 18

    علی

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

    ممنون

    پاسخ
    1. 18.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
      1. 18.1.1

        علی

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

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

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

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

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

        پاسخ
        1. 18.1.1.1
          زئوس Zeus

          زئوس Zeus

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

          پاسخ
  3. 17

    علی

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

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

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

    ممنون

    پاسخ
    1. 17.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
      1. 17.1.1

        علی

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

        پاسخ
        1. 17.1.1.1
          زئوس Zeus

          زئوس Zeus

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

          پاسخ
  4. 16

    علی

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

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

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

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

    تشکر

    پاسخ
    1. 16.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  5. 15

    علی

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

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

    با تشکر

    پاسخ
    1. 15.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  6. 14

    محمد

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

    پاسخ
    1. 14.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
      1. 14.1.1

        محمد

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

        پاسخ
        1. 14.1.1.1
          زئوس Zeus

          زئوس Zeus

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

          پاسخ
          1. 14.1.1.1.1

            محمد

            سلام
            ریموت از مدلهایی که روش نوشته 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

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

  7. 13

    محمد

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

    پاسخ
    1. 13.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
      1. 13.1.1

        محمد

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

        پاسخ
        1. 13.1.1.1
          زئوس Zeus

          زئوس Zeus

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

          پاسخ
  8. 12

    محمد

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

    پاسخ
    1. 12.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  9. 11

    صابر

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

    پاسخ
    1. 11.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  10. 10

    دارابی

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

    پاسخ
    1. 10.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  11. 9

    یاس محمدی .

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

    پاسخ
    1. 9.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  12. 8

    آرش

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

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

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

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

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

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

    پاسخ
    1. 8.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  13. 7

    علی

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

    پاسخ
    1. 7.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
  14. 6

    س.ج.

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

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

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

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

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

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

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

    پاسخ
    1. 6.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. 6.1.1

        سینا

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

        پاسخ
        1. 6.1.1.1
          زئوس Zeus
  15. 5

    سینا

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

    ممنون

    پاسخ
    1. 5.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
      1. 5.1.1

        س.ج.

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

        پاسخ
        1. 5.1.1.1
          زئوس Zeus

          زئوس Zeus

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

          پاسخ
  16. 4
    سیما درزی

    علی

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

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

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

    پاسخ
    1. 4.1
      Sisoog Os

      Sisoog Os

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

      پاسخ
    2. 4.2
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
      1. 4.2.1
        سیما درزی

        علی

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

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

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

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

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

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

        پاسخ
        1. 4.2.1.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. 4.2.1.1.1

            علی

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

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

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

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

          2. زئوس Zeus

            زئوس Zeus

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

  17. 3
    سیما درزی

    علی

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

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

    پاسخ
    1. 3.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. 3.1.1
        سیما درزی

        علی

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

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

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

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

        پاسخ
        1. 3.1.1.1
          سیما درزی

          علی

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

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

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

          پاسخ
          1. 3.1.1.1.1
            زئوس Zeus

            زئوس Zeus

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

        2. 3.1.1.2
          زئوس Zeus

          زئوس Zeus

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

          پاسخ
          1. 3.1.1.2.1
            سیما درزی

            علی

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

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

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

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

          2. زئوس Zeus

            زئوس Zeus

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

  18. 2
    سیما درزی

    علی

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

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

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

    پاسخ
    1. 2.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ
      1. 2.1.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. 2.1.1.1
          زئوس Zeus

          زئوس Zeus

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

          پاسخ
          1. 2.1.1.1.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. 2.1.1.1.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 باز کردید ؟

  19. 1

    حسینی

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

    با تشکر
    حسینی

    پاسخ
    1. 1.1
      زئوس Zeus

      زئوس Zeus

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

      پاسخ

پاسخ دهید

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

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