اطلاعیه

Collapse
No announcement yet.

رفتار عجیب ADC

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

    رفتار عجیب ADC

    سلام
    این برنامه یه مشکلی داره
    قراره 4 تا از ورودی های آنالوگ رو مثایسه کنه وبزرگترین اونا رو مشخص کنه
    ولی وقتی ورودی اول بزرگتر از بقیه میشه بعد از کم شدنش به ترتیب خروجی ها رو روشن میکنه
    یعنی وقتی
    adc1
    بزرگتر از بقیه میشه خروجی معادلش یعنی
    B1
    رو روشن میکنه ولی بعد از اینکه مقدارش کم شد به تر تیب با یه تاخیر کوچیک
    B2,B3,B4
    رو روشن میکنه
    هر چی هم مقدار ورودی بیشتر باشه مدت روشن موندن خروجی ها بیشتر میشه
    همینطور اگه
    adc2
    بیشتر از بقیه بشه بعد از کم شدنش
    B3,B4
    روشن میشن که این اصلا منطقی نیست
    تو پروتئوس هم درست جواب میده ولی تو عمل مشکل داره
    رو چند تا میکرو هم تست کردم ولتاژ مرجع رو تغییر دادم ولی درست نشد
    حالا باید چیکار کنم؟؟؟

    #include <avr/io.h>
    #include <inttypes.h>
    #include <stdio.h>
    #include <avr/pgmspace.h>
    #include <util/delay.h>

    #include "avrlibdefs.h"
    #include "avrlibtypes.h"
    #include "a2d.c"

    //************************************************** *******************

    #define E 100
    #define set2 20

    //************************************************** *******************

    void mjs(void);

    //************************************************** *******************

    int main()
    {
    //-------------------------------------------------

    cbi(DDRC, 1); //input
    cbi(PORTC, 1); //disable pullup
    cbi(DDRC, 2); //input
    cbi(PORTC, 2); //disable pullup
    cbi(DDRC, 3); //input
    cbi(PORTC, 3); //disable pullup
    cbi(DDRC, 4); //input
    cbi(PORTC, 4); //disable pullup

    //-------------------------------------------------

    sbi(DDRB, 0); //output
    cbi(PORTB, 0); //disable pullup
    sbi(DDRB, 1); //output
    cbi(PORTB, 1); //disable pullup
    sbi(DDRB, 2); //output
    cbi(PORTB, 2); //disable pullup
    sbi(DDRB, 3); //output
    cbi(PORTB, 3); //disable pullup
    sbi(DDRB, 4); //output
    cbi(PORTB, 4); //disable pullup

    //-------------------------------------------------

    a2dInit();
    a2dSetPrescaler(ADC_PRESCALE_DIV64);
    a2dSetReference(ADC_REFERENCE_AREF);
    a2dSetChannel(ADC_CH_ADC1);
    a2dSetChannel(ADC_CH_ADC2);
    a2dSetChannel(ADC_CH_ADC3);
    a2dSetChannel(ADC_CH_ADC4);
    a2dStartConvert();

    //-------------------------------------------------

    _delay_ms(500);
    mjs();
    return 0;
    }

    //************************************************** *******************

    void mjs(void)
    {
    unsigned int adc1,adc2,adc3,adc4;

    //-------------------------------------------------

    PORTB=0b00000001;

    while(1)
    {

    adc1 = a2dConvert10bit(ADC_CH_ADC1);
    adc2 = a2dConvert10bit(ADC_CH_ADC2);
    adc3 = a2dConvert10bit(ADC_CH_ADC3);
    adc4 = a2dConvert10bit(ADC_CH_ADC4);

    //-------------------------------------------------

    if(adc1>=adc2+set2 && adc1>=adc3+set2 && adc1>=adc4+set2 && adc1>=E)
    {
    PORTB=0b00000011;
    }
    else if(adc2>=adc1+set2 && adc2>=adc3+set2 && adc2>=adc4+set2 && adc2>=E)
    {
    PORTB=0b00000101;
    }
    else if(adc3>=adc1+set2 && adc3>=adc2+set2 && adc3>=adc4+set2 && adc3>=E)
    {
    PORTB=0b00001001;
    }
    else if(adc4>=adc2+set2 && adc4>=adc3+set2 && adc4>=adc1+set2 && adc4>=E)
    {
    PORTB=0b00010001;
    }
    else
    {
    PORTB=0b00000001;
    }
    }
    }

    //************************************************** ******************
    نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

    #2
    پاسخ : رفتار عجیب ADC

    کسی نیست جواب بده
    ورودی ها رو به دیود به زمین وصل کردم بهتر شد !!!!! ولی وقتی از خروجی زیاد جریان میکشم دوباره خراب میشه منبع تغذیم هم مناسبه همه جوره هم نویز گیری کردم
    دیگه سر در نمیارم
    الآن میخوام یه ولتاژ آفست به ورودیها اضافه کنم و شرط بزارم که مقایسه رو از یه عددی به بعد انجام بده شاید یه فرجی بشه
    لطفا یکی یه نظری بده
    نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

    دیدگاه


      #3
      پاسخ : رفتار عجیب ADC

      جریان از چی میکشید ؟!
      ....

      دیدگاه


        #4
        پاسخ : رفتار عجیب ADC

        وقتی خروجی رو به ال ای دی وصل میکنم نسبتا خوبه ولی وقتی به ترانزیستور وصل میکنم که جریان بیشتری بکشم اون مشکلی که گفتم بیشتر میشه
        به نظر خودم مشکل از ورودی هاست
        نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

        دیدگاه


          #5
          پاسخ : رفتار عجیب ADC

          با سلام
          آقا من یک پیشنهاد دارم ، اول بیایید مقادیر خوانده شده از هر کانال adc رو روی یک lcd یا مثلا روی دو تا پورت نشون بدید ببینید اصلا پایدار هستند
          بعد بیایید عمل مقایسه رو یکم ساده تر انجام بدید مثلا کانال اول رو با دوم و بعد هم ادامه کار ...

          دیدگاه


            #6
            پاسخ : رفتار عجیب ADC

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

            دیدگاه


              #7
              پاسخ : رفتار عجیب ADC

              از
              rc
              استفاده کردم
              الآن امتحان میکنم شاید واقعا نوسان داره
              نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

              دیدگاه


                #8
                پاسخ : رفتار عجیب ADC

                فکر کنم مشکل از مدار تقویت کننده باشه
                خازن های
                c4 تا c8
                رو وقتی زیاد میکنم درست میشه ولی زمان تخله خازن ها زیاد میشه که باز برام مشکل ساز میشه
                باید چیکار کنم که قسمت های مختلف مدار مجزا کار کنن؟؟؟؟
                در ضمن تقسیم ولتاژی که به پایه های 3 5 10 12 وصل شده را به صورت جدا هم وصل کردم ولی فایده ای نداشت.

                نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

                دیدگاه


                  #9
                  پاسخ : رفتار عجیب ADC

                  خازن های
                  c4 تا c8را به 100pf افزایش دادم ، و یه مقاومت 1M به عنوان مقومت بار گذاشتم درست شد.
                  ولی هنوز نفهمیدم چرا این اتفاق میوفتاد
                  نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

                  دیدگاه


                    #10
                    پاسخ : رفتار عجیب ADC

                    خوب اگه برای یک صافی مقاومت برای تخلیه نزارید ولتاژ خازن همیجوری بالا میره تا زمانی که دشارژ بشه که البته مقدار اون مقاومت هم هر چقدر بیشتر باشه ثابت زمانی برای تخلیه خازن هم بیشتر میشه و طبق فرمول دشارژ خازن :( Vc(0)exp( -t/rc هر چقدر مقدار rc زیاد بشه زمان بیشتری برای دشارژ شدن خازن نیاز داریم

                    دیدگاه

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