در این پست قصد دارم ساخت خازن سنج در محیط پروتئوس به کمک program کردن میکروکنترلر AVR ATmega را شرح بدهم.
به این منظور لازم است آشنایی حداقلی با کد basic که در نرم افزار Bascom AVR به کار می رود را داشته باشیم.
در نهایت خازن سنجی ساخته شده که زمانی که آن را روشن میکنیم ابتدا یک پیام خوش آمد گویی ظاهر شده، پس از یک تاخیر کوچک پیامی روی LCD نمایش داده می شود که از ما می خواهد خازن سنج را در مدار قرار دهیم سپس در پیام بعدی درخواست می کند دکمه را فشار دهیم تا ظرفیت خازن محاسبه شود.
برای شروع باید ابتدا نوع ریزپردازنده را انتخاب کنیم
بدین منظور میتوان از یکی از دو روش زیر استفاده کرد:
1. از پنجره ی OPTION گزینه COMPILER و سپس CHIP را انتخاب کرده و از آنجا میکروکنترلر مورد نظر خود را انتخاب می کنیم.
2. از طریق نوشتن کد زیر می توانیم میکروکنترلر مورد نظر خود را انتخاب نماییم :
$regfile =“m8def.dat”
لازم به ذکر است که اولویت انتخاب نوع میکروکنترلر توسط BASCOM AVR با روش دوم (یعنی کد نوشته شده) می باشد.
از طریق کد زیر فرکانس کریستال را تعیین میکنیم :
$crystal = 16000000
در کد فوق فرکانس کریستال 16 مگاهرتز در نظر گرفته شده است.
در گام بعد با استفاده از کد config ، تمام پیکربندی های لازم را انجام می دهیم.
بدین منظور ابتدا لازم است تا با پایه های LCD آشنا شویم:
در این پروژه من از یک 2×LED 16 استفاده کرده ام که پایه های آن به شرح زیر می باشد :
GND: منبع تغذیه منفی یا زمین
VCC : منبع تغذیه مثبت
VEE : LCD تنظیم کنتراست
RS : LED تعیین مد کاری
R/W : (0) خواندن(1) و نوشتن
EN : LCD برای استفاده از
DB0تاDB7: پایه های اطلاعات
LED+,LED- : نور پس زمینه
در مرحله بعد اتصالات هر پورت به میکروکنترلر را به وسیله کد BASIC مشخص می کنیم:
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0
سپس برای اتصال مدار rc را به یکی از پایه های میکروکنترلر از کد زیر استفاده می کنیم:
Config Portd.0 = Output
حال با کد زیر دکمه ی start را به یکی از پایه های میکروکنترلر وصل می نماییم:
Config Portc.0 = Input
حال نوبت به تعریف متغیرهای مورد نیازمان می رسد که به وسیله کد DIM x AS y این کار را انجام می دهیم:
1.یک متغیر برای ذخیره ی مقدار ثابت زمانی می خواهیم.
2.یک متغیر برای ذخیره سازی ظرفیت خازن می خواهیم.
3.یک متغیر برای نمایش واحد خازن می خواهیم.
4.پس از تعریف متغیرهای فوق می خواهیم تا 2 رقم اعشار ظرفیت خازن برای ما نمایش داده شود.
5.در نهایت با دستور cls می خواهیم تا صفحه ی LCD پاک شود.
Dim T As Word
Dim C As Single
Dim Unit As String * 3
Config Single = Scientific , Digits = 2
Cls
نمایش پیام خوش آمد گویی و درخواست قراردادن خازن در مدار:
ابتدا مکان متن مورد نظر را با دستور زیر مشخص می کنیم:
ستون , سطر Locate
متن خود را با دستور زیر وارد می کنیم:
Lcd “Welcome”
با استفاده از یکی از دستورات تاخیر، مدت زمان نمایش متن خود را انتخاب می کنیم(لازم به ذکر است که از دستورdelay به منظور تاخیر به اندازه 1میکروثانیه،wait به اندازه ی چند ثانیه، waitms چند میلی ثانیه و waitus چند میکروثانیه استفاده می شود).
برای نمایش پیام درخواست قراردادن خازن در مدار نیز به صورتی که گفته شد عمل می کنیم.
Locate 1 , 5
Lcd "welcome"
Wait 1
Cls
Home
Lcd "insert capacitor"
Wait 1
استفاده از دستورات do و loop برای ایجاد حلقه:
در این مرحله می خواهیم نمایشگر تا زمانی که دکمه ی start توسط کاربر زده نشده ، عبارت press start را نمایش دهد.
برای این کار از دستور until استفاده می کنیم.
باید به خاطر داشته باشیم که دکمه ی start را به کدام پورت میکروکنترلر وصل کردیم در این پروژه من دکمه را به PORTC.0 میکروکنترلر وصل کردم بنابراین کد من به صورت زیر می باشد:
Do
Cls
Lcd "Press Start"
Waitms 100
Loop Until Portc.0 = 1
محاسبه ثابت زمانی:
برای محاسبه ی ثابت زمانه از دستور getrc استفاده می کنیم که دارای دو آرگومان (یکی برای تعیین پورتی که مدار rc را به آن وصل کردیم و دیگری برای شماره ی پورت) می باشد و سپس آن را در متغیر T که از نوع word تعریف کردیم، می ریزیم.
همانطور که میدانیم باگذشت 1 ثابت زمانی (T)، سطح ولتاژ خازن به 63% شارژ یا دشارژ خود می رسد اما ما در این پروژه شارژ و دشارژ خازن را به صورت 100% میخواهیم بنابراین از فرمول t=rc استفاده می کنیم.
به این دلیل که ما 100% شارژ یا دشارژ را می خواهیم لذا در فرمول فوق به جای t، 5t و به جای r که مقاومت دلخواه ما در مدار می باشد مقدار 10 را قرار می دهیم.بنابراین به c=t/2 می رسیم.
ظرفیت خازن به طور پیش فرض به صورت نانوفاراد محاسبه می شود اما من برای زیبایی در پروژه برای ظرفیت های بالای 1000 نانوفاراد ، آن ها را به میکروفاراد تبدیل کرده ام.
در مرحله ی بعدی با استفاده از دستوراتی که در سطرهای قبل گفته شد،دستور نمایش ظرفیت خازن روی LCD را نوشته و می خواهیم که یک پیام اتمام نیز برای ما نمایش داده شود.
Do
T = Getrc(pind , 0)
C = T / 2
If C > 1000 Then
Unit = "uf"
C = C / 1000
Cls
Home
Lcd "c:" ; C ; Unit
Locate 2 , 1
Lcd "Finish"
Wait 4
End If
If C < 1000 Then
Unit = "nf"
Cls
Home
Lcd "c:" ; C ; Unit
Locate 2 , 1
Lcd "Finish"
Wait 4
End If
Loop
End
پس از انجام مراحل فوق کدنویسی ما در محیط Bascom AVR به پایان رسیده و حال در محیط پروتئوس مدار مورد نظر را شبیه سازی کرده و عملکرد میکروکنترلر پروگرم شده را مشاهده می کنیم.
برای این کار ابتدا میکروکنترلر ATMEGA8 را مطابق تصویر زیر اضافه می کنیم
-دکمه ی START را نیز اضافه می نماییم.
-به دو پتانسیومتر از نوع HG نیز نیاز داریم چراکه می خواهیم مقدار آن را برای کالیبره کردن مدار تغییر دهیم همچنین رنج دقیق تری از مقاومت را برای نمایش دقیق تر نتیجه بدست آوریم.
-در نهایت LCD 16×2 و خازن برای تست مدار را نیز اضافه می کنیم.
-پس از اضافه کردن ابزار مورد نیاز ، آن ها را روی صفحه قرار می دهیم.
وصل کردن پایه های LCD به مدار در پروتئوس:
همان طور که در برنامه ی خود در محیط BASCOM AVR تعیین کردیم ، RS را به PB5 ، E به PB4 ، DB4 به PB3 ، DB5 به PB2 ، DB6 به PB1 و درنهایت DB7 را به PB0 وصل می نماییم.
در بخش Terminals mode در برنامه ی پروتئوس ، Ground و power را در مدار قرار داده و به پتانسیومتر متصل می کنیم.
همان طور که در برنامه نوشتیم VEE را برای تنظیم کنتراست LCD به پتانسیومتر ، VDD را به منبع تغذیه ی مثبت(power) ، Vss و R/W را به منبع تغذیه ی منفی (زمین)متصل می کنیم.
رسم مدار RC در پروتئوس:
از یک پتانسیومتر به جای مقاومت 10 اهمی برای کالیبره کردن مدار استفاده می کنیم تا نتیجه ی دقیق تری را داشته باشیم.
یک سر خازن را به پتانسیومتر و سر دیگر آن را به زمین وصل می کنیم.
پورت صفر پتانسیومتر را طبق تعریف در برنامه به PORTD.0 متصل می نماییم.
یک سر کلید start را مطابق تعریف در برنامه به PORTC.0 و سر دیگر آن را به زمین متصل می کنیم.
کامپایل کردن و پروگرم کردن میکروکنترلر:
پس از شبیه سازی مدار در برنامه ی پروتئوس حال مجددا به سراغ برنامه ی BASCOM AVR رفته و کد خود را کامپایل می کنیم.
پس از کامپایل کردن کد برای پروگرم کردن میکروکنترلر به پروتئوس بازمی گردیم.
برای این کار ابتدا روی میکروکنترلر کلیک کرده سپس به بخش program file می رویم و برنامه ی خود را از جایی که ذخیره کرده بودیم انتخاب می کنیم.
حال نوبت به run کردن برنامه می رسد.
لازم به ذکر است که دقت خازن سنجی که ساخته ایم به شرح زیر می باشد:
ظرفیت2/3 تا 6/4 ---------------------------- 0/1
ظرفیت 6/4 تا 10------------------------------ 0/2
و هرچه ظرفیت خازن بالاتر برود دقت خازن سنج کمتر می شود چرا که جریان کمی از پایه های میکروکنترلر عبور می کند و همچنین ما مدار rc را مستقیما به میکروکنترلر وصل کرده ایم.
راه حل برای بالا بردن دقت خازن سنج استفاده از تقویت کننده می باشد.
*امیدوارم مطالب ارائه شده مورد قبول و توجه شما عزیزان قرار گرفته باشد*