با سلام دوستان
امروز میخواستم یک دستگاه درست کنم که وقتی خازن با ظرفیت مجهول رو توی مدار بزاریم ظرفیتشو نشون بده.
تو این پروژه از این قانون که (R*C=ثابت زمانی و اینکه ولتاژ خازن در این زمان، 0.632 برابر ولتاژ ورودی است)استفاده کنم.
بنابراین مدارش رو توی PROTEUS شبیه سازی کردم.اینم لینک مدار با فایل PROTEUS و کد اون با زبان CODEVISION:
Capacitance Meter
روش کار برنامه ای که نوشتم اینجوریه که یک کلید برای ورودیش گذاشتم (PINB.0) تا با زدن این کلید مدار کارشو شروع کنه(که این کار رو خط اول برنامه انجام میدهwhile(PINB.0==0)) همچنین برای اینکه تا زمانیکه کلیدی رو نزدیم روی LCD خالی نباشه یک تابع نوشتم که روی LCD مینویسه"PUSH <START>".پس تا زمانیکه کلید زده نشه روی LCD، PUSH <START>”"نوشته میشه و وقتی کلید زده بشه برنامه شروع میشه:اول LCD رو پاک میکنه(خط دوم برنامه)بعدشم مقدار ولتاژ خازن رو از طریق ADC میخونه و توی یه متغییر ذخیره میکنه و خط بعدش هم این عدد رو به ولتاژ متناظرش تبدیل میکنه(خط 3 و4).همچنین در ادامه رله رو توسط (PORTD.0) فعال میکنه تا مدار اصلی (که همون مدار RC هست)شروع به کار کنه همچنین تایمر را راه اندازی میکنه(توسط دستور TCCR0=0x05; )که تایمر با فرکانس 7.813 کیلوهرتز شروع به کار میکنه.وسپس منتظر میمونه تا ولتاژ خازن(که از طریق ADC در حال خوندن هست) به 0.632برابر ولتاژ ورودی مدار RC (5 ولت) برسه(5*0.632=3.16) و وقتی به این ولتاژ رسید تایمر رو متوقف میکنه (TCCR0=0x00) و مقدار موجود در تایمر رو در متغییر t ذخیره میکنه و تایمر رو برای استفاده ی بعدی ، صفرش میکنه(TCNT0=0x00) و بعدش این مقدار t رو به رشته تبدیل میکنه تا توسط LCD قابل خواندن باشه(sprintf(str_t,"C=%f nf",t)) و بعدشم روی LCD نمایش داده میشه.
این روش کار برنامه من بود.در ضمن من زیاد با TIMER و LCDکار نکردم پس احتمالا توی برنامه نویسی اشتباه کردم .همچنین به نوع متغییر هام هم شک دارم(منظورم float,charهست).یا مثلا درسته که توی برنامه توسط ریجستر TCCR0 تایمر را متوقف و راه اندازی کنم؟
با تشکر