آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

در اين بخش مي‌توانيد آموزش و مثال‌های مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت

مطالب برایتان مفید بود

عالی و ساده بود،ادامه دهید
21
81%
خوب و قابل فهم بود،ادامه دهید
5
19%
ساده و قابل فهم نبود.
0
بدون راي
تکراری و سخت بود.
0
بدون راي
 
مجموع رای گیری: 26

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط sinaset » سه شنبه 27 بهمن 1394, 10:57 am

حافظه ها در میکروکنترولر
حافظه RAM-قسمت اول
تصویر
حافظه موقت، با قابلیت نوشتن و ذخیری سازی (به مانند دیگر حافظه ها) اما با به امکان ذخیره سازی موقت! بله،رم اطلاعات را موقت و تا زمانی که برق در مدار وجود دارد ذخیر می کند و بعد از ان،اطلاعات را کاملا از دست میدهد!(لازم به ذکر استRAM مورد استفاده در میکروکنترولر به مانند رم کامپیوتر است ! )

رم سرعت بسیار بالایی دارد! که هیچ حافظه دائمی به گرد پایی سرعت ان نمی رسد !

اما رم دقیقا چه کار می کند؟!

سرعت دیگر حافظه ها مثل FLASH و EEPROM و دیگر گذرگاه ها(که بعدا با انها اشنا میشوید) پایین است، و این حافظه ها نمی توانند با این سرعت پایین با سی پی یو ارتباط برقرار کنند! (و اگر ارتباط برقرار کنند! سرعت محاسباتشان بسیار پایین می اید)
برای همین ما نیاز به یک وسیله یا موشک! یا چیزی داریم که این اطلاعات را از حافظه EEPROM یا FLASH بگیرید و بعد فوری به سی پی یو بدهد ، سپس بعد از انجام محاسبات نتیجه را گزارش دهد!

پس ما از حافظه کوتاه مدت و پرسرعتی،مثل RAM استفاده می کنیم . RAM ،دیتا ها را از حافظه ها می گیرید ، به سی پی یو انتقال میدهد،سپس نتایج محاسبات انجام شده بر روی داده را (در صورت نیاز) بر می گرداند.


دقیقا کاری که رم کامپیوتر انجام میدهد!در کامپیوتر نیز ،چون سرعت هاردیسک پایین است،ابتدا به کمک رم اطلاعات خوانده،سپس به سی پی یو انتقال داده میشود

پس رم یک عنصر ضروری برای کارهای محاسباتی می باشد! و به اون صورت نیازی نیست که اطلاعاتش را بعد از قطع برق ذخیر کند! چون محلی برای ذخیر سازی داده نیست! و در اصل برای انتقال پرسرعت داده استفاده میشود.

از قابلیت ها جالب دیگر رم، نامحدود نوشتن و پاک کردن اطلاعات بر روی ان می باشد
تصویر
در این تصویر RAM به مانند پمپ اب می باشد،که با سرعت بالا،اب رو می گیرد و در خانه و مزرعه می رساند
تصویر
در تصویر بالا به ترتیب نحویه ارتباط ببین سی پی یو و هارد ذخیری سازی نمایش داده شده
(*لازم به ذکر است،میکروکنترولر ها AVR حافظه بسیار پرسرعت cache را ندارند،که در تصویر بالا ان را لحاظ نفرمایید)

رم ها به دو سری مهم، STATIC(ایستا) و DYNAMIC(پویا) تقسیم میشوند،که انشالله در پست بعدی معرفی میشوند

ادامه دارد..
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
پست: 60
تاریخ عضویت: پنج شنبه 22 بهمن 1394, 9:03 pm
سپاس‌های ارسالی: 158 بار
سپاس‌های دریافتی: 24 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط javad_2010 » سه شنبه 27 بهمن 1394, 11:38 am

تشکر از بابت ادامه دادن مباحث
من علاقه زیادی دارم برای یادگیری کار با میکرو کنتلر و برنامه نویسی اونا
بازم تشکر میکنم از به اشتراک قرار دادن اطلاعاتتون.

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط sinaset » جمعه 30 بهمن 1394, 10:50 am

بنام خداوند بخشنده و مهربان
با سلام


ادامه مبحث حافظه
RAM -قسمت پایانی

RANDOM ACCESS MEMORY حافظه تصادفی یا حافظه خواندن و نوشتن با لغب شناخته شده رم !

همانجور که در قسمت قبل گفتیم رم ها به دو دسته STATIC (استاتیک به معنی ایستا یا همون پایدار و ثابت خودمان!) و DYNAMIC ( داینامیک،به معنی پویا، متحرک )

ابتدا به سراغ رم های STATIC میروم

رم های ایستا یا STATIC با دیگر رم ها تفاوت دارد! و تفاوت اصلی انها،در نحویه ساختن رم می باشد . این نوع رم ها از مدار فلیپ فلاپ ساخته شده اند و برای ساخت یک بیت ان از 6 ترانزیستور استفاده شده (که البته تازگی ها با تکنیک های جدید به 4 ترانزیستور کاهش پیدا کرده است)
تصویر
تصویری از 1 بیت حافظه ایستا.
همانجور که در تصویر بالا می ببینید،از 6 عدد ترانزیستور برای ساخت 1 بیت حافظه ایستا رم،استفاده شده(که در واقع همان مدار فلیپ فلاپ می باشد)
که البته این تعداد ترانزیستور برای ساخت رم زیاد می باشد! (از نظر کارشناسان)
رم ایستا قابلیت جالبی دارد،از جمله اینکه،نیازی به بازسازی ندارد. به عنوان مثال فرض کنید،ما یک دیتا 8 بیتی را به رم داده ایم، رم این دیتا را پیش خود نگه میدارد،تا زمانی که ما دیتا جدید رو از دوباره به او بدهیم .
برای همین است که به اینجور رم ها،رم ها ایستای یا پایدار یا نگه دار گفته میشود(البته تا زمانی که برق در سیستم وجود داشته باشد)  کلی Sram ها به خاطره استفاده از معماری ترانزیستوری (فلیپ فلاپ) هزینه ان گران تر می باشد.اما سرعت ها ان نسبت به دیگر مدل ها بالاتر می باشد! لازم به ذکر است AVR و میکرکنترولر ها مورد استفاده ما،نیز از این نوع حافظه برخوردار می باشند(که در پایین مقاله به این مسئله می پردازیم)  *نکته پایانی و مهم دیگر این است که ، کش سی پی یو ،کامپیوتر ما! همین معماری Sram می باشد !(حال می توانید بهتر سرعت Sram را درک کنید )  اما حافظه Dynamic ram   دینامیک رم ، از لحاظ معماری و عملکردی و هزینه تمام شده با حافظه ایستا تفاوت دارد .   پویا یا دینامیک رم، برای نگه داری اطلاعات ،از یک ترانزیستور و یک خازن استفاده می کند! (در حالی که در ایستا نیاز به 6 عدد ترانزیستور بود) ، اما این هم خوب است و هم بد! خوب است،چون هزینه تمام شده و مصرف برق را پایین تر می اورد.بدست ! چون ما باید دائم اطلاعات داینامیک را ریفرش یا همان باسازی کنیم
تصویر
تصویری از یک بیت حافظه dynamic رم
همانجور که می ببینید،فقط یک خازن و یک ترانزیستور برای نگه داری 1 بیت اطلاعات استفاد شده
 خازن رم زود تخلیه میشود!برای همین ما باید دائم و پیوسته،اطلاعات را باسازی کنیم ،این در حالی است که در حافظه ایستا،نیازی به باسازی ندارد! کافیست فقط یک بار اطلاعات را برای ان بفرستیم و ان حافظه اطلاعات خود را تا زمانی که اطلاعات جدید فرستاده شود نگه می دارد(*البته به شرط انکه برق مدار قطع نشود)   به ذکر است، زمانی که خازن های رم پویا یا همان dynamic در حال شارژ شدن می باشد،نمی توان به اطلاعات ان دسترسی داشت . و همین امر باعث میشود که سرعت کار کردن با این حافظه، نسبت به رغیب خود (یعنی حافظه ایستا) پایین تر باشد!  *نکته دیگر این است که حافظه پویا، به دلیل استفاده از یک ترانزیستور و خازن ، حجم بسیاری کمی می گیرد،برای همین می توان با هزینه کمتر و حجم ذخیره سازی (یعنی بیت ها بیشتر در یک مساحت کوچیک تر) تولید کرد . 
تصویر
تصویری 16 بیت حافظه Dram ،که به صورت ماتریکسی بهم دیگر وصل شده اند

لازم به ذکر است،نسل رم های کامپیوتر،تا به امروز از همین مدل Dynamic Random Access memory می باشد!(که البته با کمی تغییرات برای کارکرد بهتر با کامپیوتر)

لازم به ذکر است،که میکروکنترولرها یا جاهایی که از رم دینامیک استفاده میشود، معمولا از مقداری حافظه Sram (برای واسطه گری) استفاده میشود،به عنوان مثال،خود کامپیوتر ما! از کش سی پی یو برای واسطه گری استفاده میشود .(همانجور که در بالا اشاره کردیم،کش از معماری Sram استفاده می کند)
دلیل اصلی استفاده از Sram در کنار Dramسرعت دسترسی پایین Dram می باشد. که پروسس پردازش سی پی یو را پایین می اورد. که به کمک ملحق کردن این دو در کنار هم،می توان سرعت بهتر در کنار هزینه به صرفه تری داشت .

*در یکی از کتاب کامپیوتری این جناب ، یک مقایسه جالب ذکر شده است . گفته شده سرعت دسترسی Sram (کش سطح 1 یا همان L1 ) کامپیوتر به سی پی یو ، بین 2 تا 8 نانو ثانیه می باشد،این در حالیست که سرعت دسترسی Dram به سی پی یو حدود 10 تا 60 نانو ثانیه می باشد!

خوب حالا که با حافظه Sram و Dram اشنا شدیم بهتر است باهم دیگر مقدار حافظه Sram میکروکنترولر Atmega32 را بررسی کنیم:
تصویر
میکروکنترولر Atmega32 حدود 2 کیلوبایت (یا 2048 بایت) حافظه Static Ram دارد .که خوب برای کارهای ما،معمولا خوب و ایده ال است.
تصویر
محل قرار گیری SRAM در میکروکنترولر
----
تصویر
 اما حافظه Sram به چندین قسمت تقسیم میشود. مقداری از حافظه Sram برای همه جور کارها استفاده میشود (که معمولا برای انتقال و دریافت متغییرها استفاده میشود) که معمولا از R0 تا R31 نامگذاری میشوند .   از حافظه برای ارتباطت خود میکروکنترولر استفاده میشود. و باقی حافظه نیز در اختیار ما می باشد تا به کمک ان کارهای خودمان را انجام دهیم (آن 2 کیلو بایت قید شده،در واقع میزان حافظه Sram مورد استفاده ما می باشد )   در اینده با Sram در حین انجام کارها،بیشتر اشنا خواهید شد.  پایان مبحث رم و حافظه ها.  باتشکر. 
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط sinaset » شنبه 1 اسفند 1394, 9:59 am

بنام خدا
باسلام


در این پست با بعضی مباحث ریز می پردازیم،انشالله در پست بعدی،مباحث بزرگ CPU را شروع می کنیم.


در دو پست قبلی با رم ها اشنا شدیم و گفتیم که رم ها دو دسته مهم دارن به نام های Static و dynamic . اما به غیر از دو رم قبلی،یک مدل رم دیگر وجود دارد کمتر مورد استفاده قرار می گیرد،اما خوب بهتر است با ان کمی اشنا شوید(*لازم به ذکر باز هم رم ها دیگری وجود دارد.که البته نیازی به دانستن انها به ان شکل نداریم، چون تا حدودی شبیه به همین دو مدل اصلی هستن)

NV-Ram

به نام کامل Non-volatile random-access memory

این رم در واقع می تواند اطلاعات خود را بعد از قطع برق حفظ کند! شاید بعد از خواند جمله قبل ،پیش خودتان بگوید،پس چه فرقی با حافظه دارد!

به دو دلیل،اولا این رم جزو خانواده رم حساب میشود، دوما این رم نیاز به باتری دارد! چون برای نگه داری اطلاعاتش نیاز به مقداری ولتاژ برق دارد . (چون این رم از نسل خوانده Cmos می باشد،مصرف ناچیزی دارد)
لازم به ذکر است، BIOS و (مادربرد کامپیوتر) از این نوع ایسی استفاده می کند. و همچنین ایسی DS1307 که در اینده با اشنا خواهید شد،از این نوع رم استفاده می کند (ایسی DS1307 ، یک تاریخ و ساعت سنج دقیق است،که می توان به کمک ان یک ساعت بسیار خوب با قابلیت ها عالی ساخت،این ایسی اطلاعات خودش را ،باتری سکه،حدود 10 سال نگه میدارد)
تصویر
(یک کاربر محترم در [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]انجمن مقداری در رابطه با nv-ram توضیح دادن،می تواند انجا را مطالعه فرمایید)

در پایان دعوت می کنم این عکس جالب از تقسیم بندی رم ها را ببینید:
تصویر
 خوب از مباحث رم ها خارج میشوم. به سراغ IO ها میروم، متاسفانه در پست های ابتدای فراموش کردم ان را توضیح دهم  IO به عبارت کامل INPUT/OUTPUT   او ، را احتمالا زیاد شنیده اید. به معنی ورودی/خروجی می باشد. بیشتر پایه های میکروکنترولرها،می تواند اطلاعات را بفرستد و هم دریافت کند! یعنی هم درک می کند،وضعیت روی پایه اش 0 یا 1 است، و هم اینکه می تواند 0 و 1 را ارسال کند .   همه این کارها را باید به کمک فن برنامه نویسی اجرا کرد .  برای درک بهتر مطالب،پایه های میکروکنترولر Atmega32 را بررسی می کنیم(تصویر از سایت slideplayer.com) 
تصویر
  خطوطی که در بالا با رنگ مشخص شده است، IO های ما هستن،یعنی ما می توانیم به عنوان دریافت کننده یا ارسال کننده از انها استفاده کنیم . (پایه های که مشخص نشده،برای کارهای دیگر استفاده میشود )  IO ها میکروکنترولر، مبحث طولانی تر دارد،که انشالله در اینده به ان می پردازیم .  حال سراغ مبحث بافر می روم .  Buffer   کار بافر بسیار ساده می باشد.ما به کمک بافرها جریانات خود را تقویت می کنیم .   کنید، ما همه محاسبات خود را انجام داده ایم، حالا کد هایی صفر و یک خودمان را می خواهیم به کمک IO به بیرون بفرستیم،تا قابل نمایش شود، اما این 0 و 1 ها (البته صفر که ولتاژی نیازی ندارد!) جریان بسیار ناچیزی دارن، و قطعا قبل از رسید و نمایش داده شدن،همه اش از بین میرود!   ما به کمک بافر جریانش را تقویت می کنیم، و خیلی راحت به بیرون ارسالش می کنیم .  برای درک بهتر، باهم دیگه بافر پایه هایی IO میکروکنترولر Atmega32 را بررسی می کنیم: 
تصویر
همانجور که در تصویر بالا می ببینید. 0 و 1 دیجیتالی، قبل از خارج از شدن وارد بافر شده،تقویت می شوند،سپس به بیرون فرستاده میشوند.
(یا برعکس! اطلاعات ورودی ابتدا کمی تقویت میشود،سپس توسط واحد،دیجیتال،تبدیل شده و برای محاسبات فرستاده میشود)
  به ذکر جاهایی دیگر میکروکنترولر از بافرها جهت انتقال داده استفاده شده.این مثال برای درک بهتر بافرها   *ایسی ها بافر نیز فروخته میشود به مانند ul2003 و .. که برای کارهای که نیاز با جریان بیشتر است،مورد استفاده قرار می گیرد(به عنوان مثال راه اندازه موتور ربات،یا راه اندازی تعداد زیادی LED و ...)  . 
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
پست: 60
تاریخ عضویت: پنج شنبه 22 بهمن 1394, 9:03 pm
سپاس‌های ارسالی: 158 بار
سپاس‌های دریافتی: 24 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط javad_2010 » یک شنبه 2 اسفند 1394, 11:49 pm

تشکر از اینکه مباحثو این طور با انرژی ادامه میدید :D

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط sinaset » دو شنبه 3 اسفند 1394, 9:59 am

بنام خداوند بخشنده و مهربان
با سلام

واحد پردازشگر مرکزی central processing unit -قسمت اول
(سنترال پروسس اینگ یونیت) ملقب به CPU

قبل از شروع،در این پست سعی می کنیم مباحث ساده تر و کلی تر CPU را بیان کنیم .

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

سی پی یو ها AVR می تواند با فرکانس نزدیک به 16 تا 20 مگاهرتز کار کنند.(بسته به مدلشان) این بدان معناست که می تواند در ثانیه حدود 16 تا 20 میلیون بار نوسان را به وجود اورد . سی پی یو AVR می تواند با فرکانس 16 مگاهرتز حدود 16 میلیون محاسبه ( 0 و 1 ) را انجام دهد ، تقریبا برای هر 1 مگاهرتز فرکانس ،حدود 1 میلیون محاسباتش را بیشتر میکند.

*بیشتر ترانزیستورهای میکروکنترولر در همین سی پی یو وجود دارد .( به گفته برخی منابع AVR (مثل میگا 8 و 16 و 32 و ... ) حدود 20 هزار ترانزیستور به کار رفته است .) (لازم به ذگر است در سی پی یو کامپیوتر ما و گوشی های هوشمند بیش از 100 ها میلیون ترانزیستور به کار رفته است.!)
وظیفه این ترانزیستور کمک به سریعتر انجام دادن محاسبات می باشد.که هر چقدر تعداد این ترانزیستورها بیشتر باشد،محاسبات سریعتر انجام خواهد شد .

تصویر
مشخصات میکروکنترولر Atmega 32 :
همانجور که می ببینید، سرعت محاسبات سی پی یو این میکروکنترولر حدود 16 میلیون، در فرکانس 16 مگاهرتز می باشد.
================
تصویر
قسمتی که در بالا به کادر رنگی مشخص شده،محدود سی پی یو میکروکنترولر می باشد.که به مجموعه این واحد ها CPU گفته میشود
--------------
 اما مهمترین کاری که یک سی پی یو انجام میدهد چیست؟ و چرا ما به ان اینقدر نیاز داریم؟!   کار سی پی یو انجام عملیات جمع و تفریق و تقسیم و ضرب (یا همان چهار عمل اصلی در ریاضی) و عملیات منطق چون OR و AND و NOT می باشد .  ادامه دارد..  باتشکر. 
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط sinaset » پنج شنبه 6 اسفند 1394, 10:16 am

بنام خدا
با سلام


CPU- قسمت دوم

(قبل از هر چیز،پست دیروز کمی اصلاح شد،چندین اشکال در ان وجود داشت،که از این بابت پوزش می طلبم.)

اما همین محاسبات بنظر سادهی چون ضرب و تقسیم و جمع و منها + AND و OR و NOT به ما خیلی کمک می کند!

در بیشتر کارهایمان ما به این محاسبات نیاز خواهیم داشت ، حتا کارها بسیار بسیار ساده .

همه دستورات نوشته شده توسط ما ابتدا به سی پی یو می رود و بعد پردازش میشود ، سپس به دیگر واحدها انتقال می یابد . و همه این کارها با سرعتی باور نکردنی، انجام میشود!(در حد چند میکرو ثانیه!)


باهم دیگر واحد های سی پی یو را بررسی می کنیم:
تصویر
واحد شمارنده برنامه، Program Counter

این واحد با اسم مخفف PC می باشد .
وقتی که ما برنامه نویسی خود را انجام داده باشیم،سی پی یو به کمک این واحد، تک تک دستورات را از ابتدا می شمارد و بعد به خط بعدی دستورات می رود

به عنوان مثال:

ما دستورات را اینطور نوشته ایم

1."دستور ما"
2."دستور ما"
3."دستور ما"
4."دستور ما"
5."دستور ما"
6."دستور ما"
....
...

واحد PC زمان شروع کار کردن سی پی یو

1."دستور ما" (ابتدا این دستور را شروع به شمارش می کند)
2."دستور ما"(بعد این دستور)
3."دستور ما"(بعد این دستور)
4."دستور ما"(بعد این دستور)
5."دستور ما"(بعد این دستور)
6."دستور ما"(بعد این دستور)

.....
...

اگر این واحد نبود،سی پی یو نمی دانست،دستورات را از کدام خط برنامه نوشته شده در حافظه بخواند! و بعد به کدام خط برنامه برود. پس این واحد ،یک شمارشکر خط برنامه های نوشته شده ما می باشد.که باعث نظم در خواندن برنامه ها میشود.

واحد اشاره گر پشته Stack Pointer
به اسم مخفف SP

یک حافظه پر سرعت (موقت) می باشد که حدود 2 بایت می باشد.
این حافظه ،یک نوع عصا دست سی پی یو برای فراخوانی بعضی دستورات Call و push و ... و متغیرهای محلی و روتین های وقفه و توابع می باشد.(که با بعضی هاشون در اینده اشنا خواهید شد،انشالله)
و بطوری کلی در بعضی کارها،باعث افزایش سرعت دهی و فراخوانی دستورات می شود.

ریجستر دستورات instruction Register

تمامی دستوراتی که ما نوشته ایم ابتدا به این ریجستر، سی پی یو فرستاده میشود.
در این ریجستر دستورات مورد نیاز برای درک کدهایی نوشته شده ما،توسط خود شرکت سازنده میکروکنترولر گذاشته شده است،
کار این ریجستر،تبدیل اسمبلی به کد ماشین می باشد. (*لازم به ذکر است، کدهایی که ما می نویسیم،توسط خود نرم افزار به زبان اسمبلی و ماشین تبدیل میشود)


آشکار سازی دستورات Instruction Decoder

بعد از انکه،کدها ماشین توسط "ریجستر دستورات" مشخص شد،توسط "Instruction Decoder" یا "اشکار سازی دستورات" قابل نمایش و یا قابل درک برای سی پی یو میشود

پس دو واحد instruction Register وInstruction Decoder مکمل هم دیگر می باشند،که واحد اول کدها را شناسایی می کنه و واحد دوم کدها را به زبان قابل فهم سی پی یو تبدیل می کند.
تصویر
همانجور که در تصویر بالا می ببینید،خط دستورات نوشته شده در حافظه برنامه یکی یکی پشت سرهم توسط Program Counter خوانده میشود و به دو واحد instruction Register وInstruction Decoder فرستاده میشود

ادامه دارد..
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط sinaset » جمعه 7 اسفند 1394, 10:56 am

بنام خدا
با سلام


ادامه ..
CPU- قسمت سوم .

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


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

اما ادامه واحدها.


ریجسترهای همه منظوره General Purpose Register
با نام مخفف GPR  تصویر 
این حافظه قسمتی از حافظه Sram می باشد (که در چند پست قبل توضیح دادیم) .این حافظه مقداری از Sram فاصله دارد،اما این حافظه جزوء پر استفاده ترین و مهمترین قسمت حافظه Sram می باشد .!!!
این حافظه از 32 بایت تشکیل شده و این 32 بایت را R0 تا R31 نام گذاری می کنند .(یعنی هر بایت به یک نام در زبان اسمیلی معرفی میشود) ، اما چرا این ریجستر همه منظور اینقدر معروف و مشهور و کاربردی می باشد؟!!! تصویر 
اگر بخاطر داشته باشید در بحث رم ها گفتیم، همه دستورات با واسطه رم به سی پی یو فرستاده میشود (چون سرعت حافظه flash و .. میکروکنترولر کم می باشد) و به کمک رم ابتدا اطلاعات دریافت و سپس به سی پی یو فرستاده میشود و در نهایت نتیجه به کمک رم بر می گردد (رم واسطه پرسرعت برای فرستادن اطلاعات بین حافظه ها و .. با سی پی یو)

حال! ما برای این منظور از ریجستر همه منظوره GPR استفاده می کنیم .
در واقع بیشتر دستورات که ما می نویسیم به کمک این 32 بایت ریجستر به سی پی یو فرستاده و سپس نتیجه بر می گردد.

بطور کلی رجیستر GPR ریجستر مهم می باشد،که در همه میکروکنترولر AVR وجود دارد و همه انها 32 بایتی هستن.
*لازم به ذکر است، در زبان برنامه نویسی اسمبلی باید با این ریجسترها کار کنیم،اما در دیگر زبان ها،نیازی نیست، و خود نرم افزار کدهای مورد نیاز را تولید می کند.

ریجستر های X,Y,Z تصویر 
این سه ریجستر،ریجستر مهمی می باشند که از قسمتی از رجیستر GPR،یا همان ریجستر همه منظوره به وجود می اید !

از R26 تا R31 ، به ریجستر Xوy و Z اختصاص داده شده است. هر کدام از ریجستر های ذکر شده دو بایت را به خود اختصاص داده اند.(که هر کدام 16 بیتی هستن)

به کمک سه ریجستر XوYوZ بیشتر دستورات ما انجام میشود! در واقع از R0 تا R31 ریجستر GPR ، بیشتر،ریجستر های R26 تا R31 (یا همون X,Y,Z) مورد استفاده قرار می گیرند (نسبت به باقی ریجستر هایی GPR)

ادامه دارد...
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته

پست توسط sinaset » شنبه 8 اسفند 1394, 10:36 am

بنام خداوند بخشنده و مهربان
با سلام


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

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

مسیر حرکت داده ها:
تصویر
CPU-قسمت پایانی

اما ..
واحد محاسبه و منطق ALU با اسم کامل Arithmetic Logic Unit
تصویر
alu یا همان و احد محاسبه و منطق،واحدی حساس در سی پی یو می باشد. در این واحد،محاسبات ریاضی و منطقی انجام میشود .

در واقع وقتی که ما یک دستور شرطی یا یک دستور برای جمع ضرب تقسیم تفریق میدهیم.در این واحد درخواست ما بررسی و نتیجه را به ما گزارش میدهد. بنابراین،این واحد کار پردازش در سی پی یو رو انجام میدهد.

همه سی پی یو و میکروکنترولر ها واحد ALU را دارند و بدون ان قادر به کاری نیستن! (از ماشین حساب ساده تا ابر رایانه ها )

کارهای که واحد ALU انجام میدهد:

عملیات محاسباتی صحیح==> جمع،تفریق،ضرب،تقسیم
عملیات منطقی==> ORو XORو NOT و( AND)
عملیات انتقال==> شیفت،حسابی و چرخشی
تصویر
ما در دستورات برنامه نویسی به وفور از دستورات منطقی و محاسباتی استفاده می کنیم .( لازم به ذکر است،در زبان برنامه نویسی C نیازی نیست، عملکردهای منطقی را بدانیم،خود نرم افزار کدها را تولید می کند،که انشالله در اینده بیشتر اشنا خواهید شد)


ریجستر SREG ( با نام کامل Status Register)
تصویر
ریجستر وضعیت SREG ، ریجستری می باشد،که سی پی یو را از نتایج دستورات و وضعیت های برنامه اگاه می کند .

این ریجستر از 8 بیت تشکیل شده،که هر بیت وظیفه اگاهی سازی سی پی یو را در وضعیت های مختلف دارد! به نوعی این ریجستر، عصا دست سی پی یو در وضعیت های مختلف می باشد و سی پی یو را اگاه می کند.

این بیت ها به ترتیپ:(این بیت با یک کردن وضعیت خود، سی پی یو را باخبر می کنند)

بیت 0==> ملقب به C (با نام کامل Carry) در انجام عملیات محاسباتی و منطقی کمک دست سی پی یو می باشد، به عنوان مثال اگر نتیجه محاسبه عددی بیشتر از مقدار 8 بیت شود،سی پی یو را خبر می کند(با یک کردن وضعیت خود)
بیت 1==>ملقب به Z ( با نام کامل Zero) بعضی عملیات منطقی و محاسباتی بر روی این بیت تاثیر دارن،اگر نتیجه پردازش صفر شود،این بیت سی پی یو را خبر می کند
بیت 2==>ملقب به N ( با نام کامل Negative) اگر در عملیات منطقی و محاسباتی نتیجه منفی باشد...
بیت 3==>ملقب بهV ( با نام کامل Two,s Complement Overflow)در دستورات محاسباتی سرریز شدن مکمل عدد 2
بیت 4==>ملقب به S ( با نام کامل Sign Bit )این بیت XOR دو پرچم N و V می باشد.
بیت 5==>ملقب به H ( با نام کامل Half Carry)در انجام دستورات منطقی BCD به سی پی یو کمک می کند.
بیت 6==>ملقب به T ( با نام کامل Bit Copy Storage) می توانیم از این بیت برای مبدا و مقصد دیگر بیت ها استفاده کنیم
بیت 7==>ملقب به I ( با نام کامل Global nterrupt Enable)بیت مهم وقفه،به کمک این بیت،می توانیم وقفه همگانی را فعال سازیم.

لازم به ذکر است . برای تایپ هرچه بهتر مطالب از دو کتاب هم کمک کردم،لازم دونستم اسامی ان رو قید کنم،(میکروکنترولر Avr تالیف،مهندس جابر الوندی و همچنین کتاب میکروکنترولرهای avr برنامه نویسی اسمبلی و C تالیف و ترجمه محمد علی مزیدی،سپهرنعمتی،سرمدنعمتی و اناهیتا نعمتی استفاده کردم)
پایان مبحث سی پی یو
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset » دو شنبه 10 اسفند 1394, 2:34 pm

با سلام

امروز وقت نمی کنم مطلبی تایپ کنم،فقط چند نکته.

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

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

*فهرست تاپیک رو بروز کردم.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7014
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21047 بار
تماس:

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset » سه شنبه 11 اسفند 1394, 3:38 pm

بنام خداوند بخشنده و مهربان
با سلام


خوب تا اینجا کار متوجه شدیم که، برنامه که ما می نویسیم،در حافظه فلش ذخیره میشود.سپس به کمک واحد "شمارنده برنامه" یا Program counter یکی یکی خوانده (دستور اول و دوم و ...) و بعد به واحد ترجمه فرستاده (instruction Register وInstruction Decoder) سپس به کمک Sram ( قسمت "ثبات های همه منظوره") به واحد ALU فرستاده میشود و در انجا محاسبات منطقی و محاسباتی انجام میشود و در نهایت.بعد از تغییرات نتیجه گزارش میشود.

اما سی پی یو و واحد های میکروکنترولر. به کمک واحدی، این داده ها و یا همان بیت و بایت های خود را درست و تنظیم می کند،که اگر ان واحد نباشد! عملا هیچ گونه دیتایی به وجود نمی اید...!

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

