اطلاعیه

Collapse
No announcement yet.

مشکل با adc

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

    مشکل با adc

    سلام
    من یه سوال ابتدایی دارم که بدجوری الافم کرده
    یه برنامه ساده برای گرفتن اطلاعات از adc اتمگا 8 نوشتم
    کد:
    $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pinb.0 , Db5 = Pinb.1 , Db6 = Pinb.2 , Db7 = Pinb.3 , Rs = Pinb.4 , E = Pinb.5
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Config Portd.3 = Output
    
    Dim Channle As Byte
    Dim A As Byte
    Cls
    Stop Adc
    Start Adc
    
    Reset Portd.3
    Channle = 0
    A = 0
    Q:
    Toggle Portd.3
    
    A = Getadc(channle)
    Locate 2 , 1
    Lcd "adc 0 ="
    Locate 2 , 9
    Lcd A
    Waitms 200
    Goto Q
    End
    حالا همش 255 نشون میده
    وقتی هم که avcc رو به عنوان رفرنس قرار میدم اعداد تغییر میکنه ولی به نظر میرسه خیلی دقیق نیست
    لطفا راهنمایی کنید
    با مردم همون جوری رفتار کن که دوست داری باهات رفتار کنن




    #2
    پاسخ : مشکل با adc

    سلام

    یه مشکل خیلی کوچیک داری متغیر ADC رو BYTY گذاشتی :biggrin: که میشه بین 0 تا 255 :nice:

    ADC ده بیتی یعنی بین 0 تا 1023 :rolleyes:

    WORD بزار مشکل حله

    دیدگاه


      #3
      پاسخ : مشکل با adc

      اگه رفرنس رو بزاری باید وAREF AVCC رو به VCC کنی با یه سلف 10UH که سلف رو هم نزاشتی مهم نیست

      دیدگاه


        #4
        پاسخ : مشکل با adc

        سلام از جابتون ممنون
        ولی من اول word گذاشتم 1024 نشون میداد
        اینم که میگم رفرنس واسه اینه که فقط تو حالتی که رفرنسو مینوشتم و اونو روی avcc میذارم مقادیر تغییر میکنه و اونم تا یه اعدادی خوبه از اون اعداد بیشتر یا کمتر میشه یکسری اعداد بی ربط نشون میده
        مگه نباید وقتی رفرنسو نمی نویسیم مرجع داخلی میکرو فعال بشه ؟ پس چرا فقط 1024 نشون میده ؟
        من avcc رو مستقیم با vcc وصل کردم aref رو هم به هیچ جا وصل نکردم
        با مردم همون جوری رفتار کن که دوست داری باهات رفتار کنن



        دیدگاه


          #5
          پاسخ : مشکل با adc

          دوست من اگه میبینی برنامه با زبان c به کارت میاد بگین که بذارم چون من ازش جواب گرفتم ومشکلی نداشتم .

          در ضمن برای ولتاژ رفرنس adc ، یا از رفرنس داخلی 2.56 استفاده کن یا از AVCC .

          در صورتی که VREF در یکی از حالت AVCC یا 2.56 داخلی قرار بگیره ، این ولتاژ رو پایه ی AREF نیز ظاهر میشه. لذا برای حذف نویز بهتره که رو این پایه یه خازن در حدود 100 نانو فاراد قرار بگیره. توجه کن که اگه در این حالت روی پایه AREF ولتاژی قرار بگیره شک نکن که سوختن میکروت حتمیه.

          از شکل زیر میتونی برا تغذیه adc هم در پروتئوس وهم در عمل استفاده کنی:

          [glow=red,2,300]گرد هم آمدن شروع است.با هم ماندن پيشرفت است.با هم کار کردن موفقيت است.[/glow]
          [img width=98 height=100]http://s3.picofile.com/file/7407857311/icon3.png[/img]

          دیدگاه


            #6
            مشکل با adc

            سلام من هم یه سوال دارم
            من با زبان C داخل کدویژن کار میکنم وقتی می خوان پایه های ADC را بخوانه بعنی وقتی مثلا دستور
            s[i]=read_adc(i);
            را میدم اخطار میده که این دستور را نمی شناسه :angry:
            متن کامل :
            /************************************************** ***
            This program was produced by the
            CodeWizardAVR V2.05.0 Advanced
            Automatic Program Generator
            © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
            http://www.hpinfotech.com

            Project :
            Version :
            Date : 3/14/2012
            Author : www.Eca.ir *** www.Webkade.ir
            Company :
            Comments:


            Chip type : ATmega8L
            Program type : Application
            AVR Core Clock frequency: 4.000000 MHz
            Memory model : Small
            External RAM size : 0
            Data Stack size : 256
            ************************************************** ***/

            #include <mega8.h>

            #include <delay.h>

            #define ADC_VREF_TYPE 0x40
            #asm
            // ADC interrupt service routine
            unsigned int read_adc(unsigned char adc_input)
            {
            unsigned int adc_data;
            // Read the AD conversion result
            adc_data=ADCW;
            // Place your code here

            }

            // Declare your global variables here

            void main(void)
            {
            // Declare your local variables here

            // Input/Output Ports initialization
            // Port B initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
            PORTB=0x00;
            DDRB=0x00;

            // Port C initialization
            // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
            // State6=T State5=T State4=T State3=T State2=T State1=T State0=T
            PORTC=0x00;
            DDRC=0x00;

            // Port D initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
            PORTD=0x00;
            DDRD=0x00;

            // ADC initialization
            // ADC Clock frequency: 1000.000 kHz
            // ADC Voltage Reference: AVCC pin
            ADMUX=ADC_VREF_TYPE & 0xff;
            ADCSRA=0x8A;

            // Global enable interrupts
            #asm("sei&quot

            while (1)
            {
            // Place your code here
            int i, s[5],x[5];
            s[i]=read_adc(i) ;
            }
            }
            اگر تنهاترین تنها شوم باز هم خدا هست.(شهید چمران)

            دیدگاه

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