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

0
36
رجیسترهای پورت
رجیسترهای پورت

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

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

ATMEGA16
ATMEGA16

 

تفاوت بین ATMEGA16 و ATMEGA32 در ظرفیت فلش آن‌هاست. ظرفیت فلش در ATMEGA16 برابر ۱۶کیلوبایت و در ATMEGA32 برابر ۳۲کیلوبایت می‌­باشد. حداقل اتصالات برای راه‌­اندازی میکروکنترلر به‌صورت‌زیر می­‌باشد:

 اتصالات برای راه‌­اندازی میکروکنترلر ATMEGA16
اتصالات برای راه‌­اندازی میکروکنترلر ATMEGA16

 

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

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

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

آدرس‌ها در فضای SRAM
آدرس‌ها در فضای SRAM

 

سه بایت مختلف در شکل‌بالا به نام‌های PINB, DDRB, PORTB کشیده‌شده‌است،که رجیسترهایی موردنیاز برای ارتباط با PORTB هستند، PORTB از پایه شماره ۱ تا ۸ میکروکنترلر را شامل می‌شود. حال می‌خواهیم روی PORTB.1 که کم‌ارزش‌ترین پورت هست با نوشتن برنامه تاثیر بگذاریم و آن را روشن‌کنیم و روشن بماند. نکته‌قابل‌توجه این است که پورت‌های میکروکنترلر ۸بیتی هستند، یعنی در آن واحد می‌­توانیم اطلاعات را برروی این ۸بیت بنویسیم یا از روی آن‌ها بخوانیم. برای نوشتن، پورت­‌ها خروجی تعریف می‌شوند و برای خواندن، ورودی تعریف می‌شوند. به‌صورت پیش‌فرض و بعداز ریست میکروکنترلر تمام پورت‌ها به‌صورت ورودی درنظرگرفته شده‌­اند و برای خروجی‌شدن باید به کمک برنامه آن‌ها را خروجی کرد.

DDRx: برای ۸پین فیزیکی موجود در هر پورت، ۸محل در رجیستر DDRx درنظرگرفته شده‌است که هرکدام از این محل‌ها متناظر با پین مخصوص‌به‌خود است. برای مثال DDRA.1≈PORTA.1 جهت پورت‌ها را به‌لحاظ ورودی و خروجی از‌طریق آدرس ۳۷$ در فضایSRAM تعریف می‌کنیم. بعداز اینکه جهت پورت مشخص‌شد می‌خواهیم روی وضعیت خروجی بحث‌کنیم، فرض می‌­کنیم پین یا پین‌هایی از یک پورت خروجی تعریف‌شده‌است، می‌خواهیم وضعیت خروجی آن به‌عبارتی HIGH/LOW بودن یا ۰ و ۱ بودن آن را تعیین‌کنیم. بایت بعدی که تحت عنوان PORTB در شکل‌بالا نمایش‌ داده شده‌است همین وظیفه را برعهده دارد، یعنی به همین طریقی که یک تناظر یک یه یکی در بایت بالایی با پین‌های فیزیکی و واقعی به‌لحاظ جهت(ورودی و خروجی) وجود دارد، در بایت بعدی یک تناظر یک‌به‌یک به لحاظ مقدار یا وضعیت یا ۰ و ۱ وجود دارد، حال اگر بخواهیم LED روشن‌شود باید توجه‌داشته‌باشیم که باتوجه‌به سخت‌افزار وقتی وضعیت پایه درحالت HIGH است روشن می­‌شود پس باید یک ۱ توسط خطوط برنامه به‌صورت‌زیر نوشته‌شود.

وضعیت پایه‌ها
وضعیت پایه‌ها

 

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

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

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

به ۳روش کلی می‌توان از ابزار برنامه‌نویسی استفاده کرد: شیوه­ اول برنامه‌نویسی به زبان اسمبلی می‌­باشد که ازلحاظ مفهومی خیلی‌مفید هست و با‌توجه‌به اینکه استفاده‌کننده‌های خاصی دارد و در کاربردهای ویژه‌ای از آن استفاده می­‌شود در این آموزش استفاده نمی­‌شود. کامپایلرهای مختلفی برای AVR با زبان‌های مختلفی نوشته‌شده‌است مانند زبان بیسیک، زبان C ،پاسکال و… که زبان C بین باقی زبان‌­ها بسیار کاربرپسندتر است. کامپایلری که برای زبان BASIC استفاده می­‌شود کامپایلر BASCAM می‌باشد و برای زبان C کامپایلر CODEVISION. در مجموعه آموزش میکروکنترلر AVR تصمیم بر این است که هم با زبان C و هم با BASIC نوشته شود. کامپایلر بسکام بیشتر برای کسانی کاربرد دارد که نمی‌خواهند به‌صورت حرفه‌ای عمل کنند. اما اگر کسی بخواهد به‌صورت حرفه­‌ای عمل‌کند باید با زبان C پیش برود.

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

 

 

منبع: سیسوگ

برای این مقاله نظر بگذارید:

لطفا دیدگاه خود را بنویسید
لطفا نام خود را وارد کنید