اطلاعیه

Collapse
No announcement yet.

adc در میکرو avr

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

    adc در میکرو avr

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

    تو کتاب مرجع کامل میکروکنترلر های avr در مورد بیت ADIF در رجیستر ADCSRA نوشته
    با اتمام تبدیل ADC و تغییر محتویات رجیستر داده ADC این بیت ( ADIF ) یک خواهد شد

    اما تو کدویژن ظاهرا عکس این مسئله وجود داره
    این کدی هستش که خود کدویژن تولید میکنه
    کد:
    [FONT=Yekan]unsigned int read_adc(unsigned char adc_input)[/FONT]{
    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
    [B][SIZE=3][COLOR=#008000]while ((ADCSRA & 0x10)==0);[/COLOR][/SIZE][/B]
    ADCSRA|=0x10;
    return ADCW;
    [FONT=Yekan]}[/FONT]
    تو کدی که کدویژن تولید کرده در قسمت سبزرنگ منتظر هست تا بیت ADIF صفر بشه
    1_یعنی پایان تبدیل این بیت صفر میشه اما تو کتابه گفته پایان تبدیل 1 میشه چرا ؟ بالاخره کدومش درسته ؟
    حرف کتابه درسته یا چیزی که کدویژن انجام میده ؟؟؟؟؟؟
    2_بعدش میاد همین بیت رو یک میکنه چرا؟

    کسی میتونه راهنمایی کنه
    جدیدترین ویرایش توسط rezamajdi; ۲۱:۴۶ ۱۳۹۵/۰۷/۰۵.
    آرزوی سرافرازی برای ایران عزیز . . .



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

    این یه حلقه هست که میگه تا زمانی که 0 هست توی این حلقه بمونه و وقتی 1 شد از این حلقه میاد بیرون
    بعد اینکه 1 شد از حلقه میاد بیرون و اتمام تبدیل .

    دیدگاه


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

      سلام به شما دوست عزیز

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


      دیدگاه


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

        نوشته اصلی توسط rezamajdi نمایش پست ها
        تو کدی که کدویژن تولید کرده در قسمت سبزرنگ منتظر هست تا بیت ADIF صفر بشه
        سلام، نفر قبل هم توضیح دادن که طبق کد میکرو توی این حلقه میمونه تا زمانی که بیت ADIF یک بشه. وقتی یک شد از حلقه خارج میشه.

        دیدگاه


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

          نوشته اصلی توسط gordany نمایش پست ها
          سلام، نفر قبل هم توضیح دادن که طبق کد میکرو توی این حلقه میمونه تا زمانی که بیت ADIF یک بشه. وقتی یک شد از حلقه خارج میشه.
          دوستان من نمیگم کد رو تحلیل کنید
          من میدونم کد داره چیکار میکنه

          من دارم میگم تو اون کتابه یه چیز گفته اما تو کدویژن یه چیز دیگه
          که اون بالا کامل توضیح دادم . . . .

          این اختلاف بین گفته کتاب و کدویژن رو منظورم هستش نه تحلیل کد !!!

          با تشکر
          آرزوی سرافرازی برای ایران عزیز . . .


          دیدگاه


            #6
            پاسخ : adc در میکرو avr

            کد:
            This bit is set when an ADC conversion completes and the Data Registers are updated.
            The ADC Conversion Complete Interrupt is executed if the ADIE bit and the I-bit in
            SREG are set. ADIF is cleared by hardware when executing the corresponding interrupt
            handling vector. Alternatively, [COLOR=#ff0000]ADIF is cleared by writing a logical one to the flag[/COLOR].
            Beware that if doing a Read-Modify-Write on ADCSRA, a pending interrupt can be disabled.
            This also applies if the SBI and CBI instructions are used.
            چرا ناراحتی پاتریک!
            + امروز ی بچه دیدم سرچهارراه گل میفروخت
            - از دیدنش ناراحت شدی؟
            + نه
            پس چی ناراحتت کرده
            + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
            ------------------------------------------------------------------------------------------------------
            تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
            ------------------------------------------------------------------------------------------------------
            محصولات

            دیدگاه


              #7
              پاسخ : adc در میکرو avr

              نوشته اصلی توسط سوران آراسته نمایش پست ها
              کد:
              This bit is set when an ADC conversion completes and the Data Registers are updated.
              The ADC Conversion Complete Interrupt is executed if the ADIE bit and the I-bit in
              SREG are set. ADIF is cleared by hardware when executing the corresponding interrupt
              handling vector. Alternatively, [COLOR=#ff0000]ADIF is cleared by writing a logical one to the flag[/COLOR].
              Beware that if doing a Read-Modify-Write on ADCSRA, a pending interrupt can be disabled.
              This also applies if the SBI and CBI instructions are used.
              ممنون دوست عزیز
              حال این چیزی که کتاب گفته تو پایان تبدیل بیت ADIF یک میشه درسته یا نه ؟
              چون تو کدویژن تو پایان تبدیل صفر میشه نه یک

              بالاخره کدومشون درست میگن ؟
              من سوالم اینه
              آرزوی سرافرازی برای ایران عزیز . . .


              دیدگاه


                #8
                پاسخ : adc در میکرو avr

                نوشته اصلی توسط rezamajdi نمایش پست ها
                چون تو کدویژن تو پایان تبدیل صفر میشه نه یک
                دوست عزیز تحلیل شما از کد اشتباهه، همین جمله ای که ازتون نقل قول کردم رو اشتباه می کنید. بعد از خروج از حلقه while قطعا بیت ADIF یک هست.

                دیدگاه


                  #9
                  پاسخ : adc در میکرو avr

                  نوشته اصلی توسط gordany نمایش پست ها
                  دوست عزیز تحلیل شما از کد اشتباهه، همین جمله ای که ازتون نقل قول کردم رو اشتباه می کنید. بعد از خروج از حلقه while قطعا بیت ADIF یک هست.
                  سلام به شما دوست گرامی
                  این کده

                  کد:
                   [COLOR=#333333][FONT=Yekan]unsigned int read_adc(unsigned char adc_input)
                  [/FONT][/COLOR][COLOR=#333333][FONT=monospace]{[/FONT][/COLOR]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
                  [SIZE=3][COLOR=#008000]while ((ADCSRA & 0x10)==0);[/COLOR][/SIZE]
                  ADCSRA|=0x10;
                  return ADCW; [COLOR=#333333][FONT=Yekan]}[/FONT][/COLOR]
                  بحث بنده سر پایان تبدیل هستش نه پایان تابع !!
                  تو حلقه while ما منتظر میمونیم تا اون بیت adif صفر بشه
                  بعدش بعد از اجرای دو دستور دیگه از تابع میایم بیرون
                  بنابراین کی تبدیل تمومه ؟ زمانی که اون بیته به صورت سخت افزاری صفر میشه
                  که بعدش حلقه while خاتمه پیدا میکنه ( سبزرنگه )

                  این تا اینجا

                  حال این چیزی که کتاب گفته تو پایان تبدیل بیت ADIF یک میشه درسته یا نه ؟
                  چون تو کدویژن تو پایان تبدیل صفر میشه نه یک
                  جدیدترین ویرایش توسط rezamajdi; ۱۵:۳۰ ۱۳۹۵/۰۷/۰۶.
                  آرزوی سرافرازی برای ایران عزیز . . .


                  دیدگاه


                    #10
                    پاسخ : adc در میکرو avr

                    نوشته اصلی توسط rezamajdi نمایش پست ها
                    while ((ADCSRA & 0x10)==0);
                    تو حلقه while ما منتظر میمونیم تا اون بیت adif صفر بشه

                    سلام، همین برداشتتون اشتباهه، تو حلقه while ما منتظر میمونیم تا اون بیت adif یک بشه نه اینکه صفر بشه .

                    دیدگاه


                      #11
                      پاسخ : adc در میکرو avr

                      این کد نمیگه که ADCSRA صفر بشه بلکه داره با کد 0x10 اند می کنه و تا زمانی که نتیجه AND صفر هست یعنی ADCSRA یک نشده تکرار میشه

                      دیدگاه


                        #12
                        پاسخ : adc در میکرو avr

                        شرط حلقه رو با خود حلقه قاطی نکن.

                        دیدگاه


                          #13
                          پاسخ : adc در میکرو avr

                          سلام کسی کتابخونه adc برای atmel studio 7 سراغ نداره؟

                          Sent from my GT-N5100 using Tapatalk

                          دیدگاه


                            #14
                            پاسخ : adc در میکرو avr

                            نوشته اصلی توسط Master81 نمایش پست ها
                            سلام کسی کتابخونه adc برای atmel studio 7 سراغ نداره؟

                            Sent from my GT-N5100 using Tapatalk
                            سلام
                            این یه نمونه کد خدمت شما:


                            /*
                            *
                            * Created: 10/9/2014 1:07:06 PM
                            * Author: Souran
                            * www.CTTF.ir
                            */


                            #include <avr/io.h>
                            #include <avr/interrupt.h>
                            #include <util/delay.h>
                            #include <avr/pgmspace.h>
                            #include <stdio.h>
                            #include "LCD/lcd_lib.h"

                            #define ADC_VREF_TYPE 0x40

                            void InitADC()
                            {
                            DDRC = 0x00;

                            ADMUX = ADC_VREF_TYPE & 0xff;
                            ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);
                            }

                            unsigned int read_adc(unsigned char ch)
                            {

                            //ch=ch&0b00000111;
                            //ADMUX|=ch;
                            ADMUX=ch | (ADC_VREF_TYPE & 0xff);
                            //Start Single conversion

                            ADCSRA|=(1<<ADSC);

                            //Wait for conversion to complete
                            while(!(ADCSRA & (1<<ADIF)));

                            //Clear ADIF by writing one to it
                            ADCSRA|=(1<<ADIF);

                            return(ADC);
                            }

                            void main()
                            {
                            char lcd_buffer[16];
                            unsigned int adc_value=0;

                            DDRB = 0xff;
                            //Enable ADC
                            InitADC();
                            LCDinit();
                            LCDcursorOFF();
                            //Infinite loop
                            while(1)
                            {
                            adc_value=read_adc(5);
                            sprintf(lcd_buffer,"temp=%4d\0",adc_value);

                            LCDclr();
                            LCDGotoXY(0,0);
                            LCDstring(lcd_buffer,9);
                            _delay_ms(500);
                            }
                            }
                            چرا ناراحتی پاتریک!
                            + امروز ی بچه دیدم سرچهارراه گل میفروخت
                            - از دیدنش ناراحت شدی؟
                            + نه
                            پس چی ناراحتت کرده
                            + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
                            ------------------------------------------------------------------------------------------------------
                            تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
                            ------------------------------------------------------------------------------------------------------
                            محصولات

                            دیدگاه

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