با سلام.
دوستان من با مد auto trigger به مشکل عجیبی برخوردم. من می خوام از 8 کانال به طور دائم اسکن بگیرم و نتایج رو روی lcd نمایش بدم. مشکلی از بابت انجام کار نیست. اما مقادیر به ترتیب تو رجیستر Adc_data ریخته نمی شه. همیشه adc_data[1] کانال 0 رو در خودش ذخیره می کنه و 2 کانال 1 و به همین ترتیب. adc_data[0] هم داده کانال 7 رو توی خودش ذخیره می کنه. من تابع adc رو هم تغییر می دم اما بازم قضیه همینه!
قبلاً میشد اینجا فایل هم ضمیمه کرد. اما جدیداً نیست (یا من نمی تونم دیگه!!!!) اینم یه فایل برنامه و پروتئوس برای اینکه ببینید چه خبره.
https://db.tt/3s2hTIxo
دوستان من با مد 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