آموزش, توصیه شده, دوره آموزش جامع میکروکنترلر AVR, مقاله های سیسوگ

رجیسترهای پورت میکروکنترلر AVR | آموزش میکروکنترلر AVR قسمت سوم

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

آموزش جامع میکروکنترلر AVR – قسمت سوم ;

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

سیسوگ در قسمت دوم مجموعه آموزش میکروکنترلر AVR درباره کلاک میکروکنترلر، ارتباط CPU با ورودی، خروجی‌ها و بلوک I/O صحبت کرد. در این قسمت با  ورودی ، خروجی پورت‌های میکروکنترلر بیشتر آشنا می‌شوید.

ارتباط CPU با سخت افزارهای جانبی از طریق نوشتن دستور در آدرس‌های مشخصی میسر می‌­شود.

مجموعه آموزش میکروکنترلر AVR روی دو شماره میکروکنترلر ATMEGA16 و ATMEGA32 تمرکز می‌کند.

پایه های atmega32 و atmega16

تصویر زیر یک ATMEGA16 را نشان می‌دهد. شما می توانید پایه های atmega16  و atmega32 در این تصویر مشاهده کنید.

Atmega16

ATMega32 Microcontroller Pin Diagram, Pin Configuration, Features, Replacements & Datasheet

تفاوت بین ATMEGA16 و ATMEGA32 در ظرفیت فلش آن‌هاست. ظرفیت فلش در ATMEGA16 برابر 16 کیلوبایت و در ATMEGA32 برابر 32 کیلوبایت می‌­باشد.

حداقل اتصالات برای راه‌­اندازی میکروکنترلر به صورت زیر می­‌باشد:

راه اندازی میکروکنترلر ATMEGA16

در شکل بالا پایه شماره 11 و 31 به زمین متصل شده و پایه شماره 10 و 30 به تعذیه +5 ولت وصل شده است. با مراجعه به اطلاعات پایه‌های ATMEGA16 پی میبریم که پایه 10،VCC و پایه 30،AVCC است، A به معنای آنالوگ است و تغذیه بخش آنالوگ میکروکنترلر را بر عهده دارد.

تغذیه AVCC مربوط به پورت A است، که ورودی‌های (ADC (ANALOG TO DIGITAL CONVERTER در این بخش هستند. هم‌چنین برای کاهش نویز نیز از یک فیلتر پایین گذر LC متصل به AVCC استفاده می‌شود. نکته­­­ مهم دیگر این است که در مواقعی که حتی از قسمت آنالوگ استفاده نمی­‌شود هم باید تغذیه AVCC را متصل نمود، چون ممکن است در کارکرد میکروکنترلر اختلال ایجاد کند.

پایه‌های دیگری در میکروکنترلر برای ایجاد نوسان به وسیله کریستال خارجی وجود دارند که با توجه به اینکه مقدار پیش فرض کلاک ATMEGA32 برابر 1MHZ داخلی هست در شکل بالا برای ساده‌تر بودن شکل آورده نشده است.

رجیستر کردن پورت

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

حال میخواهیم ببینیم که چطور می­‌شود یک LED متصل به یکی از پایه‌های میکروکنترلر که به صورت سری با یک مقاومت متصل شده است را روشن کرد؟

با توجه به شکل زیر

فضای SRAM

سه بایت مختلف در شکل بالا به نام‌های PINB, DDRB, PORTB کشیده شده است،که رجیسترهایی مورد نیاز برای ارتباط با PORTB هستند، PORTB از پایه شماره 1 تا 8 میکروکنترلر را شامل می‌شود. حال می‌خواهیم روی PORTB.1 که کم ارزش‌ترین پورت هست با نوشتن برنامه تاثیر بگذاریم و آن را روشن کنیم و روشن بماند.

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

DDRx : برای هشت پین فیزیکی موجود در هر پورت،8 محل در رجیستر DDRx در نظر گرفته شده است که هر کدام از این محل‌ها متناظر با پین مخصوص به خود است. برای مثال   DDRA.1≈PORTA.1

جهت پورت‌ها را به لحاظ ورودی و خروجی از طریق آدرس 37$ در فضای SRAM تعریف می‌کنیم.

بعد از اینکه جهت پورت مشخص شد می‌خواهیم روی وضعیت خروجی بحث کنیم، فرض می‌­کنیم پین یا پین‌هایی از یک پورت خروجی تعریف شده است، می‌خواهیم وضعیت خروجی آن به عبارتی HIGH/LOW بودن یا  0 و 1 بودن آن را تعیین کنیم. بایت بعدی که تحت عنوان PORTB در شکل بالا نمایش داده شده است همین وظیفه را بر عهده دارد، یعنی به همین طریقی که یک تناظر یک یه یکی در بایت بالایی با پین‌های فیزیکی و واقعی به لحاظ جهت (ورودی و خروجی) وجود دارد، در بایت بعدی یک تناظر یک به یک به لحاظ مقدار یا وضعیت یا 0 و 1 وجود دارد، حال اگر بخواهیم LED  روشن شود باید توجه داشته باشیم که با توجه به سخت‌افزار وقتی وضعیت پایه در حالت HIGH است روشن می­‌شود پس باید یک 1 توسط خطوط برنامه به صورت زیر نوشته شود.

برنامه روشن کردن LED

برای توضیح بیشتر شکل بالا اگر DDRB.0=1 و  PORTB.0=1 باشد پین مربوطه خروجی است و وضعیت آن HIGH خواهد شد.

در حالت بعدی فرض می‌کنیم  DDRB.0=1 و  PORTB.0=0 باشد پس معنی آن این است که پین خروجی است ولی وضعیت آن LOW می‌باشد.

پس برای روشن شدن LED نیاز است که 1=DDRB.0 و 1=PORTB.0  باشند.

PINB : در واقع CPU از طریق رجیستر PINB می­‌تواند از وضعیت آن اطلاع پیدا کند که  0 یا 1 است. وقتی که پورت ورودی تعریف می‌­شود برای خواندن وضعیت سیگنا‌‌‌‌‌ل‌­هایی که به پورت اعمال می‌­شوند و یا از خروجی‌ها تامین می­‌شوند و به این ورودی‌ها متصل شده‌­اند PINB قرائت شود. البته باید توجه داشت که برای هر پورتی حرف مربوط به خود نوشته می‌شود مثلا برای PORTA،PINA و …

نکته­ دیگر اگر در رجیستری که متناظر با جهت است (DDRB) پینی ورودی تعریف شود یعنی DDRB.0=0 باشد و PORTB.0=1 باشد به صورت داخلی در آن پورت یک مقاومت داخلی PULL UP فعال ­می­‌شود.

مقاومت PULL UP :  یک پورت اگر ورودی باشد و به جایی متصل نباشد مکانی برای تاثیر گذاری نویز است. بنابراین پورتها را با بسته به وضعیت و کاربردی که دارند یا با یک مقاومتی PULL UP می‌کنند یا با یک مقاومتی PULL DOWN می‌کنند، که در سخت‌افزار داخلی AVR امکان فعال کردن PULL UP داخلی وجود دارد.

به 3 روش کلی می‌توان از ابزار برنامه‌نویسی استفاده کرد: شیوه­ اول برنامه‌نویسی به زبان اسمبلی می‌­باشد که از لحاظ مفهومی خیلی مفید هست و با توجه به اینکه استفاده کننده‌های خاصی دارد و در کاربردهای ویژه‌ای از آن استفاده می­‌شود در این آموزش استفاده نمی­‌شود.

کامپایلرهای مختلفی برای AVR با زبان‌های مختلفی نوشته شده است مانند زبان بیسیک، زبان C ،پاسکال و …که زبان C بین باقی زبان‌­ها بسیار کاربرپسندتر است. کامپایلری که برای زبان BASIC استفاده می­‌شود کامپایلر BASCAM می‌باشد و برای زبان C کامپایلر CODEVISION.

در مجموعه آموزش میکروکنترلر AVR تصمیم بر این است که هم با زبان C و هم با BASIC نوشته شود. کامپایلر بسکام بیشتر برای کسانی کاربرد دارد که نمی‌خواهند به صورت حرفه‌ای عمل کنند. اما اگر کسی بخواهد به صورت حرفه­‌ای عمل کند باید با زبان C پیش برود.

در قسمت چهارم آموزش میکروکنترلر AVR برنامه ای که در این قسمت راجب آن صحبت کردیم را به دو زبان C و BASIC می‌نویسیم. با سیسوگ همراه باشید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

5 دیدگاه در “رجیسترهای پورت میکروکنترلر AVR | آموزش میکروکنترلر AVR قسمت سوم

  1. Avatar for محمد محمد گفت:

    داداش قسمت اموزش avr عالی بود من خیلی بهره بردم عالی عالیه اگه میشه قسمت اموزش stm هم اگه از این فیلم های اموزشی هس قرار بدید ممنون

  2. Avatar for بهزاد بهزاد گفت:

    با سلام و احترام
    بنده یه برنامه ساده با ATMEGA 32 در محیط کدویژن نوشتم و با یه مشکل ساده برخورد کردم اما حل نمیشه .
    کامپایلر با تعداد متغیر های من مشکل داره ، یعنی یا ارور میده یا کامپایل میکنه اما برنامه روی سخت افزار به درستی عمل نمیکنه .
    میخواستم بدونم آیا در تعریف تعداد متغیر ها (بخصوص Bit) محدودیت وجود داره ؟
    من حتی بیشتر متغیر ها رو volatile تعریف کردم یا محلی تعریف کردم اما با این حال نمیذاره از تعداد 24 تا بیشتر bit تعریف کنم . اگر در قسمت Bit Variable Size هم مقدار 24 را به 32 تغییر بدم سخت افزار کار نمیکنه .

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      خوب متغیر bit یکی دیگه از اختراعات عجیب کدویژن هست که هیچ جایی توی زبان سی نداره :/
      ولی تا اونجا که میدونم بله محدودیت وجود داره – توی آپشن پروژه میتونید تعداد رو مشخص کنید!!!

  3. Avatar for سروش سروش گفت:

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

    1. Avatar photo electronic girl گفت:

      سلام
      ممنون از توجه شما. این مساله اصلاح شد.
      موفق و پیروز باشید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *