دانلود با لینک مستقیم و پر سرعت .
لینک پرداخت و دانلود *پایین مطلب*
فرمت فایل:Word (قابل ویرایش و آماده پرینت)
تعداد صفحه317
بخشی از فهرست مطالب
چکیده:
در این پروژه ما بوسیله یک میکرو کنترلر AVR Atmega32 که محصولی از شرکت ATMEL می باشد اقدام به ساخت یک دفترچه تلفن دیجیتال کرده ایم . ما از یک صفحه کلید (key pad) 4×4 برای وارد کردن اطلاعات استفاده کرده ایم . مثلاً ذخیره کردن یک شماره تلفن جدید که شامل قسمت نام می باشد که می تواند ترکیبی از حروف انگلیسی و اعداد باشد و قسمت شماره تلفن که فقط شامل اعداد می باشد ، و یا جهت جستجوی یک شماره تلفن از روی نام آن و یا پاک کردن و ایجاد تغییر در یک شماره تلفن و . . . . برای ذخیره دائمی شماره های تلفن نیاز به یک حافظی دائمی داریم که با قطع برق اطلاعات آن از بین نرود که برای این کار ما از حافظ ی EEPROM خود میکرو کنترلر استفاده کرده ایم که در ادامه به تفضیل در مورد آن توضیح خواهیم داد . برای نمایش اطلاعات از یک LCD 2×16 کاراکتری استفاده نموده ایم که همانطور که از نامش پیداست دارای دو سط نمایش می باشد که هر سطرش قادر به نمایش 16 کاراکتری می باشد . همچنین از یک زنگ (Buzz ) برای ایجاد هشدارهای مورد نیاز استفاده کرده ایم مثلاً هنگام زدن هر کلید به مدت یک دهم ثانیه صدای زنگ به صدا در میاید که به معنای تایید فشرده شدن کلید می باشد . در ضمن ما از فرکانس 1MHz کلاک داخلی خود میکرو کنترلر استفاده نموده ایم . شمای کلی پروژه در شکل زیر مشاهده می شود :
فصل اول : آشنایی با AVR Atmega32
تفاوت microprocessor با microcontroller :
میکرو کنترولر یک پردازنده است که در یک قطعه کوچک ساخته شده است.یک میکرو پروسسور به همراه وسایل جانبی یک میکرو کامپیوتر است .وقتی تمام این قطعات داخل یک تراشه سیلیکونی قرارمی گیرد؛ میکرو کنترولر نامیده می شود.میکرو کنترولر در حقیقت یک کامپیوتر تک تراشه ارزان قیمت است.تک تراشه بدین معنی که تمامی اجزای کامپیوتر از جمله پورت های ورودی و خروجی ، واحد پردازشگر مرکزی و سایر ملزومات آن تماما در یک تراشه کوچک جای گرفته اند.ایده اصلی فشرده سازی ، کاهش حجم و هزینه و همچنین سهولت قرار گرفتن در مدارات پیچیده تر و بزرگتر است.
میکرو کنترولر ها معمولا در مواقعی استفاده می شوند که توانایی پردازش بالایی لازم نباشد و در عوض حجم کوچکی و مصرف انرژی کم مد نظر باشد . در ادامه به تشریح قسمت های مختلف میکرو کنترلر AVR atmega32 می پردازیم البته به دلیل زیاد بودن حجم مطالب بیشتر سعی می کنیم به توضیح قسمت هایی بپردازیم که در این پروژه از آنها استفاده نموده ایم .
ساختار کلی میکرو کنترلر AVR Atmega32 :
میکرو کنترلر AVR Atmega32 یک میکرو کنترلر 8بیتی می باشد با معماری RISC می باشد . بدین معنی که تمامی رجیسترهای ، DATA BUS و خانه های حافظه آن بصورت 8بیتی می باشد . این میکرو دارای 32 رجیستر 8بیتی با کاربرد عمومی نیز می باشد (R0 تا R31 ) . علاوه بر این ها این میکرو دارای 8 پورت 8بیتی نیز می باشد (PORTA ، PORTB ، PORTC ، PORTD ) . بلوک دیاگرام کلی این میکرو در شکل زیر مشاهده می شود :
این میکرو در دو بسته بندی PDIP و TQFP/MLF در بازار وجود دارد که ما در این پروژه از بسته بندی نوع PDIP استفاده نموده ایم . این میکرو دارای 40 پایه می باشد که توضیح هر کدام از پایه ها در هر دو نوع بسته بندی در شکل زیر آورده شده است :
در اینجا به طور مختصر در مورد هر کدام از پایه ها توضیح می دهیم :
همانطور که مشاهده می شود این میکرو چهل پایه دارد که از این چهل پایه 32 عدد مربوط به چهار پورت 8بیتی آن می باشد که در شکل کاملاً مشخص می باشد . نکته ای که وجود دارد این است که برخی از پایه های میکرو دارای دو کاربرد می باشد به عنوان مثال پایه های پورت A (PA0 تا PA7 ) علاوه بر اینکه می توانند به عنوان ورودی و خروجی در قالب پورت A استفاده شوند می توانند به عنوان ورودی مبدل آنالوگ به دیجیتال نیز استفاده شوند . میکرو ATMEGA32 دارای مبدل آنالوگ به دیجیتال می باشد که هر کدام از بیت های پورت A می توانند به عنوان یک ورودی مجزا از تولید کننده یک ولتاژ آنالوگ ( مثلاً ولتاژ خروجی از یک سنسور ) مورد استفاده قرار گیرند که البته ما در این پروژه از این قابلیت یعنی مبدل آنالوگ به دیجیتال یا Analog to Digital Convertor (ADC ) استفاده نکرده ایم . این میکرو دارای یک پایه reset می باشد که با ولتاژ صفر فعال می شود و یا به عبارتی active low می باشد . همانطور که در شکل مشخص است میکرو دارای دو پایه VCC و دو پایه GND می باشد که یکی از پایه های منبع تغذیه و زمین مربوط به خود میکرو می باشد و دیگری مربوط به همان مبدل ADC می باشد که در صورت استفاده باید به ولتاژ مناسب متصل شود . ولتاژ ورودی این میکرو 5ولت می باشد که البته در برخی مدلهای low power میکرو با 3.5 ولت نیز کار می کند . دو پایه XTAL1 و XTAL2 نیز مربوط به کریستال خارجی می باشد . میکرو کنترلر Atmega32 دارای 8MHz کلاک داخلی می باشد یعنی تا فرکانس 8MHz نیازی به استفاده از کریستال خارجی نمی باشد . کلاً این میکرو تا فرکانس 16MHz را پشتیبانی می کند که اگر فرکانس بیشتر از 8 مگاهرتز باشد باید برای تامین کلاک از کریستال خارجی استفاده کنیم که در اینصورت می توانیم پایه های کریستال را به این دو پایه متصل نماییم . سایر پایه ها نیز که در واقع کاربرد ثانویه هر کدام از پایه های قبلی می باشند چون در این پروژه استفاده نشده اند از توضیح آنها می پرهیزیم . البته دیتا شیت میکرو کنترلر AVR Atmega32 را در انتهای این متن آورده ایم که تک تک آنها را توضیح داده است .
در ادامه به توضیح قسمتهای مهم این میکرو می پردازیم .
انواع حافظه در میکرو کنترلرهای خانواده AVR :
یکی از تفاوتهای عمده میکرو کنترلر و میکرو پروسسورها وجود حافظه درون میکرو کنترلرها می باشد . میکرو کنترلرها بویژه میکرو کنترلرهای خانواده AVR شرکت ATMEL و باز بویژه میکرو کنترلر ATMEGA32 دارای سه نوع حافظه درون تراشه خود می باشد .
- In system programmable FLASH memory
- SRAM
- EEPROM
می توان گفت تقریباً در تمامی خانواده های میکرو کنترلرهای AVR این سه نوع حافظه و یا حداقل دو نوع اول وجود دارد که در ادامه به توضح تک تک آنها خواهیم پرداخت .
حافظه FLASH داخلی قابل برنامه ریزی(programmable in system flash) :
این نوع حافظه در میکرو کنترلرهای جهت نگه داری کدبرنامه ای که میکروکنترلر قرار است اجرا کند استفاده می شود . اگر بخواهیم تشابه به میکروپروسسور ها بدهیم این حافظه مانند حافظه جانبی ( هارد دیسک ، سی دی و . . . ) می باشد که وظیفه نگهداری برنامه های اجرایی و سیستم عامل را دارد . در واقع هنگامیکه میکرو در مدار قرار میگرد و جریان برقرار می شود درون رجیستر PC (program counter ) آدرس اولین خانه این حافظه قرار دارد و میکرو به سراغ این خانه حافظه میرود و دستوری که در آن قرار دارد را واکشی ، رمزگشایی و اجرا می کند . جنس این حافظه تقریباً ماننده جنس Flash memory های موجود در بازار است که ما استفاده می کنیم . قابل ذکر است که اندازه این حافظه در مدلهای مختلف خانواده AVR متفاوت است و فاکتور مهمی برای انتخاب میکرو مناسب می باشد تا اندازه ای که عدد موجود در نام هر میکرو کنترلر نشانگر حجم این حافظه می باشد به عنوان مثال میکرو atmega32 دارای 32KB حافظه flash داخلی می باشد و همچنین سایر میکرو ها . قطعاً برای پروژههای بزرگ که برنامه آن حجم زیادی دارد باید میکرو انتخاب بشود که حجم حافظه flash آن از حجم فایل برنامه ما کمتر نباشد . شایان ذکر است که این نوع حافظه ها تا 10000 بار توانایی نوشتن شدن را دارا می باشند . که برای یک چیپ میکرو کنترلر که می خواهد به احتمال زیاد در یک پروژه خاص به کاربرده شود تعداد دفعات بالایی محسوب می شود . برای نوشتن و یا پاک کردن بر روی این حافظه باید از دستگاه پروگرامر استفاده کنیم که در ادامه شرح خواهیم داد .
حافظه SRAM :
این حافظه نیز همانطور که از نامش پیداست حافظه static RAM می باشد و میکرو کنترلر برای اجرای برنامه از این حافظه استفاده می کند به عنوان مثال حافظه stack از انتهای همین حافظه شروع می شود . البته در برنامه نیز اگر نیاز باشد می توان از این حافظه استفاده کرد . این حافظه نیز مشابه حافظه RAM در میکرو پروسسور ها می باشد ولی با این تفاوت که این حافظه درون چیپ خود میکرو می باشد و ماژول جداگانه ای خارج از میکرو برای آن در نظر گرفته نشده است . در میکرو کنترلر Atmega32 اندازه این حافظه 2KB می باشد . البته باید اشاره کنیم که با توجه به اینکه کلاً ساختار معماری میکرو کنترلرهای خانواده AVR ، معماری RISC ( Reduce Instruction Set Computer ) می باشد و تعداد رجیسترهای عمومی آن زیاد است و همچنین تعداد دستوراتی که نیازمند حافظه است تنها دستورات Load/Store است ، بیشتر از همین رجیستر ها برای قسمتهای مختلف برنامه استفاده می کنیم و کمتر به حافظه SRAM مراجعه می کنیم . در میکرو کنترلر Atmega32 تعداد 32 عدد رجیستر 8 بیتی وجود دارد که برای کاربردهای مختلف می توان در برنام از آنها استفاده کرد ما نیز در این پروژه از همین رجیسترها برای نگهداری متغییرهایمان استفاده کرده ایم تا هم سرعت اجرای برنامه افزایش یابد ( با توجه به اینکه سرعت نوشتن و خواندن در رجیسترها خیلی بیشتر از حافظه SRAM است ) و هم برنامه سازگاری بیشتر با ساختار RISC میکرو داشته باشد .
حافظه EEPROM :
همانطور که می دانیم حافظه EEPROM ( Electrical Erasable Programmable ROM ) نوعی حافظه قابل برنامه ریزی و پاک شدن می باشد که هم نوشتن و پاک شدن توسط جریان برق در آن انجام می شود . این حافظه نیز مانند دو نوع حافظه قبلی درون تراشه میکرو کنترلر قرار دارد البته بر خلاف حافظه Flash برای نوشته شدن درون آن نیاز به استفاده از دستگاه پروگرامر نیست و خود میکرو می تواند با فرامین که ما می نویسیم بر روی حافظه EEPROM بنویسد و یا بخواند . اندازه این حافظه نیز برای میکرو کنترلر Atmega32 برابر با 1KB می باشد .
نحوه برنامه ریزی حافظه FLASH :
همانطور که می دانیم میکرو کنترلر و یا میکرو پروسسور فقط قادرن دستورات را به زبان ماشین و هگزادسیمال بخوانند و یا اجرا کنند . بنابراین فایلی که برنامه ما در آن قرار می گیرد باید تبدیل به فایل HEX شود که این کار با استفاده از کامپایلرهای و اسمبلرهای موجود در بازار انجام میشود ، به عنوان مثال شرکت ATMEL و Intel کامپایلرهای و اسمبلرهایی که استاندارد و مطابق با محصولات خود می باشند را به بازار عرضه کرده اند که در زیر اندکی در مورد آنها توضح می دهیم:
Codevision AVR : در این کامپایلر به زبان C برنامه نوسی می شود و دارای توابع و کتابخانه های متعددی و پرکاربردی می باشد که با استفاده از آنها دیگر کاربر نیازی به درگیر شدن با مشکلات زبان سطح پایین و زبان اسمبلی میکروها ندارد . کارب