ماشین ابزار

ماشین ابزار
قالب وبلاگ
نويسندگان
آخرين مطالب
لینک دوستان

تبادل لینک هوشمند
برای تبادل لینک  ابتدا ما را با عنوان cnc و آدرس controllercnc.LXB.ir لینک نمایید سپس مشخصات لینک خود را در زیر نوشته . در صورت وجود لینک ما در سایت شما لینکتان به طور خودکار در سایت ما قرار میگیرد.





آموزشمیکروکنترلر AVR

مقدمه:

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

 

میکروکنترلرچیست؟ونحوهبرنامهریزیآنبهچهصورتاست.

ميكروكنترلر در واقع يك كامپيوتر تك تراشه اي مي باشد. كامپيوتر تك تراشه اي بدين معنا است كه كل سيستم كامپيوتر در داخل تراشه مدار مجتمع جاي داده شده است. ميكروكنترلري كه بر روي تراشه سيليكوني ساخته مي شود داراي خصوصياتي مشابه خصوصيات كامپيوترهاي شخصي استاندارد است. در واقع میکروکنترلر قطعه ای است که می توان با دادن فرمان آنرا به عملیات مختلف وا داشت یعنی یک کنترل کننده قابل برنامه ریزی است.

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

 

چرا AVR ؟

خانوادههایمختلفمیکروکنترلر:
امروزه خانواده های مختلفی از میکروکنترلر وجود دارد که موارد زیر نمونه هایی از آنها می باشد.
Intel شرکت 8048 و 8051
Motorola شرکت68HC11
Zilog شرکتZ80
Microchip شرکت PIC
Hitachi شرکت H8
Atmel شرکت AVR

 

در حالت کلی هیچ نوع میکروکنترلری را نمی توان بعنوان بهترین معرفی کرد چرا که هر میکروکنترلر، کاربردهای خاص خودش را دارد و بر اساس خصوصیات داخلی، می توان تنها برای موارد ویژه ای بعنوان بهترین انتخاب گردد . اما برخی ویژگی های خاص این میکرو عبارتند از :

1-داراي بهترين MCU براي حافظه فلش در جهان ! (MCU: Master Control Unit)

2-داراي سيستمي با بهترين هماهنگي

3-داراي بالاترين كارايي و اجرا در CPU (يك دستورالعمل در هر سيكل كلاك)

4-داراي كدهايي با كوچكترين سايز

5-داراي حافظه خود برنامه ريز

6-داراي واسطه JTAG كه با IEEE 1149.1 سازگار است.

 (IEEE: Institute of Electrical and Electronics Engineers.)

7-داراي سخت افزار ضرب كننده روي خود

8-داراي بهترين ابزارها براي پيشرفت و ترقي

9-داراي حالات زيادي براي ترفيع دادن يا Upgrade

میکروکنترلر های AVR دارای ویژگی های منحصر بفردی دیگری نیز نسبت به میکروکنترلرهای دیگر موجود هستند، از جمله AVR ها میکروکنترلرهایی 8 بیتی از نو ع CMOS با توان مصرفی پایین هستند که بر اساس ساختار پیشرفته RISC ساخته شده اند که با استفاده از این معماری عملیات خود را در یک کلاک سیکل انجام می دهند. خانواده AVR ، 32 رجیستر همه منظوره و مجموعه دستورات قدرتمندی را شامل می گردند. تمام این 32 رجیستر مستقیما به ALU متصل شده اند. بنابراین دسترسی به 2 رجیستر در یک کلاک سیکل هم امکان پذیر است. این ساختار موجب می گردد تا سرعت آنها نسبت به میکروکنترلرهای CISC بتواند تا 10 برابر هم افزایش یابد.

 

میکروکنترلرهای AVR ، میتوانند تا 10000 مرتبه پاک شده و مجددا برنامه ریزی شوند. این میکروها از تکنولوژی حافظه کم مصرف غیر فرار استفاده می کنند.

 

مقدمهایبرمیکروکنترلرهاباتمرکزبرمیکروکنترلرهای AVR

با پیشرفت علم و تکنولوژی در عرصه الکترونیک، تراشه هایی به عنوان میکروپروسسورها طراحی و تولید شدند تا قبل از سال 1971 میلادی اگر شخص طراح، قصد طراحی سیستمی را داشت باید سیستم مورد نظر را به شرکت های سازنده میکروپروسسور ارائه می داد تا طراحی و ساخته شود و یا اینکه مجبور بود با استفاده از IC هایی سیستم مورد نظر خود را طراحی کند. از این پس شرکت های سازنده میکروپروسسورها، از جمله شرکت Zilog تصمیم به ساخت میکروپروسسوری نمود که بتوان آن را در اختیار کاربر قرار داد و به هر صورت ممکن که می خواهد سیستم مورد نظر خود را طراحی کند و به همین دلیل میکروپروسسور Z80 را به بازار عرضه کرد و نرم افزار کامپایلر به زبان اسمبلی و پروگرمر آنرا نیز ارائه نمود. بطور کلی اگر یک شخص از میکروپروسسور 8 بیتی Z80 برای سیستمی استفاده کند، باید المان های جانبی CPU را نیز علاوه بر سخت افزار سیستم مورد نظر، در کنار میکروپروسسور Z80 قرار دهد.

 

 

 

 

 

شکل بلوک دیاگرام یک CPU بهمراه اجزای جانبی آن

 

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

 

درسال 1981 میلادی شرکت اینتل تراشه ای را به عنوان میکروکنترلر خانواده 8051 به بازار عرضه کرد که این میکروکنترلر دارای CPU 8 بیتی، تایمر یا کانتر، تبادل سریال ، حافظه SRAM و حافظه غیر فرار (Flash) داخلی بود. ابتدا این میکروکنترلر حافظه PROM بهره می برد که فقط یکبار قابل برنامه ریزی بود. سپس این میکروکنترلر را توسعه دادند و در آن از حافظه EPROM استفاده کردند مزیت استفاده از این نوع حافظه در آن است که می توان توسط پنجره شیشه ای که در بالای تراشه قرار داشت، در مجاورت نور ماورائ بنفش مانندنور خورشید قرار داده و بعد از چند دقیقه آنرا پاک کرد. با ادامه این روند شرکت اینتل تصمیم به استفاده از حافظه ای گرفت که بتواند با ولتاژ الکتریکی نوشته و پاک شود (حافظه Flash). این سری با شماره 89Cxx آغاز می شود که امروزه نیز مورد استفاده قرار می گیرد. شرکت های سازنده دیگری از جمله شرکت Atmel تحت لیسانس شرکت اینتل میکروکنترلر 8051 تولید کردند. شرکت Atmel بعدا نوع توسعه یافته 8051 را با سری AT89Sxx ارائه کرد.

 

این روند با ارائه میکروکنترلرهای جدیدی که دیگر شرکت های سازنده قطعه از جمله شرکت Microchip که میکروکنترلرهای PIC را تولید کرده است ادامه یافت تا در نهایت شرکت Atmel خانواده AVR را در سال 1997 به بازار عرضه نمود.

 

 

طراحیبرایزبانهای Basic و C

زبانهای Basic و C بیشترین استفاده را در دنیای امروز بعنوان زبانهای HLL (high level language) دارند. امروزه معماری بیشتر میکروها برای زبان اسمبلی طراحی شده و کمتر از زبانهای HLL حمایت شده است.

 

هدف Atmel طراحی معماری بود که هم برای زبان اسمبلی و هم زبانهای HLL مفید باشد. بطور مثال در زبانهای C و Basic می توان یک متغیر محلی به جای متغیر سراسری در داخل زیر برنامه تعریف کرد، در این صورت فقط در زمان اجرای زیر برنامه مکانی از حافظه RAM برای متغیر اشغال می شود در صورتی که اگر متغیری بعنوان سراسری تعریف گردد در تمام وقت مکانی از حافظه Flash را اشغال کرده است.

 

برای دسترسی سریعتر به متغیرهای محلی و کاهش کد، نیاز به افزایش رجیسترهای همه منظوره است. AVR ها دارای 32 رجیستر هستند که مستقیما به ALU (Arithmetic Logic Unit) متصل شده اند، و تنها در یک کلاک سیکل به این واحد دسترسی پیدا می کنند.

 

خانواده AVR بهسهدستهتقسیممیشوند:

  1. سری AT90S

این دسته، اعضای کلاسیک خانواده AVR را تشکیل می دهند و قابلیت های کمتری نسبت به دو دسته بعدی دارند و کمتر نیز ورد استفاده قرار می گیرند.

 

 

AT90S1200

AT90S2323

AT90S4433

AT90S8535

AT90S4434

AT90S2313

AT90S2343

AT90S8515

AT90S4414

AT90S8534

 

 

  1. سری ATtiny : این میکروکنترلرها در ابعاد کوچک 8، 20 و 28 پایه ای هستند و قابلیتهای بهتری نسبت به دسته اول دارند و اکثرا در سیستم هایی که نیاز به پورت بالا نیست استفاده می شوند.

 

ATtiny85

ATtiny28

ATtiny25

ATtiny15

ATtiny12

ATtiny10

ATtiny2313

ATtiny45

ATtiny26

ATtiny22

ATtiny13

ATtiny11

 

  1. سری ATmega : این دسته، امکانات بیشتری نسبت به دو دسته قبلی دارند . این نوع میکروکنرلرها قابلیت خود برنامه ریزی دارند و می توان آنها را با استفاده از مدارات اضافی برنامه ریزی کرد. در این کتاب سعی شده دسته ATmega برای آموزش انتخاب شود، زیرا تمامی سرفصل های آموزش AVR را شامل می شود.

 

ATMEGA103

ATMEGA128

ATMEGA1280

ATMEGA1281

ATMEGA8515

ATMEGA16

ATMEGA162

ATMEGA8535

ATMEGA165

ATMEGA88

ATMEGA168

ATMEGA670

ATMEGA169

ATMEGA6450

ATMEGA2560

ATMEGA2561

ATMEGA32

ATMEGA324

ATMEGA325

ATMEGA3250

ATMEGA325P

ATMEGA238

ATMEGA329

ATMEGA3290

ATMEGA48

ATMEGA64

ATMEGA640

ATMEGA644

ATMEGA645

ATMEGA649

ATMEGA6490

ATMEGA48

 

 

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

بطورکلی دو نوع معماری برای ساخت میکروکنترلرها وجود دارد:

  1. معماری CISC : (Complex Instruction Set Computer)

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

  1. معماری RISC (Reduced Instruction Set Computer)

هدف از این معماری کوتاه کردن زمان اجرا، با کاهش مجموعه دستورات در کامپیوتر است. در این معماری جدید تعداد دستورات کاهش پیدا کرد و از طرفی سرعت اجرایی دستورات تقریبا 10 برابر نسبت به معماری قبلی افزایش یافت و برنامه نویسی به زبان اسمبلی را قدری پیچیده و سخت کرد اما با وجود ساختار بهینه شده میکروکنترلرهای AVR با حافظه های ظرفیت بالا و همچنین استفاده از معماری RISC امکان برنامه نویسی به زبان سطح بالا مانند C و BASIC فراهم گردید.

 

