NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4609 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 13 از 13

موضوع: مشکل با کدویژن

  1. #1
    کاربر فعال mihman آواتار ها
    تاریخ عضویت
    Jul 2011
    نوشته ها
    288
    تشکر
    159
    تشکر شده 164 بار در 121 پست

    New مشکل با کدویژن

    سلام.
    من یه مشکلی با کدویژن پیدا کردم که از دوستان خواهش میکنم برای رفع اون کمک کنن.فقط اول میگم که میخوام چکار کنم بعد مشکل را توضیح میدم:
    دوستان اگه توی فرمول زیر :
    [HTML]p=(500*(read_adc(0)-41))/921[/HTML]

    به جای read_adc(0) عدد 1023 را بذاریم،حاصل عبارت میشه 533.1161780673181
    فرض بگیریم که میخواهیم حاصل فرمول را بر روی یک lcd نمایش بدیم.به این منظور از دستورات زیر استفاده می کنیم:
    [HTML]
    lcd_clear();
    lcd_gotoxy(0,0);
    sprintf(str1,"P=%.2f",p);
    lcd_puts(str1); [/HTML]


    در ضمن متغیرها بصورت زیر تعریف شده اند :
    کد:
     
    
    unsigned char str1[16];
    float p;

    اما مشکل اینجاست که به ازای read_adc(0)>171 ، دیگه کدویژن حاصل فرمول را درست بدست نمیاره.
    مثلا برای read_adc(0)=171، مقدار محاسبه شده برای فرمول 70 هست ولی برای read_adc(0)=172 مقدار محاسبه شده برای فرمول 0 میشه و از 173 تا1023، مقدارمحاسبه شده برای فرمول از1 تا 35 افزایش پیدا میکنه.

    این چیزایی که گفتم را هم با پروتئوس و هم عملی تستش کردم.
    ممنون میشم اگه کسی مشکلو حل کنه

    با تشکر

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    تا اونجایی که من میدونم به صورت پیشفرض فرمان Printf مقادیر Float , lONG رو ساپورت نمیکنه که باید از توی تنظیمات پروژه نمایش این مقادیر رو فعال کنید. شما این قست رو فعال کردید؟
    اگر تنظیم نکردید وارد قسمت پروجکت -> کانفیگور(آخرین گذینه) و مثل عکس زیر عمل کنید:
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: Codev.JPG
مشاهده: 49
حجم: 55.6 کیلو بایت  

  4. #3
    کاربر فعال mihman آواتار ها
    تاریخ عضویت
    Jul 2011
    نوشته ها
    288
    تشکر
    159
    تشکر شده 164 بار در 121 پست

    پیش فرض

    نقل قول نوشته اصلی توسط agape نمایش پست ها
    تا اونجایی که من میدونم به صورت پیشفرض فرمان Printf مقادیر Float , lONG رو ساپورت نمیکنه که باید از توی تنظیمات پروژه نمایش این مقادیر رو فعال کنید. شما این قست رو فعال کردید؟
    اگر تنظیم نکردید وارد قسمت پروجکت -> کانفیگور(آخرین گذینه) و مثل عکس زیر عمل کنید:
    تشکر از توجه جنابagape
    مهندس من این تنظیمات را انجام دادم.ولی مشکل همچنان وجود داره.

  5. #4
    مدیرکل انجمنها
    تاریخ عضویت
    May 2011
    نام
    احسان صفامنش
    نوشته ها
    1,763
    تشکر
    919
    تشکر شده 2,261 بار در 1,056 پست

    پیش فرض

    اولا رشته رو هیچوقت از نوع بدون علامت تعریف نکنید و فقط بنویسید char str1[16]; عدد که نیست بدون علامت باشه
    ثانیا اول با مقدار صحیح امتحان کنید ببینین جواب میده بعد با اعشاری کار کنین اونوقت میفهمین مشکل از کجاست و یک راهی پیدا کنین

  6. #5
    کاربر فعال mihman آواتار ها
    تاریخ عضویت
    Jul 2011
    نوشته ها
    288
    تشکر
    159
    تشکر شده 164 بار در 121 پست

    پیش فرض

    نقل قول نوشته اصلی توسط esisafa نمایش پست ها
    اولا رشته رو هیچوقت از نوع بدون علامت تعریف نکنید و فقط بنویسید char str1[16]; عدد که نیست بدون علامت باشه
    ثانیا اول با مقدار صحیح امتحان کنید ببینین جواب میده بعد با اعشاری کار کنین اونوقت میفهمین مشکل از کجاست و یک راهی پیدا کنین
    تشکر از جناب esisafa
    مهندس جان در مورد تعریف رشته فرمایش شما کاملا صحیح هست و از بابت تذکرتون ممنون.
    اما مشکل من همنطوری که قبلا هم عرض کردم با اینه که read_adc(0)>171 ،به ازای دیگه کدویژن حاصل فرمول را درست بدست نمیاره.حالا چه حاصل فرمول اعشاری باشه و چه صحیح.
    اصلا عددی که کدویژن از فرمول P بدست میاره،یک عدد پرت هست.

    همچنان منتظر یاری شما دوستان هستم.

  7. #6
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    با سلام
    مشكل حل شد. كدتون رو به صورت زير تغيير بديد(من خودم تست كردم درست جواب ميده):
    [HTML] p1=(500*(184-41));
    p2 = p1 /921;
    lcd_clear();
    lcd_gotoxy(0,0);
    sprintf(str1,"p= %3.4f",p2);
    lcd_puts(str1);[/HTML]

    متغير هاي p1 و p2 و str1 رو به اين صورت تعريف كنيد.
    [HTML]char str1[16];


    float p1,p2;[/HTML]

    ویرایش توسط sadmonew : 13-09-2011 در ساعت 17:28

  8. تشکرها از این نوشته :


  9. #7
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    اين تنظيمات رو هم در CodeVision انجام بديد.
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: float_cvavr.JPG
مشاهده: 42
حجم: 66.0 کیلو بایت  

  10. تشکرها از این نوشته :


  11. #8
    کاربر فعال mihman آواتار ها
    تاریخ عضویت
    Jul 2011
    نوشته ها
    288
    تشکر
    159
    تشکر شده 164 بار در 121 پست

    Icon2008

    نقل قول نوشته اصلی توسط sadmonew نمایش پست ها
    با سلام
    مشكل حل شد. كدتون رو به صورت زير تغيير بديد(من خودم تست كردم درست جواب ميده):

    [HTML] p1=(500*(184-41)); [/HTML]
    [HTML]
    p2 = p1 /921;
    lcd_clear();
    lcd_gotoxy(0,0);
    sprintf(str1,"p= %3.4f",p2);
    lcd_puts(str1);
    [/HTML]


    متغير هاي p1 و p2 و str1 رو به اين صورت تعريف كنيد.



    [HTML]char str1[16];[/HTML]



    <DIV align=left>[HTML]


    float p1,p2;
    [/HTML]

    تشکر مخصوص از جناب آقای صادق محمدی عزیز که باز هم مثل همیشه منو شرمنده لطفشون کردن.
    مهندس جان البته حرف و برنامه ای که شما می نویسید برای ما سند هست.منتها من باز هم متوجه نمیشم که اشکال کار من کجاست.البته فکر کنم شما در قسمت زیر یادتون رفته که به جای عدد184،عبارت read_adc را بنویسید.درست میگم؟؟؟؟
    [HTML] p1=(500*(184-41)); [/HTML]
    البته من همه کارهایی که شما گفتین را انجام دادم و برنامه و عکس پروتئوس را هم گذاشتم.همونطور که در عکس می بینید،ولتاژ کانال صفر adc برابر5 ولت هست.یعنی مقدار read_adc(0)=1023 ،ولی همچنان مقدار pیک عدد پرت هست.
    لطفا کمکم کنید که دارم دیوونه میشم.
    فايل هاي پيوست شده فايل هاي پيوست شده

  12. #9
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    بله شما دزست ميگد بي دقتي از من بود اما خوب به نتيجه رسيدم. اول عكسا رو كه مربوط به سه حالت adc با ولتاژ 2.5 ولت و 0 ولت و 5 ولت ميشه رو ببينيد. توضيحات مربوط به چگونگي تغيير كد رو در پست بعدي ارائه ميدم .
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: ADC1.JPG
مشاهده: 30
حجم: 85.2 کیلو بایت   برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: ADC2.JPG
مشاهده: 25
حجم: 84.6 کیلو بایت   برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: ADC3.JPG
مشاهده: 25
حجم: 80.8 کیلو بایت  

  13. #10
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    تغييرات كد:
    [HTML]#define ADC_VREF_TYPE 0x00

    // Read the AD conversion result
    long read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }[/HTML]
    و همچنين :
    [HTML]// ADC initialization
    // ADC Clock frequency: 500.000 kHz
    // ADC Voltage Reference: AREF pin
    // Only the 8 most significant bits of
    // the AD conversion result are used
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x8A;[/HTML]
    و وقفه كل هم نبايد فعال باشه. باقي كدها و اون كدهايي كه قبلا نوشتم بدون تغيير در برنامه قرار بديد. من از ميكروي ATmega8 استفاده كردم با كريستال 8MHz. اگه بازم سوالي است مطرح كنيد.

    ________________________
    برنامه نويسي، الكترونيك(PE)
    ________________________
    ویرایش توسط sadmonew : 14-09-2011 در ساعت 02:12

  14. #11
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    شما در حين كامپايل با اين Warning مواجه ميشديد درسته:
    [HTML] overflow is possible in 16 bit multiplication, casting to 'long' may be required[/HTML]
    كه به تعريف تابع read_adc مربوط ميشه كه در حالت اصلي به اين صورته:
    [HTML]unsigned int read_adc(unsigned char adc_input)[/HTML]
    كه بايد به صورت زير تصحيح بشه يعني:
    [HTML]long read_adc(unsigned char adc_input)[/HTML]

    و همين با اين تغيير مشكل حل شد.

    ویرایش توسط sadmonew : 14-09-2011 در ساعت 02:22

  15. تشکرها از این نوشته :


  16. #12
    کاربر فعال mihman آواتار ها
    تاریخ عضویت
    Jul 2011
    نوشته ها
    288
    تشکر
    159
    تشکر شده 164 بار در 121 پست

    پیش فرض

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

  17. #13
    کاربر فعال mihman آواتار ها
    تاریخ عضویت
    Jul 2011
    نوشته ها
    288
    تشکر
    159
    تشکر شده 164 بار در 121 پست

    پیش فرض

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

موضوعات مشابه

  1. هویه هوای گرم
    توسط behnam6500 در انجمن مفاهیم اولیه در رباتیک
    پاسخ: 20
    آخرين نوشته: 28-12-2015, 18:14
  2. Spi نرم افزاری در کدویژن
    توسط ali2914 در انجمن AVR
    پاسخ: 16
    آخرين نوشته: 13-08-2014, 00:49
  3. برنامه نقاشی ویندوز 7 را به ویندوزهای ویستا و ایکس پی اضافه کنید
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 1
    آخرين نوشته: 20-01-2010, 15:43
  4. نواز وظیفه ویندوزهای ایکس پی و ویستا را به نوار وظیفه ویندوز 7 تبدیل کنید
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 0
    آخرين نوشته: 19-01-2010, 13:39
  5. Xp ویندوزهای ویندوز 2003 سرور را دقیقا به ویندوز 7 تبدیل نمائید
    توسط arsalan681 در انجمن ترفندهای کامپیوتری/معرفی نرم افزار های مفید
    پاسخ: 0
    آخرين نوشته: 19-01-2010, 12:59

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •