سلام دوستان. من برای یک قسمت از یک پروژه احتیاج دارم که adc میکرو را (mega32) با تایمر یک فعال کنم .البته خودم تونستم این کارو بکنم اما مشکل اونجاست که بعد از انجام تبدیل توسط adc به جایی اینکه میکرو ادامه برنامه را انجام دهد دوباره از ابتدا برنامه را شروع میکنه یعنی یجورایی ریست میشه .کسی می دونه مشکل از کجاست یا اگه برنامه نمونه ای داره لطف کنه لینکشو بذاره لطفا.حسابی اعصابم رو ریخته بهم نمی فهمم مشکل از کجاست .در ضمن برنامه رو با proteus6.9 تست کردم . :angry:
اطلاعیه
Collapse
No announcement yet.
کمک درباره adc و timer1
Collapse
X
-
پاسخ : کمک درباره adc و timer1
unsigned char bufer[10];
int result=0,j;
main()
{
DDRA=0XFE;
DDRC=0XFF;
DDRB=0XFF;
TCNT1=0X0000;
TCCR1B=0X00;
TIFR=0X00;
TIMSK=0X04;
ADMUX=0XE0;
ADCSRA=0Xee;
SFIOR=0XC0;
#asm("sei"
while(1)
{
TCCR1B=0X05;
sprintf(bufer,"temp:%d",result);
lcd_printf(2,20,bufer);
}
};
interrupt[ADC_INT] void convert(void)
{
result=(ADCH);
}http://www.eca.ir/forum2/index.php/topic,10159.0.html
Engineering is the art of making what you want from things you can get.
اموزش DSP ...........................
http://www.eca.ir/forum2/index.php?topic=29824.0
http://www.eca.ir/forum2/index.php?topic=32324.0
دیدگاه
-
پاسخ : کمک درباره adc و timer1
این قسمتی از پروژه نمایشگر داخل کابین اسانسور است که شماره طبقات و جهت حرکت اسانسور و باز یا بسته بودن در را نشان می دهد. این قسمت از برنامه را که قرار دادم می خواهم به حالت یک زیر نویس از قسمت پایین ال سی دی گرافیکی عبور کند و دما و ساعت و غیره را نمایش دهد ولی می خواهم مقدار دما ی کابین مثلا هر 10 ثانیه یکبار اپدیت شود با استفاده از delay هم نمی توان این کاررا کرد چون میکرو باید به کار خود ادامه دهد و نباید منتظر طی شدن این 10 ثاتیه شود.http://www.eca.ir/forum2/index.php/topic,10159.0.html
Engineering is the art of making what you want from things you can get.
اموزش DSP ...........................
http://www.eca.ir/forum2/index.php?topic=29824.0
http://www.eca.ir/forum2/index.php?topic=32324.0
دیدگاه
-
پاسخ : کمک درباره adc و timer1
سلام ................
درسته .. حالا متوجه منظورتون شدم .. ببینید شما برای اون کار (همون کنترل کردن 10 ثانیه یک بار ..) باید از تایمر استفاده کنید .. خب این رو توی پیت اولتون هم اشاره کردید .. اما نحوه ی استفاده از اون .. اگه از تایمر 1 استفاده میکنید میتونید از وقفه ی اون استفاده کنید .. یعنی هر بار که Over Flow اتفاق افتاد سنسور چک بشه .. امااینطوری که نمیشه با این اوصاف سنسور باید مدام چک بشه .. پس چیکار کنیم؟ میتونیم هر ده بار یک بار این رفرش رو برای سنسور اعمال کنیم .. یعنی یه متغییر تعریف کنیم اون هم از نوع INT .. بعد بگیم که اگه مثلا مقدار این متغییر شد 10 یا 20 یا هر مقدار که مد نظر شما هست، یک بار read_adc و بعد هم نمایش اون روی ال سی دی .. با این روش میتونید به اجرای دستورات میکرو امیدوار باشید (در واقع مطمئن باشید ..) در عین حالیکه به صورت وقفه ای و با Hold شدن مقدار Program counter در زمان اجرای وقفه هم دستور خوندن سنسور رو اجرا کنید و هم نمایش اون رو روی ال سی دی .. در ضمن از یه مقاومت 100K هم برای پایه ی Reset میکرو استفاده کنید اون هم به VCC .. موفق باشید ..دوستان! مدتی کمتر به سایت میام ..
دیدگاه
-
پاسخ : کمک درباره adc و timer1
فکر کنم منظور شما اینه که تایمرو فعال کنم و با سرریز تایمر در زیر برنامه مربوط به وقفه سر ریز تایمر adc رو فعال کنم و مقدار اونو بخونم اگه منظور شما این بوده من برنامشو نوشتم و جوابم داد (بدون ریست شدن میکرو)"ممنون"اما فکر نکنم این جواب اصلی باشد چون با سرریز شدن تایمر باید به صورت اتوماتیک adc فعال شود نه از طریق فعال کردن ان در زیر برنامه مربوط به سرریز
unsigned char bufer[10];
main()
{
DDRA=0XFE;
DDRC=0XFF;
DDRB=0XFF;
TCNT1=0X0000;
TCCR1B=0X00;
TIFR=0X00;
TIMSK=0X04;
ADMUX=0XE0;
ADCSRA=0XA6;
SFIOR=0XC0;
#asm("sei"
while(1)
{
TCCR1B=0X05;
sprintf(bufer,"temp:%d",ADCH);
lcd_printf(2,20,bufer);
};
}
interrupt[10] void timer1_isr(void)
{
ADCSRA=0XE6;
}http://www.eca.ir/forum2/index.php/topic,10159.0.html
Engineering is the art of making what you want from things you can get.
اموزش DSP ...........................
http://www.eca.ir/forum2/index.php?topic=29824.0
http://www.eca.ir/forum2/index.php?topic=32324.0
دیدگاه
-
پاسخ : کمک درباره adc و timer1
این راهی که شما فرمودید اشتباه نیست ولی راه اصلی نیست adc نباید داخل زیر برنامه فعال بشه باید وقتی تایمر سرریز میشه اتوماتیک adc فعال شود چون adc علاوه بر راه معمول میتونه توسط منابع دیگه مثل سرریز تایمرها ،ازطریق مقایسه کننده انالوگ یا از طریق حالت تسخیر تایمر فعال شود و رجیستر ADCHوADCL رااپدیت کنه و احتیاجی به فعال کردن مستقیم ADC نیست ولی وقتی من از این روشها استفاده می کنم میکرو ریست میشه البته درشبیه سازی با پروتئوس (روی سخت افزار تست نکردم)http://www.eca.ir/forum2/index.php/topic,10159.0.html
Engineering is the art of making what you want from things you can get.
اموزش DSP ...........................
http://www.eca.ir/forum2/index.php?topic=29824.0
http://www.eca.ir/forum2/index.php?topic=32324.0
دیدگاه
دیدگاه