اطلاعیه

Collapse
No announcement yet.

مشکل در قراردادن خروجی ADC در یک ارایه 128 تایی

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

    مشکل در قراردادن خروجی ADC در یک ارایه 128 تایی

    سلام به همگی

    من میخوام یک برنامه بنویسم که در قسمتی از آن برنامه خروجی ADC که در مد Single کار میکنه از طریق وقفه شماره 12 یا همون Adc complete یک آرایه 128 تایی رو پر کنه... به این صورت که در روتین وقفه و در دفعه اول که ADC انجام شد عضو اول آرایه و در بار دوم عضو دوم آرایه و .... در بار 128 ام عضو 128 آرایه برابر با ADCW بشه و سپس این کار دوباره تکرار بشه....

    روتین وقفه ای که من تو نوشتنش گیر کردم یه چیزی مثل این هست:

    کد:
    interrupt [12] void adccomplete (void)
    {
    for(i=0;i<128;i++){
    
    x = adcw;
    A[i]=x;
    ADCSRA|=40;
    }
    من میخوام ADC در مد single کار کنه و مقدار رجیستر ADCW که شامل ADCH , ADCL هست برابر با یک عدد صحیح بشه و این عدد صحیح هربار در یک عضو آرایه قرار بگیره و بره جلو و از طرفی عملیات ADC هم متوفق نشه...!!

    تو کتاب آقای پرتوی فر نوشته بود برای شروع مجدد ADC از دستور ADCSRA|=40; استفاده کنیم... خودم فکر میکنم این عبارت باید با 80 هگز OR بشه نه 40 ...!! نظر شما چیه..؟

    یه کمکی بکنید بتونم آرایه ام رو بطور متوالی با ADCW پر کنم....

    ممنونم

    #2
    پاسخ : مشکل در قراردادن خروجی ADC در یک ارایه 128 تایی

    متغییر شمارنده i و A رو قبل از تابع adccomplete تعریف کنید.
    هر بار اینتراپت داد داخل روتین شمارنده رو افزایش بدین و با128 مقایسه کنید

    کد:
    int i=0;
    int data[128];
    // ADC interrupt service routine
    interrupt [ADC_INT] void adc_isr(void)
    {
    
    if (i<128)
      {
       i++;
       data[i]=ADCW;
       ADCSRA|=1<<ADSC;
       }
    }
    افتادگی آموز اگر طالب فیضی هرگز نخورد آب زمینی که بلند است

    دیدگاه


      #3
      پاسخ : مشکل در قراردادن خروجی ADC در یک ارایه 128 تایی

      یه سوال فوری...

      کمترین مقداری که رجیستر ADCW میتونه داشته باشه چی هست..؟

      آیا میتونه مقدار منفی هم داشته باشه...؟

      دیدگاه


        #4
        پاسخ : مشکل در قراردادن خروجی ADC در یک ارایه 128 تایی

        با سلام
        کمترین مقداری که میتونه بگیره صفره
        فکر کنم َمقدار منفی نگیره
        ببین راحت میتونی تست کنی
        یه برنامه بنویس برای ورودی سینوسی و هر بار که نمونه میگیره یه تاخیر چشمگیری بده که راحت بتونی ببینی برای ورودی های منفی مقدار میده یا نه
        به نظرم برای ورودی های منفی صفر میده!!!
        اگه جواب گرفتی ما هم مطلع کن بدونیم

        دیدگاه

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