ايران ويج

نسخه‌ی کامل: تبدیل2 ولتاژ آنالوگ به دیجیتال و مجموع گیری آنها به کمک avr
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
بچه ها کسی هست از همون اولش راهنماییم کنه؟
گیر کردم بد!
سلام دوست عزیز
شما اول مشخص کن که هدفت چیه!!!
با چه زبانی میخوای.
سطح ولتاژات چه قدره؟
دقت چقدر مهمه؟
میخوام یک ولتاژانالوگ به میکرو بدم بهد اونا به دیجیتال تبدیل کنم یک عملیات روی اون انجام بدم (مثلا به توان دو برسونم) یا اینکه دو ولتاژانالوگ به میکرو بدم به دیجیتال تبدیل کنه وبعد با هم جمعشون کنه سپس به صورت انالوگ از میکرو بگیرم
نمی دونم سخت یا راحته ولی خیلی بهش نیاز دارم
از کتاب سعید یه نفر : آموزش بسکام


مبدل آنالوگ به ديجتال(ADC) :



گاهي نياز است که يک کميت بيروني (مانند دما و شدت صدا و شدت نور و... ) اندازه گيري شود ، براي اينکار از وسيله اي به نام سنسور استفاده مي شود.

سنسور ها مقدار يک کميت آنالوگ را به ولتاژ يا جريان تبديل مي کند ، سپس اين ولتاژ انالوگ به مبدل انالوگ به ديجتال ميکرو داده مي شود و مبدل انالوگ به ديجتال مقدار ولتاژ را به کميت ديجتال متناظر تبديل ميکند ، سپس اين مقدار ديجتال با اعمال رياضي به مقدارعددي متناظر تبديل مي شود و روي LCD يا سون سگمنت نمايش داده مي شود .

حداکثر ولتاژي که مبدل انالوگ به ديجتال ،که از اين به بعد به آن Adcمي گوييم ميتواند اندازه بگيرد برابر با VCC است و اگر ولتاژ اعمالي از VCC بيشتر شود ممکن است مبدل انالوگ به ديجتال آسيب ببيند (معمولا بيشرين ولتاژ ورودي که به ADC اعمال ميکنند 5 ولت است) و کمترين ولتاژ اعمالي برابر با GND است .

ADC به ازاي ولتاژ 5 ولت عدد 1023 و به ازاي صفر ولت عدد صفر را در متغيير مربوطه قرارمي دهد .

Adcبا دستور زير راه اندازي مي شود :

کد php:
Config Adc Single/Free Prescaler Auto Reference Opt 

گزينه هاي single/free :
در حالتي که Single انتخاب شود مقدار ديجتال سيگنال انالوگ توسط دستور Getadc در يک متغيير از جنس Word ريخته مي شودو در حالتي که Free انتخاب شود مقدار ديجتال سيگنال انالوگ کانال صفر در ريجيستر مربوط به Adc ريخته مي شود .

Prescaler :
اين گزينه فرکانس ADC را مشخص ميکند و در حالتي که Autoانتخاب شود کامپاير با توجه به کريستال انتخاب شده بهترين کلاک را در نظر مي گيرد ، موارد ديگر براي کلاک عبارتند از 2 و 4 و 8 و 15 و 32 و 64 يا 128 است که يه جاي گزينه Auto نوشته مي شود .
هر چه عدد کمتری وارد شود فرکانس فوق بیشتر است .

Reference :
در صورتي که بخواهيد از يک ولتاژ مرجع استفاده کنيد اين گزينه را بنويسيد (در صورت عدم استفاده از اين دستور ولتاژ مرجع زمين است و نيازي به نوشتن اين دستور نيست) .
(اين امکان فقط در بعضي از ميکرو ها وجود دارد ) Opt ميتواند يکي از موارد زير باشد :
Off : در اين حالت ولتاژمرجع داخلي خاموش شده و از ولتاژ مرجع بر روي پايه Aref استفاده مي شود.
Avcc : در اين حالت ولتاژ پايه Avcc به عنوان ولتاژ مرجع در نظر گرفته مي شود .
Internal : در اين حالت از ولتاژ مر جع داخلي 2.65 ولت استفاده مي شود .

بعد از راه اندازي Adc نوبت به استفاده از آن است براي اينکار با دستور Start Adc ، ADC روشن شده و شروع به نمونه برداري از سيگنال انالوگ موجود بر روي پايه اش مي کند و آن را به مقدار ديجتال تغيير مي دهد ، اين مقدار ديجتال با دستور زير در يک متغيير از جنس Word ريخته مي شود

کد php:
Var = Getadc (Channel

Var يک متغيير از جنس Word ميباشد
Channel : شماره : شماره Adc است که سيگنال انالوگ به آن اعمال شده .

مانند :

کد php:
$regfile "m8def.dat" 
$crystal 8000000 
Config Lcd 
16 
Config Lcdpin 
Pin Db4 Pinb.2 Db5 Pinb.3 Db6 Pinb.4 Db7 Pinb.5 Rs Pinb.0 Pinb.1 
Config Adc 
Single Prescaler Auto 
Dim A 
As Word 
Start adc 
Q

Getadc(1
Locate 1 
Lcd A 
Goto 
End 

در خط هاي اول LCD و ADC پيکر بندي شده است در خط دهم مقدار انالوگ داده شده به پايه 24 ميکرو (PORTC.1) بعد از تبديل به مقدار ديجتال در متغيير A ريخته مي شود وسپس اين متغيير در سطر اول وستون اول LCD به نمايش در مي آيد .

مثال

کد php:
$regfile "m16def.dat"
$crystal 12000000
Config Lcd 
16 4
Config Lcdpin 
Pin Db4 Portd.0 Db5 Portd.1 Db6 Portd.2 Db7 Portd.3 Portd.4 Rs Portd.5
Config Adc 
Single Prescaler Auto
Dim A 
As Word As Word As Word As Word As Word As Word As Word As Word
Cls
Q
:
Getadc(0) : Locate 1 Lcd A
Getadc(1) : Locate 1 Lcd B
Getadc(2) : Locate 2 Lcd C
Getadc(3) : Locate 2 Lcd D
Getadc(4) : Locate 3 Lcd E
Getadc(5) : Locate 3 Lcd F
Getadc(6) : Locate 4 Lcd G
Getadc(7) : Locate 4 Lcd H
Goto Q
End 

در اين مثال از ميکرو مگا 16 و LCD 16*4 استفاده شده است ، ميکرو مگا 16 داراي 8 کانال ADC ميباشد ، که در اين مثال از همه ADC هاي اين ميکرو استفاده شده است .

ممکن است اين سوال براي شما پيش بيايد که : ADC نمي تواند بيشتر از 5 ولت را اندازه گيري کند ، ما ولتاژ هاي بالا تر را چگونه اندازه بگيريم؟ براي اندازه گيري ولتاژ هاي زياد شما بايد آن را با مقاومت کم کنيد ، فرض کنيد يک ولتاژ از 0 تا 200 ولت متغيير داريد و ميخواهيد آن را با ميکرو اندازه بگيريد ، شما بايد اين ولتاژ متغيير را به 0 تا 5 ولت تبديل کنيد ...