تبلیغات
اطلاعاتی مختصر در مورد مهندسی برق - اموزش avr بخش هفتم
 
اطلاعاتی مختصر در مورد مهندسی برق
درباره وبلاگ



مدیر وبلاگ : بهزاد عبدالرضایی
آمار وبلاگ
  • کل بازدید :
  • بازدید امروز :
  • بازدید دیروز :
  • بازدید این ماه :
  • بازدید ماه قبل :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :

تا این بخش از آموزش متوجه شدیم که میکروکنترلرها انواع مختلفی دارند و بسته به نوع کاری که مورد نظر است ، یکی از خانواده های میکروکنترلرها که برای انجام آن مناسب تر است ، انتخاب می شود . مثلا اگر سرعت پردازش بسیار بالا بدون هنگ کردن و قابلیت تغییر کل برنامه در یک کاربرد خاص در یک پروژه نیاز باشد (مانند پروژه های نظامی و فرکانس بالا ) بهتر است به سراغ FPGA و انواع آنها رفت . اگر در یک پروژه سرعت نسبتا بالا و قابلیت پشتیبانی از انواع ارتباطات جانبی مانند پورت USB ، ارتباطات سریال و … مورد نیاز باشد (مانند استفاده در تلفن همراه ، تبلت ها ، پروژه های پردازش سیگنال ، تلویزیون ها و … ) بهتر است از میکروکنترلرهای ARM استفاده کرد . اگر در یک پروژه سرعت بالا مورد نظر نباشد و فقط درست و بدون نقص انجام شدن کار مورد نظر باشد (مانند پروژه های صنعتی ) از میکروکنترلرهای PIC استفاده می شود که در محیط های پرنویز مانند کارخانه ها بیشتر از آنها استفاده می شود . و در نهایت اگر در کاربردهایی معمولی و متوسط با قابلیت های متوسط ( مانند پروژه های  دانشگاهی ، منازل و… ) مورد نظر باشد از میکروکنترلرهای AVR بیشتر استفاده می گردد . بنابراین یاد گرفتن میکروکنترلرهای AVR در مرحله اول ضروری است چرا که از نظر معماری و کاربردها ساده تر بوده و مباحث اصلی و پایه ای در این مرحله وجود دارد.

 avrchip


معرفی و تاریخچه ساخت :

AVR خانواده‌ای از میکروکنترلر ها است که شرکت ATMEL ، آن را روانهٔ بازار الکترونیک کرده است. این میکروکنترلر های هشت بیتی به خاطر دارا بودن قابلیت برنامه‌نویسی توسط کامپایلر های زبان‌های برنامه نویسی سطح بالا ، مورد توجه قرار می‌گیرند. این میکروکنترلر ها از معماری RISC برخوردارند. همچنین شرکت اتمل کوشیده‌است تا با استفاده از معماری پیشرفته و دستورهای بهینه، حجم کد تولید شده را پایین آورده و سرعت اجرای برنامه را بالا ببرد. یکی از مشخصات این نوع میکروکنترلر ها بهره گیری از تکنولوژی CMOS و استفاده از حافظه‌های کم مصرف و غیر فرار Flash و EEPROM است.

میکروکنترلر AVR در سال ۱۹۹۶ توسط شرکت ATMEL ساخته‌شد. معماری این میکروکنترلر توسط دانشجویان دکترای دانشگاه صنعتی نروژ Alf-Egil Bogen و Vegard Wollan طراحی شد. شرکت اتمل می‌گوید نام AVR یک مخفف نیست و به نام خاصی اشاره نمی‌کند اما به نظر می‌رسد که این نام مخفف Alf (Egil Bogen) and Vegard (Wollan)’s RISC processor است.

انواع میکروکنترلرهای AVR

این میکروکنترلرها دارای ۴ سری می باشند که هر سری کاربردها و ویژگی های خاص خود را دارد .

  1. سری ATtiny : میکروکنترلرهای کوچک ، کم مصرف و پرقدرت برای کاربردهای خاص می باشند که دارای حافظه Flash بین ۰٫۵ تا ۱۶ کیلوبایت و بسته بندی بین ۶ تا ۳۲ پایه هستند .
  2. سری ATMega : این سری دارای امکانات وسیع و دستورالعمل های قوی می باشد که دارای حافظه Flash بین ۴ تا ۵۱۲ کیلوبایت و بسته بندی بین ۲۸ تا ۱۰۰ پایه هستند .
  3. سری XMega : جدیدترین ، پرسرعت ترین و قوی ترین نوع هستند که امکانات بیشتری نیز دارند که دارای حافظه Flash بین ۱۶ تا ۳۸۶ کیلوبایت و بسته بندی ۴۴، ۶۴ و ۱۰۰ پایه هستند .
  4. سری AT90s : نوع توسعه یافته میکروکنترلر ۸۰۵۱ هستند که امکانات کمتری داشته و کمتر کاربرد دارند چرا که تقریبا منسوخ شده اند .

MicroAVR


معماری و ساختار میکروکنترلرهای AVR

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

  • واحد پردازش مرکزی CPU
  • واحد حافظه برنامه Flash
  • واحد حافظه داده EEPROM
  • واحد حافظه داده SRAM
  • واحد ورودی و خروجی I/O
  • واحد کنترل کلاک ورودی
  • واحد کنترل وقفه
  • واحد تایمر و کانتر
  • واحد مبدل آنالوگ به دیجیتال ADC
  • واحد مقایسه کننده آنالوگ
  • واحد تایمر سگ نگهبان
  • واحد ارتباطات سریال SPI ، TWI و USART
  • واحد برنامه ریزی و عیب یابی JTAG

AVRStr


هسته مرکزی CPU ( واحد پردازش مرکزی )

این واحد که بر مبنای معماری RISC ساخته شده است ، تمام فعالیت های میکروکنترلر را مدیریت کرده و تمام عملیات لازم بر روی داده ها را انجام می‌دهد . همچنین وظیفه ارتباط با حافظه ها و کنترل تجهیزات جانبی را بر عهده دارد . درون هسته AVR به تعداد ۳۲ رجیستر همه منظوره ، واحد محاسبه و منطق (ALU) ، واحد رمز گشایی دستور ID ، رجیستر دستورالعمل IR ، رجیستر شمارنده برنامه PC ، رجیستر وضعیت SREG و اشاره گر پشته SP قرار دارند .

در ساختار پردازنده ها ( CPU ) از دو معماری متفاوت CISC و RISC استفاده می شود .

CISC : مخفف Complete Instruction Set Computer به معنای کامپیوتر با دستورالعمل کامل می باشد . در این ساختار تعداد دستورالعمل ها بسیار زیاد است . دستورها پیچیده بوده و با سرعت پایین اجرا می شوند ولی برنامه نویسی آن ساده تر (سطح بالا) است. CPUهای میکروکامپیوترهای PC و لپ تاپ ها از این نوع هستند .

RISC : مخفف Reduced Instruction Set Computer به معنای کامپیوتر با دستورالعمل کاهش یافته می باشد . در این ساختار تعداد دستورالعمل ها کمتر بوده و دستورات ساده تر هستند و با سرعت بسیار زیادی اجرا می شوند اما برنامه نویسی آن دشوار تر (سطح پایین) است . CPU های میکروکنترلرها از این نوع هستند .

cisc-vs-risc

 گفتیم که یکی از مزیت های میکروکنترلرها نسبت به میکروکامپیوترها سرعت انجام بالای دستورالعمل ها در آن ها است . این مزیت از همین معماری منحصر به فرد میکروکنترلرها ناشی می شود . در واقع نقطه قوت میکروکنترلرها که باعث شده که به عنوان نسل پنجم شناخته شوند همین RICS بودن آنها است که باعث می شود دستورات ساده را در سیکل کلاک کمتری نسبت به CISC انجام دهند . ایده اصلی RISC اولین بار توسط جان کوکی از IBM و در سال ۱۹۷۴ شکل گرفت، نظریه او به این موضوع اشاره داشت که یک کامپیوتر تنها از ۲۰ درصد از دستورات نیاز دارد و ۸۰ درصد دیگر، دستورات غیرضروری هستند. پردازنده‌های ساخته شده براساس این طراحی از دستورات کمی پشتیبانی می‌کنند به این ترتیب به ترانزیستور کمتری نیز نیاز دارند و ساخت آنها نیز کم هزینه است. با کاهش تعداد ترانزیستورها و اجرای دستورات کمتر، پردازنده در زمان کمتری دستورات را پردازش می‌کند. اما در CISC مجموعه‌ای از دستورات بصورت فشرده و با آدرس دهی مختلف به یکباره پردازش می‌شوند، مثل اعداد اعشاری یا تقسیم که در طراحی RISC وجود ندارند. از آنجایی که دستورات در RISCساده‌تر هستند پس سریعتر اجرا می‌شوند و نیاز به ترانزیستور کمتری دارند، ترانزیستور کمتر هم به معنی دمای کمتر، مصرف پایین‌تر و فضای کمتر است که آن را برای ابزارهای موبایل مناسب می‌کند. مثلا اگر عمل ضرب توسط یک میکروکنترلر در ۲ سیکل کلاک انجام شود و کلاک میکرو روی ۱۰ مگاهرتز تنظیم شده باشد ، عمل ضرب دو عدد به مدت ۲۰۰ نانو ثانیه طول میکشد ، در حالی که همان عمل ضرب در کامپیوتر با ۱۰۰ کلاک انجام می شود که اگر کلاک آن را ۱ گیگاهرتز در نظر بگیریم ، عمل ضرب ۱۰۰ نانو ثانیه طول می کشد . این مثال نشان می دهد که دستور ضرب در یک میکروکامپیوتر با قیمت مثلا یک میلیون تنها دو برابر سریعتر از یک میکروکنترلر با قیمت ۱۰ هزار تومان است . پس یک کامپیوتر برای کارهای بزرگ تر مناسب است و یک میکرو کنترلر برای کارهای کوچکتر ساخته شده است و کار کوچک را با هزینه پایین تر و کیفیت بهتری انجام می دهد .

 


واحد محاسبه و منطق (Arithmetic Logic Unit)

ALU در میکروکنترلر AVR به صورت مستقیم با تمام ۳۲ رحیستر همه منظوره ارتباط دارد. عملیاتهای محاسباتی با رجیسترهای همه منظوره در یک کلاک سیکل اجرا می شوند به طور کلی عملکرد ALU را می توان به سه قسمت اصلی ریاضیاتی، منطقی و توابع بیتی تقسیم بندی کرد در برخی از ALU های توسعه یافته در معماری میکروکنترلرهای AVR از یک ضرب کننده با قابلیت ضرب اعداد بدون علامت و علامتدار و نیز اعداد اعشاری استفاده شده است.

 


مفهوم ثبات یا رجیستر :

رجیستر ها نوعی از حافظه های موقت هستند (مانند RAM ) که از فلیپ فلاپ ها ساخته می شوند و میتوانند ۸ بیتی ، ۱۶ بیتی ، ۳۲ بیتی یا بیشتر باشند. از رجیستر ها به صورت گسترده در تمام ساختار و واحد های میکروکنترلرها استفاده می شود . میکروکنترلرهای AVR  هشت بیتی هستند بدین معنا که تمامی رجیستر ها در آن ، ۸ بیتی هستند. مهمترین مسئله که در هنگام برنامه نویسی میکروکنترلرها با آن مواجه هستیم نحوه صحیح مقدار دهی رجیسترهای آن میکروکنترلر می باشد . اگر میکروکنترلر را به یک کارخانه تشبیه کنیم که این کارخانه دارای بخشهای زیادی است و در هر بخش یک اتاق کنترل وجود دارد و در هر اتاق کنترل تعدادی کلیدهای کنترلی وجود دارد ، این کلیدهای کنترلی همان رجیسترها هستند که مهمترین وظیفه یک برنامه نویس شناختن این کلیدها و مقداردهی مناسب آنها در برنامه است .

 

رجیستر های عمومی General Purpose Registers

میکروکنترلرهای AVR دارای ۳۲ رجیستر همه منظوره هستند این رجیسترها قسمتی از حافظه SRAM میکروکنترلر می باشند . تعداد این رجیستر ها ۳۲ عدد بوده و از R0 تا R31 شماره گذاری می شوند . هر رجیستر دارای ۸ بیت است که به طور مستقیم با واحد ALU در ارتباط است . رجیستر های R26 تا R31 به منظور آدرس دهی غیر مستقیم ، در فضای حافظه داده و برنامه استفاده میشوند که به آن ها رجیستر های اشاره گر می گویند و به ترتیب به صورت XL ، XH ، YL ، YH ، ZL و ZH نامگذاری می شوند . یک امکان برای دو رجیستر جدا از هم فراهم شده است که بتوان توسط یک دستورالعمل خاص در یک سیکل کلاک به آن دسترسی داشت . نتیجه این معماری کارایی بیشتر کدها تا ده برابر سریع تر از میکروکنترلر های با معماری CISC است .

 

رجیستر دستور Instruction Register

این رجیستر که در هسته پردازنده قرار دارد کد دستور العملی را که از حافظه برنامه FLASH خوانده شده و باید اجرا شود را در خود جای می دهد .

 

واحد رمز گشایی دستور Instruction Detector

این واحد تشخیص می دهد کد واقع در IR مربوط به کدام دستور العمل است و سیگنال های کنترلی لازم برای اجرای آن را صادر می نماید .

 

رجیستر شمارنده برنامه Program Counter

این رجیستر در واقع شمارنده آدرس دستورالعمل های برنامه کاربر است و در هر مرحله به آدرس خانه بعدی حافظه فلش که باید اجرا شود اشاره می کند . یعنی با اجرای هر دستور العمل محتوای رجیستر PC یک واحد افزایش یافته و به آدرس دستور العمل بعدی اشاره می کند .

 

رجیستر وضعیت Status & Control Register

این رجیستر ۸ بیتی واقع در هسته اصلی میکرو بوده و بیت های آن تحت تاثیر برخی عملیات CPU فعال میشوند . این بیت ها به ترتیب از بیت ۰ تا بیت ۷ به صورت زیر هستند :

پرچم کری C : این پرچم هنگامی که عملیات محاسباتی کری دهد یک می شود

پرچم صفر Z : این پرچم هنگامی که نتیجه یک عملیات محاسباتی یا منطقی صفر شود فعال می شود

پرچم منفی N : این پرچم هنگامی که نتیجه یک عملیات محاسباتی یا منطقی منفی شود فعال می شود

پرچم سرریز V : این پرچم زمانی که نتیجه یک عملیات علامت دار نادرست شود(سرریز) فعال می شود

پرچم علامت S : این پرچم همواره نتیجه XOR بین دو پرچم N و V می باشد

پرچم نیم کری H : اگر هنگام عملیات جمع یک انتقال از بیت ۳ به ۴ در یکی از رجیستر های عمومی یا نتیجه نیم بایت پایین ( بیت های ۰ تا ۳ ) بزرگتر از ۹ باشد ، این پرچم فعال خواهد شد

بیت T : از این بیت در هنگام استفاده از دستورات اسمبلی BLD و BST به عنوان مقصد یا مبدا استفاده می شود .

بیت فعالساز وقفه سراسری I : در صورت یک بودن این بیت وقفه سراسری فعال می شود و در غیر این صورت هیچ وقفه ای رخ نمی دهد . این بیت در هنگام رخ دادن وقفه صفر و دوباره یک می شود

 

رجیستر اشاره گر پشته Stack Pointer

پشته قسمتی از فضای حافظه داده SRAM است که جهت ذخیره اطلاعات و معمولا در اجرای دستور فراخوانی ( CALL) و یا اجرای برنامه وقفه نیاز می باشد . همچنین به کمک دستورات اسمبلی PUSH و POP میتوان به این قسمت نفوذ داشت . اشاره گر پشته یا SP دارای ۱۶ بیت است و از دو رجیستر ۸ بیتی SPL و SPH تشکیل شده است . در ابتدا وقتی سیستم روشن می شود CPU از محل استقرار حافظه پشته اطلاعی ندارد ( پیش فرض SP=0 ) بنابراین باید آدرسی از حافظه SRAM که مربوط به فضای پشته است را به اطلاع سیستم رساند .

با اجرای دستور PUSH R0 ، محتوای رجیستر R0 با محتوای خانه ای از فضای پشته که SP به آن اشاره میکند جایگزین شده و بعد از آن SP یک واحد کاهش می یابد . همچنین با اجرای دستور POP محتوای حافظه پشته بیرون آمده و SP یک واحد افزایش می یابد .





نوع مطلب :
برچسب ها :
لینک های مرتبط :

       نظرات
چهارشنبه 21 تیر 1396
بهزاد عبدالرضایی
دوشنبه 30 مرداد 1396 12:15 ب.ظ
Great info. Lucky me I found your site by accident (stumbleupon).
I have book marked it for later!
جمعه 13 مرداد 1396 11:27 ب.ظ
I love what you guys are up too. This sort of clever work and exposure!
Keep up the very good works guys I've incorporated you guys to blogroll.
جمعه 13 مرداد 1396 09:19 ب.ظ
Hurrah! In the end I got a weblog from where I can genuinely get useful
facts concerning my study and knowledge.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر