به نام خدا
میکروکنترلر AVR چیست؟
تراشه های AVR به عنوان دومین محصول شرکت AMtel بعد از 8051 امروزه رونق بسیار زیادی در بازار پیدا کرده اند و تقریبا جایگزین کاملی برای کاربران سابق تراشه های 8051 شده اند. این سوی میکروکنترلر ها حتی بازار تراشه های صنعتی خانواده PIC Controller را نیز تحت تأثیر قرار داده است.[1]
تاریخچه ی شرکت سازنده
شرکت آمتل (Amtel, Inc.) یک شرکت مدیریت ارتباطات از راه دور مستقر در سانتا کلارا، کالیفرنیا است . این شرکت که در سال ۲۰۰۴ تأسیس شد، محصولات امنیتی دستگاههای تلفن همراه مبتنی بر ابر و مدیریت هزینه ارائه میدهد
شرکت Amtel در ابتدا یک محصول SaaS یکپارچه را برای مدیریت چرخه عمر مخابرات و موبایل توسعه داده و به بازار عرضه کرد. [ 2 ]
محصول MDM این شرکت برای دستگاههای iOS (آیفون، آیپد)، اندروید (گوشیهای هوشمند، تبلتها)، بلکبری و ویندوز در سال ۲۰۱۰ عرضه شد. با این برنامه، Amtel مدیریت امنیت دستگاههای تلفن همراه را با مدیریت برنامههای تلفن همراه در یک پلتفرم سیستم مدیریت اطلاعات مخابراتی (TIMS) ترکیب کرد.
اجزای سیستم - [مدیریت دستگاه تلفن همراه]، مدیریت هزینههای تلفن همراه و مدیریت هزینههای مخابرات - میتوانند به صورت جداگانه تنظیم شوند یا با هم از یک کنسول مبتنی بر وب واحد مدیریت شوند. [ 7 ] [ 2 ]
در 16 آوریل 2016، این کسب و کار توسط Netplus [2 ] خریداری شد، و بعداً توسط StoneCalibre خریداری شد. [ 4 ]
مزایای میکروکنترلر AVR
تعداد و تنوع مدل ها،امکانات جدید،قابلیت های آنالوگ و ... از جمله دلایلی هستند که به گسترش هرچه بیشتراستفاده از تراشه های AVR دامن زده است.
از دیگر مزایای مهم تراشه های AVR ساختار معماری آن است.این تراشه ها تعداد دستورالعمل های ماشین بسیار زیادی دارند(بین 100 تا 130 دستورالعمل) و تقریباً اکثر این دستورات،تنها به یک سیکل ماشین برای اجرا نیاز دارند(به عنوان نمونه در 8051 بیشتر دستورات به دو یا سه سیکل و حتی چند دستورالعمل به چهار سیکل نیاز دارند).لذا سرعت کار تراشه های AVR بسیار بالاست.
تراشه های AVR نوع Tiny به رغم ظاهر و ابعاد کوچکشان،دارای قابلیت های گسترده ای هستند و توانایی های زیادی دارند که مخصوص مدارات بسیار کوچک و کم مصرف طراحی شده اند.
سادگی کار با این تراشه ها نیز قابل توجه است. دربسیاری از مواقع نیازی به اتصال مدار reset و یا کریستال خارجی نیست.[1]
زبان برنامه نویسی میکروکنترلر AVR
در واقع به دلیل زیاد بودن دستورالعمل های زبان Assembly در تراشه های AVR( بالغ بر 120 دستورالعمل) و دشواری به خاطر سپردن آنها، برنامه نویسی به زبان Assembly چندان موجه جلوه نمیکند.لذا بهتر است از یک زبان ساخت یافته که فهم آن برای کاربر راحت تر باشد، استفاده شود.تنها زبان های رایج برای برنامه نویسی میکروکنترلر ها زبان های C و BASIC هستند.زبان BASIC را شاید خیلی ها به دلیل سادگی آن دوست داشته باشند اما این زبان نقاط ضعف جدیی دارد.
زبان BASIC به طور کلی ساختار یکپارچه و استانداری ندارد و نسخه های گوناگون آن قواعد متفاوتی دارند و نمیتوان از آن برای اهداف چندگانه استفاده کرد.به عنوان مثال نسخه BASIC در نرم افزار BASCOM AVR تفاوت زیادی با نسخه BASIC در نرم افزار FAST AVR دارد و هر دوی آنها با نسخه PIC BASIC برای برنامه نویسی میکروکنترلر های PIC به اندازه قابل توجهی متفاوتند.
اما زبان C ساختار نسبتاً واحد و یکپارچه ای دارد و نسخه های گوناگون آن از صرف و نحو مشابهی پیروی میکند.
اگر شما یک کاربر سابق زبان C8051 باشی،انتقال به CAVR برای شما شاید کمتر از یک ساعت طول بکشد.
دیگر مزیت زبان C این است که تقریباً برای برنامه نویسی تمام میکروکنترلرها نسخه ای از این زبان وجود دارد در حالی که هیچ نسخه ای از زبان BASIC برای تراشه پرکاربرد 80196 موجود نیست.[1]
چه برنامه ای برای کد نویسی AVR لازم است
امروزه کامپایلرهای زیادی به زبان C برای خانواده AVR موجود میباشد و همانطور که گفته شد همه آنها از ساختار برنامه نویسی مشابهی پیروی میکنند. اما در میان آنها نرم افزار CodeVision یک قابلیت فوق العاده دارد و آن تولید خودکار کد برای راه اندازی اولیه تراشه ها میباشد. قابلیت مذکور این امکان را به کاربر می دهد که بدون درگیر شدن با اسامی پیچیده ثبات های تراشه های AVR وچگونگی تنظیمات آنها یک تراشه AVR را راه اندازی کند.
ابزار CodeWizard در این نرم افزار، برای تنظیمات مورد نظر کاربر، به طور خودکار کدهای لازم را تولید کرده و آن را در برنامه می گنجاند و تنها نوشتن الگوریتم اجرایی برنامه به عهده کاربر می ماند. [1]
چند نمونه AVR
AVR ها به طور کلی به موارد زیر طبقه بندی می شوند:
[8]
tinyAVR - سری ATtiny
مقاله اصلی: نمودار مقایسه میکروکنترلر ATtiny
اندازه فلش | فرکانس | بسته | اسرم | ایپرام |
۰.۵–۳۲ کیلوبایت | ۱.۶–۲۰ | بسته ۶ تا ۳۲ پین | ۳۲–۳۰۷۲ بایت | ۶۴–۵۱۲ بایت |
سری ATtiny دارای میکروکنترلرهای کوچک با مجموعه محدودی از لوازم جانبی است. با این حال، سری بهبود یافته tinyAVR 0/1/2 (منتشر شده در سال ۲۰۱۶) شامل موارد زیر است:
- لوازم جانبی برابر یا بیشتر از سری 0 مگا AVR
- سیستم رویداد
- مجموعه دستورالعملهای AVRxt بهبود یافته (بهبود زمانبندی فراخوانیها)، ضرب سختافزاری
megaAVR - سری ATmega
اندازه فلش | فرکانس | بسته | اسرم | ایپرام |
۴–۲۵۶ کیلوبایت | ۱.۶–۲۰ | بسته ۲۸ تا ۱۰۰ پین | ۲۵۶–۱۶۳۸۴ بایت | ۲۵۶–۴۰۹۶ بایت |
سری ATmega دارای میکروکنترلرهایی است که مجموعه دستورالعملهای گسترده (دستورالعملهای ضرب و دستورالعملهایی برای مدیریت حافظههای برنامه بزرگتر)، مجموعه لوازم جانبی گسترده، مقدار قابل توجهی حافظه برنامه و همچنین طیف گستردهای از پینهای موجود را ارائه میدهند. سری 0 megaAVR (منتشر شده در سال 2016) همچنین دارای قابلیتهایی مانند:
- سیستم رویداد
- لوازم جانبی جدید با قابلیتهای پیشرفته
- مجموعه دستورالعملهای AVRxt بهبود یافته (زمانبندی فراخوانیها بهبود یافته)
AVR Dx – خانواده AVR Dx شامل چندین سری میکروکنترلر است که بر HCI ، آمادهسازی سیگنال آنالوگ و ایمنی عملکردی تمرکز دارند.
اندازه فلش | فرکانس | بسته | اسرم | ایپرام | سال انتشار |
۱۶–۱۲۸ کیلوبایت | ۲۰–۲۴ در ۱.۸–۵.۵ ولت | بسته ۱۴ تا ۶۴ پین | ۴–۱۶ کیلوبایت | ۵۱۲ بایت | ۲۰۲۰ |
شماره قطعات به صورت AVR ff D xpp فرمت شده است ، که در آن ff اندازه فلش، x خانواده و pp تعداد پینها است. مثال: AVR128DA64 – سری DA با 64 پین و فلش 128 کیلوبایتی. همه دستگاههای خانواده AVR Dx شامل موارد زیر هستند:
- یک تایمر ناهمگام نوع D که میتواند سریعتر از CPU اجرا شود
- مبدل آنالوگ به دیجیتال ۱۲ بیتی
- مبدل دیجیتال به آنالوگ ۱۰ بیتی
- سری AVR DA (اوایل ۲۰۲۰) – تراکم حافظه بالا، این MCUها را برای عملکردهای مبتنی بر ارتباطات سیمی و بیسیم بسیار مناسب میکند.
- حسگرهای یکپارچه برای اندازهگیری لمسی خازنی ( HCI )
- لوازم جانبی مستقل اصلی ( CIP ) و لوازم جانبی آنالوگ بهروزرسانی شدهاند
- بدون کریستال فرکانس بالای خارجی
- سری DB از AVR (اواسط تا اواخر 2020) – بسیاری از ویژگیهای خانواده DA را به ارث برده و در عین حال ویژگیهای خاص خود را نیز اضافه کرده است:
- ۲ یا ۳ آپ امپ روی تراشه
- ورودی/خروجی چند ولتاژه (MVIO) روی پورت C
- پشتیبانی از کریستال HF خارجی
- سری DD از AVR
- فلش ۱۶ تا ۶۴ کیلوبایت
- ۲ تا ۸ کیلوبایت SRAM
- بسته ۱۴ تا ۳۲ پین
- نوسانساز داخلی ۲۴ مگاهرتز
- مبدل آنالوگ به دیجیتال (ADC) تفاضلی ۱۲ بیتی ۱۳۰ کیلوزیمنس بر ثانیه ۷ تا ۲۳ کاناله
- بدون تقویتکننده
- ۱ مقایسهگر آنالوگ
- دو USART، یک SPI، یک TWI دو حالته
- پشتیبانی از ورودی/خروجی چند ولتاژه (MVIO) روی ۳ یا ۴ پین در پورت C
- ۴ سلول منطق سفارشی قابل تنظیم (CCL)، ۶ کانال سیستم رویداد
- سری EA از AVR
- فلش ۸ تا ۶۴ کیلوبایت
- بسته ۲۸ تا ۴۸ پین
- نوسانساز داخلی ۲۰ مگاهرتز
- مبدل آنالوگ به دیجیتال (ADC) تفاضلی ۱۲ بیتی ۱۲ بیتی ۱۳۰ کیلوزیمنس بر ثانیه ۲۴-۳۲ کاناله
- تقویتکننده بهره قابل برنامهریزی (PGA) با بهره تا ۱۶ برابر
- ۲ مقایسهکننده آنالوگ
- سه USART، یک SPI، یک TWI دو حالته
- ورودی/خروجی چند ولتاژه (MVIO) ندارد
- ۴ سلول منطق سفارشی قابل تنظیم (CCL)، ۶ کانال سیستم رویداد
ایکسمگا
اندازه فلش | فرکانس | بسته | اسرم | ایپرام | سال انتشار |
۱۶–۲۵۶ کیلوبایت | ۳۲ | بسته ۴۴ تا ۱۰۰ پین | ۱–۳۲ کیلوبایت | ۵۱۲–۲۰۴۸ بایت | — |
سری ATxmega طیف گستردهای از لوازم جانبی و قابلیتهای کاربردی مانند موارد زیر را ارائه میدهد:
- ویژگیهای عملکردی پیشرفته، مانند DMA، "سیستم رویداد" و پشتیبانی از رمزنگاری
- مجموعه لوازم جانبی گسترده با مبدلهای آنالوگ به دیجیتال (ADC)
AVR مخصوص کاربرد
- مگا-ایویآرهایی با ویژگیهای خاص که در سایر اعضای خانوادهی ایویآر یافت نمیشوند، مانند کنترلر LCD، کنترلر USB ، PWM پیشرفته، CAN و غیره.
FPSLIC (AVR با FPGA)
- گیتهای FPGA با ظرفیت ۵ هزار تا ۴۰ هزار
- SRAM برای کد برنامه AVR، برخلاف سایر AVRها
- هسته AVR میتواند تا 50 مگاهرتز کار کند
AVR های ۳۲ بیتی
نوشتار اصلی: AVR32
- در سال ۲۰۰۶، شرکت Atmel میکروکنترلرهایی را بر اساس معماری ۳۲ بیتی AVR32 منتشر کرد . این معماری کاملاً متفاوت و بیارتباط با AVR هشت بیتی بود و برای رقابت با پردازندههای مبتنی بر ARM در نظر گرفته شده بود . این معماری دارای یک مسیر داده ۳۲ بیتی، دستورالعملهای SIMD و DSP به همراه سایر ویژگیهای پردازش صدا و تصویر بود. مجموعه دستورالعملها مشابه سایر هستههای RISC بود، اما با AVR اصلی (و هیچ یک از هستههای مختلف ARM) سازگار نبود. از آن زمان، پشتیبانی از AVR32 از هسته لینوکس از هسته ۴.۱۲ حذف شده است. پشتیبانی کامپایلر برای معماری در GCC هرگز به مخزن کد منبع مرکزی کامپایلر وارد نشد و عمدتاً در یک انشعاب پشتیبانی شده توسط فروشنده در دسترس بود. در زمانی که AVR32 معرفی شد، Atmel قبلاً دارای مجوز معماری ARM بود و میکروکنترلرهای ARM7 و ARM9 قبل و همزمان با AVR32 منتشر شده بودند. بعدها، شرکت Atmel بیشتر تلاشهای توسعهای خود را بر روی تراشههای ۳۲ بیتی با هستههای ARM Cortex-M و Cortex-A متمرکز کرد.
نمونه مدارهای صنعتی که با AVR طراحی شده اند:
کنترل استپر موتور با میکروکنترلر AVR
[6]
Stepper Motors (استپر موتور ، استپ موتور ، موتور پله ای) موتورهایی هستند که می توانند در پله ها از 0 تا 360 درجه میچرخند. موتور استپر از سیگنال های الکترونیکی برای چرخش موتور در پله ها استفاده می کند و با هر سیگنال شافت را به اندازه ثابت ثابت (یک پله) می چرخاند. برخلاف سروو موتور ، موتورهای پله ای (استپر) را می توان با استفاده از پین های GPIO میکروکنترلر به جای پین های PWM هدایت کرد و می توانند در (+360) و (-360) بچرخند. ترتیب سیگنال ها جهت چرخش موتور پله را تعیین می کند.
در این پروژه AVR ما استپر موتور 28BYJ-48 را به میکروکنترلر Atmega16 AVR با استفاده از Atmel Studio 7.0 متصل میکینم. این موتور پله ای در 5V کار می کند. ما استپ موتور را با میتوانیم با دو درایور موتور یعنی ULN2003 و L293 کنترل کنیم که هر دو با عرضه 5 ولت هدایت می شوند. به منظور ساده تر شدن ما از ماژول پیش ساخته هر دو درایور موتور استفاده می کنیم. همچنین می توانید از آی سی مستقل ULN2003 و L293D استفاده کنید اما تعداد اتصالات بیشتر میشود.
قطعات مورد نیاز پروژه
- موتور استپ (28BYJ-48)
- درایور موتور ماژول ULN2003 / L293D
- میکروکنترلر Atmega16
- اسیلاتور کریستال 16 مگاهرتز
- دو خازن 100nF
- دو خازن 22pF
- دکمه
در برنامه نویسی LCD کاراکتری در کدویژن AVR
در این قسمت ما به طور کامل با توابع ال سی دی کاراکتری در کدویژن آشنا میشویم تا بتوانیم LCD کاراکتری را با استفاده از کامپایلر Codevision و میکروکنترلر های AVR راه اندازی کنیم. برویم سراغ توابع !
برای اتصال و راه اندازی ال سی دی کاراکتری به میکروکنترلر AVR باید از توابع زیر استفاده کنید. تابع زیر برای فراخوانی کتابخانه ال سی دی استفاده میشود.
lcd.h
در این کتابخانه 11 تابع وجود دارد که همه آن ها را معرفی میکنیم. توابع این کتابخانه به دو دسته تقسیم میشوند. 4 تابع سطح پایین و 7 تابع سطح بالا هستند.
- توابع سطح پایین: این توابع ارتباط زیادی با سخت افزار دارند و برنامه نویسی آن ها بیشتر به زبان ماشین شبیه است.
- توابع سطح بالا: این توابع ارتباط کمتری با سخت افزار دارند و برنامه نویسی آن ها ساده تر است.
توابع پایین خیلی عجیب غریب هستند اما نگران نباشید. زیرا ما از همه ی این توابع استفاده نمیکنیم. ما اغلب از توابع سطح بالا استفاده میکنیم زیرا توابع سطح پایین برای استفاده از کاراکتر ویژه و … استفاده میشود.
توابع سطح پایین برنامه نویسی LCD کاراکتری در کدویژن
در اینجا توابع سطح پایین را معرفی میکنیم.
1. با نوشتن این تابع در برنامه، میکروکنترلر منتظر آماده شدن ال سی دی کاراکتری برای دریافت اطلاعات میشود.
void _lcd_ready(void);
2. وظیفه ی این تابع دادن مقدار به رجیستر درون ال سی دی می باشد یعنی برای تنظیم کردن LCD استفاده میشود.
void _lcd_write_data(unsigned char data);
3. این تابع اطلاعات را در آدرس مشخص شده در حافظه LCD وارد میکند.
void lcd_write_byte(unsigned char addr, unsigned char data);
4. این تابع اطلاعات درون آدرس مشخص از حافظه LCD را میخواند.
توابع سطح بالا برنامه نویسی LCD کاراکتری در کدویژن
در اینجا توابع سطح بالا را معرفی میکنیم.
5. این تابع مکان نمای LCD را به ستون x و سطر y منتقل میکند.
void lcd_gotoxy(unsigned char x, unsigned char y);
6. این تابع صفحه نمایش را پاک کرده و مکان نما به سطر صفر و ستون صفر منتقل میشود.
void lcd_clear(void);
7. این تابع کاراکتر “c” (در اینجا اسم متغیر c تعریف شده است) را بر روی نمایشگر LCD نمایش میدهد.
void lcd_putchar(char c);
8. این تابع رشته str (اسم متغیر str تعریف شده) را که در حافظه SRAM ذخیره شده است بر روی LCD نمایش میدهد.
void lcd_puts(char *str);
9. این تابع رشته str که در حافظه FLASH وجود دارد رو روی ال سی دی نمایش داده میشود.
void lcd_putsf(char flash *str);
10. این تابع جهت پیکربندی LCD مورد استفاده قرار میگیرد، صفحه نمایش را پاک میکند و مکان نما را به سطر صفر و ستون صفر منتقل میکند. ورودی این تابع تعداد ستون های LCD مورد استفاده ما را مشخص میکند. خروجی این تابع هم در صورتیکه LCD ای وجود داشته باشد 1 را برمیگرداند.
unsigned char lcd_init(unsigned char lcd_columns);
11. این تابع بایت کنترلی را در LCD مینویسد.
void lcd_control (unsigned char control);
فهرست منابع بر اساس مرتبشده بر اساس APA
- Dalvandi, B. (2009). Codevision AVR.
- Griffin, J. (2012, March 15). Amtel’s SaaS assists businesses using new iPads stay. Retrieved May 22, 2025, from http://financial.tmcnet.com//topics/expense-management/articles/276798-amtels-saas-assists-businesses-using-new-ipads-stay.htm
- Hall, G. (2016, April 11). Telecom company Netplus buys mobile management. Retrieved May 22, 2025, from https://www.bizjournals.com/sanjose/blog/techflash/2016/04/telecom-company-netplus-buys-mobile-management.html
- Marketwired. (2014, October 21). Stonecalibre acquires telecom infrastructure management. Retrieved May 22, 2025, from http://finance.yahoo.com/news/stonecalibre-acquires-telecom-infrastructure-management-130000105.html
- Rahimi, M. (2020, June 7). Character LCD programming AVR. Retrieved May 22, 2025, from https://irenx.ir/avr/character-lcd-programming-avr/
- Rahimi, M. (2020, May 16). Stepper motor control AVR. Retrieved May 22, 2025, from https://irenx.ir/avr/stepper-motor-control-avr/
- Shah, A. (2025, May 23). Free service offers basic enterprise mobile management. Retrieved May 22, 2025, from http://www.computerworld.com.au/article/415281/free_service_offers_basic_enterprise_mobile_management/
- Wikipedia contributors. (n.d.). AVR microcontrollers. In Wikipedia, The Free Encyclopedia. Retrieved May 22, 2025, from https://en.wikipedia.org/wiki/AVR_microcontrollers



