اطلاعیه

Collapse
No announcement yet.

خطا در برنامه به زبان c

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

    خطا در برنامه به زبان c

    سلام به همه دوستان
    یه برنامه نوشتم متاسفانه کدویژن یه ایراد گرفته از برنامه
    در واقع از تابع delay_us ایراد گرفته وقتی به جای u میزارم m دیگه خطا نمیده
    چرا اینطوریه ؟
    کسی میدونه داره چی میگه و باید چیکار کنم ؟

    آرزوی سرافرازی برای ایران عزیز . . .



    #2
    پاسخ : خطا در برنامه به زبان c

    سلام
    ارور اینو میگه که باید ورودی تابع delay_us از جنس constant باشه ونمیتونه متغیر باشه...اگه تاخیر مد نظرتون همیشه مقداری ثابت داره به جای time مقدار عددیشو بذارید...اگه در طول برنامه مقدار time تغییر میکنه و قصد دارید که از تاخیر در حد میکرو ثانیه استفاده کنید میتونید به جای اون تابع از تابع delay_ms استفاده کنید و عدد ورودی رو اعشاری بدید...مثلا delay_ms(0.01) که معادل تاخیری تقریبا برابر با 100میکرو ثانیه هست...
    تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

    www.intelart.ir


    ساخت کنترلر دما PID فازي با AVR [آموزشی]

    دیدگاه


      #3
      پاسخ : خطا در برنامه به زبان c

      نوشته اصلی توسط Mahdi.Faani نمایش پست ها
      سلام
      ارور اینو میگه که باید ورودی تابع delay_us از جنس constant باشه ونمیتونه متغیر باشه...اگه تاخیر مد نظرتون همیشه مقداری ثابت داره به جای time مقدار عددیشو بذارید...اگه در طول برنامه مقدار time تغییر میکنه و قصد دارید که از تاخیر در حد میکرو ثانیه استفاده کنید میتونید به جای اون تابع از تابع delay_ms استفاده کنید و عدد ورودی رو اعشاری بدید...مثلا delay_ms(0.01) که معادل تاخیری تقریبا برابر با 100میکرو ثانیه هست...
      نمیدونستم که تو تابع delay_ms میشه از اعداد کمتر از 1 استفاده کرد
      1_ آیا از اعداد اعشاری هم میشه استفاده کرد ؟
      2_ چرا تو تابع delay_us نمیشه متغیر گذاشت ؟
      3_فکر کنم یه اشتباه هم انجام دادید اگه بنویسیم delay_ms(0.01) میشه 10 میکرو ثانیه نه 100 میکرو ثانیه

      با تشکر از راهنمایی شما
      آرزوی سرافرازی برای ایران عزیز . . .


      دیدگاه


        #4
        پاسخ : خطا در برنامه به زبان c

        3-بله درست میگید...اشتباهی 0.01*1000 رو با 100 برابر گرفتم!

        خواهش میکنم...

        2-در واقع تابع delay_ms از delay_us به تعداد زیاد استفاده میکنه تا تاخیر مد نظر شما رو بسازه...وقتی پروژه رو کامپایل میکنید بر اساس کلاک میکروکنترلر اون عدد ثابت ورودی تابع میکروثانیه تعریف میشه و در طول کار میکروکنترلر از اون به عنوان بیس کاری تابع میلی ثانیه استفاده میکنه...در هر صورت شما واسه ایجاد تاخیر از delay_ms استفاده کنید و ورودیشو به دلخواه خودتون وارد کنید...

        1- با کدویژن کار نمیکنم ..ولی با کامپایلر AVR-GCC که کار میکنم ورودی delay_ms از نوع float تعریف شده...شما خودتون میتونید اینو واسه کدویژن تست کنید...
        تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

        www.intelart.ir


        ساخت کنترلر دما PID فازي با AVR [آموزشی]

        دیدگاه


          #5
          پاسخ : خطا در برنامه به زبان c

          سلام
          بصورت پیش فرض delay عدد اعشاری نمیگیره مگر ...
          میتونی از پنجره code navigator فایل delay.h رو باز کنی و دستور void delay_ms(unsigned int n); رو به void delay_us(float n); تغییر بدی. هر چند error نمیده اما فک نمیکنم تو روند برنامه تاثیر داشته باشه، چرا که به فایل سورس تابع دسترسی نداری.نیاز به تست داره.

          دیدگاه


            #6
            پاسخ : خطا در برنامه به زبان c

            یه راه ساده
            یه تابع تعریف کن که کد زیر رو به تعداد مد نظرت تکرار کنه - به جای این که بیای اون کاری که کردی ...
            کد:
            delay_us(1);
            اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

            اگه دوس دارید سریع به جواب برسید :
            1) قبل از پرسیدن سوال، بسرچید.
            2) سوالاتون رو با جزئیات کامل مطرح کنید.

            دیدگاه


              #7
              پاسخ : خطا در برنامه به زبان c

              سلام دوستان من تازه کارم یکی میتونه در باره برنامه نویسی میکرو کنترلر به زبون خیلی ساده برام توضیح بده من زیاد از مفاهیمش سر در نمیارم که مثلا میخام به یه موتور برنامه بدم از چه کدهایی استفاده کنم...

              دیدگاه


                #8
                پاسخ : خطا در برنامه به زبان c

                نوشته اصلی توسط Ali azimi13 نمایش پست ها
                سلام دوستان من تازه کارم یکی میتونه در باره برنامه نویسی میکرو کنترلر به زبون خیلی ساده برام توضیح بده من زیاد از مفاهیمش سر در نمیارم که مثلا میخام به یه موتور برنامه بدم از چه کدهایی استفاده کنم...
                سلام
                سوالتون خیلی کلیه! ببینید برای کار با میکروکنترلر شما باید ترجیحا به زبان C تسلط کافی داشته باشید. ضمنا لازمه با مفاهیم پایه ای مدار و الکترونیک آشنا باشید. زبان C که بلد باشید، منابع برای یادگیری برنامه نویسی برای میکروکنترلرهای مختلف به زبان C زیاده. البته بعضا با زبان بیسیک هم کار میکنن که من اصلا پیشنهادش نمیدم چون محدودیت هایی ایجاد میکنه. اما زبان C با این که کمی سخت تره اما منعطف تره و محدودیت های کمتری داره.
                برای شروع کار با میکروکنترلرها هم من میکروکنترلر AVR و محیط برنامه نویسی اتمل استدیو رو پیشنهاد میدم. AVR سادس و از طرفی کدنویسی اون معمولا در سطح پایین سخت افزار انجام میشه به خاطر همین پایه شما رو برای برنامه نویسی میکروکنترلرهای دیگه قوی تر میکنه. البته توی ایران بیشتر از محیط کدویژن برای AVR استفاده میکنن که من شخصا به خاطر ایرادات فراوانی که داره ازش خوشم نمیاد. همچنین چند سالی میشه که بردهای آردوینو وارد کار شدن که زبون برنامه نویسی اونا ++C هستش و کدنویسی اون کمی سطح بالاتر و خیلی راحت تره که من برای شروع کار زیاد پیشنهادش نمیکنم؛ مگر برای کسایی که به صورت حرفه ای وارد کار میکروکنترلرها نمیخوان بشن.
                با همه این تفاسیری که گفتم، وقتی شما وارد کار با میکروکنترلرها بشید، کم کم و با پیشرفت در کار این سوالات ساده شما خود به خود رفع میشه و فرمان دادن به یک موتور ساده و... براتون راحت تر میشه. بهتره زیاد عجله نداشته باشید و سعی نکنید یک شبه ره 100 ساله طی کنید.
                امیدوارم جوابتونو گرفته باشید

                دیدگاه


                  #9
                  پاسخ : خطا در برنامه به زبان c

                  نوشته اصلی توسط Ali azimi13 نمایش پست ها
                  سلام دوستان من تازه کارم یکی میتونه در باره برنامه نویسی میکرو کنترلر به زبون خیلی ساده برام توضیح بده من زیاد از مفاهیمش سر در نمیارم که مثلا میخام به یه موتور برنامه بدم از چه کدهایی استفاده کنم...
                  برای برنامه نویسی میکروکنترلرها avr باید از کامپایلر استفاده کنیم . هر کامپایلری با یک زبان خاص خودش کار می کند.
                  مثلاً برای کد زدن در کامپایلر بسکام باید با زبان بیسیک کار کرد و در کامپایلر کد ویژن با زبان سی برنامه نویسی کرد.
                  شروع یک پروژه که معمولاً راه اندازی یک ال ای دی چشمک زن می باشد در هر دو کامپایلر بسیار ساده است .قبل از اینکه شما بخواهید انتخاب کنید که با کدوم زبان برنامه بنویسید. توصیه می کنم شرایط کامپایلرها در نظر بگیرید مثلاً نظر شخصی خودم اینه که کامپایل کدویژن خیلی مزخرفه به خاطر اینکه هم برای شروع کار پیچیدگی هایی دارد و هم باک های زیادی دارد. اما اگر صرفاً بخواهید با زبان سی کد بزنید باید از کدویژن استفاده کنید این در حالیست که بسکام کامپایلریست بسیار راحت و باباک کمتر.
                  اما بیسیک به نسبت زبان سی معایب فراوانی دارد. مثلاً میکروکنترلرهای arm فقط با زبان سی راه اندازی میشوند البته به این معنی نیست که اگر شما کدویژن بلد باشید میتوانید تمام آرمه آرا کد نویسی کنید. اما یادگیری زبان سی گسترده است مثلاً اگر فردای روز بخوای بریم و برای میکرو های آرم کد بزنی شما زبان سی را خوب بلدید یا اگر بخواهید با آردینو کار بکنید باز هم زبان سی دانش پایه می باشد .یا اینکه بخواهید برای نرم افزار های کامپیوتری و وب سایت غیره .
                  بنابراین اگر هدف شما فقط میکروکنترلرهای avr باشد برید سراغ بسکام(بعید می*دونم که اهل پیشرفت نباشید). زبان سی خیلی خوبه ولی کدویژن جالب نیست.
                  ایندو کامپایلر بسکام و کدویژن صرفاً در کشور ما خیلی استفاده می شوند بنابراین ناچاریم بر اساس منابع آنها یکی از این دو را انتخاب کنیم.
                  یک راه حل دیگه؛
                  اگر شما هم تمایل دارید ماژولار کار کنید و خیلی سریع تر از آنچه که فکر می کنید به نتیجه برسید صرف نظر از قضاوت بقیه بریدسمت آردینو.
                  کامپایلر آردوینو یکی از بهترین و کاربر پسند ترین و امین ترین کامپایلر های دنیا است کافیست اردینورا نصب کنید منابع خیلی زیاد در آردوینو و گستردگی مهندسان برنامه نویس در سراسر دنیا باعث شده است که برای ۹۹% پروژه ها کتابخانه های آماده*ای مهیا شوند.
                  عده*ای هم معتقدند آردینو اسباب بازی است اینها از الکترونیک و برنامه نویسی یک ابزاری برای پوزدادن می سازند بنابراین به این نظرات توجه نکنید فقط در همین حد بدانید که هردو کامپایلر کدویژن و بسکام انگشت کوچیکه آردوینو نخواهند شد.
                  eshop-hodhod.ir

                  دیدگاه


                    #10
                    پاسخ : خطا در برنامه به زبان c

                    نوشته اصلی توسط rezamajdi نمایش پست ها
                    در واقع از تابع delay_us ایراد گرفته وقتی به جای u میزارم m دیگه خطا نمیده
                    نتیجه سرچ گوگل من (avr freaks.net):
                    تابع delay_us فقط مقدار ثابت می گیره تا بتونه زمان رو دقیق حساب کنه و overhead نداشته باشه. این تابع تا زمان 65.535 میتونه تاخیر ایجاد کنه. راه حال ساده برای استفاده از این تابع اینه:

                    void my_delay_us(int n) {
                    while (n--) {
                    delay_us(1);
                    }
                    }

                    d=1000;
                    my_delay_us(d);

                    دیدگاه


                      #11
                      پاسخ : خطا در برنامه به زبان c

                      ممنونم ازشما دوست من

                      دیدگاه

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