اطلاعیه

Collapse
No announcement yet.

مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

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

    مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

    با سلام
    وقتی که از ADC مقادیر رو می خونم اون رو در یک متغیر float قرار می دم و بعد با استفاده از تابع sprintf مقادی رو روی lcd نماش می دهم ولی اعشاری را نشون نمیده...به صورت 212.00000
    اگه میشه راهنمایی کنید. در ضمن با تغییر متغییر به double بازهم تغییری در خروجی ایجاد نشد.میکرو هم xmega32a4
    این هم برنامه :
    کد:
    #include <avr/io.h>
    #include "lcd.h"
    #include <avr/delay.h>
    #include <stdio.h>
    #include "avr_compiler.h"
    #include "adc_driver.h"
    #define ADC_INPUT ADC_CH_MUXPOS_PIN1_gc
    
    int main(void)
    {
      float ADC_result;
      char lcd_buff[20];
      lcd_init(LCD_DISP_ON);
      ADC_CalibrationValues_Load(&ADCA);
      ADC_ConvMode_and_Resolution_Config(&ADCA, ADC_ConvMode_Unsigned, ADC_RESOLUTION_12BIT_gc);
      ADC_Reference_Config(&ADCA, ADC_REFSEL_VCC_gc);
      ADC_Prescaler_Config(&ADCA, ADC_PRESCALER_DIV8_gc);
      ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH1,ADC_CH_INPUTMODE_SINGLEENDED_gc,ADC_CH_GAIN_1X_gc);              
      ADC_Ch_InputMux_Config(&ADCA.CH1, ADC_INPUT, 0);
      ADC_Enable(&ADCA);
      ADC_Wait_32MHz(&ADCA);
      lcd_home();
      lcd_puts("ADC0.1 LCD XMEGA");
      _delay_ms(3000);
      lcd_clrscr();
      while(1)
      {
        ADC_Ch_Conversion_Start(&ADCA.CH1);
        while(!ADC_Ch_Conversion_Complete(&ADCA.CH1));
        ADC_result = ADC_ResultCh_GetWord(&ADCA.CH1);  
        sprintf(lcd_buff,"ADC=%4.4f",ADC_result);
        lcd_gotoxy(0,1);
        lcd_puts(lcd_buff);
        _delay_ms(500);
        lcd_clrscr();
      }
    }

    #2
    پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

    داخل OPTION برنامه ای که داری مینویسی برو و تنظیمات مربوط به تابع Sprintf رو روی float بزار.
    بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
    موفقيت پيش رفتن است نه به نقطه ي پايان رسيدن
    نلسون ماندلا

    دیدگاه


      #3
      پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

      با سلام
      این تنظیمات رو واسه sprintf تو avrstudio انجام دادم ولی بازم جواب نمیده . درضمن تو avrstudio جایی نیست مانند کدویژن که می رفتیم روی FLOAT قرار می دادیم

      دیدگاه


        #4
        پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

        با سلام
        اگه از AVRSTUDIO 5 استفاده میکنید من تو این جا توضیح دادم :
        http://www.eca.ir/forum2/index.php?t...9606#msg289606
        5. استفاده از تابع sprintf برای تبدیل مقادیر اعشاری(flaot) به رشته :
        خوب اگر قبلا با avr studio کار کردید حتما میدونید که باید چیکار کنید ، اما من رو که خیلی سرکار گزاشت تا اینکه با کمک یکی از دوستان در انجمن ایران میکرو به نام " صادق محمدی "تونستم مشکلم رو حل کنم گفتم بد نیست که این مسئله رو توی این تایپیک هم عنوان کنم .
        به جزئیات اشاره نمیکنم چون خودمم زیاد نمیدونم ؛
        فرض کنید می خواهیم عدد 13.2634124 رو که در یک متغیر از نوع float هست رو با استفاده از دستور sprintf تبدیل به رشته و در ادامه بر روی lcd نمایش بدیم ، برای این کار برنامه زیر رو در نظر بگیرید :

        #include <avr/io.h>
        #include <util/delay.h>
        #include <avr/pgmspace.h>
        #include <stdio.h>
        #include "lcd.h"

        void main(void)
        {
        char buffer[7];
        float num=13.2634124;


        lcd_init(LCD_DISP_ON);
        lcd_clrscr();
        lcd_home();
        sprintf(buffer,"%6.3f", num);
        lcd_puts(buffer);
        _delay_ms(4000);

        while(1);
        }

        خوب برنامه که کاملا مشخصه چی به چیه ، اما یکسری تنظیمات رو باید مثل codvision و iar انجام بدیم تا بتونیم متغیر های از نوع float رو تبدیل به رشته کنیم ، کار هایی که باید انجام بدیم به ترتیب زیر هست :

        1. alt+f7 رو بزنید تا وارد سند تنظیمات برنامه بشید .
        2. برید به برگه toolchain
        3. حالا از شاخه avr/gnu c linker برید به زیر شاخه libraries بعد با کلیک بر روی add در قسمت بالایی و به ترتیب موارد libprintf_flt.a و libm.a اضافه کنید ،به ترتیبی که در شکل زیر مشاهده می کنید :


        4. حالا از شاخه avr/gnu c linker برید به زیر شاخه miscellaneous و سپس در فیلد other linker flags فلگ های : -Wl,-u,vfprintf -lprintf_flt به ترتیبی که در شکل زیر مشاهده میکنید وارد کنید :


        5. تغییرات انجام شده رو سیو کنید و برنامه رو دوباره کامپایل کنید .


        پایان قسمت چهارم

        دیدگاه


          #5
          پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

          با تشکر از دوست عزیز این کارو قبلا انجلام دادم برنامه کامپایل میشه و روی LCD مقادیر اعشاری را نشون نمیده مثل : 234.00000 اعشاری را جدا می کنه ولی به صورت صفر نمایش می ده ...

          دیدگاه


            #6
            پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

            این تیکه رو :
            sprintf(lcd_buff,"ADC=%4.4f",ADC_result) ;
            به این صورت بنویس:
            sprintf(lcd_buff,"ADC=%4.4f",ADC_result* 1.0);
            بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
            موفقيت پيش رفتن است نه به نقطه ي پايان رسيدن
            نلسون ماندلا

            دیدگاه


              #7
              پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

              با سلام به دوستان
              کسی نمی دونه مشکل از کجاست ؟
              من فکر می کنم چون تابعی که خروجی رو می گیریم word هستش و نمیشه به اعشاری تبدیل کرد ...
              ایا راهی است که به اعشاری تبدیل بشه ؟
              :angry: :angry: :angry: :angry:

              دیدگاه


                #8
                پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

                کسی نیست یه راهنمایی کنه ///////

                دیدگاه


                  #9
                  پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

                  ضرب در 1.0 کن. بالاتر گفته بودم.
                  بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
                  موفقيت پيش رفتن است نه به نقطه ي پايان رسيدن
                  نلسون ماندلا

                  دیدگاه


                    #10
                    پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

                    نوشته اصلی توسط mojtaba_led
                    با سلام
                    اگه از AVRSTUDIO 5 استفاده میکنید من تو این جا توضیح دادم :
                    http://www.eca.ir/forum2/index.php?t...9606#msg289606
                    5. استفاده از تابع sprintf برای تبدیل مقادیر اعشاری(flaot) به رشته :
                    خوب اگر قبلا با avr studio کار کردید حتما میدونید که باید چیکار کنید ، اما من رو که خیلی سرکار گزاشت تا اینکه با کمک یکی از دوستان در انجمن ایران میکرو به نام " صادق محمدی "تونستم مشکلم رو حل کنم گفتم بد نیست که این مسئله رو توی این تایپیک هم عنوان کنم .
                    به جزئیات اشاره نمیکنم چون خودمم زیاد نمیدونم ؛
                    فرض کنید می خواهیم عدد 13.2634124 رو که در یک متغیر از نوع float هست رو با استفاده از دستور sprintf تبدیل به رشته و در ادامه بر روی lcd نمایش بدیم ، برای این کار برنامه زیر رو در نظر بگیرید :

                    #include <avr/io.h>
                    #include <util/delay.h>
                    #include <avr/pgmspace.h>
                    #include <stdio.h>
                    #include "lcd.h"

                    void main(void)
                    {
                    char buffer[7];
                    float num=13.2634124;


                    lcd_init(LCD_DISP_ON);
                    lcd_clrscr();
                    lcd_home();
                    sprintf(buffer,"%6.3f", num);
                    lcd_puts(buffer);
                    _delay_ms(4000);

                    while(1);
                    }

                    خوب برنامه که کاملا مشخصه چی به چیه ، اما یکسری تنظیمات رو باید مثل codvision و iar انجام بدیم تا بتونیم متغیر های از نوع float رو تبدیل به رشته کنیم ، کار هایی که باید انجام بدیم به ترتیب زیر هست :

                    1. alt+f7 رو بزنید تا وارد سند تنظیمات برنامه بشید .
                    2. برید به برگه toolchain
                    3. حالا از شاخه avr/gnu c linker برید به زیر شاخه libraries بعد با کلیک بر روی add در قسمت بالایی و به ترتیب موارد libprintf_flt.a و libm.a اضافه کنید ،به ترتیبی که در شکل زیر مشاهده می کنید :


                    4. حالا از شاخه avr/gnu c linker برید به زیر شاخه miscellaneous و سپس در فیلد other linker flags فلگ های : -Wl,-u,vfprintf -lprintf_flt به ترتیبی که در شکل زیر مشاهده میکنید وارد کنید :


                    5. تغییرات انجام شده رو سیو کنید و برنامه رو دوباره کامپایل کنید .


                    پایان قسمت چهارم
                    ممنون با کمک شما درست شد

                    دیدگاه


                      #11
                      پاسخ : مشکل در نمایش اعداد اعشاری در AVRStudio - ADCxmega

                      فعال کردن کامل sprintf:

                      http://designer2013.blogsky.com/1394/06/24/post-151/%D8%B1%D9%88%D8%B4-%D8%B5%D8%AD%DB%8C%D8%AD-%D9%81%D8%B9%D8%A7%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-%DA%A9%D8%A7%D9%85%D9%84-sprintf
                      designer2013.blogsky.com

                      دیدگاه

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