آموزش پورت های IO در میکروکنترلرهای AVR پورت های IO در ATmega128A

توسط | 13 دی, 1398 | AVR, میکروکنترلر, وبلاگ | 23 دیدگاه ها

پورت-io-avr

آموزش AVR یوبرد

شاهکار 8بیتی اتمل

آموزش های رایگان AVR

فیلم های آموزش AVR

آموزش خصوصی AVR

اخبار جدید یوبرد در اینستاگرام

I/O چیست؟ پورت I/O در AVR چگونه است؟ کار با بلوک I/O در AVR به چه صورت است؟ رجیسترهای I/O چگونه عمل می کنند؟ روش های مقداردهی به رجیسترهای I/O کدامند؟ نقش رجیستر SFIOR در پورت های I/O چیست؟ مقاومت پول آپ در I/O چیست؟ پول آپ داخلی I/O به چه شکل است؟ وضعیت Tri-state در I/O چیست؟ مقدار جریان های Sink و Source در I/O چقدر است؟ برای یافتن پاسخ این سوالات با ما همراه باشید.

در این نوشته به بررسی پورت های I/O میکروکنترولر Atmega128 می پردازیم. ذکر این نکته ضروری است که در میکروکنترلرهای AVR وقتی یکی از پایه های I/O چند حالت کاربری داشته باشد، حالت پیش فرض آن پایه همان حالت کاربری I/O یا ورودی/خروجی است. اگر در کدهای برنامه یکی از بلوک ها را که نیاز به یک پین دارند (مثلاً بلوک ADC)، فعال کنیم، آنگاه این پین به صورت خودکار از حالت کاربری I/O به حالت کاربری مورد نظر (در اینجا ورودی ADC) تغییر می کند. این را نیز بدانیم که در برنامه نویسی میکرو کنترلرهای LPC که هستۀ ARM دارند، در نرم افزار Keil باید هم بلوک مورد نظر فعال شود و هم با کد تعیین شود که پین مربوطه در حالت کاربری مورد نظر قرار گیرد.

GPIO در STM32          (فیلم آموزش ARM STM32 مقدماتیفیلم آموزش GPIO در STM32)

فیلم آموزش پورت IO در AVR    (فیلم آموزش AVR مقدماتی)

فیلم آموزش پورت IO در آردوینو (فیلم آموزش آردوینو مقدماتی)

 

بلوک I/O (پورت های I/O یا GPIO – General Purpose Input/Output)

منظور از پورت I/O پایه های ورودی و خروجی در حالت کاربری پیش فرض است که در این حالت اگر پایه ها ورودی باشند می توان مقدار 0 و 1 را که روی آنها قرار گرفته، خواند و در حالتی که خروجی باشند می توان مقادیر 0 و 1 را روی پایۀ مورد نظر ایجاد کرد. در میکروکنترلر Atmega128 تعداد این پایه ها 53 عدد است. پورت های A و B و C و D و E و F هر کدام دارای 8 پایه و پورت G دارای 5 پایه می باشد. هر کدام از پورت های I/O تعداد سه رجیستر (از فضای رجیسترهای I/O) را به خود اختصاص داده اند. این سه رجیستر عبارتند از DDR و PIN و PORT که دربارۀ روش کار کردن با آنها بحث خواهد شد. این پایه ها در صورتی که توسط بلوک های دیگر به کار گرفته شوند دیگر پورت I/O نیستند. مثلاً اگر بلوک SPI فعال شود پایه های PB0 تا PB3 پورت I/O نیستند و حالت کاربری آنها SPI می باشد.

پیش از آن که به رجیسترهای پورت های I/O بپردازیم دربارۀ روش های مقدار دهی به یک رجیستر صحبت می کنیم. می توان برای مقداردهی به پورت ها نیز از این روش ها استفاده کرد.

روش های مقدار دهی به رجیستر

بیت های رجیسترهای I/O در حالت پیش فرض همگی صفر هستند. به جز بلوک پورت های I/O که به صورت پیش فرض فعال است، با مقدار دهی به بیت های رجیستر یک بلوک داخلی می توان آن بلوک را فعال کرد و تنظیمات مربوط به آن را انجام داد. در این صورت اگر این بلوک داخلی پین هایی را نیز به همراه داشته باشد، حالت کاربری پین های مربوطه به صورت خودکار و بدون دخالت ما به آن حالت کاربری تغییر می کند و دیگر جزء پین های پورت I/O نیست. بیت های رجیستر بر خلاف فیوزبیت با مقدار 1 فعال می شوند. در کد نویسی می توانیم به چند روش به بیت های یک رجیستر مقدار بدهیم. فرض کنیم یک رجیستر به نام AAAA داریم. در این صورت روش های زیر را می توان برای مقدار دهی به کار گرفت. برای مثال می خواهیم به طور یکی در میان مقدار رجیستر AAAA را 0 و 1 تنظیم کنیم: (01010101 در حالت های مختلف تا حالت شمارۀ 5):

جدول 1 – یک رجیستر 8 بیتی

  • به صورت باینری:
AAAA = 0b01010101;
  • به صورت هگزادسیمال (درمبنای16):
AAAA = 0x55;
  • به صورت دسیمال (درمبنای10):
AAAA = 85;
  • به صورت شیفت و OR:
AAAA = (0<<AAAA7) | (1<<AAAA6) | (0<<AAAA5) | (1<<AAAA4) | (0<<AAAA3) | (1<<AAAA2) | (0<<AAAA1) | (1<<AAAA0);

و یا

AAAA = (0<<7) | (1<<6) | (0<<5) | (1<<4) | (0<<3) | (1<<2) | (0<<1) | (1<<0);
  • مقدار دهی به یک بیت از رجیستر: دقت شود که باید قبل از شماره بیت نقطه (.) قرار داد. این روش تنها در کدویژن وجود دارد. در اتمل استودیو و keil نمی توان به این روش به رجیستر مقدار داد.
AAAA.0=1;
AAAA.1=0;
AAAA.2=1;
AAAA.3=0;
AAAA.4=1;
AAAA.5=0;
AAAA.6=1;
AAAA.7=0;
  • مقدار دهی به چند بیت به صورت نامگذاری شده (مثلاً به بیت های 1 و 4): در این جا بقیه بیت ها صفر می شوند.
AAAA = (1<<AAAA4) | (1<<AAAA1);     یا     AAAA = (1<<4) | (1<<1);

یک نکتۀ مهم که باید در نظر گرفت این است که هر کدام از این مقدار دهی ها (به جز مورد 5) باعث می شود بیت های دیگر نیز تغییر کنند. اگر بخواهیم یک یا چند بیت را تغییر دهیم به طوری که مطمئن باشیم بیت های دیگر تغییر نمی کنند از دو روش زیر استفاده میکنیم (با مثال):

  • یک کردن بیت سوم از رجیستر AAAA بدون تغییر بیت های دیگر:
AAAA | = (1<<AAAA3);     یا     AAAA | = (1<<3);

یک کردن بیت پنجم و هفتم بدون تغییر بیت های دیگر:

AAAA | = (1<<AAAA5) | (1<<AAAA7);     یا     AAAA | = (1<<5) | (1<<7);
  • صفر کردن بیت ششم از رجیستر AAAA بدون تغییر بیت های دیگر:
AAAA  &= ~(1<<AAAA6);     یا     AAAA & = ~(1<<6);

صفر کردن بیت چهارم و بیت دوم بدون تغییر بیت های دیگر:

AAAA & = ~((1<<AAAA4) | (1<<AAAA2));     یا     AAAA & = ~((1<<4) | (1<<2));

رجیسترهای پورت I/O

هر پورت I/O سه رجیستر دارد. رجیسترهای DDRx و  PORTx و PINx که به جای x حروف A، B، C و… قرار می گیرد. برای میکروکنترلر ATmega32 چهار پورت I/O به نام های A، B، C و D داریم که هر پورت 8 پین دارد. مجموعاً 32 پایۀ پورت I/O و هر پورت 3 رجیستر که در مجموع 12 رجیستر است. در میکروکنترلر ATmega128 تعداد 7 پورت I/O داریم. پورت های A، B، C، D، E، F و G که همگی به جز پورت G که پنج بیتی است بقیه 8 بیتی هستند. تعداد پایه های پورت I/O برای ATmega128 با توجه به این که پورت G پنج بیتی 53 عدد است. همچنین تعداد رجیستر های پورت I/O برای این میکروکنترلر 21 رجیستر است.

رجیستر DDRx (The Port x Data Direction Register)

جهت پایۀ مربوطه را که ورودی باشد یا خروجی تعیین میکند. با 1 شدن هر یک از بیت های این رجیستر پایۀ متناظر آن بیت به عنوان خروجی تنظیم می شود و با 0 شدن آن نیز به عنوان ورودی.

جدول 2 – رجیستر DDRx

رجیستر PORTx (The Port x Data Register)

بسته به این که پایۀ مورد نظر ورودی تعیین شده باشد یا خروجی تعریف متفاوتی دارد. اگر پایۀ مربوطه (با DDRx) ورودی شده باشد، با 1 شدن بیت متناظرِ آن پایه در رجیستر PORTx، مقاومت پول آپ آن پایه فعال می شود و آن پایه با مقاومت پول آپ داخلی به VCC وصل می شود و با 0 شدن بیت متناظرِ آن پایه در رجیستر PORTx، مقاومت پول آپ داخلی غیر فعال می شود و آن پایه در وضعیت Tri-state (یا High Impedance) قرار می گیرد. اگر پایۀ مورد نظر (با DDRx) خروجی شده باشد، با 1 شدن بیت متناظرِ آن پایه در رجیستر PORTx، مقدار 1 منطقی روی پایه قرار می گیرد و با صفر شدن بیت متناظرِ آن پایه در رجیستر PORTx، مقدار صفر منطقی روی پایه قرار می گیرد.

جدول 3 – رجیستر PORTx

رجیستر PINx (The Port x Input Pins Address)

هم تنها در حالتی که پورت x یا پایۀ x.n (که n عددی بین 0 تا 7 است) به صورت ورودی تعریف شده باشند استفاده می شود و تنها برای خواندن مقدار قرار گرفته روی پایۀ x.n است. اگر یک پایه با مقدار دهی به DDRx خروجی شده باشد رجیستر PINx در اینجا بی معنی است. و خواندن آن نتیجه ای ندارد (یا ممکن است کامپایلر خطا بگیرد). حال اگر پایه ای ورودی شده باشد، و از خارج از میکروکنترلر روی پایه مقدار 0 یا 1 قرار بگیرد، این مقدار را با خواندن رجیستر PINx می توان بدست آورد.

جدول 4 – رجیستر PINx

رجیستر SFIOR (Special Function I/O Register)

این رجیستر برای برخی تنظیمات ویژۀ بلوک های مختلف استفاده می شود. در حالت کاربری پورت I/O ما به بیت 2 آن نیاز داریم. که اگر این بیت یک شود مقاومت های پول آپ داخلی همۀ پورت های I/O غیر فعال می شود، حتی اگر PORTxn برای ورودی ها 1 شده باشد.

برای میکروکنترلر ATmega128 رجیستر SFIOR به صورت زیر است.

جدول 5 – رجیستر SFIOR

بیت های 4 و 5 و 6 رزرو شده اند.

تصویر زیر به طور خلاصه بیانگر وضعیت های مختلف برای یک پایۀ پورت I/O است. علامت X به معنای این است که مقدار  PUDفرقی ندارد صفر باشد یا یک.

خلاصه-حالات-io

تصویر 1 – خلاصۀحالات پورت های I/O

سخت افزار یک پایه از پورت I/O

هر یک از پایه های پورت I/O میکروکنترلر AVR شماتیکی مانند شکل زیر دارد. همان طور که ملاحظه می شود دو دیود محافظ روی پایه وجود دارد. درصورتی که روی Px.n ولتاژ منفی قرار بگیرد، D2 روشن می شود و وقتی که ولتاژ بیشتر از VCC روی Px.n بیفتد D1 روشن می شود. بدین شکل جریان از دیود ها عبور می کند و وارد میکروکنترلر نمی شود. همچنین مقاومت پول آپ نیز به صورت Rpu نوشته شده است.

سخت-افزار-یک-پایه-io

تصویر 2 – سخت افزار یک پایۀ پورت I/O

در تصویر زیر سخت افزار کامل تر یک پایۀ پورت I/O را مشاهده می کنید.

سخت-افزار-یک-پایه-io

تصویر 3 – سخت افزار کامل تر یک پایۀ پورت I/O

تصویر زیر پیکر بندی پین های میکروکنترلر Atmega128 است. این میکروکنترلر پکیج DIP ندارد و در پکیج های TQFP و MLF که هر دو 64 پایه هستند به بازار عرضه شده اند.

پین-های-mega128

تصویر 4 – پیکربندی پایه های میکروکنترلر ATmega128

مقاومت پول آپ (Pull up resistor) در پورت I/O

هر گاه بخواهیم روی یکی از پایه های میکروکنترلر (یا هر وسیلۀ دیگر) مقدار VCC قرار بگیرد می توان آن را مستقیماً به VCC وصل کرد. در این صورت پایۀ مورد نظر پول آپ شده است. مانند شکل زیر.

پول-آپ

تصویر 5 – پول آپ کردن پایه به صورت مستقیم

در کاربرد هایی که نیاز به کلید داریم از یک مقاومت به نام مقاومت پول آپ استفاده می کنیم. وقتی یک مقاومت از VCC به پایۀ میکروکنترلر وصل می شود ولتاژ VCC روی پایه می افتد. چرا که جریانی که پایه می کشد صفر است. طبق قانون اهم (V=RI) در دو سر مقاومتی که جریانی از آن عبور نمی کند ولتاژی نمی افتد، پس همۀ ولتاژ VCC روی پایۀ میکروکنترلر قرار می گیرد. در مورد قبلی نمی توانستیم یک کلید از پایه به زمین وصل کنیم. چون اگر کلید بسته شود، بین VCC و زمین اتصال کوتاه می شود. اما در این جا می توانیم کلید بگذاریم. هنگامی که کلید بسته شود VCC با مقاومت به زمین وصل میشود و همچنین پایۀ مورد نظر زمین می شود. به این مقاومت مقاومت پول آپ و همچنین به کلید، کلید پول دون (Pull down) می گویند.

مقاومت-پول-آپ

تصویر 6 – مقاومت پول آپ و کلید برای I/O

مقاومت پول دون (Pull down resistor) در پورت I/O

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

مقاومت-پول-دون

تصویر 7 – مقاومت پول دون و کلید برای I/O

مقاومت پول آپ داخلی در پورت های I/O

میکروکنترلرهای AVR روی هر یک از پایه های پورت های I/O یک پول آپ داخلی دارد. همان طور که در تصویر 2 مشاهد می شود این مقاومت با یک ترانزیستور فعال می شود. اگر در حالتی که پایه ورودی باشد و مقدار بیت متناظر از رجیستر PORTx برابر 1 شود، پول آپ داخلی برای آن پایه فعال می شود و مقدار VCC داخلی روی آن می افتد، به شرطی که بیت PUD از رجیستر SFIOR صفر باشد.

وضعیت Tri-state برای یک پین

حالت Tri-state هنگامی که پایه ورودی باشد به وجود می آید. این حالت یعنی پایۀ مورد نظر رها است و هیچ وضعیت منطقی 0 یا 1 ندارد و همچنین در وضعیت امپدانس بالاست. در این حالت مقدار خوانده شده از این پایه معتبر نمی باشد. زیرا ممکن است نویز ولتاژ روی پایه را روی هر مقداری قرار دهد.

جریان های Sink و Source

وقتی یک پایه ورودی می شود جریانی که به پایه وارد می شود جریان Sink نام دارد. وقتی یک پایه خروجی می شود جریانی که از آن گرفته می شود جریان Source نامیده می شود. حداکثر جریان Sink و Source در ولتاژهای مختلفی که روی پایه قرار می گیرد فرق دارد که برای میکروکنترلر Atmega128 از نمودارهای زیر بدست می آیند.

جریان-sink

تصویر 8 – جریان Sink برای هر پایۀ پورت I/O در ATmega128

جریان-source

تصویر 9 – جریان Source برای هر پایۀ پورت I/O در ATmega128

کتابخانۀ delay.h

برای حل تمرین این نوشته لازم می دانیم توضیحی دربارۀ توابع تأخیر بدهیم. در کدویژن یک کتابخانۀ تأخیر به نام delay.h وجود دارد. این کتابخانه دارای دو تابع void delay_ms(unsigned int n) و void delay_us(unsigned int n) می باشد که به ترتیب تأخیرهای میلی ثانیه و میکرو ثانیه ایجاد می کنند. معرفی کتابخانۀ delay.h به صورت

#include <delay.h>

و به صورت زیر در برنامه نوشته می شوند:

delay_ms(100);
delay_us(100);

که تأخیرهای 100 میلی ثانیه و 100 میکروثانیه ایجاد می کنند (100 یک مثال است).

تمرین پورت های I/O

همۀ پایه های پورت A را ورودی و همۀ پایه های پورت B را خروجی کنید و مقدار رجیستر PORTB را برابر 0x00 قرار دهید (در این صورت مقدار 0 روی همه پایه های آن قرار می گیرد). پایۀ reset را با یک مقاومت 10k اهم پول آپ کنید و با یک button به زمین وصل کنید. با این کار هر گاه بخواهیم میکروکنترلر را reset کنیم، کلید را می زنیم. پول آپ داخلی پایه های PA0، PA1 و PA2 را فعال کنید و با کلید به زمین وصل کنید. پایه های PA3، PA4 و PA5 را با مقاومت 10k اهم پول آپ کنید و با کلید به زمین وصل کنید. پایه های PA6 و PA7 را با مقاومت پول دون کنید و با کلید به VCC وصل کنید. حال برنامه ای بنویسید که:

  • با فشرده شدن کلید PA0 پایه های 0 و 2 و 5 از پورت B به صورت نام گذاری باینری 1 شوند.
  • با فشرده شدن کلید PA1 فقط پایه های 1 و 4 از پورت B به صورت بیت های نام گذاری شده 1 شوند.
  • با فشرده شدن کلید PA2 مقدار عدد 0x2F به صورت نامگذاری هگزادسیمال روی پورت B قرار گیرد.
  • با فشرده شدن کلید PA3 مقدار عدد 215 (در مبنای10) به صورت نامگذاری دسیمال روی پورت B بیفتد.
  • با فشرده شدن کلید PA4 فقط پایه های PB7، PB5 و PB2 به صورت مقدار دهی به یک بیت 1 شوند.
  • با فشرده شدن کلید PA5 بدون تغییر پایه های دیگر پایه های PB0و PB6 یک شوند.
  • با فشرده شدن کلید PA6 بدون تغییر پایه های دیگر پایه های PB0 و PB3 صفر شوند.
  • با فشرده شدن کلید PA7برای 10 بار همۀ پایه های پورت B با یک تاخیر 300 میلی ثانیه صفر و یک شوند.

فرکانس کاری میکروکنترلر 8 مگاهرتز باشد. از ATmega128 استفاده کنید. کدهای برنامه و فایل شبیه سازی آن در پیوست موجود است.

نتایج زیر از بررسی پورت های I/O حاصل می شوند:

  1. در AVR با توجه به این که رجیسترها در حالت پیش فرض همگی صفر هستند، پایه های Pxn همگی به صورت پیش فرض در حالت کاربری I/O هستند.
  2. در AVR وقتی یک بلوک را که از پین های میکروکنترلر استفاده می کند، فعال می کنیم، پین مورد نظر به صورت خودکار از حالت کاربری I/O به حالت کاربری مورد نظر تغییر می کند.
  3. در حالت کاربری I/O اگر پایه ها ورودی باشند، می توان مقدار صفر یا یکی را که از بیرون روی آنها قرار گرفته شده، خواند.
  4. در حالت کاربری I/O اگر پایه ها خروجی باشند، می توان مقدار صفر یا یک را روی پایه (برای راه اندازی یک المان مثل LED) ایجاد کرد.
  5. در ATmega128 تعداد 53 پایۀ I/O وجود دارد. پورت A و B و C و D و E و F و G که پورت G پنج پایه دارد.
  6. رجیسترهای I/O در AVR سه رجیستر DDRx و PORTx و PINx هستند.
  7. یک بیت از رجیستر SFIOR نیز برای فعال کردن و یا غیر فعال کردن پول آپ داخلی پایه هاست.
  8. برای متصل کردن کلید به ورودی بهتر است از مقاومت پول آپ (داخلی یا خارجی) یا پول دون استفاده شود.
  9. در AVR اگر یکی از پایه ها ورودی شود و پول آپ نشود، این پایه در وضعیت Tri-state قرار دارد.
  10. محدودۀ جریان های Sink و Source با توجه به مقدار ولتاژ روی پایه های ورودی و خروجی متفاوت است.
  11. پورت های ورودی/خروجی در AVR در میکروکنترلر ATmega128 به جز پورت G همگی 8 بیتی هستند.


 

رضا اسدی

رضا اسدی

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

سفارش پروژه میکروکنترلر یوبرد

زیرساخت مطمئن صنعت

جدیدترین تاپیک های AVR

برنامه-نویسی-میکروکنترلر-ویژوال-استودیو

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

نصب VisualGDB روی ویژوال استودیو، ساخت پروژه برای برنامه نویسی میکروکنترلرها با ویژوال استودیو، ساخت پروژه برای STM32 در ویژوال استودیو، کدنویسی STM32 در ویژوال استودیو، ساخت پروژه برای AVR در ویژوال استودیو، ساخت پروژه برای LPC در ویژوال استودیو، ساخت پروژۀ آردوینو در ویژوال استودیو

رله-relay

رله، سوییچ تحریک پذیر

تعریف رله، تاریخچه، طرز کار رلۀ الکترومکانیکی، اصطلاحات، انواع الکترومکانیکی، رلۀ حالت جامد، رلۀ هیبریدی، رلۀ حرارتی و انواع تحریک شونده با عوامل غیر الکتریکی، انواع موجود در صنعت برق و برق صنعتی، رلۀ ایمنی و برخی انواع حفاظتی، رلۀ دیجیتال، لزوم استفاده و راه اندازی رله، مشخصات الکتریکی

پروتکل-i2c-protocol

پروتکل I2C، ادغامی از USART و SPI توسط Philips

پروتکل I2C، تاریخچه I2C، ویژگی ها و کاربردهای I2C، عبارات و اصطلاحات I2C، باس، اتصالات و گسترش شبکه I2C، سیگنال های I2C، قالب داده و آدرس در I2C، انتقال داده در I2C، آدرس دهی 10 بیتی، قابلیت Multi-master، حکمیت، مشخصات الکتریکی و زمانی، مقدار مقاومت های پول آپ، Clock Stretching

سون-سگمنت-seven-segment

سون سگمنت، نمایشگر هفت قسمتی

سون سگمنت چیست؟ انواع 7-segment، تاریخچه 7-segment، ساختار 7-segment و نمایش در آن، تعداد ارقام و 7-segmentهای مالتی پلکس، کاربردها، انواع اندازه ها و رنگ ها و مدار راه اندازی 7-segment، بایاس 7-segment، مقدار مقاومت در راه اندازی 7-segment، درایور سون سگمنت، پایه های 7-segment

23 دیدگاه ها

  1. سلام تشکر بابت مطلب خوبتون. به نظرم جزئیات خوبی رو ذکر کردید. یک سوال برام پیش اومد که توی متن ندیدم. مقدار مقاومت های Pull up یا Pull down چقدر باید باشه؟

    پاسخ
    • سلام خواهش میکنم. لطف دارید. توی تعیین مقدار مقاومت پول آپ چند عامل تأثیر داره.

      1- حداقل مقدار مقاومت پول آپ به حداکثر توان اتلافی مجاز اون محدود میشه. مقاومت پول آپ رو نمیتونیم از یه حدی کمتر قرار بدیم. چون باید جریان عبوری از VCC به زمین رو هم در نظر داشته باشیم. اگه مقاومت رو کم بذاریم مقدار جریان بیشتری از VCC به زمین متقل میشه و باعث تلفات توان میشه. همچنین در صورت بالا بودن مقدار این توان اتلافی، باید مقاومت با حد تحمل توان بالاتر در نظر بگیریم.

      2- حداکثر مقدار مقاومت پول آپ به امپدانس ورودی پایۀ آی سی محدود میشه. این امپدانس بین پایه و زمین وجود داره و مقدار اون با توجه به این که آی سی از نوع TTL یا CMOS باشه متفاوته. به هر حال مقدار ولتاژ روی پایه، نتیجۀ تقسیم ولتاژ بین امپدانس پایۀ آی سی و مقاومت پول آپه. اگه مقدار مقاومت پول آپ رو در حد امپدانس ورودی پایه قرار بدیم، ولتاژ پایه دیگه نزدیک VCC نیست و مقدار چشمگیری از VCC کمتره. بنابراین ممکنه سطح ولتاژ به حدی برسه که اصلا پایه پول آپ نشه و مقدار LOW روی اون قرار بگیره. به طور معمول میشه حداکثر مقدار مقاومت پول آپ رو یک دهم امپدانس ورودی پایۀ آی سی در نظر گرفت.

      3- مقدار خاصیت خازنی روی پایه هم باید در نظر گرفت. هر چقدر مقدار مقاومت پول آپ بیشتر باشه، مقدار ثابت زمانی مدار RC (موازی) روی پایۀ آی سی بیشتر و یه فیلتر پایین گذر تشکیل میشه. بنابراین مقدار Rise Time و Fall Time پالس هایی با فرکانس کم، زیاد میشه و شکل و دامنۀ پالس هایی با فرکانس بالاتر، تغییر میکنه. با توجه به همین خاصیته که بعضی وقتا برای رفع Bounce کلیدهای روی پایه های آی سی از خازن استفاده میشه.

      در کل مقدار معمول مقاومت پول آپ برای پایه های آی سی های TTL بین 1 کیلو تا 5 کیلو اهمه. برای پایه های آی سی های هم CMOS بین 10 کیلو تا 1 مگا اهمه.

      برای مقاومت Pull Down هم باید همین موارد رو در نظر گرفت. البته با توجه به این که مقاومت پول دون با امپدانس پایۀ ورودی آی سی موازی میشه، مقدارش نباید از حدی بیشتر باشه که اون پایه حالت Tri-State باقی بمونه و انگار که مقاومت پول دونی وجود نداره.

      پاسخ
  2. سلام. ممنون از توضیحی که برای مقاومت پول آپ و پول دون به خانم کریمی دادید. سوال بنده اینه که لزومی داره از مقاومت پول دون استفاده کنیم؟ همون مقاومت پول آپ برای کاربردهایی مثل کلید کافی نیست؟

    پاسخ
    • سلام. خواهش میکنم. مقاومت pull up برای کلید مناسب و بسیار پرکاربردتر از مقاومت pull down است. در کاربردهایی که آن واحدی که قرار هست به میکروکنترلر متصل شود، بصورت پیش فرض در سطح منطقی 1 قرار دارد، باید از مقاومت pull down استفاده کنید.

      پاسخ
  3. سلام. برای تاگل کردن یه پایه بدون تغییر وضعیت پایه های دیگه توی اتمل استودیو باید چه دستوری بنویسم؟ ممنون

    پاسخ
    • سلام. از این دستور استفاده کنید: (مثلاً برای تاگل کردن  PA3)

      PORTA ^= ( 1 << 3 ) ;

      خواهش میکنم.

      پاسخ
  4. سلام.یه سوال داشتم.آیا تو حالت پیش فرض (بدون تغییر تنظیمات داخلی atmega 32)امکان استفاده از تمام پورت های A تا D بعنوان ورودی/خروجی وجود دارد؟
    اگر این چنین نیست کدام پورت قابل استفاده نیست و چرا؟

    پاسخ
    • سلام. به صورت پیش فرض پایه های پورت IO بدون تغییر رجیسترهای DDR و PORT رو حالت ورودی Tri-state هستند. و برای استفاده از این پایه های ورودی و خوندن مقدار رجیسترهای PINx، باید به صورت سخت افزاری مقاومت پول آپ یا پول دون متصل کنید. بدون تنظیم رجیسترهای گفته شده، فقط میتونید از اونا به عنوان ورودی استفاده کنید.

      اما

      به خاطر این که چند تا از پایه های ارتباط JTAG روی پورت C قرار گرفتن (PC2 , PC3 , PC4 , PC5)، با تنظیمات پیش فرض این پایه ها نه میتونن توی حالت ورودی باشن نه خروجی. یعنی در کل تو حالت کاربری IO نیستن. برای قرار گرفتن این پایه ها توی حالت IO باید توی تنظیم فیوزبیت ها، فیوزبیت JTAGEN غیر فعال بشه.

      بنابراین اگه قرار باشه تنظیمات میکروکنترلر به صورت پیش فرض باشه، همۀ پایه ها به غیر از PC2 تا PC5 قابلیت اینو دارن که IO باشن.

      پاسخ
    • ممنون از راهنماییتون!❤

      پاسخ
    • خواهش میکنم. موفق باشید

      پاسخ
  5. سلام خسته نباشید.یه سوال داشتم!اگر پایه های پورتی از میکروکنترلر بعنوان ورودی تعریف شود و آن پایه در مدار به جایی متصل نباشد حالت منطقی پیش فرض آن پایه چه حالتی خواهد بود (صفر یا یک)؟آیا امکان تغییر این حالت وجود دارد؟چگونه میتوان این کار را انجام داد؟

    پاسخ
    • سلام. اگه پایه به صورت داخلی و خارجی پول آپ یا پول دون نشه یا با المانی مقدار ولتاژی روی اون قرار نگرفته باشه، نمیشه سطح منطقی ثابتی برای اون در نظر گرفت. ممکنه تو یه لحظه High باشه و تو لحظه ای دیگه Low. نویز، روی پایه اثر میذاره و ولتاژش رو تغییر میده. با توجه به مقادیر تعریف شده برای سطوح High و Low برای CMOS و TTL، سطح منطقی یه پایه میتونه High، Low یا مابین این دو باشه. که اگه بین این دو باشه کلاً سطح منطقی محسوب نمیشه. نویز میتونه اثر داشته باشه.. یا الکتریسیته ساکن بدن میتونه تاثیر داشته باشه. اگه پایه رو لمس کنیم، ممکنه سطحش تغییرکنه. با توجه به این که امپدانس ورودی این پایه ها مقدار بالاییه، یه جریان خیلی کوچیک میتونه ولتاژ روی اونا رو مقدار زیادی جابه جا کنه. اگه خودتون بخواید این کار رو انجام بدید میتونید اون پایه رو لمس کنید یا یه جریان خیلی کوچیک بهش بدید. یا به طریقی نویز ایجاد کنید. مثلاً از نزدیک اون پایه یه سیم که جریان پالسی روش هست عبور بدید. این کار باعث میشه نویز کراستاک اون سیم، روی ولتاژ اون پایه اثر بذاره. البته بنده تا حالا این مورد آخر رو امتحان نکردم. اما مشاهده کردم با لمس کردن پایه سطح اون تغییر کنه.

      پاسخ
  6. سلام خسته نباشید.یه سوال داشتم.درزمان ریست یا لحظه ای بعد ازان پایه های gpio یک میکروکنترلر به چه صورت تنظیم میشه؟؟
    ممنون میشم جواب بدین

    پاسخ
    • سلام. خیلی ممنون. بعد از ریست با توجه به این که رجیسترهای DDR و PORT صفر هستند، پایه ها توی حالت ورودی امپدانس بالا قرار دارن. خواهش میکنم

      پاسخ
  7. سلام خسته نباشید اگه مقدار رجیستر PORTB را به صورت PORTB=0XAA و DDRB=0X00 تعریف شود چه مفهومی دارد ؟ ممنون میشم پاسخ این سوال رو بدید ????

    پاسخ
    • سلام. با صفر شدن بیت های DDRB، همۀ پایه ها به صورت ورودی تعریف میشن. مقدار AA هم برای رجیستر PORT به این معنیه که برای بیت های 1 شده، مقاومت پول آپ داخلی پایۀ متناظر اون فعال شده. در کل برای مثال شما، همۀ پایه های پورت B ورودی هستند و پایه های 1 و 3 و 5 و 7 این پورت، به صورت داخلی پول آپ شدن. پایه های 0 و 2 و 4 و 6 هم تو حالت Tri-state هستند

      پاسخ
  8. سلام دوتا سوال داشتم اول اینکه بعد از پایان برنامه در صورتی که (PINC.0=0)باشه چه عددی تو سون سگمنت نشون میده؟
    سوال بعدم اینه که به چه دلیل در برنامه PINC==0 با فاصله ۱۰۰ میلی ثانیه استفاده میشود؟

    پاسخ
    • سلام. سوالتون رو توی نوشتۀ مربوط به سون سگمنت مطرح کنید. موفق باشید.

      پاسخ
  9. برنامه ای که پورت B را یک و بعد از یک فاصله زمانی آن را صفرکند. رو میشه با ویزارد کد ویژن نوشت؟ اگر بله راهنمایی میفرمایید…ممنون

    پاسخ
    • کدویزارد فقط پورت رو پیکربندی میکنه. شما با کدویزارد پایه های مورد نظر رو خروجی کنید. کد رو Generate کنید. بعد برید توی حلقۀ While این دستورها رو بنویسید:

      PORTB.2 = 0;

      delay_ms(1000);

      PORTB.2 = 1;

      delay_ms(1000);

      مثلاً برای پایۀ دوم. و این که این روش مقدار دهی مخصوص کدویژنه. توی نرم افزارای دیگه مثل اتمل استودیو باید اینطوری مقدار بدید:

      PORTB |= (1<<2);

      delay_ms(1000);

      PORTB &=~ (1<<2);

      delay_ms(1000);

        در ضمن ابتدای فایل main، کتابخونۀ delay.h رو فراخونی کنید. موفق باشید

      پاسخ
  10. سلام
    سر یال 0 را به پروگرانمر و سریال یک 128 را به یک ماژول سیم کارت متصل نمودم
    هنگامی که پروگرامر از میکرو جدا میکنم میکرو دیگر از پورت سریال یک اطلاعات پیامک های ورودی به ماژول سیم کارت نمیخواند
    باید کار خاصی با rxو tx سریال ۰ انجام بدم که سریال یک ان فعال شود و بتواند اطلاعات را از ماژول سیم کارت بخواند

    پاسخ
  11. سلام وقت به خیر
    ممنون از آموزش های خوبتون. فایل پیوست نمونه کد و فایل شبیه سازی رو از کجا می تونیم دریافت کنیم؟

    پاسخ
    • سلام وقت بخیر.
      به ایمیل شما ارسال شد.

      پاسخ

یک دیدگاه بنویسید

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

دیگر آموزش های یوبرد

آموزش زبان C و MISRA-C یوبرد

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

آموزش طراحی PCB و نویز یوبرد

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

آموزش لحیم کاری و IPC-A-610 یوبرد

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

آموزش میکروکنترلرهای ARM STM32 یوبرد

شروع بازی ST

آموزش آردوینو یوبرد

جادۀ آسفالت میکروکنترلر

آموزش FreeRTOS یوبرد

زمان واقعی در میکروکنترلر و پردازنده های کوچک با FreeRTOS

آموزش ماژول های SIM800 یوبرد

تلفن همراه صنعت

آموزش زبان ++C و ++MISRA-C یوبرد

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

آموزش میکروکنترلرهای LPC یوبرد

یادگار فیلیپس

آموزش های شاخص

دانلود

لطفا برای دریافت لینک دانلود اطلاعات خواسته شده را وارد نمایید
ضبط پیام صوتی

زمان هر پیام صوتی 4 دقیقه است