طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
این پروژه در اصل یک ساعت زنگ دار می باشد که قابلیت برنامه ریزی آلارم صبحگاهی و تنظیم 5 برنامه یادآور را دارد. با تنظیم آلارم هر روز راس ساعت تنظیمی آلارم پخش می شود، همچنین با تنظیم یادآور ها در ساعت و تاریخ مشخص نیز آلارم پخش می شود. از امکانات آن می توان برای هر یادآور یک نام تعیین کرد (20 کاراکتر اسکی) با قابلیت تایپ حروف کوچک و بزرگ انگلیسی با کیبورد 3×4 و ...این مدار یک کنترلر زمانی و دمایی می باشد، که بر اساس برنامه ریزی دلخواه توسط کاربر یک رله خروجی را کنترل می نمایید. با اتصال لامپ فلورسنت مرغوب به رله دستگاه می توانید لامپ را تحت کنترل داشته باشید.این پروژه یک مدار واسط I/O می باشد که دارای 12 خروجی رله است. توسط نرم افزار کنترلی که قابل نصب بروی ویندوز های XP, Win7, Win8, Win10 می باشد می توان هر 12 رله را به صورت مجزا فعال و غیر فعال کرد.ورودی این فرکانس متر قادر است با ولتاژهای 12 تا 500 ولت AC کار کند. ماکزیمم فرکانس اندازه گیری 20KHz می باشد. همچنین با تعیین نرخ نمونه برداری می توانید فرکانس را تا دو رقم اعشار اندازه گیری نمائید.یک سیستم امنیتی که دارای یک کاربر اصلی می باشد و توسط این کاربر می توان کاربرهای متعددی با پسورد های مجزا تعریف نمود. می توان تا 100 کاربر و 100 پسورد مختلف را تعریف، و در قسمت ورود هر یک از اعضاء که نام کاربری و رمز عبور خود را بدرستی وارد کند یک رله به همراه LED روشن خواهد شد.
پروژه آلارم صبحگاهی و یادآور با LCD گرافیکی و avr

MCP-7

پروژه آلارم صبحگاهی و یادآور با LCD گرافیکی و avr
پروژه مدار دستگاه فتوتراپی (پایین آورنده زردی خون نوزادان)

MCP-24

پروژه مدار دستگاه فتوتراپی (پایین آورنده زردی خون نوزادان)
پروژه کنترل رله توسط پورت USB با AVR و C شارپ 12 کاناله

MCP-39

پروژه کنترل رله توسط پورت USB با AVR و C شارپ 12 کاناله
پروژه فرکانس متر صنعتی 500 ولت 20KHz با avr

MCP-1

پروژه فرکانس متر صنعتی 500 ولت 20KHz با avr
پروژه سیستم امنیتی با قابلیت تعریف کاربر و رمز عبور با avr

MCP-12

پروژه سیستم امنیتی با قابلیت تعریف کاربر و رمز عبور با avr

کار با مبدل آنالوگ به دیجیتال ADC میکروکنترلر AVR به زبان سی C

به نام خدا

در این مطلب می خواهیم کار با مبدل آنالوگ به دیجیتال میکروکنترلر AVR را به زبان C و با کمک کامپایلر Code Vision توضیح دهیم. هدف ما از این مطلب این است که به چه صورتی از کانال ها مقدار آنالوگ را بخوانیم و بعد از تبدیل به دیجیتال، با این مقدار دیجیتال کار انجام دهیم.

از پرداختن مسائل ریز مربوط به  ADC صرف نظر می کنیم تا باعث گمراهی افراد تازه کار نشود. در اینجا ما به بحث در مورد رجیستر ها و نحوی انتخاب ولتاژ مرجع و شرایط و چگونگی انتخاب فرکانس نمونه برداری و 8 یا 10 بیتی ADC و یک مثال کامل خواهیم پرداخت.

از بخش سفارش طراحی هم اکنون درخواست خود را ثبت کنید
حل و تشریح کلیه تمرینات درس میکروکنترلر AVR
طراحی و ساخت مدارات دلخواه شما با میکروکنترلر AVR


رجیستر کنترلی ADMUX

0 1 2 3 4 5 6 7
MUX0 MUX1 MUX2 MUX3 MUX4 ADLAR REFS0 REFS1

REFS0,1 از این دو بیت برای انتخاب ولتاژ مرجع ADC استفاده می کنیم که دارای چهار حالت می باشد:

  1. REFS0=0 و REFS1=0 در این حالت ولتاژی که روی پایه AREF است به عنوان ولتاژ مرجع انتخاب می شود.
  2. REFS0=1 و REFS1=0 در این حالت ولتاژ پایه AVCC به عنوان ولتاژ مرجع انتخاب می شود.
  3. REFS0=0 و REFS1=1 بدون استفاده
  4. REFS0=1 و REFS1=1 در این حالت ولتاژ مرجع داخلی 2.56 ولت انتخاب می شود.