فیوزبیتهایمیکروکنترلر ATMEGA32

فیوز بیت ها قسمتی از حافظه FLASH هستند که امکاناتی را در اختیار کاربر قرار می دهند. فیوز بیت ها با پاک کردن میکروکنترلر (ERASE) از بین نمی روند و می توانند توسط بیت های قفل مربوطه، قفل شوند. تغییر آنها فقط از طریق پروگرمر امکان پذیر است و برای تنظیم آنها نیاز به برنامه نویسی خاصی نداریم و موقع پروگرم کردن توسط ابزار نرم افزار Codevision یا BASCOM آنها را تنظیم و برنامه ریزی می کنیم. فیوز بیت ها با 0 برنامه ریزی و با 1 غیر فعال می شوند. توجه کنید که برنامه ریزی فیوزبیت ها باید قبل از قفل کردن تراشه صورت گیرد. میکرو کنترلر های AVR بسته به نوع قابلیتی که دارند دارای فیوز بیت های متفاوتی هستند. بعلت توجه بیشتر این کتاب به میکرو کنترلر ATMEGA32 ، به توضیح فیوز بیت های این میکرو می پردازیم. برای اینکه بدانید میکروکنترلری که با آن کار می کنید دارای چه ویژگی و چه فیوز بیت هایی می باشد. به Data Shit آن مراجعه نمایید. میکروکنترلر ATMEGA32 دارای 2 یایت فیوز بیت طبق جدول زیر می باشد.

 

 

 

 

 

 

فیوزبیت OCDEN (On Chip Debug Enable)

زمانیکه فیوز بیت ارتباط دهی JTAG فعال شده باشد و همچنین برنامه میکروکنترلر را قفل نکرده باشیم می توان با فعال کردن فیوزبیت OCDEN برنامه میکروکنترلر را به طور آنلاین در حین اجرا توسط مدار واسطی که از ارتباط سریال JTAG استفاده می کند توسط نرم افزار AVR Stdio مشاهده کرد. به این نوع آنالیز امولاتور (Emulator) یا شبیه ساز سخت افزاری گفته می شود. همچنین برنامه ریزی شدن این بیت به قسمتهایی از میکرو امکان می دهد که در مدهای SLEEP کار کنند. درهر صورت فعال کردن این بیت مصرف توان میکرو کنترلر را افزایش می دهد. این بیت بصورت پیش فرض برنامه ریزی نشده (1) است.

  • نکته در مورد واسط JTAG واسطه اي كه تسليم قانون IEEE 1149.1 است و مي تواند به صورت NVM برنامه ريزي كند يعني با استفاده از فيوزها و بيتهاي قفل هنگام قطع جريان برق داده ها از بين نروند. بيشتر براي ديباگ كردن آنچيپ و به منظور تست استفاده مي شود .

فیوزبیت JTAGEN : با فعال کردن این بیت میکرو را از طریق ارتباط دهی استاندارد IEEE (JTAG) می توان برنامه ریزی کرد. (این فیوز بیت بطور پیش فرض فعال است) . میکرو می تواند از این ارتباط برای برنامه ریزی خود استفاده نماید.

فیوزبیت SPIEN : با فعال کردن این فیوز بیت می توان میکرو را از طریق ارتباط دهی سریال SPI برنامه ریزی کرد. این فیوز بیت بطور پیش فرض فعال است.

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

فیوزبیت EESAVE : در زمان پاک شدن (ERASE) میکرو حافظه EEPROM ریست (پاک) می شود ولی در صورتیکه این بیت برنامه ریزی شود محتویات EEPROM در زمان پاک شدن حافظه FLASH محفوظ می ماند. این بیت بطور پیش فرض غیرفعال است.

فیوزبیتهای BOOTSZ0 و BOOTSZ1 : این دو بیت، مقدار حافظه اختصاص د اده شده BOOT را طبق جدول زیر تعیین می کنند. در زمان برنامه ریزی شدن فیوز بیت BOOTRST اجرای برنامه از آدرس حافظه BOOT آغاز خواهد شد.

 

 

جدول تعیین ظرفیت حافظه BOOT

 

فیوزبیت BOOTRST : این بیت برای انتخاب بردار Reset است اگر غیر فعال باشد آدرس بردار RESET از $0000 است و اگر این بیت فعال شود به آدرسی که فیوز بیت های BOOTSZ0 و BOOTSZ1 مشخص کرده اند تغییر می یابد.

فیوزبیت BODEN : مدار BROWN-OUT آشکارساز ولتاژ تغذیه است که اگر از 2.7 یا 4 ولت کمتر شود میکروکنترلر را ریست می کند. برای فعال کردن این مدار، باید فیوزبیت BODEN فعال گردد. این فیوز بیت بطور پیش فرض غیرفعال است.

فیوزبیت BODLEVEL : اگر فیوزبیت BODEN فعال و فیوز بیت BODLEVEL غیرفعال باشد با کاهش ولتاژ VCC کمتر از 2.7 ولت میکروکنترلر ریست می شود اما اگر فیوز بیت BODLEVEL را فعال کنیم آنگاه با کاهش ولتاژ VCC کمتر از 4 ولت میکروکنترلر ریست می شود. مطاابق جدول زیر سطح ولتاژ BROWN-OUT تعیین می شود. فیوز بیت BODLEVEL بصورت پیش فرض غیر فعال است.

 

 

  • فیوز بیت های SUT0 و SUT1 : این دو بیت، زمان راه اندازی (Start-up) را در هنگام متصل کردن منبع تغذیه مطابق جدول زیر تعیین می کنند .

فیوزبیتهای CLKSEL3،CLKSEL2،CLKSEL1،CLKSEL0

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

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

سیستم کلاک پالس در میکروهای AVR بسیار متنوع است. در شکل زیر سیستم توزیع و پخش کلاک و همینطور انواع نوسان ساز ها مشخص شده است. همانطور که در شکل مشخص است منبع کلاک توسط یک مالتی پلکسر, پالس لازم را به واحد کنترل کننده کلاک (AVR Clock Control Unit) اعمال می کند. در واقع کار این انتخاب کننده، انتخاب کردن یکی از نوسان سازهای تامین کننده کلاک ، برای قسمت های مختلف از جمله هسته cpu (CPU Core) یا ADC و یا … می باشد.

 

 

کلاک سیستم مطابق شکل بین قسمت های مختلف میکرو توزیع شده است.

  • کلاکغیرهمزمانتایمر_ CLK ASY : با این کلاک تایمر یا کانتر بصورت غیر همزمان توسط فرکانس اسیلاتور HZ32768 کار می کند حتی اگر سیستم در حالت SLEEP باشد.
  • کلاک I/O – CLK I/O : این کلاک برای تولید پالس ماژول های ورودی و خروجی مانند USART ، SPI ، شمارنده و وقفه ها بکار می رود.
  • کلاک ADC _ (CLKACD) : کلاک لازم را جهت قسمت مبدل آنالوگ به دیجیتال فراهم می کند که نوسط قسمت مبدل ADC می تواند بطور مجزا تقسیم گردد.
  • کلاک (CPU)_ CLKcpu : این پالی به هسته (اجزای درونی) CPU و SRAM داخلی اعمال می شود. توقف و به مکث بردن این کلاک باعث می شود که عملیات و محاسبات AVR انجام نگیرد.
  • کلاک FLASH _ CLKFLASH : کلاک لازم را برای حافظه فلش و EEPROM داخلی فرام می سازد. کلاک فلش معمولا با کلاک CPU فعال می گردد.

 

نکته آخر اینکه تایمر WATCHDOG از یک اسیلاتور مجزا داخلی (Watchdog Oscillator) برای تاکین کلاک خود استفاده می کند.

 

 

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

فیوز بیت های STU0 و STU1

این دو فیوز بیت زمان شروع (Start-up) را در موقع وصل تغذیه جدول 1-7 تعیین می کنند (بطور پیش فرض STU0 فعال و SUT1 غیرفعال است).

 

 

جدول 1-7 تنظیم فیوز بیت های Start-up

 

 

  • فیوزبیتهای CKSEL0 , CKSEL1 , CKSEL2 , CKSEL3

توسط این فیوز بیت ها نوع و مقدار فرکانس اسیلاتور را تعیین می کنیم. به طور پیش فرض فیوز بیت CKSEL0 غیرفعال و بقیه فعال هستند یعنی فرکانس 1MHZ داخلی انتخاب شده است. اگر بخواهیم فرکانس کاری اسیلاتور داخلی را تنظیم کنیم این فیوز بیت ها را طبق جدول 1-8 تنظیم می کنیم و اگر بخواهیم از کریستال خارجی استفاده کنیم باید این فیوز بیت ها را طبق جدول 1-9 در حالت یک یعنی غیرفعال قرار دهیم در تنظیم این فیوز بیت ها دقت نمایید بطور مثال اگر اشتباهی تمام این فیوز بیت ها را فعال کنیم طبق جدول 1-9 مد کلاک خارجی انتخاب می شود که در این حالت میکروکنترلر نه با نوسان داخلی و نه با کریستال خارجی کار می کند بلکه توسط کلاک خارجی که به پایه XTAL1 اعمال می شود کار می کند همچنین توجه کنید اگر شما از کریستال خارجی برای میکروکنترلر خود استفاده می نمایید باید حتما موقع پروگرمر کردن نیز کریستال به میکروکنترلر وصل باشد ولی در حالت استفاده از نوسان ساز داخلی نیازی به قرار دادن کریستال بیرونی ندارید.

 

 

جدول 1-8 تنظیم نوسان ساز کالیبره شده داخلی

 

جدول 1-9 تعیین منبع کلاک سیستم

نکته: اگر بطور تصادفی فیوز بیت ها را اشتباه تنظیم کرده اید و با قراردان کریستال خارجی، میکروکنترلر توسط پروگرامر شناسایی نشد، یک فرکانس 1MHZ توسط ی میکروکنترلر دیگری به پایه XTAL1 میکروکنترلر مذکور اعمال کنید و توسط پروگرامر ، فیوز بیت ها را صحیح تنظیم نمائید.

1-5 پورتهایورودیوخروجیمیکروکنترلر ATmega16

در میکروکنترلر AVR بسته به نوع قابلیت و بسته بندی که دارد دارای یک سری پایه های ورودی و خروجی است. ممکن است عموما یک پورت دارای 8 پایه نباشد بطور مثال پورت c میکرووکنترلر Atmega دارای 5 پایه می باشد. پورتهای تمام میکروکنترلرهای AVR می توانند به صورت ورودی و خروجی عمل کنند در حالت اولیه Reset تمام ورودی و خروجی ها در حالت Tri-state قرار می گیرند. Tri-state یعنی حالتی که پایه پورت امپدانس بالا می باشد. همچنین تمامی پایه های پورت ها مجهز به مقاومت بالاکش(Pull-up) داخلی هستند که می توانند در حالت ورودی فعال شوند. از آنجائیکه مقاومت بالاکش (Pull up) داخلی هستند که می توانند در حالت ورودی فعال شوند. از آنجائیکه جریان دهی پورت های میکروکنترلرهای قدیمی نمی توانستند حتی یک LED را روشن کنند شرکت های سازنده میکروکنترلرهای جدید سعی کرده اند که جریان دهی پایه های پورت ها را افزایش دهند بافر latch داخلی میکروکنترلرهای AVR می تواند در جریان دهی (Source) و جریان کشی (Sink) در حالت فعال، جریانی تا 20mA را تامین کند البته در حالت حداکثر می تواند جریان 40mA را تحمل کند. بنابراین به راحتی میتواند یک LED و یا سون سگمنت را جریان دهی کند. بطور کلی تمامی پورت های میکروکنترلرهای AVR دارای سه رجیستر تنظیم کننده به فرم زیر هستند:

1. DDRx.n : این رجیستر (Data Direction Register) برای تنظیم هر پایه از یک پورت به عنوان ورودی و خروجی در نظر گرفته شده است .اگر بیتی از این رجیستر یک شود نشان دهنده تعیین آن پایه به عنوان خروجی و اگر صفر شود آن پایه ورودی خواهد بود.

مثال:

تمام پایه های پورت A به عنوان خروجی // DDRA=0xFF;

تمام پایه های پورت A به عنوان خروجی // DDRB=0×00;

پایه PC.0 از پورت C به عنوان خروجی // DDRC.0=1;

پایه PC.0 از پورت C به عنوان ورودی // DDRC.0=0;

2. PORTx.n : این رجیستر (Port Data Register) برای ارسال دیتا به خروجی می باشد. هر موقع میکروکنترلر بخواهد داده ای را به خروجی بفرستد باید ابتدا رجیستر DDRx.n در حالت خروجی تنظیم شده باشد و سپس داده موردنظر در رجیستر PORTx.n قرار می گیرد.

تمام پایه های پورت B به عنوان خروجی // DDRB-0xFF;

عدد 46 دسیمال به خروجی پورت B ارسال می گردد// PORTB=46;

3. PINx.n : این رجیستر (Port Input Pin Address) برای دریافت دیتا از ورودی است هرگاه میکروکنترلر بخواهد داده ای را از ورودی بخواند باید رجیستر DDRx.n در حالت ورودی تنظیم شده باشد و سپس داده موردنظر از رجیستر PINx.n به صورت بیتی توسط دستورهای شرطی خوانده می شود. همچنین خواندن به صورت بایتی ، با یک متغیر 8 بیتی انجام می شود.

مثال

فعال کردن مقاومت Pull-up داخلی پایه PCS // PORTC.5=1;

تعیین پایه PCS به عنوان ورودی // DDRC.5=0;

اگر پایه PCS برابر صفر شد دستورالعمل ها اجرا شوند// if(PINK.5==0) {

دستورالعمل ها

}

تعیین تمام پایه های پورت C به عنوان ورودی // DDRC=0Î00;

خواندن دیتا از پورت C و قرار دادن آن در متغیر Data// Data=PINK;

در شکل 1-3 بلوک دیاگرام، یک پایه از پورت میکروکنترلر سری ATmega را مشاهده می فرمائید.

Comment

Pull-up

I/O

PUD

(in SFIOR)

PORTxn

DDxn

Tri-state(Hi-2)

No

Input

Î

0

0

Pxn wil source current ext pulled low

Yes

Input

0

1

0

Tri-state(Hi-2)

No

Input

1

1

0

Output Low(Sink)

No

Output

Î

0

1

Output High (Source)

No

Output

Î

1

1

جدول 1-10 نحوه ی پیکربندی پورت ها

 

کاربردهایدیگرپورتهایمیکروکنترلر ATmega16

پورت A

پایه های PA0 تا PA7 پورت A را تشکیل می دهند. در حالت عادی می توان از این پایه ها به عنوان ورودی و خروجی استفاده کرد. کاربرد بعدی پایه های پورت A به عنوان ورودی مالتی پلکسر مدل آنالوگ به دیجیتال می باشند. توجه کنید در صورتی که شما به طور مثال از کانال ADC0 استفاده می کنید می توانید از دیگر پایه های پورت A برای کاربردهای دیگر به عنوان ورودی و خروجی استفاده کنید اما بهتر است در هنگام عمل تبدیل مبدل آنالوگ به دیجیتال داده ای به خروجی پورت A ارسال نشود برای آشنائی بیشتر با عملکرد دوم این پورت می توانید به فصل مبدل آنالوگ به دیجیتال مراجعه نمائید.

 

Alternate Function

Port Pin

ADC7(ADC input channel 7)

PA7

ADC6(ADC input channel 6)

PA6

ADC5(ADC input channel 5)

PA5

ADC4(ADC input channel 4)

PA4

ADC3(ADC input channel 3)

PA3

ADC2(ADC input channel 2)

PA2

ADC1(ADC input channel 1)

PA1

ADC0(ADC input channel 0)

PA70

جدول 1-11 کاربردهای دیگر پورت A

 

پورت B

پایه های PB0 تا PB7 پورت B را تشکیل می دهند. در حالت عادی ی توان از این پایه ها به بعنوان ورودی و خروجی استفاده کرد. عملکرد بعدی این پورت ارتباط دهی سریال SPI، وقفه خارجی دو، ورودی مقایسه کننده آنالوگ، خروجی مد مقایسه ای تایمر صفر و ورودی کانتر صفر و یک می باشد که به توضیح آنها می پردازیم.

 

جدول 1-7 کاربردهای دیگر پورت B

 

پایه PB0(XCK/T0)

اگر کانتر صفر استفاده شود ورودی کانتر صفر پایه T0 خواهد بود همچنین اگر USART در مد سنکرون کار کند، پایه XCK به عنوان خروجی کلاک همزمان کننده USART عمل می کند.

پایه PB1(T1)

اگر کانتر یک استفاده شود ورودی کانتر یک پایه T1 خواهد بود.

پایه PB2(INT2/AIN0)

اگر وقفه خارجی دو توسط رجیسترهای مربوطه فعال شود آنگاه پایه INT2 به عنوان ورودی وقفه خارجی دو عمل می کند. همچنین اگرمقایسه کننده آنالوگ داخلی فعال شده باشد پایه AIN0 به عنوان ورودی مثبت OPAMP داخلی عمل می کند.

پایه PB3(OC0/AIN1)

در صورتی که از مد مقایسه ای تایمر صفر استفاده کنیم و خروجی مقایسه ای فعال شده باشد پایه OC0 به عنوان خروجی مد مقایسه ای تایمر صفر و در مد PWM تایمر صفر به عنوان خروجی سیگنال PWM تولید شده عمل می کند. همچنین اگر مقایسه کننده آنالوگ داخلی فعال شده باشد پایه AIN1 به عنوان ورودی منفی OPAMP داخلی عمل می کند.

پایه PB4(SS)

در شرایطی که از ارتباط دهی SPI استفاده کنیم و میکروکنترلر در حالت Slave باشد پایه SS به عنوان ورودی انتخاب Slave عمل می کند.

پایه PB5(MOSI)

اگر از ارتباط دهی سریال SPI استفاد ه کنیم پایه MOSI به عنوان خروجی در حالت Master و به عنوان ورودی در حالت Slave عمل می کند. در حالت ورودی برای Slave تنظیم DDRB.5 تاثیری بر عملکرد این پایه ندارد.

پایه PB6(MISO)

اگر از ارتباط دهی سریال SPI استفاده کنیم پایه MISO به عنوان ورودی در حالت Master و به عنوان خروجی در حالت Slave عمل می کنند. در حالت ورودی برای Master تنظیم DDRB.6 تاثیری بر عملکرد این پایه ندارد.

پایه PB7(SCK)

در ارتباط دهی SPI پایه SCK به عنوان خروجی Master و به عنوان ورودی کلاک Slave عمل می کند. زمانی که Slave انتخاب شود این پایه ورودی خواهد بود و اگر Master انتخاب شود باید توسط DDRB.7 جهت داده تنظیم گردد.

پورت C

پایه های PC0 تا PC7 پورت C را تشکیل می دهند. در حالت عادی می توان از این پایه ها به عنوان ورودی و خروجی استفاده کرد. عملکرد بعدی این پورت ارتباط دهی سریال TW1 ، ارتباط دهی استاندارد JTAG و کریستال پالس ساعت واقعی RTC تایمر دو است.

 

Alternate Function

Port Pin

TOSC2(Timer Oscillator Pin2)

PC7

TOSC2(Timer Oscillator Pin1)

PC6

TDI(JTAG Test Data In)

PC5

TOO((JTAG Test Data Out)

PC4

TMS((JTAG Test Mode Select)

PC3

TCK((JTAG Test Clock)

PC2

SDA(Twc-wire Seriall Bus Data Input/Output Line)

PC1

SCL(two-wire Serial Bus Clock Line)

PC0

جدول 1-13 کاربردهای دیگر پورت C

 

پایه PC0(SCL)

زمانی که از ارتباط دهی سریال دو سیمه TW1 استفاده شود. پایه SCL ب عنوان کلاک عمل می کند. این پایه کلاک استاندارد I2C است.

پایه PCI(SDA)

زمانی که از ارتباط دهی سریال دو سیمه TW1 استفاده شود، پایه SDA به عنوان خط دیتا عمل می کند. این پایه، دیتا استاندارد I2C است.

پایه PC2(TCK)

در ارتباط دهی استاندارد JTAG که برای برنامه ریزی میکروکنترلر نیز استفاده می شود پایه TCK به عنوان کلاک تست به صورت سنکرون عمل می کند. توجه کنید در صورت فعال بودن ارتباط دهی JTAG نمی توان از این پایه به عنوان ورودی و خروجی استفاده کرد. برای غیرفعال این ارتباط دهی به بخش توضیح فیوز بیت ها مر اجعه کنید.

پایه PC3(TMS)

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

پایه PC4(TDO)

در ارتباط دهی JTAG پایه TDO به عنوان خروجی داده سریال عمل می کند و در صورت فعال بودن JTAG دیگر نمی توان از این پایه به عنوان ورودی و خروجی استفا ده کرد.

پایه PC5(TDI)

در ارتباط دهی JTAG پایه TDI به عنوان ورودی داده سریال عمل می کند و در صورت فعال بودن JTAG دیگر نمی توان از این پایه به عنوان ورودی و خروجی استفاده کرد.

پایه PC6(TOSC1)

در صورتی که بخواهیم از RTC تایمر دو استفاه کنیم باید از کریستال 32.768KHZ پالس ساعت استفاده کنیم پایه TOSC1 به عنوان پایه اول اسیلاتور پالس زمان واقعی می باشد. در صورت فعال شدن بیت AC2 در رجیستر ASSR، تایمر دو، پالس خود ر ا از کریستال پالس ساعت تامین می کند و دیگر نمی توان از این پایه در این حالت، به عنوان ورودی و خروجی استفاده کرد.

پایه PC7(TOSC2)

در صورتی که بخواهیم از RTC تایمر دو استفاده کنیم باید از کریستال 32.768KHZ پالس ساعت استفاده کنیم پایه TOSC2 به عنوان پایه دوم اسیلاتور پالس زمان واقعی می باشد. در صورت فعال شدن بیت AC2 در رجیستر ASSR، تایمر دو ، پالس خود را از کریستال پالس ساعت تامین می کند و دیگر نمی توان از این پایه در این حالت، بعنوان ورودی و خروجی استفاده کرد.

پورت D

پایه های PD0 تا PD7 پورت D را تشکیل می دهند در حالت عادی می توان از این پایه ها به عنوان ورودی و خروجی استفاد ه کرد عملکردهای بعدی این پورت ارتباط دهی سریال USART، وقفه های خروجی صفر و یک، خروجی های مد مقایسه ای تایمر یک و خروجی مد مقایسه ای تایمر 2 و ورودی Capture تایمر یک می باشد.

Alternate Function

Port Pin

OC2(Timer/Counter2 Output Compare Match Output)

PD7

ICP

PD6

OC1A

PD5

OC1B

PD4

INT1 (External Interrupt 1 Input)

PD3

INT0 (External Interrupt 0 Input)

PD2

TXD(USART Output Pin)

PD1

RXD(USART Input Pin)

PD0

جدول 1-14 کاربردهای دیگر پورت D

 

پایه PD0(RXD)

در ارتباط دهی سریال USART پایه RXD بدون در نظر گرفتن DDRD.0 به عنوان ورودی داده سریال پیکربندی می شود.

پایه PD1(TXD)

در ارتباط دهی سریال USART یا به TXD بدون در نظر گرفتن DDRD.1 به عنوان خروجی داده سریال پیکربندی می شود.

پایه PD2(INT0)

اگر وقفه خارجی صفر فعال شده باشد پایه INT0 به عنوان منبع ورودی وقفه صفر عمل می کند.

PD3(INT1)

اگر وقفه خارجی یک فعال شده باشد پایه INT1 به عنوان منبع ورودی وقفه یک عمل می کند.

PD4(OC1B)

استفاده از مد مقایسه ای تایمر یک و فعال کردن خروجی مقایسه ای، پایه OC1B به عنوان دوم مقایسه ای تایمر یک عمل می کند همچنین در مد PWM تایمر پک، این پایه می تواند سیگنال PWM تولید شده باشد.

PD5(OC1A)

استفاده از مد مقایسه ای تایمر یک و فعال کردن خروجی مقایسه ای، پایه OC1A به عنوان اول مقایسه ای تایمر یک عمل می کند همچنین در مد PWM تایمر یک این پایه می تواند سیگنال PWM تولید شده باشد.

PD6(ICP

حد تسخیر کننده یعنی مد Capture تایمر یک فعال شده باشد پایه ICP به عنوان ورودی Capture یک عمل می کند.

PD7(OC2)

استفاده از مد مقایسه ای تایمر 2 و فعال کردن خروجی مقایسه ای، پایه OC2 به عنوان مقایسه ای تایمر دو عمل می کند. همچنین در مد PWM تایمر دو، این پایه می تواند خروجی PWM تولید شده باشد.

 

 

1-6 تغذیهمناسبجهتبایاسمیکروکنترلر

VCC و GND تغذیه میکروکنترلر را تامین می کنند میکروکنترلرهای AVR همان طور که در میکروکنترلرهای ATmega16 بیان کردیم می توانند با ولتاژ 2.7v تا 5.5v برای نوع L و ولتاژ 4v تا 5.5v برای کار کنند اما از آنجائی که اکثر تراشه ها و المان هایی نظیر LCD و آی سی های دیجیتال و ولتاژ 5v استفاده می کنند بنابراین به طور استاندارد تغذیه میکروکنترلر را 5 ولت انتخاب و چون ولتاژ بیشتر از 5 ولت، باعث سوختن میکروکنترلر می شود برای تغذیه آن از رگولاتور 280 استفاده می شود البته باید نویز محیط را نیز در نظر بگیریم.

منبع تغذیه DC ورودی 9 ولتی استفاده کرده ایم زیرا ولتاژ ورودی رگولاتور بهتر است 3 ولت از ولتاژ نامی باشد همچنین ورودی را می توان 12 ولت انتخاب کرد اما این امر باعث افزایش و گرما در رگولاتور می شود. استفاده از دیود برای حافظت رگولاتور در برابر پلارینه معکوس باشد. سلف 1MH به همراه خازن عدسی 10Nf به عنوان فیلتر حذف نویز ورودی رگولاتور عمل کند و خازن عدسی 100nF نویزهای تغذیه 5 ولت خروجی رگولاتور را حذف می کند و خازن الکترولیتی 100uf در ورودی رگولاتور به صاف کردن تغذیه ورودی کمک می کند و همچنین خازن الکترولیتی 10uf خروجی رگولاتور باعث جلوگیری از افت ولتاژ تغذیه

5 ولت می شود

 

 

.

 

در صورتی که بخواهیم از تغذیه با ورودی AC برای میکروکنترلر خود استفاده نمائیم باید طبق مدار شکل 1-5 عمل کنیم تمام توضیحات داده شده در مدار قبلی ، در این مدار نیز صدق می کند. تنها تفاوت این مدار وجود ترانس کاهنده 220 ولت به 9 ولت می باشد که توسط این دیود به صورت تمام موج یکسو می باشد و توسط خازن شیمیایی 1000mF صاف می گردد.

 

 

 

توجه) رگولاتورهای موجود در بازارهای الکترونیکی می توانند تا 500mA حداکثر جریان بدهند در صورتی که بخواهیم جریانی بیشتر از حدمجاز استفاده کنیم می توانیم از یک ترانزیستور و با موازی کردن دو رگولاتور و یا رگولاتورهای با جریان بیشتر و یا از منبع تغذیه سوئیچینگ استفاده کنیم. همچنین برای استفاده جریانی بیشتر از 100mA از خروجی رگولاتور مدار فوق، باید از گرماگیر (Heat Sink) استفاده کنیم ابعاد هیت سینک را 2Î2 سانتی متر انتخاب کنید.

 

ساختار داخلی میکروکنترلر ATmega16

همان طور که در بلوک دیاگرام شکل 1-6 مشاهده می کنید اجزای درونی میکروکنترلر توسط باس های داخلی به هم متصل شده اند و یک بخش از این بلوک دیاگرام با خط چین با نام AVR CPU مشخص شده است که در واقع پردازنده اصلی AVR می باشد. در این قسمت قصد داریم اجزای تشکیل دهنده شمارنده برنامه، اشاره گر پشته، رجیستر دستورات، آشکارساز دستورات، رجیسترهای X، Y و Z رجیسترهای همه منظوره واحد محاسبه و منطق (ALU) و رجیستر وضعیت از اجزای تشکیل دهنده CPU میکروکنترلر AVR هستند.

 

میکروکنترلر AVR از معماری RISC استفاد ه می کند و برای کارایی بهتر از ساختار Harvard و همچنین از حافظه ها و باس های جداگانه برای انتقال داده استفاده می کند دستورات به یک سطح pipelining اجرا می شوند و هنگامی که یک دستور در حال اجرا می باشد دستور بعدی از حافظه برنامه pre-fetched می شود به این روش هر دستور تنها در یک کلاک سیکل اجرا می شود.

 

 

شکل1-6 بلوک دیاگرام داخلی میکروکنترلرATmega16

 

کار اصلی یک CPU دسترسی به حافظه، محاسبات ریاضی و منطقی، کنترل وسایل جانبی و بررسی وقفه های هر یک از قسمت ها می باشد.

 

 

 

شکل1-7 بلوک دیاگرام ساختار میکروکنترلرهای AVR

 

شمارندهبرنامه PC (Program Counter)

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

اشارهگرپشته SP (Stack Pointer) :

در میکروکنترلر AVR اشاره گر پشته از دو رجیستر 8 بیتی استفاده می کند. اشاره گر پشته برای ذخیره موقت اطلاعات در دستورالعملهای فراخوانی CALL ، PUSH و POP و متغیرهای محلی، روتین های وقفه و توابع استفاده می شود.

رجیستردستورات (Instruction Registe)

CPU میکروکنترلر برای فهمیدن انجام یک دستورالعمل از کد ماشین استفاده می کند و به هر کدام از این کدها یک سمبل در زبان اسمبلی اختصاص داده می شود. رجیستر دستورات تمامی دستورهای اسمبلی در نظر گرفته شده از طرف شرکت سازنده Atmel را شامل می شود.

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

شمارنده برنامه افزایش می یابد و کد هر دستور توسط CPU خوانده می شود و با توجه به رجیستر دستورات، خوانده شده آشکار می گردد و CPU متوجه می شود که کد دستور به چه معنی و مفهومی است.

رجیسترهایهمهمنظوره (General Purpose Register)

میکروکنترلرهای AVR دارای 32 رجیستر همه منظوره هستند این رجیسترها قسمتی از حافظه SRAM میکروکنترلر می باشند که اکثر دستورات اسمبلی AVR مستقیما با این رجیسترها دسترسی دارند یک کلاک سیکل اجرا می شوند.

R0

R1

R2

000

R13

R14

R15

R16

R17

000

R26

R27

R28

R29

R30

R31

 

شکل 1-8 رجیسترهای همه منظوره CPU میکروکنترلرهای AVR

رجیسترهای X،Y و Z

وظیفه این سه رجیستر که البته از ترکیب رجیسترهای R26 تا R31 بوجود می آیند اشاره گر 16 بیتی آدرس دهی غیرمستقیم فضای داده هستند و بسیاری از دستورات اسمبلی AVR با این سه رجیستر عمل می کنند.

 

 

 

 

0 7

0 7

 

 

0 7

0 7

 

 

<table border="0" cel

نظرات شما عزیزان:

نام :
آدرس ایمیل:
وب سایت/بلاگ :
متن پیام:
:) :( ;) :D
;)) :X :? :P
:* =(( :O };-
:B /:) =DD :S
-) :-(( :-| :-))
نظر خصوصی

 کد را وارد نمایید:

 

 

 

عکس شما

آپلود عکس دلخواه:





[ یک شنبه 29 دی 1392برچسب:میکرو ,آموزش میکرو ,AVR, ] [ 17:17 ] [ نویسنده ]
.: Weblog Themes By Pichak :.

درباره وبلاگ

به وبلاگ من خوش آمدید
فروردين 1393 اسفند 1392 بهمن 1392 دی 1392
امکانات وب

نام :
وب :
پیام :
2+2=:
(Refresh)

<-PollName->

<-PollItems->

خبرنامه وب سایت:





آمار وب سایت:  

بازدید امروز : 75
بازدید دیروز : 1
بازدید هفته : 76
بازدید ماه : 115
بازدید کل : 54962
تعداد مطالب : 99
تعداد نظرات : 4
تعداد آنلاین : 1


افکت عکس {{{{{

کد ِکج شدَنِ تَصآویر

کداهنگ برای وبلاگ

}}}} اوقات شرعی {{{{ }}} ساعت {{{{
}}} {{{ بازدید Top java codes }}} جست وجو {
Google

در اين وبلاگ
در كل اينترنت
 }