به نام خدا
آموزش جامع میکروکنترلر AVR جلسه12 : اول باس بگم که این مطلب رو باید تو جلسات اولیه میگفتم که نگفتم ….ولی الان میگم
چیکار میشه کرد آخه….بگذریم از این حرف ها….بریم سر اصل مطلب….والا تو این جلسه میخوام درمورد بحث پول اپ داخلی(INTERNAL PULL UP) صحبت کنیم….حالا پول آپ در Avr چی هستش و کارش چیه و غیره(
) رو در ادامه میگم…..این مطلب هم نیخواستم بگم …. میگفتم سادس و غیره ولی بعد دیدم ملت و خودم تو کار با کیپد مشکل دارن….و بازم دیدم
که اگه این مطلب ساده رو بزارم برا خیلیا میتونه مفید باشه….در ضمن میشه گفت پیش نیاز مطلب کیپد هستش که چند روز دیگه میخوام بزارم تو سایت.
مقاومت پول اپ (PULL UP)
والا لپ کلوم این میشه : یه مقاومت که اگه به زمین وصل بشه بهش میگن مقاومت پول دان(pull down resistor)….اگه به منبع ولتاژ وصل بشه این مقاومته بهش میگن مقاومت پول آپ(pull up resistor) …. با مقاومت پول دان هم ما فعلا کاری نداریم….حالا اگه از پول آپ داخل میکرو استفاده کنی میگل پول آپ داخلی و اگه از مقاومت استفاده کنی میگن چول آپ خارجی( >>>
) …. خوب از اونجایی که کسی نفهمیده بریم با هم چند تا عکس ببینیم
در زیر میخوام با مثال بهتون توضیح بدم….یه پروژه رو میخوام به 3 روش براتون انجام بدم…پروژه هم روشن و خاموش کردن led با دکمه(کلید) هستش….مثلا اگه فشار دادی رشن بشه و ولش کردی خاموش بشه
حالت1) با مقاومت پول آپ خارجی
پایه آبی = ولتاژ پایه ۰ ولت است.
پایه قرمز = ولتاژ پایه ۵ ولت است.
پایه خاکستری = ولتاژ پایه نامعلوم است.
(در عکس های زیر میتونید این رنگ ها رو ببینید)
دلیل گزاشتن هم جلوگیری از بوجود اومدن حالت نامعلوم هستش….
مثلا فرض کنید اون مقاومته نبود چه اتفاقی میوفتاد؟؟؟ >>>بیاین با هم بررسی کنیم(در زیر وقتی میگم پایه میکرو منظورم PORTA.0 هستش) :
وقتی کلید وصله : ولتاژ 0 ولت زمین میوفته رو پایه میکرو….تو این مورد فک نکنم کسی مشکل داشته باشه(شکل بالا رو هم بیبنید بد نیست)
اما وقتی کلید قطع هستش : هیچ ولتاژی روی پایه میکرو نمیوفته ، نه 0 ولت و نه 5 ولت ….. چون چیزی به پایه میکرو وصل نیست….اون وقته که میکرو برنامه ای که بهش دادیم رو درست و بر طبق میل ما اجرا نمیکنه.
توجه : حالا تو این حالا وقتی کلید رو فشار بدیم ولتاژ 0 ولت میوفته رو پایه میکرو و وقتی کلید رو فشار ندادیم و رو حالت عادی خودش هستش ، ولتاژ 5 ولت میوفته رو پایه میکرو.
اینم از کد این پروژه
1 2 3 4 5 6 7 8 9 10 11 | #include <mega16.h> void main(void) { DDRA=0X00;//ورودی کردن پورتی که دکمه یا همون کلید بهش وصله DDRC=0XFF;//خروجی کردن پورتی که ال ای دی بهش وصله while (1) { if(PINA.0==0)PORTC.0=1; if(PINA.0==1)PORTC.0=0; }; } |
چیز خاصی نداره که بخوام توضیح بدم
حالت2) با مقاومت پول دان خارجی
شماتیک پروژه
توجه: تو این حالت فرقش با این حالت قبل(با مقاومت پول آپ خارجی) اینه که تو این حالت مقاومت به زمین وصل میشه و دکمه یا همون کلید به منبع ولتاژ وصل میشه و بازم تو این حالت
وقتی کلید رو فشار ندادیم ولتاژ 0 ولت میوفته رو میکرو و وقتی فشار میدیم ولتاژ 5 ولت میوفته رو میکرو…..(در شکل بالا همون طور که میبیند وقتی کلید وصل نیست ولتاژ 0 ولت میوفته روی پایه میکرو
اینم از کد این پروژه
1 2 3 4 5 6 7 8 9 10 11 | #include <mega16.h> void main(void) { DDRA=0X00;//ورودی کردن پورتی که دکمه یا همون کلید بهش وصله DDRC=0XFF;//خروجی کردن پورتی که ال ای دی بهش وصله while (1) { if(PINA.0==1)PORTC.0=1; if(PINA.0==0)PORTC.0=0; }; } |
توجه مهم : 3 کد پروژه…در هر 3 حالت رو حتما با هم مقایسه کنید….این بحث ، بحث مهمی هستش……درسته سادس ولی مهمه…جالا کو گوش شنوا
حالت3) با مقاومت پول آپ داخلی
بعد کلی چرت و پرت گفتن(که لازم بود و باس میگفتم) بریم سر اصل مطلب….و هدف این مطلب آموزش AVR
توجه1 : اول کار اینو بگم که تا اونجایی که من میدونم و تست کردم مقاومت پول دان داخلی تو AVR ندارم….دیدلش رو هم نمیدنم
توجه2 : این حالت مثل حالت1 (با مقاومت پول آپ خارجی) هستش…فقط با این تفاوت که دیگه اون مقاومته رو قرار نمیدیم در مدار و از طریق کدنویسی این مقاومت پول آپ رو فعال میکنیم.
شماتیک پروژه
همون طور که در شکل بالا میبینید…پایه های PORTA همگی قرمز هستن…یعنی ولتاژ 5 ولت روشون هستش…یعنی پول آپ داخلی شدن و در حالت عادی ولتاژ 5 ولت دارن…وقتی کلید وصل میشه ولتاژ 0 ولت میوفته رو اون پایه میکرو….که دقیقا مثل حالت1 هستش(که وقتی کلید قطع هستش ولتاژ 5 ولت مقاومت میوفته رو میکرو…یعنی حالت عادی و وقتی دکمه رو فشار میدیم ولتاژ 0 ولت مبوفته روی میکرو)….لذا تو این حالت دیگه نیاز ب گزاشتن اون مقاومته نیست
اینم از کد این پروژه
1 2 3 4 5 6 7 8 9 10 11 12 | #include <mega16.h> void main(void) { DDRA=0X00;//ورودی کردن پورتی که دکمه یا همون کلید بهش وصله PORTA=0XFF;//پول آپ کردن پورت ای از داخل میکرو DDRC=0XFF;//خروجی کردن پورتی که ال ای دی بهش وصله while (1) { if(PINA.0==0)PORTC.0=1; if(PINA.0==1)PORTC.0=0; }; } |
این کد رو دیگه نمیشه توضیح نداد و پیوند…اینو باس توضیح داد…
وقتی یه پورت میکرو رو (مثلا پورت A) ورودی میکنیم(با DDRA=0X00 ) ….اگه خط بعدش مثلا بنویسیم PORTA=0XFF یعنی ما اومدیم مقاومت پول آپ داخلی پورت A (تمام بایه هاش…با توجه به کد 0XFF) رو فعال کردیم…..
ولی اگه یه پورتی از میکرو رو (مثلا پورت C) خروجی تعریف کنیم و خط بعد بیایم و (مثلا) بنویسیم PORTC=0XFF (الان مقدارش 0XFF هست که کاری باهاش نداریم…همین طوری این مقدار رو دادم) تو این حالت اومدیم پایه های پورت C رو مقادر اولیه دادیم….تو این حالت با توجه به مقدار 0XFF به پایه ها مقدار 5 ولت دادم….و اگه مینوشتم 0X00 به تمام پایه ها مقدار 0 ولت میدادم….
جمع بندی : وقتی پورتی رو خروجی تعریف کنی اون وقت کار ریجستر PORT اینه که مقدار اولیه پورت رو تعیین میکنه و وقتی پورتی ورودی باشه اون وقت کار ریجستر PORT این هستش که مقاومت پول آپ داخلی برای این پورت فعال باشه یا نه(0>>> غیر فعال — 1>>> فعال)
عکس زیر رو هم ببینید ظرر نداره (روش کلیک کنید و در اندازه بزرگتر ببینیدش)
والا مطلب طولانی شد و منم خسته ، اگه چیزی رو جا انداختم بگید تا….
اگه کسی چیزی رو متوجه نشد حالا به هر دلیلی حتما بپرسه تا بیشتر و بهتر توضیح بدم براش
اگه مطلب مفید بود 3 تا صلوات برا شادی روح شهدا بفرستید…..برا ظهور آقا هم دعا کنید….دیروز جشن نیمه شعبان بود…عیدتون هم مبارک
فعلا یا علی…
مهمان
سلام خسته نباشید
چطور ممکنه با یه کلید میشه روشن و خاموش کرد led رو
یعنی با یک کلیک روشن بشه بعد اگه دوباره کلیک رو بزنم خاموش میشه
مهمان
من که نفهمیدم چی شد از دوازده به بعد دوتا دوتا جلسه پریدید جلو بعدی14 بعدی 16 بعدی 18و… اشتباه نشده لینکای 1315و17و… کجاست؟
مهمان
عالی هستید، خدا بهتون عمر با عزت بده تا بتونید مث همیشه به خلق خدا خدمت کنید.
مهمان
سلام اگر بخوایم debunce سخت افزاری بزاریم در حالتی که مقاومت Pull Up داخلی رو فعال کردیم چطور میشه؟
مهمان
I HOPE YOUR DOING GREAT AS USUAL.THANKS FOR YOUR TRAINING.
مهمان
با سلام
دانلود پروژها چرا انجام نمیشود
نویسنده این مطلب
سلام – برای من مشکلی نداره – الان تست کردم.
مهمان
سلام
خیلی ممنون
مهمان
سلام آقای دمیرچیلو
خسته نباشید
مطالبتون خیلی خوبه
1-ببخشید اونجایی که گفتید اگر مقامت پول آپ نباشه و حالت های قطع و وصل کلید رو گفتید من متوجه نشدم
بنده راسیتش اینطوری متوجه شدم که وقتی مقاومت پول آپ نباشه
اگر کلید باز باشه:ولتاژ vcc میفته روی پایه ی میکرو و 1 منطقی میشه
اگر کلید بسته باشه:vcc و زمین اتصال کوتاه میشند و وضعیت نامعلومه
2-چرا وقتی که به پایه ی میکرو چیزی وصل نیست وضعیتش نامعلومه نمیشه بگیم چون ولتاژ بهش وصل نیست پس صفر منطقیه؟
3- ببخشید یه سوال دیگه هم داشتم وقتی که مقاومت پول آپ باشه وکلید هم وصل باشه آیا جریان از vcc هم به طرف زمین و هم به طرف میکرو میره؟
ببخشید طولانی شد
با تشکر از شما
نویسنده این مطلب
سلام.
1) عکس زیر رو ببینید : حالات وسطی ( که از مقاومت پول آپ یا دان استفاده نکردیم ) – خب وقتی کلید باز هستش – چیزی که میکرو میخونه نامعلوم هستش – بین 0 و 1 جابجا میشه همش ( وقتی کلید باز هسش / فشرده نشده ) – اگه کلید رو فشار بدیم ( ببندیم ) – مقدار gnd روی پایه میکرو میوفته و میکرو 0 میخونه.

2) فک کنم ( مطمئن نیستم ) وقتی پایه معلق میشه ( چیزی بهش وصل نیست ) بهش میگن “امپدانس بالا” – که نه 0 هستش و نه 1 :
3) یعنی شکل بالا، مورد سمت راست ( وقتی کلید وصله ) – به صورت تئوری چیزی که ما خوندیم – مستقیم میره تو gnd – چون مقاومتی سر راهش نیست…
مهمان
سلام خسته نباشید چطوری می تونم تو برنامه نویسی اردوینو یونو ام برای خوندن یه مقدار ای دی سی و نمایش اون در سریال مانیتور کاری کنم که مثلا اگه پایه A5که به عنوان ورودی انالوگ ام انتخاب شده اگه به چیزی وصل نبود توی سریال مانیتور ام بنویسه FALSE
ممنون
نویسنده این مطلب
سلام-یه راهش اینه
یه مقاومت پول دان مثلا وصل کنی به اون پایه – تا زمانی که مقدار 0 میخونی یعنی سنسور وصل نی – زمانی که سنسور وصل بشه – یه ولتاژی میوفته رو پایه فوق که اینطوری متوجه میشی سنسور وصل شده.
مهمان
باعرض سلام با همین دستور ddrدر زبان بسکام داخل یه برنامه میتونم یک pinیاport را هم ورودی و هم خروجی تعریف کنیم
مهمان
این زبان بسکام چه فرقی با C داره ؟؟ اکثر جاها من دیدم آموزش ها بر اساس زبان C هستش سخت نیست براتون؟
نویسنده این مطلب
بسکام کار نکردم ولی شما سی کار کن – اکثر چیزا با سی هستش یا زبون های مشابه سی- برنامه نویسی میکرو-موبایل-کامپیوتر و …
مهمان
سلام بر استاد عزیز
بسیار متشکر از زحمات شما
اینم نظر
موفق باشید
مهمان
سلام
خسته نباشید.
مطلبتون مفید بود.
مهمان
مطالب تون عالیه . و خیلی ممنون به خاطر این مطالب مفید
مهمان
توضیحاتت حرف نداره
دعا میکنم همیشه سلامت باشی و پر انرژی ادامه بدی این اموزش ها رو
مهمان
سلام مهندس ممنون از زحماتت یه سوال چرا با وجود مقاومت پول اپ داخلی چه لوزمی داره از پول اپ خارجی استفاده کنیم
نویسنده این مطلب
سلام-جواب درست و کاملی ندارم.
مهمان
آقا سلام دمتون گرم بابت سایت خوبتون که اطلاعات خوبی درش هست و کاملا ساده توضیح میدین…
جایگزین سیستم پول آپ یا پول دان سیستم بافرینگ هستش…میشه ی توضیحی بدید…
مهمان
واقعا دستتون درد نکنه…ازونجایی ک استاد بدون اینکه یاد بده تمرین میده ،خیلی کمک میکنه مطالبی که میذارید???
مهمان
با سلام مهندس در مورد ارتباط شیلد اترنت با برد آردوینو مگا هم چیزی میتونید بزارید برای اینترنت اشیا ممنون میشم.
مثال سنسور اثر انگشت هم عالی بود مثل همیشه
مهمان
تو این زمونه که همه چی پولی شده ، شما که مطالب رو رایگان در اختیار میذارین خدا خیرتون بده

