اطلاعیه

Collapse
No announcement yet.

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

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : مشکل در برنامه نویسی ربات مسیریاب

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

    ببینید....
    [code=c]while (1)
    {
    if(PINA==1)
    {
    PORTD.0=1;
    PORTD.1=0;
    PORTD.2=0;
    PORTD.3=1;
    OCR1A=250;
    OCR1B=450;
    }
    if(PINA==2)
    {
    PORTD.0=1;
    PORTD.1=0;
    PORTD.2=1;
    PORTD.3=0;
    OCR1A=450;
    OCR1B=450;
    }
    if(PINA==4)
    {
    PORTD.0=0;
    PORTD.1=1;
    PORTD.2=1;
    PORTD.3=0;
    OCR1A=450;
    OCR1B=250;
    } [/code]

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

    دیدگاه


      #17
      پاسخ : مشکل در برنامه نویسی ربات مسیریاب

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

      ببینید....
      [code=c]while (1)
      {
      if(PINA==1)
      {
      PORTD.0=1;
      PORTD.1=0;
      PORTD.2=0;
      PORTD.3=1;
      OCR1A=250;
      OCR1B=450;
      }
      if(PINA==2)
      {
      PORTD.0=1;
      PORTD.1=0;
      PORTD.2=1;
      PORTD.3=0;
      OCR1A=450;
      OCR1B=450;
      }
      if(PINA==4)
      {
      PORTD.0=0;
      PORTD.1=1;
      PORTD.2=1;
      PORTD.3=0;
      OCR1A=450;
      OCR1B=250;
      } [/code]

      ---
      یک سوال فرعی
      اگر بخوام بصورت همزمان دو دستور جداگانه اجرا بشه راهی وجود داره ؟
      میخوام یک تعداد LED به میکرو وصل کنم،که وضعیتشون نسبت به جهت روبات تغییر کنه،ولی به دلیل استفاده از کتاب خانه تاخیری و اجرای سطر به سطر میکرو،بعد از سوئیچ به وضعیت مختلف،دستور تاخیر led ها قطع نمیشه و سریع به دستور بعد رجوع نمیشه،راه حلی برای این وضعیت وجود داره؟
      باتشکر.
      سلام
      تا جایی که من میدونم به این نمیگن دسیمال ! این کلا با اونی ک در سر برگ تاپیک قرار دادید سر تا پا فرق میکنه ! دسیمال مثل اینه : 0x00 = 0b00000000
      به طور مثال گفتم !
      منظور سوال آخرتونو متوجه نشدم !
      « با هر دستی بدی , با همان دست پس خواهی گرفت »
      این جمله رو فراموش نکن

      دیدگاه


        #18
        پاسخ : مشکل در برنامه نویسی ربات مسیریاب

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

        شما این رو تویه گوگل جستجو کنید 0xFF to decimal ،(تبدیل هگز به دسیمال) پاسختون میشه 255
        یا 255 رو to binary جستجو کنید(تبدیل دسیمال به باینری)،پاسختون میشه 0b11111111

        دسیمال بدین شکل میشه

        پایه 0 به دسیمال میشه 1 . پایه 1 به دسیمال میشه 2 . پایه 2 به دسیمال میشه 4 . پایه 3 به دسیمال میشه 8 .پایه 4 میشه 16 .پایه 5 میشه 32.پایه 6 میشه 64 . پایه 7 میشه 128 .پایه 8 میشه 256

        حالا اگر بخوایم دو یا چند پایه رو در وضعیت یک نشون بدیم .. کافی فقط اعداد هر پایه رو با هم جمع کنیم .. یعنی 0b00001111 میشه 1+2+4+8=15 کافی جلوی پین بنویسیم 15 . بدین شکل PINA=15
        ---
        سوالی که پرسیدم،سخته،تویه اینترنت گشتم چیزی بخصوصی پیدا نکردم .سعی میکنم خودم راهی براش پیدا کنم
        ممنون از وقتی که گذاشتید.

        دیدگاه


          #19
          پاسخ : مشکل در برنامه نویسی ربات مسیریاب

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

          دیدگاه


            #20
            پاسخ : مشکل در برنامه نویسی ربات مسیریاب

            نوشته اصلی توسط pooyan-shafiei
            من متوجه سوالتون نشدم.یعنی چی به خاطر کتابخونه تاخیر ایجاد میشه.منظورتون کدوم کتابخونه اس؟
            سلام و ممنون از پاسختون ..
            ---
            ببینید
            من 8 تا led دارم که به پایه های میکرو وصل هستم
            حالا می خوام وقتی یک نوع پین 1 شد،یک نوع رقص نور متناسب به اون وضعیت نشون بده (یک جوری هوش زبانی ربات باشه )

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

            [code=c] if(PINA==1)
            {
            PORTD.0=1;
            PORTD.1=0;
            PORTD.2=0;
            PORTD.3=1;
            OCR1A=250;
            OCR1B=450;


            PINC=1;
            delay_ms(100);
            PINC=2;
            delay_ms(100);
            PINC=4;
            delay_ms(100);
            PINC=32;
            delay_ms(100);
            PINC=16;
            delay_ms(100);
            PINC=8;
            delay_ms(100);
            } [/code]

            دیدگاه


              #21
              پاسخ : مشکل در برنامه نویسی ربات مسیریاب

              مگه برای ایجاد رقص نور کتابخونه لازمه؟آخه کتابخونه معمولا واسه ال سی دی و ماژول های مختلفه.منظورتون از کتابخونه را نگرفتم.
              پروتئوس خیلی چیزا میگه.خیلی ایراد ها را نشون نمیده.بعضی مواقع هم خودش ایراد درست میکنه،در حالی که تو عمل ماجرا فرق می کنه.
              پایین پروتئوس یه تایمر هست که زمان خود برنامه را نشون میده.یه نگاهی هم به اون بندازید و با اون هم مطابقت بدید.
              راستی دقت کنید کلاک میکرو تو پروتئوس درست تنظیم شده باشه. :job:
              اگه برنامه و فایل شبیه سازی را بذارید شاید بتونم بیشتر کمک کنم.
              آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

              دیدگاه


                #22
                پاسخ : مشکل در برنامه نویسی ربات مسیریاب

                نوشته اصلی توسط SINASET
                سلام بر شما
                شبتون بخیر.
                ---
                چرا دیگه بهش میگن دسیمال

                شما این رو تویه گوگل جستجو کنید 0xFF to decimal ،(تبدیل هگز به دسیمال) پاسختون میشه 255
                یا 255 رو to binary جستجو کنید(تبدیل دسیمال به باینری)،پاسختون میشه 0b11111111

                دسیمال بدین شکل میشه

                پایه 0 به دسیمال میشه 1 . پایه 1 به دسیمال میشه 2 . پایه 2 به دسیمال میشه 4 . پایه 3 به دسیمال میشه 8 .پایه 4 میشه 16 .پایه 5 میشه 32.پایه 6 میشه 64 . پایه 7 میشه 128 .پایه 8 میشه 256

                حالا اگر بخوایم دو یا چند پایه رو در وضعیت یک نشون بدیم .. کافی فقط اعداد هر پایه رو با هم جمع کنیم .. یعنی 0b00001111 میشه 1+2+4+8=15 کافی جلوی پین بنویسیم 15 . بدین شکل PINA=15
                ---
                سوالی که پرسیدم،سخته،تویه اینترنت گشتم چیزی بخصوصی پیدا نکردم .سعی میکنم خودم راهی براش پیدا کنم
                ممنون از وقتی که گذاشتید.
                بله در مبانی دیجیتالمون این مباحث کامل تر از این وجود داره , اما من فکر کردم شما دارید PINX رو 0 و 1 میکنید به اعداد روبه روش در نگاه اول توجه نکرده بودم .
                اما در زبان C فکر میکنم به جای 15 باید بنویسید 0x15 مثل اعداد باینری که در ازن زبان با پسوند 0b میان ! به هر حال به این شکل , یعنی بدون پسوند 0x من امتحان نکردم و مطمئن نیستم جواب بده .
                مورد بعدی اینه شما باز هم دارید همون اشتباه اول رو میکنید , بازم دارید از مقایسه استفاده میکنید . من یکی دو بار مستقیم و غیر مستقیم راهنماییی کردم , وقتی ربات آماده شد و روی پیست قرار دادید متوجه میشید حرفی که من زدم میشید .

                موفق باشید
                « با هر دستی بدی , با همان دست پس خواهی گرفت »
                این جمله رو فراموش نکن

                دیدگاه


                  #23
                  پاسخ : مشکل در برنامه نویسی ربات مسیریاب

                  نوشته اصلی توسط SINASET
                  سلام و ممنون از پاسختون ..
                  ---
                  ببینید
                  من 8 تا led دارم که به پایه های میکرو وصل هستم
                  حالا می خوام وقتی یک نوع پین 1 شد،یک نوع رقص نور متناسب به اون وضعیت نشون بده (یک جوری هوش زبانی ربات باشه )

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

                  [code=c] if(PINA==1)
                  {
                  PORTD.0=1;
                  PORTD.1=0;
                  PORTD.2=0;
                  PORTD.3=1;
                  OCR1A=250;
                  OCR1B=450;


                  PINC=1;
                  delay_ms(100);
                  PINC=2;
                  delay_ms(100);
                  PINC=4;
                  delay_ms(100);
                  PINC=32;
                  delay_ms(100);
                  PINC=16;
                  delay_ms(100);
                  PINC=8;
                  delay_ms(100);
                  } [/code]

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

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

                  « با هر دستی بدی , با همان دست پس خواهی گرفت »
                  این جمله رو فراموش نکن

                  دیدگاه


                    #24
                    پاسخ : مشکل در برنامه نویسی ربات مسیریاب

                    نوشته اصلی توسط Amir_Eshraghi

                    شما همین خط کدتون رو بررسی کنید . وقتی سنسور در اون حالت قرار گرفت , برنامه وارد شرط میشه و موتور ها رو راه میندازه , سپس با چند بار تاخیر چند ال ای دی رو روشن خاموش میکنه ( میتونستین از حلقه ی for استفاده کنید ) بعد که از حلقه اسن سنور خارج شد مجموعا 600 میلی ثانیه تاخیر داشته ! یعنی 600 میلی ثانیه هیچ سنسوری و ست نکرده و در همون سرعتی که موتور ها داده شده چرخیده یا حرکت کرده و فقط 4 تا ال ای دی رو روشن خاموش کرده که این تا خیر ها بدترین کاره برای مسیریاب و غیر اصولی ترنی کار و برای رففع این مشکل هیچ کتابخوه یا چیز دیگه ای نیست ! فقط باید تاخیر رو حذف کنید . این 600 میلی ثانیه هم من به صورت عملی تفاوتشو تجربه کردم با تاخیر نداشتن ! اون چیزی هم که پروتئوس گفته با منطق تحلیلی کد 100 درصد جوره .

                    نمورد بعدی " حالا می خوام وقتی یک نوع پین 1 شد " شما با توجه به شرطی که نوشتین باید بگید فلان پین یا سنسور وقتی 1 شد و بقیه ی سنسور ها صفر شدند , چون از لحاظ تحلیلی این خیلی فرق میکنه با گفته و نوشته ی شما .
                    « با هر دستی بدی , با همان دست پس خواهی گرفت »
                    این جمله رو فراموش نکن

                    دیدگاه


                      #25
                      پاسخ : مشکل در برنامه نویسی ربات مسیریاب

                      با سلام
                      ممنون از توضیحات دو کاربر محترم

                      فکر کنم تنها راهش اینکه بشه،یک جوری به میکرو فهموند،که هر وقت یک شرط اجرا شد،دیگه اصلا کاری به باقی دستور قبلی نداشته (در اینجا منظور تاخیرهای چشمک زن)
                      کار سختی و با توجه به اینکه میکرو از اول شروع میکنه به خوندن دستورات و نمی تونه چند خط رو جداگانه مرور کنه...راهی نیست (البته شاید برای AVR نشه ،شاید با ARM بشه ! ) اما به احتمال قوی با یک میکرو جداگانه بشه !
                      بازم تشکر از وقت که گذاشتید.

                      دیدگاه


                        #26
                        پاسخ : مشکل در برنامه نویسی ربات مسیریاب

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

                        اما در مورد سوال دوم که avr میتونه دو عمل را همزمان انجام بده یا نه.جوابش هم آره است هم نه.در یک لحظه از زمان فقط یه کار را میتونه انجام بده ولی شما فرض کن که نوشتی تاخیر 100 میلی ثانیه رخ بده.در این حالت دستور های وقفه قابلیت انجام شدن دارن.یعنی مثلا اگه یه تایمر را راه بندازید و وقفه سرریزش را فعال کنید.ممکنه که برنامه شما داره تو پروسه تاخیر باشه ولی چون وقفه ارجحیت داره میره و دستورات وقفه را انجام میده.این یعنی اینکه دیگه ترتیب خط به خط بودن اجرا نقض می شه.پس این مشکل با تایمر میتونه تقریبا حل بشه.ولی همین طور که اینجا گفتم اینجا نیاز نیست. :job:
                        آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                        دیدگاه


                          #27
                          پاسخ : مشکل در برنامه نویسی ربات مسیریاب

                          سلام دوباره
                          --
                          ممنون از توضیحاتون ..
                          پس شما با توجه به وضعیت چه راه حلی رو پیشنهاد میدید ؟! (ظاهرا بعضی جاها گفته شده با تایمر جداگانه امکان پذیر!)
                          اگر اره حلی به ذهنتون میرسه بفرمایید
                          باتشکر.

                          دیدگاه


                            #28
                            پاسخ : مشکل در برنامه نویسی ربات مسیریاب

                            در این مورد نیازی به تایمر نیست.فقط اون delay ها را حذف کنید.
                            نوشته اصلی توسط pooyan-shafiei
                            خوب به نظر من اون تاخیر را اصلا نباید اونجا بذارید چون که تا زمانی که یه قول خودتون یه جور پین رخ بده اون ال ای دی ه باید روشن بمونه.در واقع ربات تا میاد وضعیت خودش را اصلاح کنه یه زمانی نیاز داره و خود همین تاخیر لازم را ایجاد میکنه.و وقتی که ربات رفت به وضعیت جدید و یه جور پین دیگه رخ داد هم وضعیت ال ای دی ها هم متناسب با اون تغییر میکنه.
                            نتیجه اینکه در عمل اون تاخیر ها را حذف کنید خیلی بهتره.
                            :job:
                            آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                            دیدگاه

                            لطفا صبر کنید...
                            X