اطلاعیه

Collapse
No announcement yet.

سوال در مورد adc avr

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

    سوال در مورد adc avr

    با عرض سلام و خسته نباشی !

    من یک سوالی دارم اگه لطف کنید کمکم کنید ممنون میشم !من روی یک پروژهای کار می کنم که ورودی یک سنسور نیز داخل پروژه ام است مشکلی که من دارم اینه که وقتی ورودی صفرهستش مقداری که ADC میده صفر نیست و مقدار47 می ده !.ممنون میشم اگه کمکم کنید.اگه لطف کنید جواب رو به ایمیلم بفرستی بسیار ممنون میشم .این هم برنامه به زبان c برای adc
    #include <mega32a.h>
    #include <alcd.h>
    #include <delay.h>
    #include <stdio.h>
    unsigned int adc_read(void);
    void main(void)
    {
    int a;
    char buffer[20];
    lcd_init(16);
    ADMUX=0X00;
    ADCSRA=0X83;
    MCUCR=0X10;
    while (1)
    {
    a=adc_read();
    a=a/4;
    lcd_gotoxy(8,1);
    lcd_putsf(" "
    lcd_gotoxy(8,1);
    sprintf(buffer,"Gas=%%%d",a);
    lcd_puts(buffer);
    delay_ms(200);
    }
    }
    unsigned int adc_read(void)
    {
    ADCSRA|=0X40;
    while((ADCSRA&0X10)==0);
    ADCSRA|=0X10;
    return ADCW;
    }

    #2
    پاسخ : سوال در مورد adc avr

    من سی کار نمیکنم
    1-زمین آنالوگ با دیجیتال تفاوت داره یا نه؟
    2- یکی دو بیت آخر adc زیاد بهش اعتباری نیست.یعنی بستگی به مدار و نویز گیری و ...
    اینارو یه چک کن
    همیشه به یاد خدا باش !

    دیدگاه


      #3
      پاسخ : سوال در مورد adc avr

      :sad:با سلام،

      شاید فقط مشکل نمایش داشته باشی...
      بهتره که به جای این :

      lcd_gotoxy(8,1);
      lcd_putsf(" "

      این رو بزاری و امتحان کنی :
      lcd_clear();

      اینم اینطوریش بکن :
      unsigned int read_adc(unsigned char adc_input)
      {
      ADMUX = adc_input | (ADC_VREF_TYPE & 0xff);

      delay_us(10); //Delay needed for the stabilization of the ADC input voltage
      ADCSRA |= 0x40; //Start the AD conversion
      while((ADCSRA & 0x10)==0); //Wait for the AD conversion to complete
      ADCSRA |= 0x10;

      return ADCW;
      } //read_adc
      مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

      Sh_Nourbakhsh@Yahoo.com

      http://s2.picofile.com/file/7170362468/_Wall_e_.jp

      دیدگاه


        #4
        پاسخ : سوال در مورد adc avr

        با سلام به دوستان

        سوالی داشتم، کسی از دوستان می تونه معنای این پاراگراف رو برام توضیح بده؟ در باره مبدل آنالوگ به دیجیتال داخلی میکرو کنترلر است ADC


        To know the time that a conversion takes, just need to divide the number of ADC clock cycles needed for conversion by the frequency of the ADC clock. Normaly, a conversion takes 13 ADC clock cycles. The first conversion after the ADC is switched on (by setting the ADEN bit) takes 25 ADC clock cycles. This first conversion is called an "Extended Conversion". For instance, if you are using a 200kHz ADC clock signal, a normal conversion will take 65 microseconds (13/200e3=65e-6), and an extended conversion will take 125 microseconds (25/200e3=125e-6).

        سوال: فرق بین تبدیل نرمال و Extended Conversion رو متوجه نمی شم؟
        لطفا راهنمایی کنید
        با سپاس

        دیدگاه


          #5
          پاسخ : سوال در مورد adc avr

          "برای اینکه بدونید یک تبدیل چقدر زمان میبرد کافیست تعداد سیکل هایی که برای تبدیل نیاز است را بر کلاک adc تقسیم کنید
          در حالت عادی یک تبدیل 13 سیکل طول میکشد
          اولین تبدیل بعد روشن کردن adc (با 1 کردن بیت ADEN) که تبدیل با طول بیشتر نام دارد 25 سیکل طول میکشد
          برای مثال اگر کلاک adc را روی 200 کیلوهرتز تنظیم کنید یک تبدیل عادی 65 میکرو ثانیه طول میکشد و یک تبدیل طولانی 125 میکرو ثانیه."
          مفهومش اینه که وقتی اولین تبدیل رو انجام میدین چون مدارات adc دارن راه اندازی میشن یه مقدار زمان میبره این راه اندازی و بعد تبدیل انجام میشه و به همین دلیل 25 سیکل طول میکشه اولین تبدیل
          اما تبدیل های بعدی(حالت عادی یعنی adc راه اندازه شده باشه و قبلا هم یه بار نمونه برداری شده باشه) 13 سیکل طول میکشن
          با سپاس

          دیدگاه

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