# برنامه نویسی میکروکنترلر (MicroController) ها و MicroProcessor ها > برنامه نویسی سیستم های Embeded > AVR >  مبدل آنالوگ به دیجیتال در avr

## fahimeh2010

سلام
من میخوام یه برنامه برای ADC در codevision برای IC Atmega32 بنویسیم و در نرم افزار Proteus شبیه سازی کنم.ورودی adc در Protues رو چی در نظر بگیرم و خروجی رو روی چی نمایش بدم.

----------


## farzadsw

برای ورودی راه های زیادی هست ، راحت تربنش اینه:



خروجی رو میتونید روی lcd کاراکتری ، یه ردیف مثلا 8 تاییLED و ... نشون بدید.

----------


## raha_20

میشه یه کم بیشتر تو ضیح بدین 

من این را به عنوان ورودی بزارم بعد به کدوم پورت ای سی وصل کنم. میشه یه design کامل بزارین

----------


## raha_20

یعنی هیچ کس تو این سایت نیست که یه کم به ما کمک کنه . تراخدایکی بیاد یه کم اینجا به ما کمک کنه .......

 :خیلی عصبانی:  :گریه:  :افسرده:

----------


## fahimeh2010

سلام 
اکه میشه بیشتر توضیح بدید.ورودی که به ATMEGA 32 وصل میشه چیه و به کدام پایه ها باید وصل بشه؟

----------


## farzadsw

پایه های 32 تا 40 (پورت A) برای ADC هستن . ولتاژی(مثل ولتاژ وتغییر شکل بالا) که قراره خونده بشه باید به اون وصل بشه.
برای استفاده از ADC باید تغذیه اون رو هم وصل کنید.
اینجا 3 تا کتاب آموزشی معرفی شده :
https://barnamenevis.org/showthread.php?t=166278
15 دقیقه وقت بگذارید میتونید بخش ADC رو بخونید.
اگه حوصله ندارید کتاب بخونید و یاد بگیرید ، باید معلم خصوصی بگیرید!

----------


## HjSoft

*اینم آموزش کامل adc در Codevision :*
سلام ، برای استفاده از ADC در میکرو های Avr می بایست ابتدا ولتاژ مرجع را انتخاب کنید . ولتاژ مرجع یا Reference در کمپایلر ها مثل کدویژن به 3 صورت می باشد . ولتاژ پایه Aref ، ولتاژ پایه Avcc و ولتاژ داخلی میکرو . شما باید نسبت به پروژه خود یکی از این سه حالت را انتخاب کنید . اگر ولتاژ کاری شما از 2.5 بیشتر نمی شود می توانید از مرجع داخلی میکرو استفاده کنید ، اگر بیشتر از این ها میشه شما می تونید ولتاژ مورد نظر رو به پایه Aref میکرو مربوطه متصل کنید . مثلا اگر میخواهید سطح ولتاژ 5 باشد ( یعنی ورودی adc نسبت به آن سنجید شود )  می توانید aref رو به 5 وصل کنید . البته همراه با اون معمولا avcc رو هم وصل میکنن که بهتره وصل بشه . در ضمن شما برای اینکه راحت تر باشید یا بتونید یک اختلاف زیاد تری در adc داشته باشید بهتره از Pot یا همون مولتی ترن خودمون استفاده کنید . 
برای استفاده در کدویژن کافیست در قسمت CodeWizard آن تیک مربوط به Adc Enable را بزنید . و ولتاژ مرجع را انتخاب کنید  Int, Cap , on Aref همون ولتاژ داخلیه  میکرو که معمولا من از aref استفاده می کنم .
کلاک پیشفرض بهترین کلاک برای کار های عادی است . پس آن را روی کلاک پیشفرض بگذارید . 
گزینه Use8Bits : همونطوری که میدونید در ابتدا اگر اشتباه نکنم به صورتی 12 بیتی کار میکنه یعنی 1024 این بدین معنا است که اگر ولتاژ پایه Aref با Adc مربوطه برابر باشه مقدار خروجی 1024 . حالا اگر بخواین از 8 بیتی استفاده کنید این گزینه رو تیک می زنید . اینطوری به 255 تبدیل میشه .
گزینه Interrput :  این گزینه وقفه adc را فعال میکند .
----------------
بعد از تنظیمات و generate and save کردن . به طور خودکار تابعی در codevision به نام read_adc باز میشه . و شما در هر جای برنامه که خواستید می تونید از اون استفاده کنید . مثلا اگر خواستید Adc0 رو بخونید . مینوسید .
while(1)
{
int adc;
adc =read_adc(0);
};

----------


## narges.niyazi

سلام دوستان
سال نو مبارک
من یه سوال دارم:
فرض کنید میکرو داره با فرکانس کاری 16مگاهرتز کار می کنه , اگه من از adc یا pwm استفاده کنم باز هم با همین فرکانس بدون ایجاد مشکل کار میکنه؟ یعنی منظورم ایمه که این فرکانس قابل اعتماده ، یهو قاطی نمیکنه میکرو هنگ کنه یا از این قبیل مسائل. من یه فرکانس کار ی قابل اعتماد میخوام مثلا واسه mega 16

----------


## sharin

سلام.

از سمت شركت سازنده ، تا فركانس كاري 16MHz براي تمامي عملكردها گارانتي شده ...
مشكلاتي كه سر كريستال 16MHz هست ، به خاطر جنس ساختش هست ... ( اگر جنس خوب گير بياريد مشكلي ندارهه ... )
كريستال 12MHz مي تونه مناسب باشه ...

اينكه به ADC و PWM اشاره كرديد ، لازمه بدونيد كه فركانس نمونه برداري ADC ، حداكثر چيزي حدود 200KHz هست. براي  PWM هم بسته به كاربرد ، دنبال فركانس خيلي بالا نيستيم.
همون 8MHz هم مي تونه جوابگو باشه ...

موفق باشيد.

----------

