اطلاعیه

Collapse
No announcement yet.

َADC نامتعارف!!

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

    َADC نامتعارف!!

    سلام بر اساتید گرامی. لطفا به برنامه ساده زیر توجه کنید:
    کد:
    [FONT=Yekan]#include <mega16a.h>[/FONT]#include <stdio.h>
    #include <delay.h>
    #include <alcd.h>
    
    
    // Declare your global variables here
    char chrBuffer[32];
    int intTemp;
    
    
    
    
    // Voltage Reference: Int., cap. on AREF
    #define ADC_VREF_TYPE ((1<<REFS1) | (1<<REFS0) | (0<<ADLAR))
    
    
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | ADC_VREF_TYPE;
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=(1<<ADSC);
    // Wait for the AD conversion to complete
    while ((ADCSRA & (1<<ADIF))==0);
    ADCSRA|=(1<<ADIF);
    return ADCW;
    }
    
    
    void main(void)
    {
    
    
    // ADC initialization
    // ADC Clock frequency: 1000.000 kHz
    // ADC Voltage Reference: Int., cap. on AREF
    // ADC Auto Trigger Source: Free Running
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
    SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
    
    
    lcd_init(16);
    lcd_clear();
    
    
    while (1)
          {
             intTemp=read_adc(0);
             sprintf(chrBuffer,"%d   ",intTemp);
             lcd_gotoxy(0,0);
             lcd_puts(chrBuffer);
             delay_ms(50);
    
    
          }
    }
    در این کد adc روی ولتاژ داخلی 2.56 ولت و دقت 10 بیتی تنظیم شده. انتظار دارم که وقتی ولتاژ روی پایه adc(0) به 2.56 ولت میرسه، تابع adc عدد 1023 رو برگردونه. اما در عمل تقریبا نصف این عدد یعنی 512 رو برمیگردونه. در شبیه ساز پروتئوس مشکلی وجود نداره اما در عمل روی ال سی دی این مشکل وجود داره. به نظر شما چه تنظیماتی از قلم افتاده؟ لطفا راهنمایی کنید.

    #2
    پاسخ : َADC نامتعارف!!

    سلام
    این کدویزارد مثه اینکه مشکل داره!!
    شما تو کدویزارد مرجع ولتاژ رو روی هر چی بزاری رجیستر ADMUX هیچ تغییر نمیکنه!! (واسه من ک اینجوریه ورژن 2.0.5)
    شما طبق دیتاشیت (عکس زیر) رجیستر ADMUX رو تنظیم کن ببین چی میشه!

    دیدگاه


      #3
      پاسخ : َADC نامتعارف!!

      ممنونم دوست عزیز. یعنی برای استفاده از ولتاز مرجع داخلی، ADMUX باید برابر با 0b11000000 باشه؟ درسته؟

      دیدگاه


        #4
        پاسخ : َADC نامتعارف!!

        با رجیستر admux به صورت زیر or کن
        کد:
        ADMUX|=(1<<REFS1)|(1<<REFS0)
        حالا نمیدونم از این کد تو کدویژن بشه استفاده کرد یا نه!

        دیدگاه


          #5
          پاسخ : َADC نامتعارف!!

          نوشته اصلی توسط M3R-E نمایش پست ها
          با رجیستر admux به صورت زیر or کن
          کد:
          ADMUX|=(1<<REFS1)|(1<<REFS0)
          حالا نمیدونم از این کد تو کدویژن بشه استفاده کرد یا نه!
          باز هم سپاسگزارم. خط هشتم کدی که درابتدای این تاپیک از برنامه خودم گذاشتم شامل همین کدی هست که شما میفرمایید. اینکه توی پروتئوس مشکلی نیست اما در عمل مشکل داره باید یه باگ سخت افزاری باشه به نظرم. باید منتظر نظرات سایر اساتید و کارشناسان باشم

          دیدگاه


            #6
            پاسخ : َADC نامتعارف!!

            سلام
            اگه از رفرنس داخلی 2.56 استفاده میکنی , پین aref نباید به vcc و غیره وصل باشه و فقط با یه خازن به gnd باید وصل باشه
            اینو تو تیکه دیتاشیتی که دوستمون در بالا گذاشته نوشته شده
            امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

            دیدگاه


              #7
              پاسخ : َADC نامتعارف!!

              نوشته اصلی توسط mahdi8866 نمایش پست ها
              سلام
              اگه از رفرنس داخلی 2.56 استفاده میکنی , پین aref نباید به vcc و غیره وصل باشه و فقط با یه خازن به gnd باید وصل باشه
              اینو تو تیکه دیتاشیتی که دوستمون در بالا گذاشته نوشته شده
              آره درسته!
              شرمنده من متوجه نشدم

              دیدگاه

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