اطلاعیه

Collapse
No announcement yet.

adc

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

    adc

    سلام
    در مورد adcدر avr کسی میتونه کمکم کنه؟
    ولتاژ ref چطوری انتخاب کنم
    بعد رو پایه ref میکرو باید خازن بذارم؟

    #2
    پاسخ : adc

    کسی نیست کمک کنه
    من یه برنامه نوشتم با ولی خروجیه میکروم همیشه یکه و تغیر نمیکنه
    right=read_adc(0
    if (right>400) {
    PORTD.0=0;
    PORTD.1=1;
    while (front>400) {
    PORTD.0=1;
    PORTD.1=1;
    };
    خروجی Adc رو چجوری باید خوند؟

    دیدگاه


      #3
      پاسخ : adc

      سلام دادا.

      ولتاژ رفرنس در avr رو به روش میتونی اعمال کنی.
      1- نمونه برداری از پایه Aref. در این حالت Vref برابر ولتاژ این پین میشه.
      2- نمونه برداری از پایه Avcc. در این حالت Vref برابر ولتاژ این پین میشه.
      3- ولتاژ داخلی میکرو (2.6). در این حالت Vref مقدار 2.6 میگیره.
      نکته بسیار مهم: درصورت استفاده از رفرنس داخلی نباید به پین Aref ولتاژی داده شود.

      برای انتخاب نوع ولتاژ رفرنس هم توی کدویزارد در تب ADC باید یکی ازحالات Volt.ref انتخاب شود.
      اگه مرجع ولتاژ رفرنس رو از Avcc ویا داخلی انتخاب شود برای کمتر شدن نویز، پین Aref رو با یه خازن 100 نانو (104) زمین میکنن.

      این برنامه ای که من میبینم نباید غیر از این هم باشه. شما بگو میخوای چیکار کنی تا کمکت کنیم.

      پیشنهاد: با کدویزارد در تب ADC و گزینه Volt ref گزینه Avcc رو انتخاب کن. کلاک رو هم حداکثر بذار. توی سخت افزار هم پین Avcc رو به Vcc وصل کن و Aref رو همانطور که گفتم بایه خازن 100 نانو زمین کن.

      موفق باشی.
      تشکر لازم نیست!

      دیدگاه


        #4
        پاسخ : adc

        از راهنماییتون ممنون
        من میخوام ییه ربات نوریاب بسازم
        مشکلم اینه که خروجیه میکروم همیشه 1 میمونه
        3 تا فتوسل به میکرو وصل کردم
        ولی با تغییر ولتاژ انا خروجی میکروم تغییر نمیکنه

        دیدگاه


          #5
          پاسخ : adc

          سلام دادا.
          این برنامه رو تست کن. کارش اینه که اگه ولتاژ ورودی adc0 بیشتر از 2.5 ولت شد PORTD.0=1 رو یک میکنه و در غیر این صورت صفر.
          تنظیماتش رو همانطور که توی پست قبل گفتم بذار.

          کد:
          #include <mega32.h>
          #include <delay.h>
          #define ADC_VREF_TYPE 0x40
          
          // Read the AD conversion result
          unsigned int read_adc(unsigned char adc_input)
          {
          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
          while ((ADCSRA & 0x10)==0);
          ADCSRA|=0x10;
          return ADCW;
          }
          
          // Declare your global variables here
          float data;
          void main(void)
          {
          
          PORTD=0x00;
          DDRD=0xFF;
          
          
          ACSR=0x80;
          SFIOR=0x00;
          
          ADMUX=ADC_VREF_TYPE & 0xff;
          ADCSRA=0x81;
          
          while (1)
             {
             
             data=read_adc(0);
             data=data*5/1024;
             if (data>2.5)
             PORTD.0=1;
             else PORTD.0=0;
             };
          }
          تشکر لازم نیست!

          دیدگاه


            #6
            پاسخ : adc

            وقفه تو adc جیه ؟
            تو codvision چجوری تنظیم میشه؟
            تو برنامه چجوری ازش میشه استفاده کرد؟

            دیدگاه


              #7
              پاسخ : adc

              سلام دادا.
              اینا که گفتی خیلی زیاده دادا. میخوای چیکار؟
              تشکر لازم نیست!

              دیدگاه


                #8
                پاسخ : adc

                اخه یکی میگفت استفاده از وقفه adcبهتر از تابع read_adc هستش
                حالا از چه جهتشو نمیدونم

                دیدگاه


                  #9
                  پاسخ : adc

                  سلام دادا
                  درست گفته. اما نه برای این کارا. شما با همین read_adc بخون بهتره.
                  معمولاً از وقفه adc زمانی استفاده میشه که تغییرات ولتاژ کند صورت میگیره. یعنی زمانی که مقدار ورودی تغییر میکنه یه وقفه فعال میشه و تبدیلات شروع میشه.
                  تشکر لازم نیست!

                  دیدگاه


                    #10
                    پاسخ : adc

                    اقا ایمان دستت درد نکنه

                    دیدگاه


                      #11
                      پاسخ : adc

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




                      while (1)
                      { right=read_adc(0);
                      front=read_adc(1);
                      left=read_adc(2);
                      while (front>400) {
                      PORTD.1=1;
                      };
                      while (right>400) {
                      PORTD.0=0;
                      while (front>400) {
                      PORTD.0=1;
                      };
                      };
                      while (left>400) {
                      PORTD.1=0;
                      while (front>400) {
                      PORTD.1=1;
                      };
                      };

                      دیدگاه

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