رفتن به مطلب

آموزش مقدماتی میکروکنترلرهای avr همراه عکس + فایل برنامه و شبیه سازی +فیلم آموزشی


ارسال های توصیه شده

درود بر همه دوستان برقی

:a030:

 

در این تاپیک میخوایم برنامه های مبتدی تا حرفه ای برای شروع به کار با میکرو رو باهم کار کنیم هرکسی مدار یا برنامه ای کاربردی داره بذاره اگه فیلم آموزشی هم ازش دارید بذارید:w16:

 

691owjbln0ftmg94oeba.jpg

راستی من با bascom برنامه هارو قرار میدم کسی اگه زبان c هم کار کرده و بلده برنامه و پروتئوسش رو بذاره استفاده میکنیم :a030:

 

قوانین:

1- از دادن اسپم به شدت خودداری کنید تا هر کاربری میاد بخونه از ادامه خوندن پشیمون نشه!

2- برنامه ای که قرار میدید همراه فایل پروتئوس باشه اگر عکس و فیلم هم ازش دارید پیوست کنید .

3- در حد امکان توضیحاتی درباره برنامه داده بشه تا فهم اون بهتر صورت بگیره.

4- سعی کنید فیلم هایی که میخواید قرار بدید رو به فرمت های کم حجم تبدیل کنید و داخل آپلود سنتر خود سایت آپ کنید.

 

 

 

[flash=width=550 height=27]

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

لینک به دیدگاه
  • پاسخ 57
  • ایجاد شد
  • آخرین پاسخ

بهترین ارسال کنندگان این موضوع

بهترین ارسال کنندگان این موضوع

خب برای شروع کسانی که میخوان از صفر یاد بگیرن ابتدا به این تاپیک برن و اون چند قسمت اموزش رو بخونند(قبلا اون تاپیک قرار بود آموزش داده بشه اما استقبال زیادی نشد اینجا هم اموزش هم برنامه ها و مثال های مختلف همراه با فیلم هستش)

 

http://www.noandishaan.com/forums/thread108934.html

لینک به دیدگاه

خب واسه شروع یه برنامه خیلی ساده میذاریم خودمم اول با همین برنامه شروع کردم

 

 

 

 

 

تو این برنامه قصد داریم یک LED رو توسط میکروکنترلر Atmega8 روشن و خاموش کنیم(من تاخیر رو 1ثانیه گرفتم که میشه به هر زمانی تغییرش داد)

 

 

من برنامه رو در زیر قرار میدم و خط به خط توضیح میدم خیلی ساده اس، فایل برنامه و پروتئوس هم در پیوست قرار میدم

 

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

 

خب بریم سراغ برنامه

 

خط اول: در خط اول ما پیکره بندی رو انجام میدیم و نوع میکرو رو مشخص میکنیم.

خط دوم: فرکانس کاری میکرو رو مشخص میکنیم.

خط سوم : چون میکرو ما از نوع atmega8 هستش این نوع میکرو پورت a نداره و از پورت b شروع میشه و کلا داری 23 ورودی خروجی هست که ما فقط پروت b رو به عنوان خروجی در نظر گرفتیم و با دستور config اون رو نوشتیم.

خط چهارم: شروه حلقه do-loop همونطور که در توضیحات ابتدایی که در تاپیک بالا قرار داشت این حلقه یک حلقه تکرار هست و برنامه ای که میخوایم بنویسیم رو داخل این حلقه قرار میدیدم تا دائم برنامه ما اجرا بشه بدیهی هست که اگه این حلقه نباشه برنامه ما فقط یکبار انجام میشه میتونید داخل برنامه پروتئوس تست کنید!!!!

خط پنجم: ما اومدیم اولین پایه پورت b رو توسط دستور set فعال یا high یا روشن کردیم تا led ما روشن بشه.

خط ششم: توسط دستور wait ما تاخیر ایجاد میکنیم که بعد از روشن شدن led به مدت زمان دلخواه (که در این برنامه من 1ثانیه درنظر گرفتم) روشن بمونه.

خط هفتم: در این خط توسط دستور reset ما پایه ای رو که روشن یا high کردیم رو غیرفعال یا خاموش میکنیم.

خط هشتم: بازهم یک تاخیر ایجاد میکنیم تا برنامه درست کار کنه و بعد به loop میرسه و دوباره برنامه به خط اول میره یعنی set شدن پورت b

خط نهم : انتهای حلقه do-loop

خط دهم : end و پایان برنامه

 

 

 

 

 

 

فایل برنامه و پروتئوس در پیوست قرار داده شده.

پیروز باشید.

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه

توجه :

دوستان اگه استقبال نشه سراغ برنامه های بعد نمیرم چون رو تایپ وآماده کردن برنامه ها و فایل های شبیه سازی وقت میذارم حالا این برنامه خیلی ساده بود اما جلوتر که بریم برنامه ها وقت گیر میشه و اگه همکاری نکنید این تاپیک هم به تاریخ میپیونده !!! :w16:

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

امیدوارم بچه ها بیان و بحث رو ادامه بدیم :a030:

 

خواهش میشه......اگه وقت بشه و بچه ها بیان خوبه میتونیم مدارهای زیادی رو باهم تحلیل کنیم هرجا هم نیاز بشه فیلم آموزشی قرار میدیم:a030:

لینک به دیدگاه

خب حالا میخوایم یه برنامه دیگه بنویسیم که توسط اون بتونیم یه رقص نور ساده بسازیم یادمه قبلا واسه ساخت یه رقص نور ساده کلی قطعه نیاز بود مثل خازن مقاومت و......

اما ما با میکرو خیلی کارا میتونیم بکنیم حتی میتونیم برنامه ریسه هایی که بیرون می بینید رو بنویسیم و افکت های دلخواه خودمون رو براش برنامه ریزی کنیم.

 

 

خب تو این برنامه ما میخوایم دوتا از پورت های میکرو رو شیفت بدیم(یعنی از پایه کم ارزش به سمت پر ارزش پایه ها با تاخیر دلخواه روشن بشند که با اینکار ما میتونیم یه رقص نور داشته باشیم)

 

خب اینم برنامه که من از قبل نوشته بودم و عکس هم گرفته بودم ازش واسه 4سال پیشه که تازه شروع کرده بودم.

 




$regfile = "m32def.dat"

$crystal = 8000000

Config Porta = Output

Config Portb = Output

Dim A As Byte

Dim B As Byte

A = &B10000000

B = &B00000001

Do

Porta = A

Portb = B

Rotate A , Right

Rotate B , Left


Wait 1

Loop
End

 

 

خب بریم سراغ تحلیل برنامه

 

خط اول: در خط اول ما باز هم پیکره بندی رو انجام میدیم و نوع میکرو رو مشخص میکنیم.

خط دوم: فرکانس کاری میکرو رو مشخص میکنیم.

خط سوم : در این خط ما پورت a رو به عنوان خروجی در نظر گرفتیم.

خط چهارم:در این خط ما پورت b رو به عنوان خروجی در نظر گرفتیم.

خط پنجم: ما در این خط یک متغیر(A) از نوع بایت تعریف کردیم که مقدار دلخواه امون رو داخلش بریزیم.

خط ششم: در این خط هم یک متغیر(B) از نوع بایت تعریف کردیم که مقدار دلخواه امون رو داخلش بریزیم.

خط هفتم: شروع حلقه do-loop

خط هشتم: در این خط ما متغییر a رو مساوی پورت a قرار میدیم تا مقداری رو که داخل متغییر a ریختیم بر روی پایه های پورت a قرار بگیره

خط نهم: در این خط ما متغییر b رو مساوی پورت b قرار میدیم تا مقداری رو که داخل متغییر b ریختیم بر روی پایه های پورت b قرار بگیره

خط دهم: در این خط توسط دستور rotate که به معنی چرخش هست ما میایم پایه های پورت مورد نظر رو تغییر میدیم اگر دقت کنیم متغییری که انتخاب کردیم رو اینجا استفاده کردیم یعنی ما میتونیم مقداری رو که داخل متغییرمون ریختیم با تغییر 0 و 1 به هر مقداری تغییرش بدیم که با این دستور اون رو به سمت راست و چپ شیفت بدیم و برای رقص نورمون حالت های مختلف ایجاد کنیم .

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

خط دوازدهم: یک تاخیر 1ثانیه ای ایجاد میکنیم تا مراحل شیفت شدن دیده بشه تاخیر رو هم هر مقداری میتونید بذارید.

خط سیزدهم :انتهای حلقه do-loop

خط چهاردهم :end و پایان برنامه

 

 

اینم عکس از نحوه کار برنامه به صورت عملی

 

o6sza8oo6z7bldl7459u.jpg

البته برد برد بالایی فقط واسه تغذیه هست و اون سون سگمنت ها واسه تست یه کار دیگه قرار داده شده ربطی به این مدار نداره همچنین از خازن و پل دیود و آی سی رگولاتور واسه یکسو کردن برق ترانس استفاده کردم .

 

 

 

فایل برنامه و پروتئوس پیوست شد.

پیروز و سرافراز باشید.:a030:

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه

ممنون از دوست عزیزمون امیدوارم این تاپیک ادامه داشته باشه و دوستان دیگه هم در حد امکان یاری کنن تا باهم مطالبی یاد بگیریم

من تاحالا با بسکام کار نکردم اما خب با c یکمی کار کردم

 

برنامه اول به زبان c

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه
ممنون از دوست عزیزمون امیدوارم این تاپیک ادامه داشته باشه و دوستان دیگه هم در حد امکان یاری کنن تا باهم مطالبی یاد بگیریم

من تاحالا با بسکام کار نکردم اما خب با c یکمی کار کردم

 

برنامه اول به زبان c

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

 

خواهش میکنم ممنون از همکاریتون.من گرایشم قدرت هست درس برنامه نویسی هم نداشتیم (واسه میکرو) زبان بیس رو خوندم اما زبان c رو هم یه چیزایی بلدم اما خب چون بیسکام راحت تره واسه شروع بهتره سعی میکنم بعد خوندن زبان c آموزش اونم شروع کنیم که زبان گسترده تری هست و کاراییش بیشتره:a030:

لینک به دیدگاه

دراین برنامه که چشمکزن راه رونده(رقص نور)که با خط تاَخیر 500 میلی ثانیه ای و دیودهاینورانی (led) بصورت ترتیبی روشن وخاموش می شوند

 

 

شرح برنامه) باتوجه به مقدار باینری که در جلوی هر یک از عبارتportb در برنامه قرار داده شده این کار صورت می گیرد و مل رقص نور بوجود می آید.وجود 1 یعنی LED مربوطه به ان روشن میشود و0 به منزله خاموش بودن LED هاست. البته به جای مقدار باینری از مقدار هگزادسیمال هم میتوان استفاده کرد که در جلوی هر خط از برنامه آورده شده است

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

 

خط اول: در خط اول ما پیکره بندی رو انجام میدیم و نوع میکرو رو مشخص میکنیم.

خط دوم: فرکانس کاری میکرو رو مشخص میکنیم.

خط سوم : پورت Bرو به عنوان خروجی درنظر گرفتیم .وبا دستور Config اون رو نوشتیم.

خط چهارم: دستور (Do_Loop) برای ایجاد یک حلقه بی نهایت تکرار مباشد

خط پنجم: پورت(B0,B7) به عنوان خروجی و بقیه رو به عنوان ورودی در نظر میگیرد

خط ششم: توسط دستور waitms برای ایجاد تاَخیر 500 میای ثانیه ای

خط هفتم: پورت(B0,B7) به عنوان خروجی و بقیه رو به عنوان ورودی در نظر میگیرد

خط هشتم: توسط دستور waitms برای ایجاد تاَخیر 500 میای ثانیه ای

خط نهم : پورت(B1,B6) به عنوان خروجی و بقیه رو به عنوان ورودی در نظر میگیرد

خط دهم : توسط دستور waitms برای ایجاد تاَخیر 500 میای ثانیه ای

خط یازدهم: پورت(B2,B5) به عنوان خروجی و بقیه رو به عنوان ورودی در نظر میگیرد

خط دوازدهم:توسط دستور waitms برای ایجاد تاَخیر 500 میای ثانیه ای

خط سیزدهم:پورت(B3,B4) به عنوان خروجی و بقیه رو به عنوان ورودی در نظر میگیرد

خط چهاردهم:توسط دستور waitms برای ایجاد تاَخیر 500 میای ثانیه ای

خط پانزدهم:پورت(B2,B5) به عنوان خروجی و بقیه رو به عنوان ورودی در نظر میگیرد

خط شانزدهم:توسط دستور waitms برای ایجاد تاَخیر 500 میای ثانیه ای

خط هفدهم:پورت(B1,B6) به عنوان خروجی و بقیه رو به عنوان ورودی در نظر میگیرد

خط نوزدهم: انتهای حلقه do-loop

خط بیستم: end و پایان برنامه

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه

مقایسه کننده با استفاده از مبدل آنالوگ به دیجیتال به زبان C

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

به ترتیب خط هارو مینویسم توضیحاتشون رو:

 

1: وارد کردن کتابخونه io.h

2: تعریف یک عدد ثابت به اسم COMPARE_VALUE با مقدار 125

3: تعریف یک تابع به اسم sbi با متغیرهای x و y که میاد مقدار X و y رو با هم or میکنه و داخل x قرار میده. طبق تعریف داریم:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

4: مثل همون بالا هستش. فقط اینبار مقدار x با متمم y اند (and) میشه و داخل x قرار میگیره.

5و6: خالی

7و8: شروع کد با تابع main

9و10: خالی

11: تعریف پورت B بعنوان خروجی. وقتی مقادیر DDR هر پورت 1 باشه، اون پورت خروجی میشه.

12: تعریف مقادیر اولیه پورت B

13: A رو ورودی میکنیم.

14: مقداردهی اولیه پورت A

15: set کردن مقدار ADLAR از رجیستر ADCSRA. دستور BV همون Bit Value هستش.

16: تو این خط میایم مقدار ADEN و ADPS2 و ADPS1 و ADPS0 رو یک میکنیم (set میکنیم) و بعد همه این هارو با هم or میکنیم و داخل رجیستر کنترلی ADCSRA قرار میدیم.

17: مقدار ADCSRA رو با مقدار set شده or، ADSC میکنیم و داخل خودش قرار میدیم. در واقع میشه گفت فقط مقدار ADSC رو یک میکنیم که تبدیل شروع بشه.

18و19: خالی

20و21: شروع حلقه ای که تا بی نهایت ادامه داره

22و23: خالی

24: تا زمانیکه مقدار ADSC یک هستش !

25: خالی

26: اگر قسمت ارزشمند (high) مقدار تبدیل شده بزرگتر از 128 بود ...

28: دستور sbi اجرا میشه

29: دستور cbi اجرا میشه

31: اما اگه کمتر باشه ...

33و34: بازم دستورهای sbi و cbi اجرا میشن.

38: بازم مقدار ADSC رو یک میکنیم تا تبدیل دوباره انجام بشه ....

41: مقدار 0 رو برمیگردونه ...

42: تمام !!

 

من فقط قصدم توضیح مفهوم دستورات بود. نه توضیح الگوریتم. الگوریتم رو اگه خودتون یکمی روش فکر کنید چیز ساده ایه :a030:

لینک به دیدگاه

فلاش زدن LED با شمارنده داخلی میکرو به زبان C

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

کدهای این قسمت هم شبیه کدهای پست قبلیه. چیز اضافه ای نداره که بخوام توضیح بدم :w16:

 

:a030:

لینک به دیدگاه

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

من دارم برنامه هایی که جدید میخوام بذارم رو به صورت عملی کار میکنم و عکس و فیلمش رو هم میذارم اگر وقت بشه:a030:

 

لینک به دیدگاه

این برنامه رو پارسال نوشتم. برنامه نمایش ساعت روی LCD به زبان C

علاوه بر ساعت، دارای تاریخ و کرنومتر هم هست. البته به مقداری تغییر احتیاج داره. باید زمان فعلی رو تو برنامه جابجا کنید با زمان قبلی. بعد اون رو پروگرم کنید :a030:

فایل پروتئوس رو هم میزارم براتون hanghead.gif

 

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

 

برنامه تقریبا ساده هستش. فکر نمیکنم نیازی به توضیح باشه. قبل از تابع Main چند تا تابع کئچک نوشتم که تو تابع Main فراخوانی میشن hanghead.gif

 

البته اونجوری که یادم میاد یه ایراد ریز داشت این برنامه. ولی دقیق یادم نمیاد چی بود icon_pf%20(34).gif

 

الان پروتئوس ندارم که تست کنم. خودتون تستش کنید :a030:

لینک به دیدگاه

واقعا دستتون درد نکنه. خیلی عالی بود. از استادامون که هیچ خیری ندیدیم. حداقل از این سایت یه خیره بهره ای بردیم . خیر ببینید الهی به حق پنج تن. به حق علی . به حق .................:ws41:

لینک به دیدگاه
واقعا دستتون درد نکنه. خیلی عالی بود. از استادامون که هیچ خیری ندیدیم. حداقل از این سایت یه خیره بهره ای بردیم . خیر ببینید الهی به حق پنج تن. به حق علی . به حق .................:ws41:

 

خواهش میکنم هر سوالی داشتید بچه ها هستند همگی باهم هر برنامه ای هست رو تحلیل میکنیم نیاز باشه فیلم آموزشی و عکس هم میذاریم :a030::icon_gol: فقط فعالیت داشته باشید تا تاپیک همچنان فعال بمونه :w16:

لینک به دیدگاه

قبل کار با سون سگمنت بهتره این فایل رو دانلود کنید.........توضیحاتی در مورد سون سگمنت های آند و کاتد مشترک و همچنین نحوه راه اندازی و مالتی پلکس کردنشون همراه مثال برنامه و شماتیک :w16:

 

فایل پی دی اف پیوست شد

پیروز باشید:a030:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • اضافه کردن...