آموزش AVR (آموزش های آقای مهدی مهدوی)

در اين بخش مي‌توانيد آموزش و مثال‌های مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

آموزش AVR (آموزش های آقای مهدی مهدوی)

پست توسط Mahdi Mahdavi » پنج شنبه 20 تیر 1392, 2:02 pm

[FONT=arial, sans-serif]    [FONT=arial, sans-serif]  نشر آن است.   
سلام دوستان.
در تابستان در حال یادگیری AVR هستم . چون مبحث بسیار کاربردی هست ، آینده شغلی خوبی داره ، زیاد سخت نیست و بسیار شیرینه سعی میکنم تا جایی که بتونم این مبحث رو در این تاپیک آموزش بدم. البته خودم دارم یاد میگیرم ولی الان توانایی اموزش این مبحث رو هم دارم.
امیدوارم که مفید واقع بشه
سوالات خودتون رو در تاپیک جداگانه مطرح کنید تا این تاپیک بصورت پیوسته به آموزش AVR بپردازه و سوالات هم در بین مباحث پاسخ داده میشه.

Update 1:
کتاب پیشنهادی : "آموزش کاربردی میکرو کنترلر های AVR (به زبان های C و #C ) "
موسسه فرهنگی هنری دیباگران تهران
مولفان : مهندس سجاد ابراهیمی . مهندس محمد عادلی نیا

چندین کتاب در این ضمینه رو دیدم. یکی از بهتریناش این بود .برای شروع خیلی خوب و عالیه. کتابای دیگه هم هست .
من دارم با این کتاب پیش میرم "و یک کتاب دیگه که به وقتش معرفی میشه"
اگر تهیه کنید خیلی کامل تر از این تاپیک توضیح داده.
میکرو پروسسور چیست؟
میکرو پروسسور به قطعه ای گفته میشه که وظیفه پروسه کردن و محاسبات رو بر عهده داره . نمونه بارز و ساده اون CPU کامپیوتر هست .
میکرو کنترلر چیست؟
میکرو کنترلر یک مدار مجتمع یا یک چیپ هست که شامل تمام قطعات یک کامپیوتره و قابل برنامه نویسی هم هست. این قطعه شامل RAM - ROM - CPU - I/O - RTC , EEROM و ... هست که تمام اینها توضیح داده میشه .
اما کاربرد میکرو کنترلر چیه؟ فرض کنید یک جایی قصد کنترل یک عمل " نه خیلی پیچیده" رو دارید . و فقط هم 5 ولت تغذیه در اختیار دارید. "در صنعت زیاد با این موارد برخورد میکنیم"
در اینجا استفاده از رایانه منطقی نیست. چون هم جاگیره هم پر مصرف و هم گران
بهترین راه در اینجا استفاده از میکرو کنترلر هاست.
میکرو کنترلر ها در ساعت های دیجیتال . روبات های کارخانجات و روبات های دانشجویی . گوشی تلفن همراه و ... استفاده میشه
AVR یکی از انواع میکرو کنترلر ها هست و ATmega32 یکی از پر مصرف ترین و به صرفه ترین مدل این میکرو کنترلر.

ادامه دارد ...
ناگهان چقدر زود دیر میشود !

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » پنج شنبه 20 تیر 1392, 11:44 pm

Update 1
قسمت دوم :
قطعاتی که لازم داریم در طول پروژه "به همراه قیمت های حدودی":
یک عدد میکرو کنترلر ATmega32A "در اواسط آموزش به دو عدد نیاز خواهیم داشت" 10.000 تومان
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
بورد آزمایشگاهی Bread Board " بورد سوراخ سوراخ که برای بستن موقتی مدار بکار میره " 8000 تومان
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
یک منبع تغذیه 5 ولت

پروگرامر " پروگرامر کارش ریختن برنامه ای که نوشتیم بر روی آی سی هست" " پروگرامر رو میشه خودمون هم بسازیم ولی انواع آماده بهتره که در ادامه توضیح میدیم چرا" 30.000 تومان
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

استپ موتور 5000 تومان
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
سنسور دما LM35 و 7-Segment ."هر کدام حدود 700 تومان"
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

char LCD 2*16 حدود 11000 تومان "با تشکر از [color=#3366cc]sinaset, عزیز . قیمت اصلاح شد " 
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
درایو یا راه انداز استپ موتور 500 تومان " با تشکر از [color=#3366cc]sinaset, عزیز قیمت اصلاح شد "
 [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

بازر یا بلندگوی کوچک
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
مقداری سیم استخوانی برای بستن مدار روی برد آزمایشگاهی
تعدادی LED

َاشنایی با زیان C "در خلال آموزش AVR روی این مبحث هم کار میکنیم"

در کل برای شروع به حدود 100.000 تومان نیاز داریم "برای خرید کل قطعات بالا"

با همین وسایل میتونیم خیلی جلو بریم. "برای مثال به LCD اواسط کار نیاز داریم"


برنامه نویسی AVR به زبان ها Basic - C# - C++ , C معمولا انجام میشه که ما به علت سهولت و انعطاف بیشتر با C اینکار رو انجام میدیم.
در دو سه قسمت بعدی پایه و اساس AVR و مفاهیم اون مثل پورت و ... توضیح داده میشه و انشاالله بعد از اون با کار عملی ادامه میدیم.
فایل پروژه های آموزش هم در اموزش بعدی هر پروژه قرار خواهد گرفت.
ادامه دارد ...
ناگهان چقدر زود دیر میشود !

Colonel II
Colonel II
نمایه کاربر
پست: 7010
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: آموزش AVR

پست توسط sinaset » جمعه 21 تیر 1392, 12:26 pm

سلام خدمت اقا مهدی
ممنون از تاپیک خوبی که ،راه اندازی کردید ، انشالله که ادامه پیدا کنه .

مهدی جان قیمتی هایی که قید کردید ، به نظرتون کمی بالا نیستن ؟ مثلا درایو uln2803 قیمتش 500 تومانه اما ذکر کردید 1500 یا lcd قیمتش (سبز رنگ ) 11.000 تومانه اما ذکر کردید 15.000 تومان. و...

باتشکر از شما :razz:
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » یک شنبه 23 تیر 1392, 12:13 am

sinaset, عزیز . سپاس :razz:
بله . قیمت ها در بازار کمی پایین تره . " البته قیمت درایو استپ موتور رو اشتباه نوشتم.همون 500 تومانه" ولی مثلا LCD 2*16 در بازار از 11.000 تومان دیدم به بالا و یا مثلا بورد آزمایشگاهی از 7000 داریم تا 9000 تومان.
بستگی به فروشنده داره "و همچنین مدل برخی قطعات"
برا همین دست بالای قیمت ها رو نوشتم.
برای مثال پروگرامر از 25000 داریم تا 50.000 به بالا.
از تذکرتون بسیار ممنونم :razz:

پورت :
پورت به مجموعه خطوط سیگنالی گفته میشه که داده ها به اون ارسال میشه یا از اون دریافت میشه.
اهمیت پورت ها در برنامه نویسی میکرو کنترلر ها نمود پیدا میکنه. این که مثلا در پورت موازی کدام پایه وظیفه ارسال و دریافت اطلاعات رو دارند.کدام پایه ها زمین هستند و ...
سه نوع پورتی که با مبحث AVR بیشتر مرتبطه شامل : پورت موازی . پورت سریال و پورت USB هست.
برای مثال pinout یا نقشه پین های خروجی پورت موازی و سریال رو در عکس های زیر مشاهده میکند.
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

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

* isp :

isp که مخفف In System Programming به معنی برنامه ریزی داخل سیستمی است.
در این حالت نیازی نیست میکرو کنترلر رو از روی برد برداریم و روی پروگرامر بزاریم.بلکه با متصل کردن یک کانکتور روی برد آزمایشگاهی و یا برد چاپی "به پایه های مخصوص روی میکرو" میشه اون رو برنامه ریزی کرد.
این نوع پروگرامر اصولا همراه پروگرامرهای موجود در بازار ارائه میشه و اگر این قابلیت رو داشته باشه با عنوان isp روی کارتن و یا کاتالوگ محصول مشخص شده.
ساختن این نوع پروگرامر رو در ادامه خواهیم داشت.


انواع میکرو کنترلر های AVR :
میکرو کنترلر های AVR به چند دسته یا خانواده دسته بندی میشن. مثل Mega . AT90S . Tiny
دسته Mega با توجه به قیمت و امکانات به صرفه ترین خانواده هست " البته نه همیشه . در برخی کاربرد ها شاید دو خانواده دیگه بهتر عمل کنند "
برای مثال میکرو کنترلر ATMega32 دارای 32 کیلوبایت حافظه داخلی قابل برنامه ریزی . 1024 بایت حافظه EEPROM . مقدار 2 کیلوبایت حافظه داخلی . رنج ولتاژ 4.5 تا 5.5 ولت و ...
" در کنار ATMega32 یک مدل دیگه معرفی شده با نام ATMega32A . مشخصات این دو پردازنده دقیقا شبیه به هم هستند ولی آدرس دهی حافظه این دو مدل کمی متفاوته. ممکنه برخی برنامه های ATMega32 روی ATMega32A به خوبی جواب نده. در بازار هم بیشتر ATMega32A پیدا میشه . همون رو تهیه کنید. "
میکرو های AVR بر پایه معماری RISC "Reduced Instruction Set Computer " بنا شده . به معنی دستور العمل های کاهش یافته هستند که باعث افزایش سرعت پردازنده خواهد شد.
در قسمت بعدی به معرفی بخش ها و پایه های میکرو کنترلر ATMEGA32A خواهیم پرداخت و معرفی بخشی از اجزا و قابلیت های اون.
ناگهان چقدر زود دیر میشود !

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » یک شنبه 23 تیر 1392, 1:04 pm

ادامه:
واحد های درونی:
CPU: واحد پردازشگر مرکزی میکرو کنترلر . وظیفه رمزگشایی و اجرا برنامه موجود در حافظه رو بر عهده داره

حافظه برنامه: حافظه ای که برنامه در داخلش ذخیره میشه و از نوع غیر فرار . یعنی با قطع برق اطلاعات داخل حافظه پاک نمیشه . اگر برنامه حجمی بیشتراز حافظه داخلی میکرو داشته باشه میشه از حافظه خارجی کمک گرفت. این حافظه از انواع ROM . EEPROM . Flash و ... میباشد.

RAM: حافظه موقتی میکرو .به عنوان یک پشته یا Stack برای CPU عمل میکنه. این حافظه از نوع فرار هست و با قطع برق اطلاعاتش پاک میشه.

Clock Osilator: میکرو کنترلر اجرا و محاسبه یک برنامه رو با نرخ خاصی انجام میده. این نرخ رو یک کریستال تامین میکنه و یا توسط RC-Osilator خود میکرو کنترلر تامین میشه.

Serial Port: پورتی در میکرو کنترلر که بسیار مفیده. از این پورت میشه جهت اتصال اون به کامپیوتر و یا اتصال دو یا چند میکرو به هم دیگه استفاده کرد.

ِDigital I/O Port : پورت ورودی خروجی دیجیتال. برای تبادل اطلاعات میکرو با دنیای پیرامون .

Analog I/O Port: مانند قبل ولی با کمی تفاوت.برای اتصال مثلا PC به میکرو کنترلر چون هر دو از کمیت دیجیتال استفاه میکنند پس از پورت ورودی خروجی دیجیتال استفاده میکنند. ولی کمیت های آنالوگ بسیاری داریم برای معرفی به میکرو کنترلر. مثل سنسور ها و هر قطعه ای که ولتاژ آنالوگ تولید کنه.در این صورت از واحد ADC یا مقایسه کننده آنالوگ دیجیتال استفاده میکنیم.
واحد دیگری در این رابطه PWM که در حقیقت خروجی آنالوگ هست که مثلا در کنترلر موتور ها LED و ... استفاده میشه.

Timer: واحد مهمی که دو وظیفه داره .اول تولید نرخ ساعت و عمل زمانبندی و دوم شمارش یک واقعه . هر دو عوامل پر استفاده ای هستند و در عمل بسیار پرکاربرد.


Watchdog Timer : زمان سنج سگ نگهبان !! خیلی اوقات پیش میاد که برنامه به دلایل خاصی موفق اجرا نمیشه و یا در یک حلقه بینهایت گیر میکنه.در این صورت این واحد وارد عمل میشه و تراشه رو راه اندازی مجدد میکنه تا به اجزای درونی اون آسیب نزنه.

RTC: Real Time Clock تایمری برای نگهداری زمان و تاریخ و رویداد های زمانی

میکرو کنترلر های ATMEGA32A دارای دو نوع PDIP و TQFP/MLF که ما از نوع PDIP استفاده میکنیم. چون قابلیت استفاده روی برد آزمایشگاهی داره.
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
تا حدودی میشه گفت که اجزا داخلی میکرو به این صورت به هم مرتبط هستند:
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

و شماتیک اجزا داخلی هم به این صورته:
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

زبان C :
در برنامه نویسی زبان C که یک زبان شی گراست ابتدا باید کتابخانه های لازم برای دستورات را فراخوانی کنیم. برخی دستورات در کتابخانه Mega32 برخی در stdio.h و مثلا درستورات کنترل LCD در کتابخانه lcd.h هستند.
برای فراخوانی این کتابخانه ها از دستور <>include# استفاده میکنیم.
مثلا

کد: انتخاب همه

#include<lcd.h>
ناگهان چقدر زود دیر میشود !

Colonel II
Colonel II
نمایه کاربر
پست: 7010
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: آموزش AVR

پست توسط sinaset » چهار شنبه 26 تیر 1392, 10:31 am

سلام اقا مهدی .

پسر خوب چند روزی تاپیک رو بروز نمی کنی ، چرا ؟ ادامه بدید لطفا ، :razz:

راستی اگر امکانش هست ،هر چند وقتی یک بار ، یک پی دی اف از کل مطالب تایپک درست کن و در پست اول قرار بده .(اینطوری تاپیک جامع تر میشه )

باتشکر از شما :D :razz:
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » جمعه 28 تیر 1392, 3:11 am

sinaset, عزیز :razz:
راستش فکر نمیکردم کسی پیگیر این تاپیک باشه ! خوشحال شدم !!! این دو سه روزه درگیر کارای دانشگاه بودم برا همین زمان نشد پست بزارم. ممنونم
و اما ادامه کار . برای شروع کار ما فعلا پروگرامر آماده و LCD رو نیاز نداریم . که پروگرامر اگر باشه که چه بهتر.
میتونید پروگرامر STK 200/300 رو با قیمت خیلی مناسب تهیه کنید یا خودتون بسازید.
میکرو کنترلر های ATmega32 دارای چهار دسته پورت هستند که میتوان از اونها به عنوان پورت ورودی . خروجی استفاده کرد . و هر پایه کاربرد دیگه هم داره.مثلا پورت A علاوه بر پورت ورودی و خروجی وظیفه تبدیل ADC یا آنالوگ به دیجیتال رو هم داره.
به پایه های 6 تا 11 دقت کنید. برای ساخت پروگرامر لازمه
علت اینکه یکی از پایه های پورت D تک افتاده اونطرف هم بحث طراحی پردازنده هست و چاره دیگه ای نبود ! :grin:

پایه های 9 تا 13 هم مربوط به تغذیه و ریست و ... هست که توضیح میدم.
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

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

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

پس بهتره پروگرامر رو تهیه کنید و یا STK 200/300 رو خودمون بسازیم. "مدار دومی:
برای ساختش به این موارد احتیاج داریم:
یک عدد آی سی 74HC244 که یک تراشه بافری هست و از گم شدن یا از دست رفتن داده ها حین پروگرام جلوگیری میکنه.
یک مقاومت 100K
یک عدد پین هدر "برای سوار کردن LCD روی بورد حتما لازمه . کلا لازمه. بخرید."
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
دو عدد رگولاتور 5 ولت " کلا چیز خوبیه . برا صاف کردن برق و جلوگیری از صدمه به میکرو"
و برای راحتی کار یک عدد سوکت برا ATmega32 . اینطوری سیم ها رو به پایه های مربوط روی سوکت لحیم میکنید و پروگرام کردن خیلی ساده و لذت بخش میشه. میتونید سوکت ساده[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] و یا انواع قفل دار رو تهیه کنید.[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
و مقداری سیم.
و تهیه یک کابل مادگی به مادگی پورت موازی یا همون کانکتور پورت پرینتر " که برای هر بار پروگرام نخواد برید پشت کیس"
در کل خرید این پروگرامر ساده تره. این آموزش هم جنبه عملی داره هم آموزشی.
خودم به زودی پروگرامر رو میسازم و عکسش رو قرار میدم.
ناگهان چقدر زود دیر میشود !

Captain
Captain
پست: 2755
تاریخ عضویت: چهار شنبه 18 بهمن 1385, 12:46 pm
محل اقامت: شیراز
سپاس‌های ارسالی: 22364 بار
سپاس‌های دریافتی: 5555 بار

Re: آموزش AVR

پست توسط Present » جمعه 28 تیر 1392, 12:07 pm

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

Colonel II
Colonel II
نمایه کاربر
پست: 3470
تاریخ عضویت: جمعه 20 اردیبهشت 1387, 9:44 am
سپاس‌های ارسالی: 5878 بار
سپاس‌های دریافتی: 12403 بار
تماس:

Re: آموزش AVR

پست توسط Solver » جمعه 28 تیر 1392, 1:14 pm

Mahdi Mahdavi, ما به موجب توصیه خودتان ساکت ماندیم.

دنبال می کنیم و می خوانیم گاهی هر پست را در چند مرحله تا یاد بگیریم، باور ندارید بعدا امتحان بگیرید تصویر
Personal Site: [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » جمعه 28 تیر 1392, 7:49 pm

سلام بر همه دوستان و ممنون بابت این همه اظهار لطف :razz:
Present, عزیز . از هر گونه ایده و کمک استقبال میشه شدید ! خیلی ممنونم
M.Abooali, عزیز. خواهش میکنم. :D اصلا فراموش کرده بودم تاپیک جدید رو ایجاد کنم. شک داشتم که طرح سوال در همین تاپیک نتیجه بهتری میده یا در تاپیک جداگانه؟
به هر حال تاپیک جدید ایجاد شد .متشکرم.
avr-t108335.html

کد: انتخاب همه

http://www.centralclubs.com/avr-t108335.html
ناگهان چقدر زود دیر میشود !

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » یک شنبه 30 تیر 1392, 4:45 pm

نرم افزار
[COLOR=#000000]برای برنامه نویسی میکروکنترلر از کد ویژن استفاده میکنیم که لینک دانلودش رو پایین مشاهده میکنید.
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
برای پروگرام هم اگر پروگرامر تهیه کنید معمولا یک سی دی حاوی نرم افزار پروگرامر همراهش هست. اگر پروگرامر USB خریداری کنید میتونید از progisp استفاده کنید که پروگرامر بسیار خوبی هست.و با پروگرامر های ISP یا In System Programming که قبلا توضیح دادیم و پروگرامر های USB سازگاری داره.

مزیت [COLOR=#C00000]Codevision
اینه که اولا بسیار از کدهای لازم رو خودش تولید میکنه. کد هایی که در رابطه با تنظیمات میکرو هست. مثل وضعیت واحد ADC . وضعیت و تنظیمات تایمر ها و ... .در بخشی که Code Vision Wizard نام داره تنظیمات رو در یک رابط کاربری بسیار ساده وارد میکنیم و کد های لازم توسط کد ویژن تولید میشه.
همچنین این نرم افزار فایل Hex که برای پروگرام کردن لازمه رو خود به خود تولید میکنه."فایلی که برای پروگرام کردن در پروگرامر ها Add یا Load میکنیم"
از مزیت های دیگه این کامپایلر میشه به دیباگ کردن و رفع عیب نام برد.تنظیمات و شخصی سازی های گسترده.کم حجم و ...
نسخه قبلی کد ویژن یک سری باگ کوچیک داشت و از میکرو های جدید مثل ATMega32A پشتیبانی نمیکرد.که این مشکلات در این نسخه رفع شده.


نرم افزار دیگه ای که در اواسط آموزش باهاش آشنا میشیم Proteus که یک شبیه ساز مدارات الکترونیکیه. آشنایی با این نرم افزار در حد بسیار ساده خواهد بود. چون پروژه هایی که فعلا باهاش سر و کار داریم بسیار راحت هستند و میشه به راحتی اونا رو روی بورد سوار کرد و نیازی به شبیه سازی نیست.

در اکثر مواقع ما به حلقه ها و جملات شرطی زبان C در برنامه نویسی میکرو ها نیاز داریم. پس پیشنهاد میشه این دو بخش رو یا از اینترنت و یا از کتاب های آموزش C مطالعه کنید. مبحث بسیار راحتیه.
while - for - if - switch -
زبان C مختصر :
[COLOR=#000000]توضیحات نویسنده برنامه در زبان C پس از // و یا بین /* */ قرار میگیره. این توضیحات هیچ تاثیری در برنامه نداره و فقط جهت سهولت در اشکال زدایی برنامه استفاده میشه.
حلقه ها در برنامه نویسی بسیار پر کاربرد هستند.
برای مثال برای برنامه نویسی یک ساعت ، چشمک زن ، استپ موتور ، روبات ها و ... از حلقه ها به وفور استفاده میشه.
دو تا از پرکاربرد ترین حلقه ها حلقه های while , for هستند که عملکردی شبیه هم دارند:
[COLOR=#C00000]while
:
در این حلقه ابتدا یک شرط برای ورود به حلقه در نظر میگیریم . تا جایی که شرط برقرار باشه اون حلقه ادامه پیدا میکنه.مثلا قطعه برنامه زیر اعداد یک تا ده رو یک بار چاپ میکنه:    

کد: انتخاب همه

#include <stdio.h> // moarrefi ketabkhane  estandard baraye dastoorate scan , print
int i=0;  // i is integer variable
main()
{
while(i==10)
{
i++;            // yeki be i ezafe kon
printf("%d\n",i);   //chape a'adad
}
}
خروجی:
1
2
3
4
5
6
7
8
9
10


 [COLOR=#C00000][COLOR=#000000]در برنامه بالا :
شرط داخل پرانتز ()while عنوان میکنه تا موقعی که i مساوی 10 نشده این عمل رو تکرار کن.
یعنی++i یکی به i اضافه کن
مقدار i رو که از نوع ده دهی یا decimal "%d" هست چاپ کن
دوباره به شرط داخل پرانتر رو چک کن. اگر شرط درست بود دوباره دستورات حلقه رو تکرار کن. در غیر این صورت برنامه متوقف میشه
اگر شرط داخل while برابر یک بود (1)while این حلقه بینهایت نام داشت و بی نهایت بار تکرار میشد.
در پست بعدی با همین دستور یک چشمک زن یک لامپی میسازیم
 

کد: انتخاب همه

کد ویژن:
http://www.techno-electro.com/21-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84%D8%B1-CodeVisionAVR-2-05-3.html

پروگ آی اس پی Progisp:

http://uplod.ir/8p5w5gcnbk3p/progisp172.rar.htm




   دارد...
ناگهان چقدر زود دیر میشود !

Super Moderator
Super Moderator
نمایه کاربر
پست: 1343
تاریخ عضویت: شنبه 7 مهر 1386, 12:02 pm
سپاس‌های ارسالی: 3021 بار
سپاس‌های دریافتی: 4752 بار

Re: آموزش AVR

پست توسط Mahdi Mahdavi » سه شنبه 1 مرداد 1392, 2:03 pm

کار با پورت ها 1 . "کار عملی . چشمک زن تک لامپی"
کار با پورت ها و مدیریت اونها یکی از کاربردی ترین عملیات با میکرو کنترلرهاست و کار ساده ای هم هست.
هر پورت "پورت های A , B , C . D " شامل 8 پایه هست که از 0 تا 7 نامگذاری میشن.مثلا پورت A "PORTA.0 , PORTRA.1 , ... PORTA.7"
سیستم دوتایی :
در سیستم دوتایی ما 8 بیت داریم که میتونه مقدار 0 یا 1 رو بگیره . و مقادیر این بیت ها توانی از 2 هست.
در زیر یک سیستم دو دویی رو به همراه مثالی برای اون آوردیم.
با جمع بیت های یک مقدار اون عدد در سیستم ده تایی یا Decimal بدست میاد
1 2 4 8 16 32 64 128
0 1 0 0 0 0 0 0 برابر عدد 2
1 0 0 1 0 0 0 0 برابر عدد 9 "مقادیر بیت های 1 و 8 یک شده. و 1+8=9 "
0 0 0 0 1 0 1 0 برابر با عدد 80
0 0 0 0 0 0 0 0 برابر عدد 0
1 1 1 1 1 1 1 1 برابر عدد 255

دو متد و روش ساده و مرسوم کار با پورت ها به این صورته:

1 - هر پورت رو جداگانه دستور بدیم که راحت تر ولی زمان بر تر هست.برای مثال

کد: انتخاب همه

PORTA.0=1;
PORTA.1=1;
PORTA.2=1;
PORTA.3=1;
PORTA.4=0;
PORTA.5=0;
PORTA.6=0;
PORTA.7=0;

در این دستورات چهار پایه اول پورت A را یک کردیم و چهارتای بعدی رو 0

حالا اگر این هشت تا پایه رو به عنوان 8 بیت سیستم دو دویی در نظر بگیریم به این صورت میشه
1 2 4 8 16 32 64 128

1 1 1 1 0 0 0 0
میبینیم که چهار پایه یا همون چهار بیت اول یک و چهار بیت بعدی صفر هست.
پس میشه دستور بالا رو در یک خط خلاصه کنیم:

کد: انتخاب همه

PORTA=15

این روش در کنترل استپ موتور کاربرد فراوانی داره."که در پروژه عملی اون کاملا توضیح میدیم.
حالا ما برای کنترل یک لامپ LED برای سیستم چشمک زن میتونیم از این کد استفاده کنیم.
ابتدا کد ویژن رو باز میکنم.
New>Project
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

با این کار یک پروژه جدید رو شروع میکنیم. بعد باید خانواده میکرویی که باهاش کار میکنیم مشخص کنیم. در اینجا چون ATmega هست گزینه اول رو انتخاب میکنم.
پنجره Codevision wizard باز میشه.اینجا همونجایی هست که پارامتر های خودمون رو وارد میکنیم و کدویژن کد های لازم رو خودش تولید میکنه.
تنها کاری که اینجا باید بکنید انتخاب نوع میکرو "ATmega32A" و تبدیل پورت A به خروجی " در بخش port "
بعد از منوی program گزینه generate , save and exit رو میزنیم. در این مرحله باید کد ها و فایل های برنامه رو ذخیره کنیم.
"چون هر پروژه مشتمل بر چندین فایل هست پیشنهاد میشه برای هر پوژه فولدری ایجاد کنید و فایل ها رو داخل اون فولدر با هر نامی که دسوست دارید save کنید. برای مثال میتونید برای این کار عملی فولدری با نام LED1 بسازید و فایل ها رو با نام LED داخل اون ذخیره کنید"
چهار دسته فایل باید ذخیره کنید.بعد از این کار کدها تولید میشن.

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
در آخر این کد ها یک حلقه while هست که کدها و دستورات رو داخل اون مینویسیم.
"دستورات و آموزش پروژه اول و شماتیک اون بصورت مختصر توضیح داده میشه و فایل های برنامه "و در صورت لزوم عکسی از پروژه انجام شده" در پست بعدی :
ما در حلقه (1)while آخر کد ها باید پورتی که LED به اون متصله روشن و خاموش کنیم تا یک چشمک زن داشته باشیم.همونطور که گفتیم حلقه while با شرط (1) یک حلقه بینهایته و این چشمک زن بی نهایت بار تکرار میشه

در ابتدای برنامه و قبل از دستور (void main(void باید کتابخانه های مورد نظر رو معرفی کنیم.در اینجا چون دستور تاخیر رو لازم داریم پس کتابخانه اون رو باید فراخوانی کنیم. با دستور

کد: انتخاب همه

#include <delay.h>

بعد داخل حلقه while میریم و پایه یک پورت A رو خاموش و روشن میکنیم.به این صورت میشه

کد: انتخاب همه

while (1)
{
PORTA.0=1;
delay_ms(500);  // nim sanye ta'khir
PORTA.0=0;
delay_ms(500);
{


[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
پس از نوشتن برنامه با این سه دکمه کار داریم. دکمه سمت چپ برنامه رو کامپایل میکنه تا در صورتی که اشکالی در برنامه نویسی هست اون رو توضیح بده تا اقدام به رفع اون مشکل کنیم.
اگر مشکلی نداشت نیاز به ساختن فایل hex برای پروگرام کردن میکرو داریم. با زدن دکمه وسط این اتفاق می افته و فایل مورد نظر در فولدر exe در فولدر پروژه که save کردید ساخته میشه.
حالا کافیه این فایل رو روی میکرو فلش بزنیم.
برنامه Progisp رو باز میکنیم .نوع پروگرامر رو انتخاب میکنم. نوع میکرو کنترلر رو هم انتخاب میکنیم و فایل hex رو هم از طریق load flash باز میکنیم
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
با زدن گزینه های erase chip ,program flash با هربار زدن دکمه Auto اعمال پاک کردن چیپ و فلش کردن اتوماتیک انجام میشه .
توجه کنید:
در بخشی که در عکس بالا پررنگ تر مشخص شده کلیک کنید.
دقت کنید که مقدار SPIEN حتما 0 باشه. فلش کردن Fuse bit ها بدون آگاهی ممکنه باعث سوختن میکرو کنترلر بشه و دیگه قابل استفاده نباشه.
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]


چون در اینجا فقط با یک پایه کار داریم این روش ساده تر از استفاده از روش دو دوییه.
شماتیک این مدار هم به این صورته" نرم افزار شماتیک بهتری فعلا در دسترس نیست.به زودی شماتیک های بهتری در دسترس قرار میگیره"
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]


بعد از اینکه پروگرامر ISP رو خودم ساختم آموزش پروگرام از طریق خود codevision رو هم توضیح میدم.
ناگهان چقدر زود دیر میشود !

ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”