٨۸۵۴۳۵۶۱-٠٢١

شنبه, 02 فروردين 773 ساعت 00:00

کار با ADC در نرم افزار بسکام

نوشته شده توسط 
این مورد را ارزیابی کنید
(3 رای‌ها)

کار با مبدل آنالوگ به دیجیتال میکروکنترلر AVR در نرم افزار Bascom avr :

 

معرفی واحد مبدل آنالوگ به دیجیتال:

گاهی نیاز است تا ولتاژ تجهیزات را اندازه گیری کنیم مانند اندازه گیری ولتاژ خروجی سنسورهای دما و ترموکوپل ها برای سنجش مقدار دما ، اندازه گیری ولتاژ خروجی لودسل ها برای سنجش وزن ، اندازه گیری ولتاژ خروجی تاکومترها برای سنجش مقدار سرعت دورانی ، اندازه گیری ولتاژ خروجی خط کش های مقاومتی برای اندازه گیری طول و فاصله و ... . اما مشکلی که وجود دارد این است که برای نمایش مقدار این ولتاژهای اندازه گیری شده باید آنها را تبدیل به مقدار دیجیتال کرد که برای این منظور از مبدل های آنالوگ به دیجیتال (ADC = Analog to Digital Converter) استفاده می شود.

در میکروکنترلرهای AVR امکانی قرار داده شده است که قادر است تا مقدار آنالوگ را به یک مقدار دیجیتال تبدیل کند که به آن واحد ADC (Analog to Digital Converter)  گفته می شود. در میکروکنترلرهای مختلف AVR تعداد این مبدل ها متفاوت است به عنوان مثال در میکروکنترلر Atmega 32 یک پورت کامل به مبدل آنالوگ به دیجیتال تعلق دارد بنابر این ما در میکروکنترلر Atmega 32 تعداد 8 مبدل آنالوگ به دیجیتال در اختیار داریم.

نحوه استفاده از واحد مبدل آنالوگ به دیجیتال میکروکنترلر AVR :

برای اینکه میکروکنترلر بتواند ولتاژ ورودی به واحد ADC را اندازه گیری کند باید این ولتاژ را با یک ولتاژ مرجع مقایسه کند. در میکروکنترلرهای AVR به سه طریق می توان ولتاژ مرجع را ساخت:

1-      استفاده از AVCC که در این صورت باید پایه AVCC به پایه تغذیه میکروکنترلر ACC متصل شود. بنابر این در این حالت مقدار ولتاژ مرجع واحد ADC برابر با ولتاژ تغذیه میکروکنترلر می باشد.

2-      استفاده از AREF که در این صورت می توان یک ولتاژ خارجی که می تواند مقدارش بین صفر و مقدار ولتاژ روی پایه AVCC باشد.

3-      استفاده از ولتاژ مرجع داخلی که مقدارش 2.56v است و این ولتاژ در صورت استفاده کاربر از امکان ولتاژ مرجع داخلی به صورت خودکار در داخل میکروکنترلر تولید می شود و به عنوان ولتاژ مرجع در نظر گرفته می شود.

نکته : در صورت استفاده از ولتاژ مرجع داخلی نباید از AREF استفاده شود. زیرا در صورت استفاده در داخل میکرو اتصال کوتاه رخ می دهد و خواهد سوخت.

نکته : برای کاهش اثر نویز CPU بر روی عملکرد ADC می توان از مدهای SLEEP و حالت ADC NOISE CANCELER استفاده کرد.

نحوه معرفی واحد مبدل آنالوگ به دیجیتال به نرم افزار Bascom avr :

برای استفاده از مبدل آنالوگ به دیجیتال (ADC) میکروکنترلر باید آن را به نرم افزار معرفی کرد. برای این منظور از دستور زیر استفاده می شود:

CONFIG ADC = SINGLE/FREE , PRESCALER = AUTO , REFERENCE = OPTIONAL

واحد ADC دارای دو مد تبدیل SINGLE و FREE است. در مد SINGLE باید از دستور GETADC() استفاده و کانال دلخواه توسط برنامه نویس انتخاب شود اما در مد FREE واحد ADC با یک ثابت نمونه برداری ، رجیستر داده ADC را UPDATE می کند.