[HIGHLIGHT=#00b0f0]همه واحدهای تحت کنترولر میکروکنترولر،با فرکانس یا کلاک فعالیت خود را شروع و محاسبات لازمه را انجام میدهند. در واقع به کمک همین کلاک هاست،که 0 و 1 در سی پی یو و دیگر واحد به وجود و محاسبه میشود.   که کمی قبل تر هم توضیحات ارائه کردیم،میکروکنترولر های AVR اغلب به فرکانس 20 تا 16 مگاهرتز فعالیت می کنند(نهایت فرکانس کاری). که با هر کلاک کاری می توان دیتا های مختلفی را به وجود اورد!
اما اینطور نمی شود،که هر واحد،هر میزان که دلش بخواهد،کلاک یا فرکانس را به خودش اختصاص دهد. برای همین به کمک واحد کنترول کلاک AVR ، هر واحد (یا مجموعه واحدها) به میزان مشخصی (که کارخانه تایین کرده) فرکانسشان را دریافت می کنند (که البته برنامه نویس می تواند فرکانس هر واحد را قطع و وصل کند)
تصویر
  که در تصویر بالا می بینید، واحد کنترول کلاک AVR ، برای هر واحد از میکروکنترولر، یک خط کلاک تایین کرده و کلاک کاری برایش ارسال می کند.   یک نکته در تصویر بالا نامشخص است، واحد کنترول کلاک AVR ، وظیفه اش کنترول کلاک سیستم می باشد،اما این کلاک خودش از کجا تهیه میشود؟!!!!  منابع کلاک (یا نوسان سازی) در میکروکنترلر  AVR به طریق مختلف کلاک خود را تامین می کند،که برای میکروکنترولر های Avr ،مجموعا 5 روش می باشد.
لازم به ذکر است،واحد منبع کلاک درون میکروکنترولر وجود دارد،که ما باید به کمک برنامه نویسی و به کمک فیوزبیت ها(که،انشالله بعد اشنا خواهید شد) آن را برای میکرو مشخص کنیم.
تصویر
 ما به ترتیب از سمت راست انها را معرفی می کنیم:  
  Calibrated Rc Oscillator - اسیلاتور کالیبره داخلی.  به صورت دیفالت و پیش فرض (کارخانه ی) میکروکنترولر از این اسیلاتور یا نوسان ساز (داخلی خود)، استفاده می کند .   نوسان ساز می تواند با فرکانس 1 تا 8 مگاهرتز ، کلاک ، میکروکنترولر را تامین کند. دقت این اسیلاتور تا حدود زیادی خوب می باشد. اما! برای پروژه های ، با دقت (مثل ساعت و ارتباط سریالی (usart) و .. )درصد خطایی دارد.  پس اسیلاتور داخلی بیشتر برای کارهایست که دقت برایمان چندان مهم نیست! می باشد .  Low-frequency Crystal Oscillator - اسیلاتور فرکانس پایین.   که از نامش پیداست،به کمک این واحد از منبع کلاک. ما می توانیم فرکانس پایین درست کنیم .  در دنیایی الکترونیک به کمک کریستال 32.768 کیلوهرتز می توان یک ساعت دقیق ساخت. اگر همین الان ساعت های مچی و دیواری و .. را ببینید،همگی از یک کریستال 32.768 کیلوهرتزی استفاده می کند.  ما با وصل کردن یک کریستال 32.768 کیلوهرتزی به میکروکنترولر می توانیم ثانیه ی ،دقیق و قابل قبول درست کنیم .   ما به کمک اسیلاتور فرکانس پایین می توانیم زمان سنج دقیق درست کنیم. 
تصویر
کریستال 32.768 کیلوهرتزی
 CrystalOscillator -اسیلاتور خارجی .   توان به این واحد از منبع کلاک. کریستال خارجی وصل کرد .   همانطور که قبلا هم گفتیم. اسیلاتور داخلی خود میکروکنترولر چندان دقیق نمی باشد و سرعت ان نهایت 8 مگاهرتز می باشد.  ما می توانیم به کمک این واحد، کریستال مد نظر خودمان را (از 1 تا 16 مگاهرتز) وصل کنیم، و دقت میکروکنترولر خودمان را تقریبا به حالت ایده ال(یا همان بسیار خوب ) برسانیم! 
تصویر
کریستال 8 مگاهرتز
----
تصویر
وصل کردن کریستال 16 مگاهرتز به میکروکنترولر atmega8
 External Clock- نوسان سازی با کلاک خارجی   کمک این واحد (که کمتر مورد استفاده قرار می گیرد) می توان یک کلاک غیر از کلاک (کریستالی) وصل کرد .  (*معمولا در تنظیم فیوزبیت ها،کاربران تازه کار، این فیوزبیت را با اسیلاتور خارجی اشتباه می گیرن و میکروکنترولر را بر رویش تنظیم می کنند،در نتیجه میکروکنترولر به حالت کما! می رود،که برای رفع ان باید به کمک یک میکروکنترولر دیگر یک کلاک 1 مگاهرتزی تولید کرد و به میکروکنترولر داد)  External RC Oscillator- استفاده از نوسان ساز RC خارجی.   واحد نیز کمتر مورد استفاده قرار می گیرد.   این واحد به کمک خازن و مقاومت، کلاک سیستم تهیه میشود .  چند اصطلاح به کار رفته در مقاله:  نوسان ساز:نوسان ساز به انگلیسی Oscillator (اسیلاتور) یک مدار الکتریکست که می تواند یک موج سینوسی و یا مربعی تولید کند.  نوسان سازی:تولید فرکانس یا موج را نوسان سازی می گویند.  کریستال: به انگلیسی (Crystal)، یک قطعه الکتریکیست که از ماده کریستال کوارتز به وجود اماده است.کریستال،توانایی دارد،موج ها بسیاری دقیق و ایده ال برای نوسان سازی تولید کند( کوارتز یک جور خاصیتی دارد،که وقتی جریان برق از درونش رد میشود،ان را تبدیل به موج می کند.از این قابلیت می توان برای ساخت ان فرکانس ها استفاده کرد)  . 
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Novice Poster
Novice Poster
پست: 60
تاریخ عضویت: پنج شنبه 22 بهمن 1394, 9:03 pm
سپاس‌های ارسالی: 158 بار
سپاس‌های دریافتی: 24 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط javad_2010 » سه شنبه 11 اسفند 1394, 10:55 pm

سلام
یه سوال برام پیش اومده
یعنی با نوسان خود میکروکنترلر نمیشه یه تایمر و زمان سنج ساخت که دقیق باشع؟؟؟

خوده میکرو نمیتونه کارا رو دقیق اجرا کنه؟؟؟

ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”