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



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

نحوه عملکرد واحد CPU

در هنگام روشن شدن میکرو کنترلر یک مقدار از پیش تعیین شده در درون رجیستر PC قرار می گیرد که این مقدار از پیش تعیین شده همان آدرسی از حافظه فلش است که کد دستور اول در آن قرار دارد . سپس CPU فرآیند خواندن دستور العمل را انجام می دهد که به این مرحله Fetch می گویند . سپس CPU بعد از خواندن کد دستور آن را در رجیستر IR قرار می دهد تا واحد رمز گشایی دستور (ID) کد موجود در IR را تجزیه و تحلیل کرده و عملی که باید انجام گیرد را مشخص می کند ( Decode ) . سپس با ارسال سیگنال های کنترلی ، سایر داده های مورد نیاز دستورالعمل را فراخوانی و واکشی کرده ( Memory Fetch ) و سرانجام ALU عملیات مشخص شده را بر روی داده ها انجام می دهد ( Execute ) . در نهایت مقدار PC تغییر کرده و آدرس بعدی که باید اجرا شود در آن قرار میگیرد و چرخه ادامه می یابد .

 

نکته : برنامه نویس به رجیسترهای درون CPU کاری ندارد . رجیسترهای درون هسته مرکزی ، رجیسترهای خود سیستم هستند که هر یک وظیفه مشخصی دارند و مقدار آنها دائما تغییر می کند . رجیسترهای فوق الذکر فقط برای شناخت بهتر AVR و درک عملکرد این واحد معرفی شدند و در عمل یک برنامه نویس نیازی به استفاده از آن ندارد اما برای یک مهندس بهتر است فراتر از یک برنامه نویس باشد و درک عمیق تری از سخت افزار داشته باشد .

 


خط لوله Pipelining

مراحل اجرای یک دستور که توسط کاربر نوشته می شود به این صورت است که بعد از روشن شدن میکرو اولین آدرس حافظه فلش که حاوی اولین دستورالعمل است واکشی می شود . بعد از واکشی ترجمه یا رمز گشایی می شود ، معماری این میکرو به صورتی طراحی شده است که قابلیت واکشی (Fetch) ، رمز گشایی (Decode) و اجرای دستور (Execute) را به صورت پشت سر هم را دارد . به عبارت دیگر وقتی یک دستور در مرحله اجراست دستور بعدی در مرحله رمز گشایی و دستور بعد از آن در مرحله واکشی قرار دارد تا همزمان همه واحد ها بیکار نباشند و سرعت پردازش چند برابر شود . به طور کلی معماری پایپ لاین در پردازنده را می توان به خط تولید کارخانه تشبیه کرد طوری که وقتی خط تولید شروع به کار می کند هیچ کدام از بخش ها بیکار نمی مانند و هر کدام وظایف مربوط به خود را به طور مداوم انجام می دهند.  در شکل زیر نحوه انجام پایپ لاین توسط میکرو نشان داده شده است . در سیکل اول کلاک ، تنها دستور اول از حافظه واکشی می شود ، در سیکل دوم کلاک ، دستور اول که واکشی شده بود ، به واحد رمزگشایی میرود و دستور دوم واکشی می شود . در سیکل سوم کلاک دستور اول وارد مرحله اجرا می شود در حالی که دستور دوم به واحد رمزگشایی میرود و دستور سوم واکشی می شود و همین طور این کار دائما تکرار می شود . pipelining یکی از مزیت های بسیار مهم معماری RISC محسوب می شود که باعث افزایش سرعت می شود . پایپ لاین در میکروکنترلر های مختلف میتواند مراحل متفاوتی داشته باشد میکروکنترلرهای با ۳ ، ۵ ، ۸ و حتی ۱۳ مرحله پایپ لاین نیز وجود دارند اما در میکروکنترلرهای AVR ، پایپ لاین فقط ۲ مرحله Fetch و Execute را دارد.

Pipelining 

معماری حافظه در AVR

در میکروکنترلر های AVR از معماری “هاروارد” استفاده شده است بطوریکه در این معماری حافظه میکروکنترلر به دو قسمت حافظه برنامه ( از نوع Flash ) و حافظه داده ( از نوع EEPROM ) تقسیم می شود و هر کدام از این دو حافظه از گذرگاه مجزا استفاده میکنند . معماری هاروارد در مقایسه با معماری سنتی فون نیومن سریع تر است. شکل زیر تفاوت دو معماری را نشان می دهد .

 Harvard&Neuman

حافظه داده SRAM

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

 

حافظه داده EEPROM

این حافظه که توسط رجیستر های عمومی ۳۲ گانه با CPU در ارتباط است دائمی بوده و با قطع برق از بین نمی رود .از این حافظه میتوان در مواقعی که مقدار یک داده در برنامه مهم بوده و نباید با قطع برق یا ریست شدن از بین برود استفاده کرد .

 

حافظه برنامه FLASH

این حافظه دائمی پرسرعت برای ذخیره برنامه کاربر استفاده می گردد . در واقع حافظه فلش در میکروکنترلر به دو قسمت تقسیم شده است بخشی برای بوت شدن سیستم و بخشی برای برنامه کاربر مورد استفاده قرار می گیرد. فیوز بیت ها ( Fuse Bits ) و بیت های قفل ( Lock Bits ) نیز در قسمت بوت لودر حافظه فلش وجود دارند. در قسمت دیگر این حافظه برنامه کاربر وجود دارد که در هنگام کار میکرو خط به خط خوانده شده و اجرا می شود .

معرفی واحدهای جانبی دیگر

واحد ورودی/خروجی (Input/Output)

این واحد وظیفه ارتباط میکرو با محیط پیرامون را به صورت موازی (پاراللParallel) برقرار می کند . اساسا ارتباط میکرو با محیط پیرامون به دو شکل موازی و سریال صورت می گیرد . واحد ورودی/خروجی به صورت موازی و واحد ارتباط سریال به صورت سریال با محیط پیرامون میکرو در ارتباط است . این واحد که با آن پورت نیز گفته می شود ، دارای چند رجیستر و بافر است و در نهایت به صورت پایه(پینPin) از میکرو خارج می شود . در میکروکنترلرهای AVR با توجه به نوع و سری میکروکنترلر تعداد آنها بین ۱ تا ۱۰ پورت متفاوت می باشد . پورت ها در AVR به صورت PORTA ، PORTB ، PORTC و… نامگذاری می شود. هر پورت ۸ بیت دارد که به صورت PORTX.0 تا PORTX.7 نامگذاری می شود .

 

واحد کنترل کلاک ورودی

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

  1. منبع کلاک خارجی: در این حالت از اتصال منبع کلاک با فرکانس مشخص به پایه X1 میکرو استفاده می شود . در این حالت پایه X2 آزاد است .
  2. کریستال خارجی: در این حالت از اتصال یک کریستال با فرکانس مشخص و دو عدد خازن بین پایه های X1 و X2 استفاده می شود . جنس بلور این کریستال ها معمولا کریستال کوارتز است . در این حالت از اسیلاتور داخل میکرو استفاده می شود.
  3. RC اسیلاتور داخلی: RC اسیلاتور داخلی یک خازن و یک مقاومت است که با فرکانس مشخصی نوسان می کند. در این حالت هر دو پایه X1 و X2 آزاد است .

 

واحد تایمرها و کانترها ( Timers & Counters )

در این واحد از یک سخت افزار خاص چندین استفاده متفاوت می شود . این سخت افزار خاص شامل چند رجیستر و چند شمارنده هستند که کارایی های متفاوتی دارند . کاربرد این واحد به عنوان تایمر ، کانتر ، RTC و PWM می باشد . رجیستر اصلی مورد استفاده در این واحد رجیستر تایمر نام دارد . اگر یک پالس ورودی منظم ( مانند تقسیمی از پالس کلاک میکرو ) به این واحد اعمال کنیم رجیستر تایمر شروع به زیاد شدن کرده و در زمان مشخصی پر و سرریز می شود. بنابراین میتوان با تنظیم مناسب پالس ورودی به این واحد زمان های مختلف را ایجاد کرد. اگر پالس ورودی تایمر را طوری تنظیم کنیم که رجیستر تایمر هر یک ثانیه سر ریز شود ، در این صورت RTC یا زمان سنج حقیقی ساخته می شود. در زمان استفاده از RTC به کریستال ۳۲۷۶۸ هرتز که به کریستال ساعت معروف است نیاز داریم . اگر رجیستر تایمر را قبل از سر ریز شدن ریست کنیم ، در این صورت میتوان با اعمال پالس خروجی از میکرو یک PWM یا مدولاسیون پهنای عرض پالس را روی یکی از پایه های میکرو داشت . اما اگر پالس ورودی به این واحد نامنظم باشد ( مانند پالسی که از بیرون به پایه میکرو اعمال می شود ) در این صورت یک شمارنده تعداد پالسهای ورودی روی رجیستر تایمر ساخته می شود .

 

واحد تایمر سگ نگهبان Whatchdog

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

 

واحد کنترل وقفه Interrupt

در هنگام بروز وقفه ، پردازنده کار فعلی خود را رها کرده و به اجرای وقفه مورد نظر می پردازد . علت بوجود آمدن واحد کنترل وقفه این است که باعث می شود پردازنده کمتر درگیر شود . در حالتی وقفه وجود نداشته باشد ، پردازنده مجبور است طی فواصل زمانی مشخصی چندین بار به واحد مورد نظر سرکشی کرده و بررسی کند که دیتای خواسته شده از آن واحد آماده است یا خیر که اغلب آماده نبوده و وقت پردازنده تلف می شود . برای مثال فرض کنید که یک صفحه کلید به ورودی میکرو متصل است ؛ در حالت سرکشی پردازنده باید یکی یکی کلید های صفحه کلید را در فواصل زمانی مشخص سرکشی کند تا در صورت فشرده شدن یک کلید پردازش مورد نظر را انجام دهد ، اما در حالتی که واحد کنترل وقفه فعال باشد ، پردازنده آزاد است و تا زمانی که کلیدی زده نشده است پردازنده به صفحه کلید کاری ندارد . سپس در صورتی که کلیدی زده شود واحد کنترل وقفه یک سیگنال وقفه به پردازنده مبنی بر اینکه ورودی آمده است ارسال می کند تا پردازنده برای یک لحظه کار خود را رها کرده و به صفحه کلید سرویس می دهد ، کلیدی که زده شده را شناسایی کرده و پردازش مورد نظر را روی آن انجام می دهد.

 

واحد ارتباطی JTAG

JTAG کوتاه شده ی عبارت Joint Test Access Group ، یک پروتکل ارتباطی بر روی دستگاه ها می باشد که این توانایی را ایجاد می کند که بتوان برنامه نوشته شده موجود در میکرو را خط به خط اجرا نمود تا در صورت وجود اشکال در برنامه نویسی آن را برطرف ( عیب یابی debug ) کرد . همچنین میتوان توسط JTAG حافظه Flash ، EEPROM ، فیوز بیت ها و قفل بیت ها را برنامه ریزی ( پروگرام Program ) کرد .

 

واحد مبدل آنالوگ به دیجیتال ( ADC )

همانطور که میدانید تمامی کمیت های فیزیکی ، آنالوگ هستند . کمیت های آنالوگ برای پردازش توسط میکروکنترلر ابتدا می بایست تبدیل به دیجیتال شوند. تبدیل ولتاژ ورودی آنالوگ به کد دیجیتال متناسب با آن ولتاژ ورودی توسط این واحد انجام می پذیرد . مسائلی که در هنگام کار با این واحد درگیر آن هستیم یکی سرعت نمونه برداری و دیگری ولتاژ مرجع VREF است . ولتاژ مرجع در این واحد به عنوان مرجعی برای سنجش ولتاژ آنالوگ ورودی به کار می رود به صورتی که بازه ی مجاز ولتاژ ورودی بین ۰ تا VREF است. همچنین سرعت نمونه برداری مسئله ی مهمی است که در بروزرسانی سریعتر اطلاعات نقش دارد .

 

واحد مقایسه کننده آنالوگ

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

سوالی که ممکن است بوجود آید این است که با وجود مبدل آنالوگ به دیجیتال دیگر چه نیازی به این بخش می باشد؟ در جواب باید گفت سرعت عملکرد این بخش در مقایسه با مبدل انالوگ به دیجیتال بسیار بیشتر بوده و همین سرعت باعث احساس نیاز به چنین بخشی را فراهم کرده است.

 

واحد ارتباطات سریال

تبادل دیتا با محیط خارجی میکروکنترلر علاوه بر واحد ورودی/خروجی که به صورت موازی است ، می تواند از طریق این واحد به صورت سریال انجام گیرد . مهمترین مسئله در ارتباطات سریال یکی پروتکل ارتباطی و دیگری سرعت ارسال ( Baud Rate ) است. پروتکل های ارتباطی سریال که توسط میکروکنترلرهای AVR پشتیبانی می شود عبارتند از :

  1. پروتکل spi : دارای سرعت بالا می باشد . از طریق این پورت میکروکنترلر را میتوان پروگرام کرد .
  2. پروتکل USART : سرعت پایین تری دارد. برای مسافت های طولانی و ماژول های ارتباطی مناسب است.
  3. پروتکل TWI : یا پروتکل دوسیمه بیشتر برای ارتباط با المانهای جانبی سرعت پایین است .
  4. انواع زبان های برنامه نویسی میکروکنترلرهای AVR :

    زبان های برنامه نویسی نظیر اسمبلی ، C ، C++ ، بیسیک و . . .

    هر کدام از این زبان های برنامه نویسی یک نرم افزار مترجم ( کامپایلر ) مخصوص به خود را دارند که برنامه در درون آن نرم افزار توسط برنامه نویس نوشته می شود و سپس از طریق سخت افزاری به نام پروگرامر روی میکروکنترلر برنامه ریزی می شود . برای برنامه ریزی میکروکنترلر ها مستلزم دیدگاهی بر تلفیق سخت افزار و نرم افزار هستیم . پس از سالها فکر و بررسی در زمینه برنامه ریزی این نوع المان ها و استفاده از زبان های برنامه نویسی مختلف ، زبان برنامه نویسی C به عنوان یکی از بهترین و منعطف ترین زبان های برنامه نویسی در این زمینه معرفی شد . امروزه به جرات میتوان گفت که زبان برنامه نویسی C را می توان برای برنامه ریزی هر نوع میکروکنترلری به کار برد . زبان برنامه نویسی C با قرار گرفتن در سطح میانی بین زبانهای برنامه نویسی دیگر ، دسترسی کاربران را هم به بخش های سطح پایین و سطح بالا در برنامه نویسی فراهم میکند .

    از کامپایلرهای معروف میتوان به AVR Studio ، CodeVision AVR و Bascom AVR اشاره کرد . ما از کامپایلر زبان C به نام CodeVision AVR استفاده می کنیم زیرا استفاده از آن به دلیل وجود ساختار CodeWizard (جادوگر کد ) راحت تر است.

     


    برنامه ریزی (پروگرام) کردن میکروکنترلرهای AVR :

    بعد از نوشتن برنامه درون میکروکنترلر نوبت به انتقال آن به میکرو می شود که به آن اصطلاحا پروگرام کردن یا برنامه ریزی می گویند. وسیله ای که به کامپیوتر متصل می شود و توسط آن میکروکنترلر پروگرام می شود را اصطلاحا پروگرامر ( Programmer ) گویند.

    برنامه ریزی میکروکنترلرهای AVR به سه روش صورت می گیرد : برنامه ریزی سریال ، موازی و JTAG

    برنامه ریزی به روش موازی سریعتر انجام می گیرد اما نحوه انجام کار آن پیچیده تر است. ضمنا تمامی میکروکنترلرهای AVR از برنامه نویسی موازی و برنامه ریزی JTAG پشتیبانی نمی کنند. بنابراین برنامه ریزی سریال که از طریق رابط سریال spi صورت می گیرد و تمامی میکروکنترلرهای AVR از آن پشتیبانی می کنند بهترین گزینه است .

    در برنامه ریزی سریال حافظه فلش از طریق رابط spi پروگرام می شود و برنامه نوشته شده کاربر درون میکرو قرار می گیرد. برقراری ارتباط بین PC و میکروکنترلر توسط سخت افزار جانبی به نام پروگرامر صورت می گیرد. پروگرامرها انواع مختلفی دارند. پروگرامرها از طریق پورت USB ، پورت سریال و پورت پرینتر می توانند به PC وصل شده سپس میکروکنترلر روی پروگرامر قرار میگیرد و اینگونه پروگرام می شود. ساده ترین پروگرامر stk300 نام دارد که به پورت پرینتر کامپیوترهای PC وصل می شود. بهترین نوع پروگرامرهای AVR آن هایی است که از رابط USB استفاده می کند. معروفترین پروگرامرهای موجود در بازار که به پورت USB متصل می شوند میتوان پروگرامرهای stk500،USBasp و isp mk2 را نام برد.

     


    ISP چیست ؟

    یکی از راههای پروگرام کردن میکروکنترلر های AVR روش ISP یا In System Programming می باشد. در این روش میکروکنترلر درون سیستم ( مدار ) پروگرام می شود. بدین معنی که به جای خارج کردن میکروکنترلر از مدار و قرار دادن آن روی پروگرامر ، میکروکنترلر در درون مدار و توسط پورت استاندارد ISP ، پروگرام می شود. در حقیقت در این روش از همان برنامه ریزی سریال با استفاده از پروتکل Spi استفاده می شود که تحت اتصال استاندارد ISP به صورت شکل زیر درآمده است .

    ISP






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

       نظرات
پنجشنبه 22 تیر 1396
بهزاد عبدالرضایی
سه شنبه 18 اردیبهشت 1397 07:25 ق.ظ
Appreciate the recommendation. Let me try it out.
دوشنبه 30 مرداد 1396 01:16 ب.ظ
Undeniably believe that which you said. Your favorite
justification seemed to be on the net the simplest thing to
be aware of. I say to you, I definitely get annoyed while people consider worries that they plainly don't know about.
You managed to hit the nail upon the top and also defined out the
whole thing without having side-effects , people could take a signal.

Will probably be back to get more. Thanks
جمعه 13 مرداد 1396 11:15 ب.ظ
Heya this is kinda of off topic but I was wondering if blogs
use WYSIWYG editors or if you have to manually code with HTML.

I'm starting a blog soon but have no coding experience
so I wanted to get advice from someone with experience.
Any help would be greatly appreciated!
جمعه 13 مرداد 1396 08:04 ب.ظ
Today, I went to the beachfront with my kids.
I found a sea shell and gave it to my 4 year old daughter and said "You can hear the ocean if you put this to your ear." She placed the shell to her
ear and screamed. There was a hermit crab inside and it pinched her ear.
She never wants to go back! LoL I know this is entirely off topic but I had to
tell someone!
پنجشنبه 22 تیر 1396 11:31 ق.ظ
خیلی خوبه واقعا خوشم اومد.به منم سر بزن حتما حتما ، می تونیم با هم تبادل لینک داشته باشیمومنتظرم مرسی
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر