اطلاعیه

Collapse
No announcement yet.

مشکلی عجیب با Adc میکرو در حالت auto trigger: مقادیر اشتباه قرار داده می شوند

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

    مشکلی عجیب با Adc میکرو در حالت auto trigger: مقادیر اشتباه قرار داده می شوند

    با سلام.

    دوستان من با مد auto trigger به مشکل عجیبی برخوردم. من می خوام از 8 کانال به طور دائم اسکن بگیرم و نتایج رو روی lcd نمایش بدم. مشکلی از بابت انجام کار نیست. اما مقادیر به ترتیب تو رجیستر Adc_data ریخته نمی شه. همیشه adc_data[1] کانال 0 رو در خودش ذخیره می کنه و 2 کانال 1 و به همین ترتیب. adc_data[0] هم داده کانال 7 رو توی خودش ذخیره می کنه. من تابع adc رو هم تغییر می دم اما بازم قضیه همینه!
    کد:
    #define FIRST_ADC_INPUT 0
    #define LAST_ADC_INPUT 7
    unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
    #define ADC_VREF_TYPE 0x20
    
    // ADC interrupt service routine
    // with auto input scanning
    interrupt [ADC_INT] void adc_isr(void)
    {
    static unsigned char input_index=FIRST_ADC_INPUT;
    // Read the 8 most significant bits
    // of the AD conversion result
    adc_data[input_index]=ADCH;
    // Select next ADC input
    if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
      input_index=0;
    ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    
    }
    قبلاً میشد اینجا فایل هم ضمیمه کرد. اما جدیداً نیست (یا من نمی تونم دیگه!!!!) اینم یه فایل برنامه و پروتئوس برای اینکه ببینید چه خبره.

    https://db.tt/3s2hTIxo
    دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.
لطفا صبر کنید...
X