مهمان
خدا خیرت بده اموزشات عالیههههههههههههههههههههه

مهمان
اقا چون این مطلبو هیچ جا درستو حسابی ندیدم و اینجا فهمیدم قضیه چیه نظر گذاشتم دمتگرم عالی بود دیگه مشتری سایتت شدیم
مهمان
حرف نداری آقا مهدی ، سایتت هم حرف نداره ، خیلی چیزا یادم داد . همیشه موفق باشی

مهمان
خیلی ممنون
عالی بود. کاملا متوجه شدم. اول اومدم انگلیسی جستجو کنم کلی حاشیه رفته بود.
بهتره اول آدم فارسی جستجو کنه.
مهمان
سلام

اول واسه اموزشاتون ممنون
دوم اینکه چرا Atmega32 با اینکه حافظه فلش و… بیشتری نسبت بهAtmega16 داره از اون ارزونتره؟
نویسنده این مطلب
سلام
بعد از اسم میکرو یه پسوندی قرار میگیره به اون توجه کن – دیتاشیتو دانلود کن و تفاوت رو بررسی کن
مثلا +ATMEGA16A-PU از ATMEGA32A-PU گرون تره – که حالا یه مرودش بر میگرده به نسخه میکرو – که باید با توجه به پسوند میکرو – بری دیتاشیت مروبطه شونو دانلود کنی و …
مهمان
سلام
.مطالبتون خیلی جالب و بدرد بخور هستش
.خیلی هم باحال توضیح میدید
.فقط یه چیزی فک کنم توی خانواده xmega که مال avr هستش هم پول آپ باشه هم پول دان+چند تا حالت دیگه
.گفتم شاید جالب باشه
.
نویسنده این مطلب
سلام – تو LPC هم همین طوره – چند حالت داریم –
مهمان
سلام آقا مهدی
مطالب خوبی گذاشتی برادر، من چند وقتی میشه از سایت شما استفاده می کنم.
متشکرم و در پناه حق موفق و پیروز باشی
مهمان
سلام.
تو دستورifچطوری بنویسیم ۲ بار؟
نویسنده این مطلب
سلام
متوجه نشدم – یعنی میگی یه IF داخل یه IF دیگه بزاریم؟
مهمان
سلام.
نه.
مثلا ۲بار کلید رو زدیم یهledروشن اکه۱با زدیم خاموش .
راهنمایی می خوام.
نه کد نویسی.
نویسنده این مطلب
خب یه متغییر تعریف میکنی – مقدارش رو ۰ میکنی – هر بار که کلید فشرده شد مقدارشو + ۱ کن بعد بررسی کن – هر موقع ۲ شد – کار مد نظرتو انجام بشه.
این چیزی که تو میخوای – باید به کمک تایمر انجام بشه.
مهمان
من کدی برای کیپد دارم که عملی درست نشون میده ولی در پروتیوس نشون نمیده اگه مشکلمو میدونید بگید لطفا.
نویسنده این مطلب
پروتئوس دیگه کار نمیکنم.
مهمان
سلام خدمت شما
شاید یکم دیر شده باشه اما امیدوارم مفید واقع بشه.
این فایل رو از اینجا دانلود کنید:
http://projects.m32.ir/up/2012/08/Proteus-7-Professional_LIBRARY.rar
دو فایل AVR.LIB و AVR.IDX رو در مسیر برنامه پروتئوس یعنی
C:\Program Files \Labcenter Electronics\Proteus 7 Professional\LIBRARY
بریزید و ریپلایس کنید و در هنگام شبیه سازی از میکروکنترلر جدید اضافه شده استفاده کنید
در خط پایانی برنامه هم این دیتا رو اضافه کنید(البته من چون C بلد نیستم کد دسیمال رو میذارم)
۱,۲,۳,۱۰,۴,۵,۶,۱۱,۷,۸,۹,۱۲,۱۳,۰,۱۴,۱۵
موفق باشید
منبع:m32.ir