اطلاعیه

Collapse
No announcement yet.

مشکل با ADC

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

    مشکل با ADC

    سلام ... من میخوام هرقت ولتاژ ورودی بیشتر از یه عددی (مثلا3 ولت) بشه یکی از خروجی ها رو فعال کنم اما مرز مقایسه رو هر عددی بین 0 تا 1024 بزارم میکرو رو ولتاژ حدود 1.3 سوییچ میکنه! با کدویزارد تنظیم کردم و میکرو 16 استفاده کردم ...کسی میدونه مشکل چیه؟

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

    نوشته اصلی توسط Feranchesco
    سلام ... من میخوام هرقت ولتاژ ورودی بیشتر از یه عددی (مثلا3 ولت) بشه یکی از خروجی ها رو فعال کنم اما مرز مقایسه رو هر عددی بین 0 تا 1024 بزارم میکرو رو ولتاژ حدود 1.3 سوییچ میکنه! با کدویزارد تنظیم کردم و میکرو 16 استفاده کردم ...کسی میدونه مشکل چیه؟
    سلا عزیزم پایه های ولتاژ vref و avcc وصل کن درست می شه :rolleyes: :rolleyes: :nice:
    Ali Reza Tarkesh Esfahani

    Yahoo: amt_1390@yahoo.com

    دیدگاه


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

      اگه منظورت مرجعه به AVCC وصله...

      دیدگاه


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

        نوشته اصلی توسط Feranchesco
        اگه منظورت مرجعه به AVCC وصله...
        سلام
        داخل برنامه هم ولتاژ مرجع رو تعیین کردین ؟
        شاید اگه برنامه تون رو اینجا قرار بدین بهتر بشه کمک کرد .

        دیدگاه


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

          #include <mega16a.h>

          #include <delay.h>

          // Declare your global variables here
          float adc0=0;

          // Voltage Reference: AVCC pin
          #define ADC_VREF_TYPE ((0<<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: 125.000 kHz
          // ADC Voltage Reference: AVCC pin
          // ADC Auto Trigger Source: Free Running
          ADMUX=ADC_VREF_TYPE;
          ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
          SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);

          while (1)
          {
          // Place your code here
          adc0=read_adc(0);
          if(adc0 >= 512)
          PORTB.0=1;
          if(adc0 < 512)
          PORTB.0=0;

          }
          }

          دیدگاه


            #6
            پاسخ : مشکل با ADC

            نوشته اصلی توسط Feranchesco
            #include <mega16a.h>

            #include <delay.h>

            // Declare your global variables here
            float adc0=0;

            // Voltage Reference: AVCC pin
            #define ADC_VREF_TYPE ((0<<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: 125.000 kHz
            // ADC Voltage Reference: AVCC pin
            // ADC Auto Trigger Source: Free Running
            ADMUX=ADC_VREF_TYPE;
            ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
            SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);

            while (1)
            {
            // Place your code here
            adc0=read_adc(0);
            if(adc0 >= 512)
            PORTB.0=1;
            if(adc0 < 512)
            PORTB.0=0;

            }
            }
            سلام یه بار با این دستور امتحان کن ببین درست میشه
            if (adc0==512){
            PORTB=0xff;
            }
            else {
            PORTB=0x00;
            }
            o_O

            دیدگاه


              #7
              پاسخ : مشکل با ADC

              کلا خروجی 0 شد!

              دیدگاه


                #8
                پاسخ : مشکل با ADC

                نوشته اصلی توسط Feranchesco
                کلا خروجی 0 شد!
                ولتاش مرجع شما داخلی یا خارجی اگه خارجی چند ولته ؟؟؟
                با یدونه پتانسومتر مولتی ترن امتحان کن این برنامه یعنی اگه نصف ولتاش مرجعی ک انتخاب کردی رو به ورودی بدی پورت B روشن میشه وگرنه خاموش میمونه.
                باید هم دقت 10 بیتی باشه.
                o_O

                دیدگاه

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