PRESCALER : این گزینه مقدار کلاک ADC را مشخص می کند. با قرار دادن PRESCALER = AUTO کامپایلر با توجه به فرکانس اسیلاتور ، بهترین کلاک را برای واحد ADC تعیین می کند. مقادیر دیگر معتبر 2 , 4 , 8 , 16 , 32 , 64 , 128 می باشند.

REFERENCE = OPTIONAL : در این قسمت ما می توانیم نوع ولتاژ مرجع (REFRENCE VOLTAG) را مشخص کنیم. گزینه OPTIONAL می تواند موارد زیر باشد:

OFF : برای خاموش کردن ولتاژ مرجع داخلی و استفاده از ولتاژی که به پایه AREF به عنوان ولتاژ مرجع وصل شده است.

AVCC : از این گزینه برای استفاده از ولتاژ پایه AVCC به عنوان ولتاژ مرجع استفاده می شود.

INTERNAL : از این گزینه برای استفاده از ولتاژ مرجع داخلی 2.56V با خازن خارجی بر روی پایه AREF استفاده می شود.

دستور GETADC() :

با این دستور سیگنال آنالوگ وارد شده به کانال های ADC میکروکنترلر (0 - 7) به مقدار دیجیتال تبدیل شده و در متغییر VAR از نوع داده WORD قرار می گیرد. و به شکل زیر نوشته می شود:

var = GETADC (chanel)

مقدار متغییر var نتیجه تبدیل و chanel کانال مبدل آنالوگ به دیجیتال داخلی انتخاب شده است که می تواند بین صفر تا 7 (البته تعداد کانالهای آنالوگ به دیجیتال در میکروکنترلرهای مختلف ممکن است متفاوت باشد) باشد. از هر کانالی که به منظور مبدل استفاده شود دیگر نمی توان از آن به عنوان IO استفاده کرد.

نکته : برای محاسبه مقدار دیجیتال ولتاژ موجود بر روی پایه ADC طبق فرمول زیر عمل می کنیم:

ADC = (1024*Vin)/Vref

که در دستور GETADC() مقدار ADC در متغییر var ریخته می شود.

دستور START ADC :

برای شروع نمونه برداری از ولتاژ مورد اندازه گیری باید از دستور START ADC استفاده شود.

دستور STOP ADC :

برای خاتمه نمونه برداری از ولتاژ مورد اندازه گیری باید از دستور STOP ADC استفاده شود.

مثال :

$regfile = "m8def.dat"

$crystal = 8000000

Config Portb.0 = Output

Config Lcdpin = Pin , Db4 = Portc.1 , Db5 = Portc.2 , Db6 = Portc.3 , Db7 = Portc.4 , E =- Portd.2 , Rs = Portd.3

Config Lcd = 16 * 2

Config Adc = Single , Prescaler = Auto , Reference = Internal

Stop Adc

Start Adc

Dim A As Word

Do

Portb.0 = 1

A = Getadc(0)

Home

Lcd A

Waitms 10

Loop

End

وقفه ADC :

زمانی که کار نمونه برداری ADC از سیگنال آنالوگ به پایان رسید ، ADC پرچم اتمام خود به نام ADC را یک می کند. با فعال کردن وقفه سراسری با دستور ENABLE INTERRUPTS و فعال کردن وقفه ADC با دستور ANABLE ADC می توان به زیر برنامه وقفه ADC توسط ON ADC LABLE پرش کرد که LABLE نام دلخواه زیر برنامه وقفه ADC یا ISR مربوطه است. می توان برای کاهش نویز سیستم میکرو را در زمان نمونه برداری در مد IDEL یا ADC NOSIE REDUCTION قرار داد وسپس میکرو خودکار با بالا رفتن پرچم وقفه اتمام تبدیل ADC از این مد بیدار شده و مقدار دیجیتال شده را در متغییر نوع WORD قرار می دهد.

مثال:

$regfile = “4433def.dat”

$crystal = 4000000

$baud = 9600

Config adc = single , prescaler = auto

On adc adc_isr

Enable adc

Enable interrupts

Dim w as word , channel as byte

Channel = 0

Start adc

Do

   W = getadc(channel)

   Idle

Loop

End

Adc_isr:

   Print “channel ” ; channel ; “value” ;  w

   Waitms 500

return

بازدید 249002 بار