نکته: دقیق بودن ولتاژ مرجع در تبدیل کردن آنالوگ به دیجیتال نقش بسیار مهمی دارد. دقیق ترین ولتاژ مرجع همان 2.56 داخلی می باشد البته می توان با استفاده از تثبیت کننده های ولتاژ آن ولتاژ مرجع مورد نظر را ساخت و به پایه AREF داد.

 ADLAR از این بیت برای 8 یا 16 بیتی بودن مقدار خروجی ADC استفاده می شود. ADCH,ADCL

MUX0-4 از بیت ها برای انتخاب کانال ورودی و نیز انتخاب بهره تفاضلی استفاده شده است.

 رجیستر ADCSRA

0 1 2 3 4 5 6 7
ADPS0 ADPS1 ADPS2 ADIE ADIF ADATE ADSC ADEN

ADEN با یک کردن این بیت ADC فعال می شود.

ADSC در مد عملکرد Single با نوشتن یک در این بیت، تبدیل شروع شده و پس از پایان تبدیل به صورت خودکار صفر می شود. در مد Free، یک کردن این بیت برای شروع تبدیل الزامی است.

ADATE با یک کردن این بیت ADC می تواند به صورت اتوماتیک با لبه بالا رونده منبع تحریک کننده شروع به تبدیل کند. منیع تحریک توسط بیت های ADTS از رجیستر SFIOR انتخاب می شود.

ADIF بعد از اتمام تبدیل یا تغییر در رجستر داده ADC یک می شود. (از یک شدن این بیت ما متوجه می شویم که عمل تبدیل تمام شده و حالا می توانیم مقدار دیجیتال تبدیل شده را بخوانیم)

ADIE با یک کردن این بیت هرگاه عمل تبدیل به اتمام رسید یه وقفه ای صادر می شود که توسط آن زیر روال وقفه می توان مقدار داده ADC را خواند.

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

تقسیم بر ADPS0 ADPS1 ADPS2
 2  0  0  0
 2  1  0  0
 4  0  1  0
 8  1  1  0
 16  0  0  1
 32  1  0  1
 64  0  1  1
 128  1  1  1

رجیستر داده (ADCH,ADCL) ADC

در این دو رجیستر اطلاعات خروجی ADC قرار دارند که در ADCL مقدرا سبک و در ADCH مقدار سنگین قرار دارد همچنین با استفاده از ADCW می توانیم محتوای هر دو متغییر را به صورت 16 بیتی بخوانیم.

رجیستر SFIOR

0 1 2 3 4 5 6 7
PSR1 PSR2 PUD ACME - ADTS0 ADTS1 ADTS2

از طریق بیت های ADTS0-2 می توان منبع تحریک برای شروع تبدیل را مطابق جدول زیر انتخاب کرد:

منبع تحریک ADC ADTS0 ADTS1 ADTS2
مد عملکرد آزاد  0  0  0
تحریک از طریق مقایسه کننده آنالوگ  1  0  0
تحریک از طریق وقفه خارجی صفر  0  1  0
تحریک از طریق تایمر (شمارنده) صفر (در صورتی که نتیجه مقایسه برابر شود)  1  1  0
 تحریک از طریق تایمر (شمارنده) صفر (در صورت سریز شدن)  0  0  1
تحریک از طریق تایمر (شمارنده) یک (در صورتی که نتیجه مقایسه B برابر شود)  1  0  1
 تحریک از طریق تایمر (شمارنده) یک (در صورت سریز شدن)  0  1  1
 تحریک از طریق حالت تسخیر تایمر (شمارنده) یک  1  1  1

 نکته: برای داشتن حداکثر تفکیک پذیری (10 بیتی) باید فرکانس پالس ساعت ADC بین 50KHZ تا 200KHZ باشد. که اگر این فرکانس از این محدود خارج شود دقت ADC پایین خواهد آمد.

 پس باید توجه داشت که با توجه به فرکانس نوسان ساز میکرو ضریب تقسیمی از جدول ADPS0-2 انتخاب کنیم که فرکانس واحد ADC در محدوده گفته شده قرار گیرد.

در این مثال ما می خواهیم با استفاده از دو عدد سنسور LM35 دمای دو نقطه را اندازه گیری کنیم و روی LCD نمایش دهیم. در فایلی که به این مطلب پیوست شده برنامه و سایر فایل های شبیه ساز موجود می باشد

1 ADC Enabled
Volt Ref: Int
Clock: 125KHz
Auto trigger: None

 با استفاده از Code Wizard به صورت بالا ADC را تنظیم می کنیم.

#define ADC_VREF_TYPE 0xC0 //H1 

SFIOR=0x00; //H2 
ADMUX=ADC_VREF_TYPE & 0xff; //H3 
ADCSRA=0x86; //H4

H1: با نسبت دادن ADC_VREF_TYPE 0xC0 ولتاژ مرجع داخلی انتخاب می شود که بعدا در زیر برنامه read_adc با AND و OR کردن آن با کانال انتخاب شده مقدار رجیستر ADMU ایجاد می گردد.

 H2: مد عملکر آزاد انتخاب شده

H3: با AND کردن آن با FF به صورت پیش فرض کانال صفر انتخاب شده و همچنین ADLAR هم صفر می باشد بنابراین خروجی به صورت ADCW شانزده بیتی خواهد بود.

H4: در اینجا ADC فعال شده و همجنین ضریب تقسیم 64 انتخاب می شود بنابراین فرکانس پالس ساعت ADC برابر 125KHZ می شود که در محدود مجاز می باشد.

 در زیرروال read_adc دستوراتی نوشته شده که بجزء یک خط آن بقیه را خود Code Wizard ایجاد می کند.

float t;//H1
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);//H2
delay_us(10);//H3
ADCSRA|=0x40;//H4
while ((ADCSRA & 0x10)==0);//H5
ADCSRA|=0x10;//H6 
t=((ADCW*2.56)/1023)*100;//H7
return t;//H8

H1: ایجاد یک متغییر از نوع اعشاری و بزرگ

H2: اگر C0 را با FF ما ADN کنیم نتیجه همان C0 خواهد شده حالا فرض کنید در هنگام فراخوانی این تابع ما 1 را به عنوان ورودی تابع داده ایم اگر C0 را با 1 OR کنیم آنگاه ADMUX= C1 خواهد شده و درنتیجه کانال 1 به همراه ولتاژ مرجع داخلی انتخاب می شود.

H3: مقدار 10 میلی ثانیه تاخیر برای پایدار شده ولتاژ ورودی ADC

H4: معادل باینری ADCSRA=0x86 برابر با 10000110 می باشد و همچنین معادل باینری 0X40 برابر با 01000000 می باشد. با OR کردن 86OR40 مقدار 11000110 را خواهیم داشت می بینیم که بیت شماره 6 به 1 تغییر یافت و این بیت همان ADSC می باشد که توضیح دادیم.

H5: با استفاده از یک حلقه بی نهایت شرطی بیت 4 یعنی ADIF یا همان پرچم اتمام تبدیل را تحت نظر می گیرم تا موقعی که تبدیل تمام و این بیت 1 شود و شرط حلقه باطل می شود که منجر به خروج از این حلقه بی نهایت می شود.

H6: خوب حالا باید بیت ADIF که یک شده را دوباره صفر کنیم که این کار را با OR‌ کردن بیتی با عدد 10 انجام می دهیم.

H7: خوب الان عمل تبدیل تمام شده و مقدار دیجیتال آن در ADCW قرار دارد چون ولتاژ مرجع را 2.56 انتخاب کردیم اینجا مقدار ADCW را در 2.56 ضرب می کنیم و بعد حاصل را بر 1023 تقسیم کرده و در نهایت در 100 ضرب می کنم تا دما برحسب درجه سانتیگراد بدست اید. عدد 1023 از فرمول زیر حساب می شود که n=10  بوده یعنی تفکیک پذیری 10بیتی

2^n  - 1 ==> 2^10  -1 = 1023

H8: مقدار دما که در متغییر t قرار دارد برگشت داده می شود.

این مثال همراه با توضیحات آن تنها در وب سایت www.picpars.com به صورت متن باز ارئه شده و کپی برداری از آن تنها با ذکر منبع امکان پذیر می باشد.

با تشکر فراوان سید محسن قاسمیان

ورژن نرم افزار ها: CodeVisionAVR V2.04.4a  و Proteus 7.7 sp2 Professional

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل ارتباطی ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.




فایل های ضمیمه ( ورود - عضويت )

فایل شماره 110 | حجم 45 کیلوبایت | دانلود 6290 بار

منبع www.picpars.com  نویسنده: سید محسن قاسمیان

منبع www.picpars.com  دانلود مثال کار با مبدل آنالوگ به دیجیتال ADC میکروکنترلر AVR به زبان سی C

منبع www.picpars.com  پسورد: www.picpars.com

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال چهارشنبه، 13 بهمن ماه، 1389    نویسندهنویسنده: مدیریت    نظرات 50 نظر    بازدید بازدید [ 68342 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان