شرکت Atmel در سال 1996 موفق به توسعه AVR شد. معماری AVR توسط آلف اگیل بوگن و وگارد وولان توسعه یافت.

فهرست

میکروکنترلر را می‌توان یک واحد یونیک بروی تراشه کامپیوتر نامید که شامل چندین ابزار جانبی از جمله RAM ،EEPROM ،TIMERS و غیره است که برای انجام یک تسک از پیش تعیین شده، ضروری هستند.

آیا می‌توان اینطور استنباط کرد که میکروکنترلر نام دیگری برای کامپیوتر است؟

پاسخ منفی­ست!

از یک سوء کامپیوتر برای انجام تمام وظایف دارای اهداف عمومی بروی یک دستگاه واحد طراحی شده است، طوری که می‌توانید از کامپیوتر برای اجرای نرم افزار استفاده کنید تا محاسباتی را انجام دهید، یا می‌توانید از کامپیوتر برای ذخیره سازی فایل چند رسانه‌ای یا دسترسی به اینترنت به واسطه مرورگر استفاده کنید، درحالیکه میکروکنترلرها تنها وظایف خاصی را انجام می‌دهند.

 به عنوان مثال وقتی دمای اتاق به محدوده مشخصی افت می‌کند به صورت خودکار AC خاموش می‌شود و وقتی دما از آن حد معین بالاتر می‌رود، AC را روشن می‌کند.

میکروکنترلرها چند خانواده متداول دارند که در برنامه‌‌های مختلف براساس توانایی انجام وظایف دلخواه بکاربرده می‌شوند. رایج ترین آن‌ها 8051، AVR و PIC نام دارند.

در این مقاله به معرفی خانواده میکروکنترلرهای AVR می‌پردازیم.

شکل 1. معماری میکروکنترلر AVR

تاریخچه AVR

شرکت Atmel در سال 1996 موفق به توسعه AVR شد. معماری AVR توسط آلف اگیل بوگن و وگارد وولان توسعه یافت. AVR نام خود را از توسعه دهندگان خود گرفته و به ترتیب A از نام Alf ،V از نام Vegard و R از نام Risc گرفته شده است که به آن RISC پیشرفته نیز گفته می‌شود.

AT90S8515 به عنوان اولین میکروکنترلر مبتنی بر معماری AVR لقب می‌گیرد، با این وجود اولین میکروکنترلری که در بازار به محبوبیت زیاد در سال 1997 رسید، میکروکنترلر AT90S1200 بود.

میکروکنترلرهای AVR در سه دسته بندی قرار می‌گیرند:

  1. TinyAVR- حافظه کمتر، اندازه کوچک، که تنها برای کاربردها و برنامه‌‌های ساده مناسب هستند.
  2. MegaAVR –با حافظه بیش‌تر (تا 256 KB)، تعداد واحدهای جانبی نهفته بیش‌تر محبوبیت‌ترین هستند و مناسب کارهای متوسط تا پیچیده می‌باشند.
  3. XmegaAVR- به صورت تجاری برای کاربردهای پیچیده استفاده می‌شود که مستلزم سرعت بالا و حافظه برنامه نویسی بزرگ هستند.

جدول زیر سری میکروکنترلرهای AVR فوق را مقایسه می‌کند:

نام سری

پین ها

حافظه فلش

ویژگی خاص

TinyAVR

6-32

0.5-8 KB

اندازه کوچک

       MegaAVR

28-100

4-256KB

ابزارهای جانبی توسعه یافته

XmegaAVR

44-100

16-384KB

دارای سیستم رویداد DMA است

اهمیت AVR

ویژگی‌‌های خاص AVR کدامند؟

سرعت آن‌ها بالاست: میکروکنترلر AVR اکثر دستورات را در یک سیکل کاری اجرا می‌کند. AVR‌ها 4-برابر سریع‌تر از PIC‌ها هستند، توان کم‌تری مصرف می‌کنند و می‌توانند در حالت‌‌های مختلف ذخیره توان کار کنند. حالا مقایسه‌ای بین سه خانواده متداول میکروکنترلرها انجام می‌دهیم.

 

8051

PIC

AVR

سرعت

کم

متوسط

سریع

حافظه

کوچک

بزرگ

بزرگ

معماری

CISC

RISC

RISC

ADC

ندارد

داخلی

داخلی

زمان سنج

داخلی

داخلی

داخلی

کانال‌‌های PWM

ندارد

داخلی

داخلی

AVR یک میکروکنترلر 8-بیتی متعلق به خانواده RISC (کامپیوتر با مجموعه دستورات کمتر) است. در معماری RISC، مجموعه دستورات کامپیوتر از نظر تعداد کمتر، و به لحاظ اجرایی سریع‌تر و ساده‌تر می‌باشد. دیگر نوع طبقه بندی، CISC (کامپیوتر با مجموعه دستورات پیچیده) است.

حالا به معنای آن می‌پردازیم. 8 بیتی چیست؟

به این معنی است که میکروکنترلر توانایی انتقال و دریافت دیتای 8 بیتی را دارد. رجیسترهای ورودی/خروجی موجود 8 بیتی هستند. کنترلرهای خانواده AVR معماری مبتنی بر رجیستر دارند، یعنی هر دو اپراتور برای یک عملیات در یک ریجستر ثبت شده و نتیجه عملیات نیز در یک رجیستر ذخیره می‌گردد. شکل زیر مثال ساده‌ای از اجرای عملیات OR را بین دو رجیستر ورودی و ذخیره‌سازی مقدار در رجیستر خروجی را نشان می‌دهد.

شکل 2. یک مثال ساده از اجرای عملیات بین دو رجیستر ورودی و ذخیره سازی مقدار در رجیستر خروجی

CPU مقادیر خود را از دو رجیستر ورودی INPUT-1 و INPUT-2 دریافت نموده، عملیات منطقی را اجرا کرده و مقدار را در رجیستر خروجی ذخیره می‌کند. همه این‌ها فقط در یک سیکل کاری اتفاق می‌افتند.

در سفر خود با AVR، بروی میکروکنترلر Atmega16 کار می‌کنیم که یک IC با 40 پین بوده و به دسته megaAVR خانواده AVR تعلق دارد.

برخی از ویژگی‌‌های Atmega16 عبارتند از:

  • حافظه فلش 16KB
  • SRAM 1KB
  • EEPROM 512 Bytes
  • آی سی DIP 40 پینی
  • 8 کانال ADC 10 بیتی
  • دو شمارشگر/ زمان سنج 8 بیتی
  • 4 کانال PWM
  • ISP
  • USART سریال
  • رابط SPI
  • مقایسه کننده دیجیتال با آنالوگ

معماری AVR

میکروکنترلرهای AVR مبتنی بر معماری پیشرفته RISC بوده و شامل رجیسترهای فعال همه منظوره 32 x 8-bit  می‌باشند. در یک سیکل کلاک ، AVR می‌تواند ورودی‌ها را از دو رجیستر همه منظوره دریافت کرده و آن‌ها را در ALU قرار دهد تا عملیات مورد نظر را انجام دهد، و نتیجه را به رجیستر دلخواه بازگرداند. ALU می‌تواند عملیات‌‌های منطقی و حسابی را بروی ورودی‌‌های رجیستر و بین رجیستر و یک ثابت، انجام دهد. عملیات‌‌های رجیستری واحد مثل مکمل گرفتن نیز در ALU قابل اجراست. می‌توانیم ببینیم که AVR هیچگونه رجیستری شبیه به انباره در خانواده 8051 میکروکنترلرها ندارد؛ عملیات‌ها را می‌توان بین هر یک از رجیسترها انجام و در هر یک از آن‌ها ذخیره نمود.

AVR دارای فرمت معماری هاروارد است که طبق آن پردازشگر مجهز به حافظه و باس‌‌های جداگانه برای برنامه و اطلاعات دیتا می‌باشد. اینجا در حالیکه یک دستور اجرا می‌شود، دستور دیگر هم از حافظه برنامه انتقال داده می‌شود.

شکل 3. معماری حافظه در AVR

از آنجایی که AVR قادر به انجام اجرای سیکل واحد است، یعنی AVR می‌تواند 1 میلیون دستور در ثانیه انجام دهد، البته اگر فرکانس سیکل 1MHz باشد. هرچه فرکانس عملیاتی کنترلر بالاتر باشد، سرعت پردازش آن نیز بالاتر خواهد بود. باید مصرف توان را با سرعت پردازش بهینه کنیم، بنابراین باید فرکانس عملیاتی را مطابق با آن انتخاب کنیم.

میکروکنترلر Atmega 16 دو حالت دارد:

  1. Atmega16: دامنه فرکانس عملیاتی 0-16 MHz
  2. Atmega16L: دامنه فرکانس عملیاتی 0-18 MHz

اگر از 8 MHz = 8 x 106 Hertz = 8   میلیون سیکل استفاده می‌کنیم، آنگاه AVR قادر به اجرای 8 میلیون دستور است.

قانون نامگذاری

AT اشاره به تولید کننده Atmel دارد. Mega یعنی اینکه میکروکنترلر به طبقه بندی MegaAVR تعلق دارد. 16 هم به حافظه کنترلر که 16KB است، اشاره می‌کند.

شکل 4. قانون نام‌گذاری میکروکنترلر AVR

معماری Atmega 16

مواردی که در ادامه آورده شده‌اند بلوک‌‌های سازنده معماری Atmega16 را توضیح می‌دهد:

  • پورت‌‌های I/O :Atmega 16 دارای چهار پورت ورودی-خروجی 8 بیتی است (PORTA ،PORTB ،PORTC و PORTD).
  • اسیلاتور کالیبره داخلی: Atmega 16 مجهز به یک اسیلاتور داخلی برای تحریک کلاک خود است. به صورت پیشفرض Atmega16 بروی اسیلاتور کالیبره داخلی 1MHz تنظیم شده است. حداکثر فرکانس اسیلاتور داخلی 8Mhz می‌باشد. از سوی دیگر، ATmega16 می‌تواند با استفاده از اسیلاتور کریستالی خارجی با حداکثر فرکانس 16MHz نیز کار کند. در این حالت، باید فیوز بیت را تنظیم نمود.
شکل 5. نمودار معماری AVR
  • رابط ADC: Atmega16 مجهز به 8 کانال ADC (مبدل آنالوگ به دیجیتال) با رزولوشن 10-bits می‌باشد.     ADC تبدیل می‌کند.
  • شمارنده/تایمر: Atmega16 دارای دو شمارنده /تایمر 8 بیتی و یک 16 بیتی است. تایمرها  برای تولید فعالیت‌‌های دقیق مفید هستند، مثلاً ایجاد تاخیر زمانی بین دو عملیات.
  • تایمر watchdog: همراه با اسیلاتور داخلی است. این زمان سنج به طور پیوسته بر کنترلر نظارت می‌کند، تا اگر فعالیت اجرایی بیش از فاصله زمانی معین دچار مشکل شد، آن را مجدد راه اندازی نماید.
  • وقفه‌ ها: Atmega16 شامل 21 منبع وقفه‌ است که چهار تای آن خارجی هستند. سایر وقفه‌ها‌ داخلی هستند که از ابزارهای جانبی مثل USART, ADC ، تایمر و غیره پشتیبانی می‌کند.
  • USART: رابط انتقال دهنده، گیرنده همزمان و غیرهمزمان همه‌منظوره است که در نقش رابط ارتباط سریال را دارد (انتقال بیت به بیت داده‌ها).
  • رجیسترهای همه منظوره: Atmega16  مجهز به 32-رجیستر همه منظوره است که مستقیماً با واحد منطقی حسابی (ALU) CPU جفت شده است.
  • حافظه: Atmega16 شامل 3 بخش مختلف است.
    1. Flash EEPROM: Flash EEPROM یا حافظه فلش ساده برای ذخیره سازی برنامه‌ای استفاده می‌شود که توسط کاربر بروی میکروکنترلر نوشته شده است. به راحتی می‌توان به صورت الکتریکی آن را به عنوان یک واحد پاک کرد. حافظه فلش فرار نیست؛ یعنی حتی اگر پاور خاموش شود، برنامه به کار خود ادامه می‌دهد. Atmega16 با Flash EEPROM 16 کیلو بیتی قابل برنامه‌ریزی سیستم، موجود است.
    2. EEPROM آدرس پذیر بایتی: یک حافظه غیرفرار برای ذخیره سازی داده‌ها از جمله مقادیر متغیرهای خاص استفاده می‌شود. Atmega16 دارای EEPROM 515 Bytes است، که برای ذخیره سازی کد قفل در زمانی که برنامه‌ای مثل قفل درب الکترونیکی را طراحی می‌کنیم، مفید است.
    3. SRAM: حافظه قابل دسترس ایستا، که حافظه فرار میکروکنترلر می‌باشد، یعنی با خاموش شدن منبع تغذیه، داده‌ها از بین می‌روند. Atmega16  مجهز به SRAM داخلی 1KB است. سهم کوچکی از SRAM برای رجیسترهای همه منظوره‌ای که توسط CPU استفاده می‌شود و برخی برای سیستم‌‌های فرعی ابزارهای جانبی میکروکنترلر، تنظیم شده است.
  • ISP: کنترلر‌های خانواده AVR دارای حافظه فلش قابل برنامه ریزی در سیستم (ISP) هستند و بدون حذف IC از مدار، قابل برنامه ریزی می‌باشند. زمانی که کنترلر در مدار قرار دارد ،ISP امکان برنامه ریزی مجدد آن را فراهم می‌کند.
  • SPI: گذرگاه ارتباط جانبی سریال، برای ارتباط سریال بین دو دستگاهی که منبع کلاک دارند، مورد استفاده قرار می‌گیرد. سرعت انتقال داده SPI بیش‌تر از USART است.
  • TWI: رابط دو سیمی برای تنظیم شبکه‌ای از دستگاه‌ها استفاده می‌شود، دستگاه‌های بسیاری می توانند برای ایجاد یک شبکه بروی رابط TWI متصل شوند. دستگاه‌ها به صورت همزمان اقدام به انتقال و دریافت دیتا کرده و هر کدام آدرس منحصربفردی دارند.
  • DAC: میکروکنترلر Atmega16 مجهز به رابط مبدل دیجیتال به آنالوگ (DAC) است که می‌تواند برای وارونه سازی فعالیت انجام شده توسط ADC مورد استفاده قرار گیرد. از DAC زمانی استفاده می‌شود که نیاز به تبدیل سیگنال دیجیتال به سیگنال آنالوگ باشد.

خانواده MegaAVR

میکروکنترلر سری‌‌های مختلف MegaAVR

ATmega16 و Atmega32 دیگر اعضاء کنترلرهای سری megaAVR محسوب می‌شوند. از نظر معماری کاملاً مشابه به ATmega16 هستند. کنترلر megaAVR با مصرف توان پایین نیز در بازار موجود است.

جدول زیر مقایسه‌ای بین اعضاء مختلف خانواده MegaAVR را نشان می‌دهد.

نام

ROM

RAM

EEPROM

پین

تایمر

وقفه

ولتاژ

فرکانس

پکیج

ATmega8

8KB

1KB

512B

23

3

19

4.5-5.5 V

0-16 MHz

28

ATmega8L

8KB

1KB

512B

23

3

19

2.7-5.5 V

0-8 MHz

28

ATmega16

16KB

1KB

512B

32

3

21

4.5-5.5 V

0-16 MHz

40

ATmega16L

16KB

1KB

512B

32

3

21

2.7-5.5 V

0-8 MHz

40

ATmega32

32KB

2KB

1KB

32

3

21

4.5-5.5 V

0-16 MHz

40

ATmega32L

32KB

2KB

1KB

32

3

21

2.7-5.5 V

0-8 MHz

40