در این بخش کار با ریز پردازند avr و چگونگی استفاده از آن را برای شما آموزش خواهیم داد
قبل از هرچیز باید بدانید که avr چیست و از چه چیزی ساخته شده است.میکروکنترلر یک چیپ الکترونیکی است که از حافظه ی رم.رام و تعدادی ورودی و خروجی و cpu ساخته شده است این قطعات بسیار کوچک که مصارف خاصی دارند قابل برنامه ریزی هستند کاربر برنامه را تعریف میکند و میکرو طبق برنامه عمل میکند در واقع ورودی میکرو برنامه نوشته شده توسط کاربر است و خروجی اش اجرای نتیجه برنامه.از ویژگی های این ریز پردازنده ها دارا بودن ۳۲ ثبات همه منظوره است.کامپایلرهایی به زبان بیسیک و C که زبانهایی پرکاربردی در دنیا محسوب میشوند: برای این نوع ریزکنترلگرها طراحی شدهاست. البته در حال حاضر استفاده از کامپایلر بسکام BAScom که نسبت به زبان c بسیار راحتتر و سریع تر عمل میکند جایگزین زبان c شدهاست. همچنین زبان اسمبلی را نیز میتوان برای برنامهنویسی به کار برد. برای نمونه کامپایلر بسکام با زبان بیسیک برای برنامهنویسی این نوع از ریزکنترلگرها میتواند به کار رود. همچنین نرمافزار CodeVision، برای برنامهنویسی به زبان C (سازگار با این ریزکنترلگرها) بسیار رایج است (البته این برنامه بیشتر میان کاربران ایرانی رواج دارد، در میان کاربرهای خارجی کمتر دیده شده و بیشتر از برنامهٔ رسمی شرکت Atmel استفاده میشود).
از انواع مختلف avrها میتوان به موارد زیر اشاره کرد:
در atmega32 چهار پورت ورودی/خروجی به نام های A,B,C,D وجود دارد که هرکدام دارای مقاومت های pullup هستند .پورت ها بعد از ریست همه به عنوان ورودی قرار می گیرند .برای تنظیم پورتها به عنوان ورودی و خروجی با توجه به جدول زیر عمل می کنیم.
برای نمونه کد زیر پورت A را به عنوان پورت خروجی با مقدار اولیه 1 قرار میدهد:
DDRA=0xFF;
PORTA=0x00;
برای ایجاد تاخیر های نرم افزاری در میکروکنترلر AVR دو راه وجود دارد:
در اینجا شیوه دوم را توضیح میدهیم. بدین منظور باید اول کتابخانه مربوط به توابع تأخیر ( delay.h) را در برنامه لود کنیم. سپس از توابع تأخیر میتوانیم استفاده کنیم. توابع تأخیر موجود delay_ms(n) و delay_us(m) هستند که n نشان دهنده تأخیر به صورت میلی ثانیه است و m نیز تأخیر به صورت میکروثانیه است.
برای مثال در کد زیر LED های متصل به پورت A هر یک ثانیه روشن و خاموش میشوند.
#include
#include void
main(){ DDRA=0xFF;
PORTA=0x00; while(1){PORTA=~PORTA; delay_ms(1000); }
برای مشخص کردن پورت خروجی متصل کننده ی LCD به میکروکنترلر از طریق کامپایلر که در اینجا codevision است به ترتیب زیر عمل میکنیم.
از مسیر project/configure پنجره ی configure project باز می شود.
در اینجا تب C Compiler و سپس libraries و بعد (alphanumeric lcd (alcd.h را انتخاب می کنیم.
در تب باز شده گزینه enable alphanumeric lcd support را انتخاب می کنیم. سپس با توجه به تصویر زیر پورت مورد نظر را انتخاب می کنیم.
البته این کار را هم میشد در مرحله اول ساخت پروژه جدید در codevision AVR wizard انجام داد.
حال برای استفاده از توابع LCD کاراکتری باید فایل کتابخانه ای توابع آن (alcd.h) را در ابتدای برنامه لود کرد.
منابع وقفه در میکروکنترلر AVR در جدول زیر آمده اند:
مبدل آنالوگ به دیجیتال:
میکروکنترلر AVR خود دارای مبدل آنالوگ به دیجیتال است.
رجیسترهای مربوط به مبدل آنالوگ به دیجیتال:
رجیستر ADMUX :
برای انتخاب ولتاژ مرجع ADC با توجه به جدول زیر استفاده میکنیم.
ADLAR : از این بیت برای 8 یا 12 بیتی بودن خروجی ADC استفاده می کنیم.
[ADMUX [4:0 : برای انتخاب کانال ورودی استفاده میشود.(00000 تا 00111 برای انتخاب تک سیگنال ورودی به پایه های پورت A به کار برده می شود.)
رجیستر ADCSRA :
رجیستر داده (ADC ( ADCH,ADCL :
در این دو رجیستر اطلاعات خروجی ADC قرار دارند. برای دسترسی به هر دو به صورت 12 بیتی میتوان از ADCW استفاده کرد.
رجیستر SFIOR :
[ADTS [2:0 : از طریق این بیت ها می توان منبع تحریک را برای شروع تبدیل مطابق جدول زیر انتخاب کرد: