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

blog
۱۳۹۷-۰۸-۰۵
5 دقیقه

آموزش جامع میکروکنترلر 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
0
لینک و اشتراک
profile

electronic girl

متخصص الکترونیک

دوستدار الکترونیک

مقالات بیشتر
slide

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد. جستجو در آیسی
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند. برو به فروشگاه سیسوگ
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

دغدغه همیشگی فعالان تخصصی هر حوزه وجود بستری برای گفتگو و پرسش و پاسخ است. سیسوگ فروم یک انجمن آنلاین است که بصورت تخصصی امکان بحث، گفتگو و پرسش و پاسخ در حوزه الکترونیک را فراهم می‌کند. پرسش در سیسوگ فرم
become a writer

نویسنده شو !

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

ارسال مقاله
become a writer

نویسنده شو !

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

ارسال مقاله
خانواده سیسوگ

پالت | بازار خرید و فروش قطعات الکترونیک

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

آیسی | موتور جستجوی قطعات الکترونیک

سامانه آی سی سیسوگ (Isee) قابلیتی جدید و کاربردی از سیسوگ است. در این سامانه سعی شده است که جستجو، انتخاب و خرید مناسب تر قطعات برای کاربران تسهیل شود. وقتی شما در این سامانه، قطعه الکترونیکی را جستجو می‌کنید؛ آی سی به سرعت نتایج جستجوی شما در اکثر فروشگاه‌های آنلاین در حوزه قطعات الکترونیک را نمایش می‌دهد.
family

فروشگاه سیسوگ

فروشگاه سیسوگ مجموعه ای متمرکز بر تکنولوژی های مبتنی بر IOT و ماژول های M2M نظیر GSM، GPS، LTE، NB-IOT، WiFi، BT و ... جایی که با تعامل فنی و سازنده، بهترین راهکارها انتخاب می شوند.
family

سیسوگ فروم | محلی برای پاسخ پرسش‌های شما

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

دیدگاه ها

profile
محمد گفت :
۱۳۹۹-۰۸-۱۸ ۲۲:۰۱

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

profile
بهزاد گفت :
۱۳۹۸-۱۰-۱۴ ۱۴:۱۹

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

profile
زئوس Zeus گفت :
۱۳۹۸-۱۰-۲۱ ۱۱:۳۶

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

profile
سروش گفت :
۱۳۹۷-۰۸-۰۸ ۲۲:۱۴

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

profile
electronic girl گفت :
۱۳۹۷-۰۸-۰۹ ۰۹:۲۲

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

become a writer

نویسنده شو !

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

ارسال مقاله
become a writer

نویسنده شو !

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

ارسال مقاله