سلام مجدد شبتون بخیر
سخت افزار مولتی پلکسر 4051 رو بستم و در کد اون ایراد پیدا کردم : مشکل اول اینجاس که با آزمایشی که انجام دادم برای رنج های مختلف باید ولتاژ بین 0.02 تا 0.2 به میکرو برسه که برای تعیین محدوده رنج باید توسط میکرو این کار انجام بشه ولی آیا نتیجه گیری بنده درسته؟ و یا به طریق دیگه ای هست ؟ ((آزمایشم این بود:تو شبیه ساز مثلا رنج آخر که 2000 ولت هست رو دادم و 3 پایه سلکت رو فعال کردم(0x07) دوباره 200 ولت دادم و پایه های سلکت رو 0x06 دادم و تا 200میلی ولت که برای همشون برحسبselectorها به محدوده 0.2 تا 0.02 به میکرو رسید))و چیز دیگه ای هم که متوجه شدم اینه که بین هر سوییچ مولتی پلکسر باید مدت زمان کمی تاخیر بدم تا مبدل بتونه اون رو بخونه در حالی که توی عمل تاخیر به شدت محسوسه و میشه گفت نمایش ولتاژ خوب روی نمایشگر تثبیت نمیشه و سریع میگذره ، کدش رو براتون میگذارم:
و هم مشکل دیگه هم اینه که فکر می کنم چون مقدار خروجی مولتی پلکسر متغیره و ثابت نیست شرط داخل if هیچ وقت برقرا نمیشه چراکه حتما لازم هست که محدوده رو میکرو تشخیص بده اگر در اون محدوده نبود سوئیچ کنه و ورودی دیگر رو توی خروجی اعمال کنه. خلاصه نمی دونم چطور 2مشکل رو حل کنم !آیا میشه طور دیگری کد نوشت ؟ آیا سخت افزار دیگه ای هم لازم هست؟ :rolleyes:
منتظر پاسخ تون هستم ممنون یاعلی..
سخت افزار مولتی پلکسر 4051 رو بستم و در کد اون ایراد پیدا کردم : مشکل اول اینجاس که با آزمایشی که انجام دادم برای رنج های مختلف باید ولتاژ بین 0.02 تا 0.2 به میکرو برسه که برای تعیین محدوده رنج باید توسط میکرو این کار انجام بشه ولی آیا نتیجه گیری بنده درسته؟ و یا به طریق دیگه ای هست ؟ ((آزمایشم این بود:تو شبیه ساز مثلا رنج آخر که 2000 ولت هست رو دادم و 3 پایه سلکت رو فعال کردم(0x07) دوباره 200 ولت دادم و پایه های سلکت رو 0x06 دادم و تا 200میلی ولت که برای همشون برحسبselectorها به محدوده 0.2 تا 0.02 به میکرو رسید))و چیز دیگه ای هم که متوجه شدم اینه که بین هر سوییچ مولتی پلکسر باید مدت زمان کمی تاخیر بدم تا مبدل بتونه اون رو بخونه در حالی که توی عمل تاخیر به شدت محسوسه و میشه گفت نمایش ولتاژ خوب روی نمایشگر تثبیت نمیشه و سریع میگذره ، کدش رو براتون میگذارم:
for(j=0;j<5;j++){
PORTD = muxsel[j] | PORTD;
delay_ms(80);
adc_in = read_adc(0);
adc_in=(adc_in>>1)+(adc_in<<1);
tmp=adc_in;
if( tmp<1 & tmp>0.2){
for(i=0;i<4;i++){
volte[i]=tmp%10;
tmp/=10;
};
};
};
muxsel آرایه مقدار پایه های selsect مولتی پلکسر هست که من در اون 5عنصر برای پنج رنج ریختم:0x07,0x06...0x03 که از رنج آخر برای تشخیص شروع میکنه تا به اول برسه یعنی پایه های سلکت دفعه اول 0x07و برای بار آخر 0x03 هست.PORTD = muxsel[j] | PORTD;
delay_ms(80);
adc_in = read_adc(0);
adc_in=(adc_in>>1)+(adc_in<<1);
tmp=adc_in;
if( tmp<1 & tmp>0.2){
for(i=0;i<4;i++){
volte[i]=tmp%10;
tmp/=10;
};
};
};
و هم مشکل دیگه هم اینه که فکر می کنم چون مقدار خروجی مولتی پلکسر متغیره و ثابت نیست شرط داخل if هیچ وقت برقرا نمیشه چراکه حتما لازم هست که محدوده رو میکرو تشخیص بده اگر در اون محدوده نبود سوئیچ کنه و ورودی دیگر رو توی خروجی اعمال کنه. خلاصه نمی دونم چطور 2مشکل رو حل کنم !آیا میشه طور دیگری کد نوشت ؟ آیا سخت افزار دیگه ای هم لازم هست؟ :rolleyes:
منتظر پاسخ تون هستم ممنون یاعلی..