چگونه با استفاده از PIC16c71 یک ولتمتر سریال بسازیم
عنوان اصلی مقاله: How to build a Serial Voltmeter using the PIC16C71
منبع:www.rentron.comش
ولتمتر سریال
ساختن یک ولتمتر سریال ساده که بتواند از 0 تا 5 ولت را اندازه بگیرد واقعا ساده است.این کار به کمک Microsoft Visual Basic نسخه 5 به بالا و نرم افزارهای Melabs وPicBasic انجام پذیر است.شما به این دلیل به Microsoft Visual Basic Pro نیاز دارید که بتوانید از مولفه MsComm Control آن استفاده کنید.این Control در نسخه "آموزشی" Visual Basic 5 موجود نیست(*).PIC 16c71 با داشتن یک مبدل A/D داخلی این کار را ساده ساخته است.پین های 17 و18و1و2 ورودی های آنالوگ هستند,یعنی به ترتیب AIN0 وAIN1 وAIN2 و AIN3.
نرم افزار ولتمتر سریال , جهت دریافت اطلاعات فرستاده شده از طرف میکروکنترلر PIC ,بر پورت سریال نظاره می کند و پس از دریافت داده ,نتیجه نمایش داده شده از طریق ضرب نمودن آن در 0.02 بدست می آید.مبدل A/D موجود در PIC16C71 از نوع تقریب متوالی(Successive Approximation) بوده ونتایج هشت بیتی تولید می کند.با وجود نتیجه هشت بیتی به رنج 0 تا 255(به نمایندگی از 0 تا 5 ولت) محدود می شویم.
شماتیک مدار PIC16C71
کد PicBasic
" Access PIC16C71 A/D using Peek and Poke
Symbol ADCON0 = 8 " A/D Configuration Register 0
Symbol ADRES = 9 " A/D Result
Symbol ADCON1 = $88 " A/D Configuration Register 1
Symbol SO = 0 " Serial Output on port B0
poke ADCON1, 0 " Set PortA 0-3 to analog inputs
poke ADCON0, $41 " Set A/D to Fosc/8, Channel 0, On
Loop:
poke ADCON0, $45 " Start Conversion
pause 1 " Wait 1ms for conversion
peek ADRES, B0 " Get Result to variable B0
serout SO,N2400,(#B0,10) " Send variable to serial out
goto Loop " Start over again
کد بالا که بسیار ساده است,با استفاده از Micro Engineering"s PicBasic نوشته شد.با استفاده از دستورات PEEK و POKE در PicBasic قادر خواهیم بود به رجیستر های A/D داخلی PIC16C71 و پین های پورت A دست پیدا کنیم.بعد از آمادهسازی رجیسترهای A/D برای استفاده از AN0 -به خاطر پذیرش سیگنال های آنالوگ- برنامه در یک حلقه ساده باقی می ماند و به طور پیوسته مقادیر آنالوگ نمونه برداری شده در پین(پایه) 17 (موسوم به RA0/AN0) را می فرستد.
کد ویژوال بیسیک:
Form1
با ایجاد یکForm ساده , MSComm Control , یک تایمر, یک Text Box و یک دکمه جهت خارج شدن از برنامه می توانید مانند آنچه در پنجره کد بالا و Form1 می بینید برنامه Visual Basic خود را بسازید.
اگر ترجیح می دهید از پورت Com دیگری استفاده کنید, به سادگی در جاییکه ما CommPort1 را انتخاب کردیم پورت مورد نظرتان را وارد کنید.به کد خط Text1.Text = Asc(DataIn) * 0.02 & " Volts DC" توجه کنید.این خط از کد , داده دریافتی از PIC را به مقداری که بتوان آن را در Text Box یعنی ناحیه سیاه رنگ نشان داد تبدیل می کند. از آنجا که مبدل A/D موجود در PIC16C71 وضوح هشت بیتی دارد , پس تنها 256 ترکیب ممکن از 0 تا 255 داریم.چون 5 ولت تقسیم بر 256 برابر با 0.0195 است,مقدار برگردانده از 250 بایستی معادل 4.87 باشد,چون 4.87=250*0.0195.مقدار 255 نزدیک به 5 ولت (4.9725 ولت) را نشان می دهد و52 ,1.04 ولت را نشان می دهد.
وضوح هشت بیت: برای اکثر کاربردها,وضوح هشت بیت کفایت می کند.با وضوح هشت بیتی ما قادر خواهیم بود ورودی های آنالوگ را با گام صعودی 0.0195 ولت اندازه بگیریم.ما 0 را به نمایندگی از صفر ولت و 255 را به نمایندگی از پنج ولت داریم.بنابراین وضوح واقعی ما 0.0195 یا 19.5 میلی ولت است.256 حالت مختلف -شروع از صفر و گام افزایش 19.6 میلی ولتی می تواند برای اکثر کاربردها کافی باشد.
بسیار خوب,پس چرا من از مقدار 0.02 برای انجام محاسباتم استفاده کردم؟ من آن را به 0.02 گرد کردم چون بعد از اینکه در حین عملکرد مدارم ,از ولت متر خود برای قرائت مقدار دقیق استفاده کردم , متوجه شدم با استفاده از 0.02 نتایج من دقیق تر می شود.این احتمال وجود دارد که مدار شما اندکی با این متفاوت باشد زیرا تاکنون دیده نشده هیچ دو وسیله ای کاملا یکسان باشند.این ایده خوبیست که کمی آزمایش کنید و از یک ولتمتر دقیق برای تنظیم نمودن برنامه استفاده کنید تا به نتایج دقیق تری برسید.