آموزش سخت افزار میکروکنترلر Pinout و کار با رجیسترهای AVR
در قسمت قبلی آموزش AVR با آموزش معماری داخلی AVR در خدمت شما عزیزان بودیم. در این جلسه قصد داریم بیشتر به سختافزار میکروکنترلر، Pinout و کار با رجیسترهای آن بپردازیم و هم چنین اولین و سادهترین پروژه یعنی روشنکردن LED با میکروکنترلر AVR را بررسی کنیم.
ما در این سری آموزشهایی AVR قصد داریم، با میکروکنترلرهای سری ATMEGA16/32 کارکنیم که Pinout آن بهصورت زیر است:
اعداد ۱۶ و ۳۲ بیانگر ظرفیت فلش میکرو هستند، به این معنا که در ATMEGA16 ظرفیت فلش 16KB است. اما در برخی از میکروها همه عدد نوشته شده بیانگر ظرفیت فلش نیست. به طور مثال در ATMEGA644 تنها دو رقم اول ظرفیت فلش را نشان میدهند.
حداقل اتصالات لازم برای راهاندازی ATMEGA32
طبق دیتاشیت میکرو و تصویر Pinout آن که در شکل1 میبینید، برای راهاندازی ATMEGA32 باید پایههای شماره 11 و 31 به زمین متصل شوند. هم چنین پایههای تغذیه VCC و AVCC که پایههای شماره 10 و 30 هستند، باید به +5V متصل شوند. تغذیه AVCC برای پایههای مربوط به PORTA (پایههای 33 تا 40) که ورودیهای ADC هستند، به +5V متصل میشود.
نکته ۱: حتی اگر از قسمت آنالوگ استفاده نمیشود، باید حتماً تغذیه AVCC وصل شود.برای تأمین نوسان میتوان از کریستال داخلی یا خارجی استفاده کرد. بهصورت پیشفرض کلاک ATMEGA32 بر روی 1MHz داخلی تنظیم شده است.
نکته ۲:برای کاهش نویز، تغذیه را از طریق فیلتر پایین گذر AC به پایه مربوطه وصل کنید.پایههای پروگرام کردن میکرو میتواند بهصورت parallel باشند، یعنی آی سی روی پروگرامر قرار گرفته باشد یا میتواند بهصورت سریال پروگرام شود. هر دو روش اتصالات خاص خود را دارند که در قسمتهای بعد به آن خواهیم پرداخت.
فعلاً فرض بر این است که میکرو بهصورت اصولی پروگرام شود.
روشنکردن LED با کد ساده
طبق آنچه در اتصالات لازم برای راهاندازی میکرو گفته شد، سختافزاری ساده به شکل زیر مشاهده میکنید که برای روشنکردن LED لازم است .
در شکل بالا LED به پایه PB0 در پورت B متصل است. پس کدنویسی ما بر روی این پایه انجام خواهد شد. پورتهای میکرو که در شکل ۱ میبینید، همگی ۸ بیتی هستند.
همانطور که در جلسات قبل گفته شد، ارتباط با سختافزار و CPU از طریق خواندن و نوشتن بر روی آدرسهای مشخصی میسر میشود که در شکل زیر میبینید.
۳ بایت مختلف در شکل زیر هستند که برای ارتباط با PORTB که از پایههای 1تا 8 میکرو هستند استفاده میشوند.
در جلسات قبل گفتیم که نوشتن بر روی این رجیسترها بر روی سختافزار تأثیر میگذارد.
نکته ۳: تغییردادن آدرس رجیسترها امکانپذیر نیست.رجیستر DDRXX
اگر بخواهیم از پورتهای ۸ بیتی مقداری خوانده شود باید آن پورت مدنظر خروجی تعریف شود و هم چنین اگر بخواهید بر روی یک پورت مقداری را بنویسید باید پورت را ورودی تعریف کنید. انجام این کار توسط DDRX امکانپذیر است.
به طور پیشفرض تمامی پورتها در وضعیت in یعنی ورودی تعریف شدهاند و اگر بخواهید پورتی را خروجی تعریف کنید بهراحتی با اجرای خطوطی از کد پورت مدنظر شما out تعریف خواهد شد.
گفتیم که رجیسترها ۸ بیتی هستند پس اگر در کمارزشترین بیت DDRX مقدار 1 نوشته شود بیت متناظر با DDRX در پورتX خروجی تعریف میشود.
با یک مثال ساده این موضوع رو براتون توضیح میدم. در شکل ۲ کدنویسی بر روی پایهی PB0 انجام میشود، پس برای روشنکردن LED این بیت PB0 از پورت B باید خروجی تعریف شود. کافی است شما در کمارزشترین بیت در رجیستر DDRB مقدار 1 را بنویسید.
و اگر در PB0 مقدار 0 نوشته شود، بیت، ورودی تعریف میشود. پس جهت پورتها به لحاظ ورودی یا خروجی بودن از طریق آدرس ۳۷ هگزادسیمال در SRAM مشخص میشود.
رجیستر PORTX
LED در شکل 2 با High شدن پورت روشن میشود. یعنی توسط خطوط برنامه باید PORTB=1 شود تا LED روشن شود.
اگر PORTB=0 تعریف شود، پین بهصورت Low ظاهر خواهد شد.
پس یک تناظر یکبهیک به لحاظ وضعیت High یا Low بودن با پینهای واقعی وجود دارد.
رجیستر PINX
CPU از طریق PINB از وضعیت فیزیکی پورت اطلاع پیدا میکند که آیا پورت High یا Low است؟
نکته ۴: اگر در DDRX پینی ورودی تعریف شود (مقدار ۰ در آن نوشته شود)، و رجیستر PORTX=1 تعریف شود، بهصورت داخلی در آن پورت یک مقاومت Pull Up فعال میشود.در AVRهای عادی امکان فعالکردن Pull Down وجود ندارد.
کامپایلرها و زبانهای برنامهنویسی AVR
زبانهای متفاوتی برای برنامهنویسی میکروکنترلر AVR موجود است مثل : Basic , C , Pascal , …. دو مورد اول رایجتر است.
کامپایلر Basic، بسکام است و کامپایلرهای زبان C، کدویژن(Codevision) ، inAVR ،AVRGCC و IAR است. قویترین و حرفهایترین ابزار IAR است. مثالهای ذکر شده در قسمتهای بعد به دو زبان Basic و C ارائه خواهند شد.
در قسمتهای بعد بیشتر وارد محیط برنامهنویسی خواهیم شد.
- آموزش کاربردی AVR – بخش اول – میکروکنترلر و میکروپروسسور
- آموزش کاربردی AVR – قسمت دوم-آشنایی با معماری داخلی AVR
- آموزش کاربردی AVR – قسمت چهارم- برنامه های کدویژن و بسکام مرتبط با بخش سوم
- آموزش کاربردی AVR – قسمت پنجم – خلاصهای از کلیه امکانات موجود در AVR
- آموزش کاربردی AVR – قسمت ششم- نوشتن برنامههایی با کامپایلرهای کدویژن به منظور پیاده سازی یک دیکدر BCD to 7segment