اطلاعیه

Collapse
No announcement yet.

چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

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

    چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

    1- مثلا من می نویسم
    Wait 1
    ولی با Waitms 100
    خیلی در اجرا متفاوته. چرا؟ و بهتره برای بدست آوردن زمان درست از چه دستوری در بیسکام استفاده کنیم.

    2- اگه ممکنه سیم کشی یک مدار ساده با avr رو به صورت عملی نه شماتیک به صورت عکس بذارید.

    3- از کجا باید بدونیم چقدر در یک مدار نویز ایجاد می شه و چطور می شه اون رو رفع کرد تا avr هم در صنعت بتونه به PIC برسه؟



    کنکوری 90 ديروز،آ‌دانشجو مهندسي نرم افزار پلي تكنيك امروز!

    #2
    پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

    دستور Wait با کلاک سیستم کار می کنه و دقت درستی نداره . مثلا Wait 1 یعنی اینکه 1 ثانیه صبر کن . خب حالا اگه با کلاک داخلی کنترولر کار کنه ( 1 مگاهرتز ) تقریبا 1 ثانیه می صبره
    اما با کلاک مثلا 16 مگاهرتز این زمان خیلی کمتر از 1 ثانیه می شه . تو بسکام این دستور فقط واسه تاخیر های تقریبیه . ضمنا این دستور نرم افزاری کار می کنه بنابر این نباید ازش انتظار
    دقت بالا رو داشت .

    برای بدست اوردن زمان دقیق باید از تایمر استفاده کنی . ( یعنی مد سخت افزاری )

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

    دیدگاه


      #3
      پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

      نوشته اصلی توسط حسین بنیامین
      دستور Wait با کلاک سیستم کار می کنه و دقت درستی نداره . مثلا Wait 1 یعنی اینکه 1 ثانیه صبر کن . خب حالا اگه با کلاک داخلی کنترولر کار کنه ( 1 مگاهرتز ) تقریبا 1 ثانیه می صبره
      اما با کلاک مثلا 16 مگاهرتز این زمان خیلی کمتر از 1 ثانیه می شه . تو بسکام این دستور فقط واسه تاخیر های تقریبیه . ضمنا این دستور نرم افزاری کار می کنه بنابر این نباید ازش انتظار
      دقت بالا رو داشت .

      برای بدست اوردن زمان دقیق باید از تایمر استفاده کنی . ( یعنی مد سخت افزاری )

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

      دیدگاه


        #4
        پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

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

        دیدگاه


          #5
          پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

          نوشته اصلی توسط حسین بنیامین
          دستور Wait با کلاک سیستم کار می کنه و دقت درستی نداره . مثلا Wait 1 یعنی اینکه 1 ثانیه صبر کن . خب حالا اگه با کلاک داخلی کنترولر کار کنه ( 1 مگاهرتز ) تقریبا 1 ثانیه می صبره
          اما با کلاک مثلا 16 مگاهرتز این زمان خیلی کمتر از 1 ثانیه می شه . تو بسکام این دستور فقط واسه تاخیر های تقریبیه . ضمنا این دستور نرم افزاری کار می کنه بنابر این نباید ازش انتظار
          دقت بالا رو داشت .

          برای بدست اوردن زمان دقیق باید از تایمر استفاده کنی . ( یعنی مد سخت افزاری )

          از نظر نویز هم فرقه چندانی بین ا avr و PIC وجود نداره .
          سلام. من فکر میکنم که این جوری نیست.

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

          نوشته اصلی توسط وحید-الکترونیک
          1- مثلا من می نویسم
          Wait 1
          ولی با Waitms 100
          خیلی در اجرا متفاوته. چرا؟ و بهتره برای بدست آوردن زمان درست از چه دستوری در بیسکام استفاده کنیم.



          دقت کنید که wait 1 تاخیر 1 ثانیه ایجاد میکنه و waitms 1 یک تاخیر 1 میلی ثانیه. هر ثانیه هم 1000 میلی ثانیه هست. پس مطمئنا باید wait 1 با waitms 100 متفاوت باشه.

          wait 1 تقریبا با waitms 1000 برابر هست.

          دیدگاه


            #6
            پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

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

            دیدگاه


              #7
              پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

              شما باید اگه کریستال رو به فرض مثال 10 مگا انتخاب کرده باشی باید فیوز بیت مربوطه هم روی 10 مگ باشه در غیر اینصورت زمان ها دقیق نیستن
              مثلا"
              $crystal=10000000
              باشه باید فیوز بیت هم این مقدار باشه .
              همین :redface:

              دیدگاه


                #8
                پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

                سلام.

                این تاخیر واسه کریستال 12 مگا توسط کدویژن

                [b]
                ; 129 delay_ms(10);
                LDI R30,LOW(10)
                LDI R31,HIGH(10)
                ST -Y,R31
                ST -Y,R30
                CALL _delay_ms


                ; 131 delay_ms(4000);
                LDI R30,LOW(4000)
                LDI R31,HIGH(4000)
                ST -Y,R31
                ST -Y,R30
                CALL _delay_ms


                _delay_ms:
                ld r30,y+
                ld r31,y+
                adiw r30,0
                breq __delay_ms1
                __delay_ms0:
                __DELAY_USW 0xBB8
                wdr
                sbiw r30,1
                brne __delay_ms0
                __delay_ms1:
                ret
                این هم واسه کریستال 10مگا .
                [b]


                ; 128 delay_ms(10);
                LDI R30,LOW(10)
                LDI R31,HIGH(10)
                ST -Y,R31
                ST -Y,R30
                CALL _delay_ms



                ; 130 delay_ms(4000);
                LDI R30,LOW(4000)
                LDI R31,HIGH(4000)
                ST -Y,R31
                ST -Y,R30
                CALL _delay_ms


                _delay_ms:
                ld r30,y+
                ld r31,y+
                adiw r30,0
                breq __delay_ms1
                __delay_ms0:
                __DELAY_USW 0x9C4
                wdr
                sbiw r30,1
                brne __delay_ms0
                __delay_ms1:
                ret

                می بینید که یک ماکرو به برنامه اضافه شده و ورودی ماکرو به مقدار کریستال بستگی داره......


                [color=red]
                .MACRO __DELAY_USW
                LDI R24,LOW(@0)
                LDI R25,HIGH(@0)
                __DELAY_USW_LOOP:
                SBIW R24,1
                BRNE __DELAY_USW_LOOP
                .ENDM

                دیدگاه


                  #9
                  پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

                  قبول دارم ولی تو عمل شما تست کردین ؟ ( آقای راجی )


                  فیوز بیت مربوطه روی 10مگ باشه یعنی چی ؟ ( فرزاد جان )

                  وقتی فیوز بیت Clock selection رو روی مد کلاک خارجی تنظیم می کنیم میکرو از کلاک خارجی استفاده می کنه . حالا منظور تون رو از اینکه می گین " فیوز بیت مربوطه روی 10 مگ باشه " متوجه نمی شم . مگه تو فیوز بیتها چیزی میشه نوشت ؟ یا شاید هم منظورتون رو اشتباه گرفتم
                  آسمان بار امانت نتوانست کشید قرعه کار به نام من دیوانه ردند
                  سلطانی دو عالم باشد از آن آن کس سلطان بیامدست و درویش رفته باشد

                  دیدگاه


                    #10
                    پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

                    نوشته اصلی توسط H0Ben
                    قبول دارم ولی تو عمل شما تست کردین ؟ ( آقای راجی )
                    سلام.
                    با کدویژن که تست کردم. چون اتفاقا یک بار همین موضوع توی ذهنم بود و خواستم مطمئن شم.

                    نوشته اصلی توسط فرزاد ثانی
                    شما باید اگه کریستال رو به فرض مثال 10 مگا انتخاب کرده باشی باید فیوز بیت مربوطه هم روی 10 مگ باشه در غیر اینصورت زمان ها دقیق نیستن
                    مثلا"
                    $crystal=10000000
                    باشه باید فیوز بیت هم این مقدار باشه .
                    همین :redface:
                    :question: :angry: :angry: oo:

                    دیدگاه


                      #11
                      پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

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

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

                      دیدگاه


                        #12
                        پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

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

                        سلام.
                        متاسفانه تاخیر هایی که توسط زبان های برنامه نویسی به جز اسمبلی ایجاد میشن ( نرم افزاری) زیاد دقیق نیستن. واسه همین یا از تایمر ها باید استفاده کنید یا با اسمبلی یک تاخیر دقیق ایجاد کنید.
                        زمان تاخیر هم متناسب با چیزی که شما خواستین ایجاد می شه. مثلا من دوتا دستور delay_ms(10) و delay_ms(4000) رو نوشتم و کد های بالایی براشون ایجاد شد.

                        دیدگاه


                          #13
                          پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

                          خوب یه مقدار توضیح میدم :

                          اگه شما برای کامپایلر تعریف کرده باشید که سورس شما برا اساس مثلا فرکانس 8 مگ کار میکنه باید فیوز بیت مربوطه رو روی 8 مگ قرار بدبد ( در مد کلاک internal )

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

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

                          در بازار دو نوع کریستا ل وجود داره . کریستا ل های کوارتز و کریستال های سرامیک .

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

                          همین :redface:

                          دیدگاه


                            #14
                            پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه

                            نوشته اصلی توسط وحید-الکترونیک
                            1- مثلا من می نویسم
                            Wait 1
                            ولی با Waitms 100
                            خیلی در اجرا متفاوته. چرا؟ و بهتره برای بدست آوردن زمان درست از چه دستوری در بیسکام استفاده کنیم.

                            2- اگه ممکنه سیم کشی یک مدار ساده با avr رو به صورت عملی نه شماتیک به صورت عکس بذارید.

                            3- از کجا باید بدونیم چقدر در یک مدار نویز ایجاد می شه و چطور می شه اون رو رفع کرد تا avr هم در صنعت بتونه به PIC برسه؟

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

                            دیدگاه


                              #15
                              پاسخ : چرا زمان درست اجرا نمی شود؟ و یه مشکل دیگه



                              سلام.
                              متاسفانه تاخیر هایی که توسط زبان های برنامه نویسی به جز اسمبلی ایجاد میشن ( نرم افزاری) زیاد دقیق نیستن. واسه همین یا از تایمر ها باید استفاده کنید یا با اسمبلی یک تاخیر دقیق ایجاد کنید.
                              زمان تاخیر هم متناسب با چیزی که شما خواستین ایجاد می شه. مثلا من دوتا دستور delay_ms(10) و delay_ms(4000) رو نوشتم و کد های بالایی براشون ایجاد شد.
                              [/quote]

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

                              دیدگاه

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