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

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

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

مطالب برایتان مفید بود

عالی و ساده بود،ادامه دهید
27
79%
خوب و قابل فهم بود،ادامه دهید
7
21%
ساده و قابل فهم نبود.
0
بدون راي
تکراری و سخت بود.
0
بدون راي
 
مجموع رای گیری: 34

Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خداوند بخشنده و مهربان
باسلام

برخره بعد از مدت ها قصد داریم،پروژه ساده ی را شروع کنیم.همیشه در اکثر آموزش ها،از پروژه چشمک زن Led برای شروع کار با میکروکنترولر استفاده میشود،ما نیز همین کار را می کنیم،اما کمی متفاوت تر !

[HIGHLIGHT=#f79646]مراحل آموزش پروژه یا طرح چشمک زن LED را به چهار قسمت تقسیم می کنیم : 

1-برنامه نویسی و توضیحات
2-اجرا بر روی شبیه ساز پرتئوس و توضیحات
4- پروگرام کردن کدها بر روی میکروکنترولر و آزمایش عملی مدار.
(به امید خدا)


[HIGHLIGHT=#00b050]ابتدا برنامه نویسی 

طرح اصلی برای چشمک زدن LED ها این است که: می خواهیم،LED در 1 ثانیه روشن شود،سپس در 1 ثانیه بعدی،خاموش شود، و این روند برای همیشه ادامه پیدا کند !

برای این منظور پایه ها یا پایه که LED به میکروکنترولر اتصال دارد را 1 ثانیه 0 و 1 ثانیه 1 کنیم !

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

نحویه ساخت یک صفحه (خام) برای آغاز پروژه در کدویژن.


به محل نصب نرم افزار کدویژن بروید و وارد پوشه BIN بشوید،سپس بر روی نرم افزار کدویژن کلیک کنید (cvavr.exe) (یا بر روی منو Start ویندوز کلیک کنید و تایپ کنید codevisionAvr تا فایل اجرای نمایش داده شود)
تصویر
بعد از انکه نرم افزار اجرا شد،بر روی گزینه File کلیک کنید،در همان گزینه اول روی گزینه new کلیک کنید،بعد از باز شدن زیر شاخه ها،برروی گزینه Project کلیک کنید.
تصویر
گزینه بالا ظاهر میشود و از شما،می پرسد،آیا می خواهید پروژه جدیدی بسازید،که شما بر روی گزینه yes کلیک کنید.
تصویر
بعد از کلیک بر روی گزینه yes پنجره بالا باز می شود،که از شما می خواهد،سری میکروکنترولر خود را انتخاب کنید،چون ما از سری xmega استفاده نمی کنیم و اکثر با atmega و attiny و .. استفاده می کنیم،همان گزینه اول را انتخاب می کنیم و OK را می زنیم .
تصویر
خوش آمدید،صفحه بالا،ابزار کدویزارد معروف می باشد! ابزاری که بعدها با آن کارهای زیادی خواهید داشت،! فرکانس و نوع میکروکنترولر را به مانند تصویر بالا انتخاب کنید،سپس...
تصویر
برای ذخیر سازی و آغاز پروژ خود، ابتدا از منوی بالا گزینه program را باز کنید،و سپس Generate Save And Exit را انتخاب کنید.
تصویر
در پنجره جدید باز شده،نامی برای فایل برنامه نویسی انتخاب کنید
تصویر
در پنجره جدید باز شده،نامی برای پروژه خود انتخاب کنید(برای هماهنگی بهتراست همه را یک نام انتخاب کنید)
تصویر
در پنجره جدید باز شده،نامی برای (یک فایل لازم،برای پروژه ) انتخاب کنید(برای هماهنگی بهتراست همه را یک نام انتخاب کنید)

اکنون پروژه جدید اغاز شده،و شما می توانید اغاز به برنامه نویسی کنید.!
اما چون ما می خواهیم خودمان برنامه مد نظرمان را بنویسیم،لطفا در صفحه اصلی برنامه کلیک کنید،و همه کدهای درون صفحه را حذف کنید (بر روی صفحه کلیک کدها،کلیک کنید،سپس کلید کنترول + A و بعد Delete) بعد از حذف کدها،برای ذخیر کردن اخرین تغییرات،باید صفحه را سیو کنید،برای این منظور کلید ترکیبی شیفت+ F9 را بزنید،تا اخرین تغییرات Save و ذخیری سازی .


ادامه دارد..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

اما در ادامه و آغاز مبحث برنامه نویسی LEd چشمک زن.

ما باید پورت های میکروکنترولر را خاموش و روشن کنید. توصیه می کنیم،**|برای یادگیری بهتر،یک بار دیگر به اینصفحه برگشته و توضیحات مربوط به پورت ها و نحویه فعال و غیر فعال کردن انها را بخوانید.|**

[HIGHLIGHT=#76923c]خوب اکنون که ان صفحه را مطالعه کردید،به آموزش ها ادامه بدهید.!
 
پس پورت های میکروکنترولر به کمک DDR نحویه خروجی یا ورودی بودن انها مشخص میشود و بعد از ان(در صورتی که ورودی پایه میکروکنترولر را تعریف کرده باشیم) به کمک PIN دو حالت برای پایه میکروکنترولر تعریف می کنیم .(و در صورتی که پایه میکروکنترولر را خروجی تعریف کرده باشیم) به کمک PORT حالت پایه میکروکنترولر کنترولر را تعریف می کنیم.

در این پروژه،چون ما می خواهیم وضعیت پایه میکروکنترولر را 0 و 1 کنیم، پس نیاز داریم،ولتاژی از پایه میکروکنترولر به سمت LED بفرستیم! پس ما باید وضعیت DDR را خروجی تعریف کنیم! (چون قصد داریم ولتاژ را بفرستیم،در صورتی که می خواستیم،ولتاژ یا سیگنال دریافت کنیم،باید DDR را در وضعیت ورودی قرار میدادیم)

خوب برنامه نویسی را آغاز می کنیم.

در ابتدا پرنامه همانجور که در گذشته نیز گفتیم،حتما باید کتابخانه مربوط به میکروکنترولر تعریف شود،تا واحدهای میکروکنترولر مقداردهی شوند

پس ما کتابخانه میکروکنترولر را تعریف می کنیم:
Please Login or Register to see this code
چون ما می خواهیم تاخیر در پروژه خود ایجاد کنیم،از کتابخانه موجود در کدویژن استفاده می کنیم(کتابخانه که گذشته نیز ان را معرفی کرده ایم)
نام این کتابخانه delay می باشدو کارش نیز ایجاد تاخیر یا مکث می باشد(و دقیقا بدرد جاهایی مثل طرح ما می خورد)

پس ان را اینطور معرفی می کنیم
Please Login or Register to see this code
خوب اکنون دیگر باید یک تابع اصلی را معرفی کنیم،که بدین شکل ان را معرفی می کنیم

Please Login or Register to see this code
حال دیگر همه چیز اماده است،ما باید برنامه خود را اغاز کنیم، ابتدا قبل از هر چیز، خروجی بودن پایه مد نظر ما را مشخص می کنیم (ما در این پروژه پایه های پورت B میکروکنترولر Atmega8 را برای استفاده انتخاب کرده ایم )

مقدار DDRB (که B معرفی پایه ها پورت B می باشد) را به 0xff می باشد را مقدار دهی می کنیم([HIGHLIGHT=#e36c09] 0xff به هگز می باشد، که اگر بخواهیم ان را به باینری ترجمه کنیم می شود 11111111 هر کدام از این 1 ها، مربوط به یک پایه پورت B می باشد و 1 یعنی ان پایه را در وضعیت خروجی قرار بده )
(هگز،دسیمال،باینری را در اینده بیشتر توضیح خواهیم داد)
Please Login or Register to see this code ما می توانیم، مقدار DDRB را بجایی هگز به باینری بنویسیم(وبرای برنامه نیز تفاوتی ندارد!) DDRB=0b11111111 (اما برای خلاصه تر شدن و راحتی کار ان را به هگز نوشته ایم)

خوب حال DDRB را در وضیعت خروجی قرار داده ایم،اکنون می خواهیم بار اول PROTB خاموش باشد (تا بعد کارهای مد نظرمان را انجام دهیم) پس ان را در وضعیت 0 قرار میدهیم(که وقتی 0 میشود،پول آپنیز فعال میشود،)
Please Login or Register to see this code
،چون می خواهیم،LED دائم در حال چشمک زدن باشد،پس باید برنامه چشمک زدن را در حلقه بی نهایت while بنویسیم
Please Login or Register to see this code
ابتدا می خواهیم PORTB کامل، روشن شود،برای این منظور ان رو اینطور مقدار دهی می کنیم
Please Login or Register to see this code با دستور بالا،همه PORTB فعال و VCC میشوند و LED روشن میشوند،اما ما نیاز داریم،مقداری بر روی این دستور مکث کنیم، برای این منظور،از دستور تاخیر زیر استفاده می کنیم
Please Login or Register to see this code وقتی میکروکنترولر به دستور بالا می رسد، 1 ثانیه صبر می کند (عدد 1000 نوشته شده در delay_ms به میلی ثانیه می باشد)

سپس می خواهیم،از دوباره PORTB صفر شود،و 1 ثانیه نیز صبر کند،برای این منظور
Please Login or Register to see this code
میکروکنترولر بعد از خواندن دو دستور بالا،ابتدا پورت B را خاموش می کند و سپس 1 ثانیه صبر می کند!
در پایان چون در حلقه دستوری دیگری نیز وجود ندارد،حلقه به ابتدا بر می گردد و دستورات را نیز از دوباره انجام میدهد ( و این کار را نیز تا بی نهایت انجام می دهد !)
بدین شکل چشمک زن LED ساخته میشود
(*دقت کنید بعد از پایان دو خط دستوری بالا پرانتز تابع اصلی و حلقه while را نیز ببندید)
Please Login or Register to see this code
کل کدهایی برنامه:
Please Login or Register to see this code تصویر از کدهایی برنامه،در برنامه:
تصویر
ادامه دارد..

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام

ادامه..
اجرایی برنامه چشمک زن برروی پرتئوس

اما در ادامه،قصد داریم،برنامه ساده نوشته شده را برروی پرتئوس اجرا کنیم!

مختصری در رابطه با پایه ها در مدار(که البته در پست قبل نیز توضیح داده شده و در گذشته نیز توضیحات اراده شده بود)

میکروکنترولر ما ATMEGA8 می باشد. پایه شماره 7 " VCC" میکروکنترولر به +5 رگولاتور وصل میشود
و پایه شماره 8 میکرو به " GND" میکروکنترولر به منفی یا زمین مدار باید اتصال پیدا کند (همانجور که در گذشته نیز گفتیم،بین این دو پایه 7 و 8 یک خازن 104 نیز برای جلوگیری از ورود نویز! قرار دهید.)
پایه شماره،پایه REST میکروکنترولر می باشد،که در صورتی که نخواهیم از ان استفاده کنیم،باید به VCC ان را اتصال دهیم(چون ممکن است،نویز ها باعث ریست شدن میکروکنترولر شوند)

تصویر
خوب،عکس بالا،مدار ما در شبیه ساز می باشد،همانجور که می ببینید،همه پایه به طریقی که در گذشته گفتیم،وصل شده اند و پایه PORTB0 نیز به یک LED اتصال پید کرده،که در زمان اجرا شبیه ساز،مدار ما بدرستی کار خود را انجام دهد..

خوب اکنون دیگر همه چیز آماده است، و می خواهیم مدار را ازمایش کنیم ... پس شبیه ساز را اجرا می کنیم..!
تصویر
خوب شبیه ساز را اجرا کردیم،همانجور که در تصویر بالا می ببینید،شبیه وارد تابع main شده است (همیشه در اعمال شبیه سازی،شبیه برای راحت کار،بجایی شروع از خط اول ! خواندن فایل ها سرامد و متغیرها و ... از تابع اصلی یعنی main شروع به فعالیت می کند!این نکته را همیشه مد نظر داشته باشید)
همانجور که می ببینید،دستور اولی که نوشته را در حال خواندن می باشد،یعنی DDRB=0xFF .. (پس همه پورت B برابر با خروجی قرار گرفتن ! )
خوب اکنون وقت اش است،به شبیه ساز بگویم،دستور بعدی را بخوان و اعمال کن! پس..
تصویر
دستور بعدی دستور PROTB=0x00 می باشد. که پورت های B را در وضعیت 0 قرار می دهد (یعنی مقاومت pulldown را روشن میکند،) همانجور که در تصویر بالا می ببینید،رنگ پورت به رنگ آبی تغییر وضیعت دادن!(به معنی اینکه پایه ها مربوط خروجی شده اند و در حال حاضر در وضعیت pulldown می باشند)

خوب حال که دیگر وضعیت پورت ها مشخص شده،شبیه ساز را یک بار دیگر اجرا می کنیم،تا این دفعه وارد حلقه شده و دستورات درون حلقه را اجرا کند!
تصویر
خوب اکنون میکرو وارد حلقه while شده و دستور PROTB=0xFF را می خواند! برای اینکه این دستور را اعمال کند،باید،یک بار دیگر شبیه ساز را اجرا کنیم،تا تغییرات را اعمال کند!
تصویر
  اکنون می ببینید، همه پورت های B در وضعیت خروجی قرار گرفته (به رنگ قرمز رنگ) و LED روشن شده است!(دستور 500 میلی ثانیه تاخیر نیز اجرا و رد شده است) و اکنون به دستور PORTB=0x00 رسیده است. و باید یک خط دیگر شبیه ساز را اجرا کنیم،تا پورت بی از دوباره در وضعیت pulldown یا همان 0 قرار گیرد.   که می ببینید،پورت های B همگی خاموش شدن و LED نیز خاموش شده است و 500 ثانیه تاخیر نیز اعمال شده است . و بدین ترتیب،دیگر خط های برنامه تمام شده است! اما چون برنامه در حلقه while بی پایان است، برنامه درون حلقه while برای همیشه اجرا میشود،و به شکل زیر همیشه در حال خاموش و روشن کردن پورت ها خود می باشد .. 
تصویر
 ادامه دارد...  . 
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام


ادامه بحث
پروگرام کردن برنامه بر روی میکروکنترولر.

قبل از هرچیز،بهتر است،به سایت سازنده پروگرامر خود رفته و اطلاعات ان را مطالعه فرمایید (اگر پروگرام شما به مانند این جانب می باشد،صفحه ات قبلی را ببینید ، و همچنین [External Link Removed for Guests]صفحه را ببینید) نرم افزار پروگرام مخصوص ویندوز (به نام progisp )را از [External Link Removed for Guests]دانلود کنید.(پسورد ان نیز [External Link Removed for Guests] می باشد)،سپس ان را نصب بفرمایید.

بعد از ان ،فایل برنامه آموزش را نیز [External Link Removed for Guests] دانلود کنید،سپس از حالت زیپ خارج کنید.

حال نرم افزار پروگرام کنند،میکروکنترولر یعنی progisp را از روی دسکتاپ اجرا کنید.سپس بر روی گزینه LOAD FLASH کلیک کنید،تا فایل برنامه نوشته شده،به نرم افزار پروگرام معرفی شود
تصویر
*فایل که نرم افزار Progisp نیاز دارد،به پسوند Hex می باشد،که معمولا بعد از سیو کردن برنامه نوشته شده توسط کدویژن در آدرس Debug\Exe پوشه برنامه قرار داده میشود .. پس ما نیز به همین ادرس میرویم و فایل Hex برنامه را ،به progisp معرفی می کنیم.
تصویر
اگر فایل به درستی به برنامه معرفی شده باشد!متن زیر که همراه به ادرس فایل می باشد،در پایین نرم افزار نمایش داده میشود.!
تصویر



خوب اکنون همه چیز آمادست،حال وقت ان است،میکروکنترولر را درون پروگرام قرار دهیم و به نرم افزار معرفی کنیم! به مانند تصویر زیر (و آموزش ها که قبلا ذکر شده بود) میکروکنترولر را قرار دهید و جامپر ذکر شده را قرار دهید
*میکروکنترولرهای شرکت Atmel معمولا به صورت دیفالت به فرکانس 1 مگاهرتز کار می کنند،بنابراین باید جامپر ذکر شده در تصویر را قرار دهید،تا پروگرام بدانند باید با فرکانس 1 مگاهرتز با میکروکنترولر ارتباط برقرار کند.
تصویر
سپس Usb ها را وصل کنید و پروگرام را به کامپیوتر وصل کنید. سپس منوی قسمت select chip را باز کنید و میکروکنترولر atmega8a را انتخاب کنید.
تصویر
خوب اگر پروگرام به درستی به کامپیوتر ارتباط برقرار کرده باشد و همچنین میکروکنترولر بدرستی بر روی پروگرام قرار گرفته باشد! با زدن گزینه RD، پایین نرم افزار، متن زیر نمایش داده میشود!
تصویر
اکنون دیگر همه چیز آماده می باشد،و باید اطلاعات را بر روی میکروکنترولر قرار بگیرد! برای این بر روی گزینه Auto کلیک کنید.
تصویر
لودینگ
تصویر
اگر پیام بالا ظاهر شد،یعنی با موفقیت اطلاعات بر روی میکروکنترولر قرار گرفته شده. اکنون باید مدار را بر روی بردبرد امتحان کنید،تا نتیجه کار خودتان را ببینید.
تصویر
پایان مبحث مثال LED چشمک زن.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام

اما در ادامه،بهتراست مثال LED را باز تر کنیم تا بدین طریق با پورت ها بیشتر آشنایی پیدا کنیم.
[HIGHLIGHT=#e36c09]
 [HIGHLIGHT=#e36c09]چشمک زدن به ترتیب 8 LED  

اما در مثالی دیگر قصد داریم به کمک همه پایه های پورت بی میکروکنترولر Atmega8 تعداد 8 LED را به [HIGHLIGHT=#ffc000]ترتیب   کنیم! (یعنی دقیقا به تعداد همه پایه های پورت B)

برای این کار از عملگر شیفت ریجستر استفاده می کنیم (که در گذشته در این قسمت آن را توضیح دادیم)

برای این کار کافیست،ابتدا مقدار اولیه PORTB را برابر با یک قرار می دهیم،سپس ان را به سمت چپ ،هر 500 میلی ثانیه یک بار 1 درجه شیفت دهیم .

تصویر
[HIGHLIGHT=#00b0f0]کل کدهایی برنامه:
 
Please Login or Register to see this code
همانجور که در بالا می ببینید، در حلقه while مقدار پورت بی را 1 قرار می دهیم تا مقدار کل پورت بی بشود PORTB= 00000001 . سپس وارد یک حلقه for میشود و 8 بار تکرار میشود. در این 8 بار هر دفعه یک بار 500 میلی ثانیه برنامه توقف میشود،سپس مقدار ریجستر PORTB یک درجه شیفت به چپ پیدا می کند.
[HIGHLIGHT=#f79646]بدین ترتیب LED ها پشت سرهم روشن و خاموش میشوند . 


*| [External Link Removed for Guests]شبیه ساز و کدها |*

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام

اما در ادامه..

همانجور که در مثال گذاشته دیدید،زمان شیفت دادن پورت ها،پورت ها به ترتیب روشن و خاموش میشدن،شاید یک سوال مهم برای همه پیش اماده باشد،چرا بجایی شیفت دادن، مقدار PORTB را یکی یکی افزایش نمی دادیم؟!

در مثال بالا قصد داشتیم، پورت ها را یکی یکی روشن کنیم، و اگر قرار بود،مقدار پورت B را یکی یکی افزایش دهیم،ان وقت LED ها یکی یکی روشن نمی شدن،بلکه به حالت BCD روشن میشدن.! که برای درک این مسئله و خیلی مسائل دیگر در اینده بهتر روش ها مقدار دهی به صورت هگز ،هگزادسیمال،باینری را بدانید.

مبحث مبنا های هگز،دسیمال،باینری

[HIGHLIGHT=#e36c09]باینری Binary یا Bin  

باینری که همان مسئله ی است که در گذشته نیز ان را توضیح داده ایم! همیشه به صورت 8 بیت یا 16 بیت یا نهایت 32 بیت نوشته میشوند.(بسته به تعریف متغیر ما در برنامه) و مقداری برای بیت های ان،یا 0 یا 1 می باشد!

باینری به این ترتیب شروع می شوند و مقدارش افزایش پیدا می کند:
(هشت بیتی)

00000000 اول
00000001 دوم
00000010 سوم
00000011 چهارم
00000100 پنجم
00000101 ششم
00000110 هفتم
00000111 هشتم
00001000 نهم
00001001 دهم
00001010 یازده ام
00001011 دوازده ام
00001110 سیزده ام
00001101 چهارده ام
00001110 پانزده ام
00001111 شانزده ام

همانجور که در بالا می ببینید، 4 بیت اول (سمت راست) در شانزده حالت مختلف به ترتیب شمارش شدن ( این 4 بیت دیگر بیش از این حالت ندارد! (فرمول محاسبه 2 به توان 4 ، یا به عبارتی ساده تر 2 چهاربار ضربدر خودش !) )
اما این 16 حالت،اخر کار شمارش یک متغیر 8 بیتی نیست! بلکه یک متغییر 8 بیتی می تواند تا 256 حالت مختلف دیگر شمارش باینری خود را ادامه دهد ! که در ادامه می ببینید:

Please Login or Register to see this code در بالا ما از حالت هفده ام تا دویصد پنجاه شش حالت مختلف باینری را به ترتیب شمارش کردم! و برای یک متغیر هشت بیتی بیش از 256 حالت مختلف وجود ندارد! (0 تا 255 که جمعا میشود 256 حالت ) (2 به توان 8 یعنی 2 هشت بار ضربدر خودش !)

به این روش شمارش باینری BCD گفته میشود !

حال اگر ما بخواهیم در برنامه ها خود مقدار متغییری را به باینری! مقداری دهی کنیم،باید ابتدا 0b را جلویی ان بنویسیم،سپس هشت بیت مد نظرمان را جلویش چیدمان کنیم .

بدین صورت :


;unsigned char B=0b00000001

0b به برنامه می گوید،می خواهیم مقدار دهی متغیر را به روش باینری انجام دهیم!
مقداری به روش باینری برای جاهایی که نیاز است،مقدار متغیرها را شیفت دهیم و یا زمانی که می خواهیم پورت را مقدار دهی کنیم یا کارهای از این دست،بیشتر مورد استفاده قرار می گیرد.

برای درک بیشتر موضوع شمارش به روش باینری،بهترست [External Link Removed for Guests]مثال را دانلود کنید،سپس فایل پرتئوس را اجرا کنید و خروجی ها را ببینید
[HIGHLIGHT=#0070c0]
 
[HIGHLIGHT=#0070c0]مقداری دهی دسیمال DECIMAL یا DEC  ([HIGHLIGHT=#00b050]که البته نام کاملش نیز هگزا دسیمال نیز می باشد Hex Decmial  )

در این روش مقدار دهی،می توان بجایی نوشتن،مقدار باینری هر متغیر!(که کار سختی نیز می باشد!) ،شماره دسیمال ان را نوشت. همانجور که در خطوط بالا گفتیم،یک متغیر باینری هشت بیت در 256 حالت مختلف شمارش میشوند! این شمارش ها در واقع همان شمارش به روش دسیمال می باشند! ( اعداد از 0 تا 255 شمارش میشوند!)

اگر به شمارش باینری در چند خط بالاتر بروید، کنار هر مقدار باینری،یک عدد نوشته شده، ان عدد ها،مقدارها دسیمال معادل باینری می باشد!

فرض کنید مقداری باینری یک متغیر 0b00000001 ،ان وقت مقدار دسیمال ان چقدر می باشد ؟! مقداری دسیمال آن 1 می باشد !
حال فرض کنید مقداری باینری یک متغیر 0b00000010 ،ان وقت مقدار دسیمال ان چقدر می باشد ؟! مقداری دسیمال آن 2 می باشد !
حال فرض کنید مقداری باینری یک متغیر 0b11111111 ،ان وقت مقدار دسیمال ان چقدر می باشد ؟! مقداری دسیمال آن 255 می باشد !

جدول معادل باینری به دسیمال (گرچه در بالا نیز ان را قرار داده بودیم!)
Please Login or Register to see this code

بطوری کلی،در برنامه،وقتی گفته شود 0 یا 0b00000000 تفاوتی ندارد! و مقداری دهی به دو روش صحیح می باشد و برنامه یک کار را انجام میدهد.!

;unsigned char B=0b11111111 به روش باینری
یا
;unsigned char B=255 به روش هگزا دسیمال


ولی روش دسیمال ساده تر و بهتر نیز می باشد. معمولا در اکثرا برنامه ها،بیشتر بدین شکل متغیرها مقداری دهی میشوند!

[HIGHLIGHT=#e36c09]مقداری دهی به روش هگز! HEX 

اما مقداری دهی به روش هگز، با روش های دیگر تفاوت نیز دارد! در این روش مقداری دهی، شمارش حول 16 نوع مقدار دهی می چرخد!

به ترتیب :
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

جمعا 16 نوع مقداری دهی! این روش نیز خلاصه تر از دو روش قبلی می باشد! و کاربرد ها فراوان نیز دارد!

هر کدام از مقدار هایی Hex معادل باینری و دسیمال نیز دارد! که در جدول زیر می توانید ببینید!
تصویر
  نوشتن مقدار ها به روش هگز،در برنامه باید 0x را قبل از ان بنویسید (به مانند باینری که باید 0b را می نوشتید)   برای درک بهتر، شمارش یک متغیر هشت بیتی به سه روش باینری و هگز و دسیمال انجام را می توانید در جدول پایین ببینید:  
Please Login or Register to see this code HEX:0xff | DECIMAL:255 | BINARY:  



پس در برنامه تفاوتی ندارد،که شما یک متغیر را به سه روش زیر تعریف کنید،در هر صورت مقدار ان 1 می باشد:

unsigned char B=0b00000001
unsigned char B=0x01
unsigned char B=1


* 1 یک مثال بود،طبق جدول بالا،هر مقدار و مبنایی معادلش ذکر شود، دو مبنا دیگر نیز دقیقا همان (اما به روش خودشان!) نیز می باشند.

برای دیدن شمارش به سه روش ذکر شده،به کمک پرتئوس،[External Link Removed for Guests]مثال را ببینید و اجرا کنید.
=========   آشنایی بیشتر با هگز و دسیمال و باینری، فرمول های بدست اوری انها،[External Link Removed for Guests]مقاله را مطالعه فرمایید.  جهت معادل سازی سه مبنا به هم دیگر، می توانید از این دو برنامه استفاده کنید: برنامه اولو برنامه دوم  
در پست بعدی مثال LED ها را ادامه خواهیم داد.
باتشکر. 
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام

[HIGHLIGHT=#ffc000]روشن شدن LED ها به صورت BCD
 
در پست قبل،در رابطه با ترتیب شمارش باینری،توضیحاتی ارائه کرده ایم، حال برای درک بهتر این مسئله می خواهیم، چنین شمارش را با یک از پورت ها میکروکنترولر انجام دهیم.

برای این کار کافیست! یک متغیر 8 بیتی تعریف کنیم،سپس در حلقه while ان را 1 واحد 1 واحد افزایش بدهیم.

Please Login or Register to see this code تصویر 

همانجور که کدهایی بالا دید،پورت بی برابر با مقدار i خواهد بود! و i نیز هر بار 1 واحد افزایش پیدا می کند!(*مقدار افزایش به دسیمال می باشد)

چون متغیر ما هشتی بیتی می باشد، و تعداد پورت بی نیز هشت بیت می باشد! پس هشت LED وصل شده به PORTB، در 256 حالت مختلف نمایش داده میشود

[External Link Removed for Guests]مثال(کدها و شبیه ساز)
---
بعد از انجام این پروژه می توانید بهتر،با شمارش باینری نیز آشنایی پیدا کنید.(برای درک بهتر،بهترست سرعت تاخیر برنامه را از 50 میلی ثانیه به 250 یا 500 میلی ثانیه افزایش دهید)

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Major
Major
پست: 374
تاریخ عضویت: یک‌شنبه ۱۴ بهمن ۱۳۸۶, ۱:۰۴ ب.ظ
سپاس‌های ارسالی: 253 بار
سپاس‌های دریافتی: 713 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط kingday »

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

یک سوال داشتم آیا محدودیتی در سوییچ کردن پ.رتها به لحاظ سرعت وجود دارد؟
یعنی به عبارت دیگه اگر ما در خطوط برناممون در یک لوپ بینهایت و در داخل لوپ دو خط داشته باشیم که خط اول یک پین رو روشن و در خط بعدی اون رو خاموش کنیم و کلاک میکرو ما هم مثلا دوازده مگاهرتز باشه ایا در خروجی یک موج مربعی با فرکانس شش مگاهرتز خواهیم داشت ؟؟
یا در خصوص ورودی و خروجیها کلاک متفاوت خواهد بود و ما نیاز به یک حداقل تاخیر خواهیم داشت؟؟
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

سلام بر شما
ممنون و تشکر از نظرات خوب شما.
---
اگر اشتباه نکنم،در این تاپیک در گذشته در رابطه با سرعت پورت ها توضیحات ارائه کردم(البته شاید هم چنین نکرده باشم)
اما فکر میکنم، نهایت سرعتی که میشه روی پایه ها AVR به صورت معمولی پیدا سازی کرد 1 تا 2 مگاهرتز باشد. (با پرتئوس هم می توانید شبیه سازی کنید)
اگر با فرکانس 12 مگاهرتز اعمال کنی،احتمالا خروجی رو پایه،یک فرکانس 2 مگاهرتزی مربعی خواهد بود...
میکرو هر 1 میکرو ثانیه،یک دستور رو بررسی و انجام میدهد، اما در AVR محدودیت سرعت پورت ها نیز وجود دارد (که خود خود تاخیر ایجاد می کند)

برای پیدا کردن پاسخ صحیح تر،بهتر است،دیتاشیت را مطالعه فرمایید.
---
در [External Link Removed for Guests]مقاله یک سایت،گفته شده با دستور مستقیم اسمبلی،میشه سرعت سوئیچ رو بیشتر کرد (بطور کلی دستورات اسمبلی بازده بهتر و مصرف توان انرژی در میکرو رو کمتر و بهینه تر می کنند)
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خدا
باسلام


با عرض پوزش بابت تاخیر... در ادامه می خواهیم شمارش با سون سگمنت را آموزش بدهیم.

اما قبل از ان اندکی آشنایی با سون سگمنت..

سون سگمنت از 7 +1 ال ای دی تشکیل شده است،که ما به کمک این نمایشگر ارزان قیمت می توانیم اعداد 0 تا 9 را شمارش کنیم! و با گذاشتن،چند عدد از نمایشگر در کنار هم،10 و 100 و 1000 گان را افزایش دهیم،به عبارت ساده تر شمارش چند رقمی (تا هر تعداد که بخواهیم) را افزایش بدهیم.
تصویر
  سون سگمنت به مانند شکل بالا می باشد، سون سگمنت ها به دو دسته آند و کاتد مشترک تقسیم می شود، داستان،اند و کاتد هم از این قرار می باشد که،برای صرفه جویی اقتصادی و کم شدن سیم کشی، ها یکی از پایه هایی سون سگمنت به صورت مشترک بین همه LED یک نمایشگر سون سگمنت به اشتراک گذشته میشوند.  *وقتی پایه مشترک بین همه LED ، مثبت باشد،به ان سون سگمنت آند مشترک می   *وقتی پایه مشترک بین همه LED ، منفی باشد،به آن سون سگمنت کاتد مشترک می گویند. 
تصویر
نمایی داخلی LED درون سون سگمنت، همانطور که می ببینید وقتی پایه مشترک آند (مثبت) باشد،پایه مثبت بین همه LED یکی می باشد
و وقتی پایه مشترک کاتد (منفی)باشد،پایه منفی بین همه LED یکی می باشد.
 اما نمایش عدد یا کارکتر دلخواه بر روی نمایشگر.. 
تصویر
  که در تصویر می ببینید،هر LED به نام یک حروف انگلیسی معرفی شده است که به ترتیب a b c d e f g و DP نام گذاری شده اند.   وقتی،ما پایه مشترک را اتصال بدهیم،سپس پایه هر LED (که با حروف مشخص شده) را روشن کنیم،LED ان قسمت روشن میشود! , و وقتی چند پایه LED را همزمان روشن کنیم،می توانیم،یک عدد یا کارکتر را نمایش بدهیم .. 
تصویر
همانجور که در تصویر انیمیشنی بالا می ببینید،یک سون سگمنت آند(مثبت) مشترک ،اعداد را با مثبت و منفی کرد پایه ها سون سگمنت نمایش میدهد!
  کار ما با میکروکنترولر بسیار ساده تر می باشد! کافیست پایه مشترک را وصل کنیم،سپس 8 پایه سون سگمنت را به 8 پایه میکروکنترولر بدهیم .! که انشالله در پست بعدی به ان می پردازیم.  ادامه دارد...  . 
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خداوند بخشنده و مهربان

آزمایش و راه اندازی صحیح سون سگمنت

در ادامه مبحث قبلی قصد داریم،یک سون سگمنت ساده، تکی ، مدل کاتد مشترک(GND) را به نحو صحیح راه اندازی کنیم

مراحل سخت افزاری!

سون سگمنت را در دست خود بگیرید،یک منبع تعذیه (باتری یا ..) با ولتاژ حدود 3 ولت (بیش از 3 یک مقاومت به ان وصل کنید) سپس ابتدا پایه GND (کاتد مشترک) پیدا کنید و GND منبع تغذیه را به ان بزنید،حال با جریان مثبت تک تک پایه را روشن بکنید!

تصویر
  تصویر (سون سگمنت سمت چپ یا کاتد مشترک) پایه ها را نمام گذاری صحیح کنید! (مثلا LED که در شکل بالا A می باشد، اگر پایه ان را پیدا کردید،در کنارش با ماژیک بنویسید A . برای باقی پایه ها چنین کنید)  
  نحویه وصل کردن به میکروکنترولر   اتصال نیاز به 8 عدد مقاومت 100 اهم (یا کمتر) دارید (*ولتاژ LED حدود 3.2 می باشد و ولتاژ پایه های میکرو 5 ولت می باشد،پس بهتر است،مقاومت استفاده کنید)   ها را به مانند تصویر زیر،به کمک مقاومت به میکرو اتصال دهید! 
تصویر
 به ترتیب:  PORTB.0=پایه A سون سگمنت  PORTB.1=پایه B سون سگمنت  PORTB.2=پایه C سون سگمنت  PORTB.3=پایه D سون سگمنت  PORTB.4=پایه E سون سگمنت  PORTB.5=پایه F سون سگمنت  PORTB.6=پایه G سون سگمنت  PORTB.7=پایه DOT سون سگمنت   دیگر همه چیز اماده   کدها   این برنامه ساده،هر 500 میلی ثانیه،به ترتیب پایه های a تا dot روشن میشوند،اینطور می توانید متوجه بشوید،که مدار را بدرستی اتصال داده   : 
Please Login or Register to see this code
دانلود پرتئوس و برنامه از [External Link Removed for Guests]

در ادامه و در اینده مدار نمایش اعداد به کمک سون سگمنت تک رقمی اموزش داده میشود.(انشالله)
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
Colonel II
Colonel II
نمایه کاربر
پست: 7545
تاریخ عضویت: سه‌شنبه ۲۶ آذر ۱۳۸۷, ۴:۲۰ ب.ظ
سپاس‌های ارسالی: 9280 بار
سپاس‌های دریافتی: 22106 بار

Re: آموزش میکروکنترولر AVR از ابتدا تا پیشرفته(+فهرست)

پست توسط sinaset »

بنام خداوند بخشنده و مهربان
باسلام


نمایش اعداد 0 تا 9 به کمک سون سگمنت

تصویر
حال اگر مطلب گذشته را خوانده باشید،دیگر می توانید به راحتی اعداد 0 تا 9 رو به روی سون سگمنت نمایش دهید! برای اینکه عدد مورد نظر به روی سون سگمنت نمایش داده شود،کافیست LED های مربوط به ان اعداد را(که هر کدام به یک پین از پورت بی وصل می باشند) روشن کنید،تا عدد مورد نظر به روی نمایشگر سون سگمنتی،نمایش داده شود.

کدهایی برنامه،برای نمایش اعداد:

Please Login or Register to see this code
همانجور که در برنامه بالا می ببینید،با روشن کردن پین های مربوط به یک LED ، اعداد در صفحه نمایش نقش گرفته،و نمایش داده میشوند.
توضیحات در خود برنامه نیز داده شده،که اگر مطالعه فرمایید،بهتر متوجه خواهید شد.

[External Link Removed for Guests]سورس و شبیه ساز.

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.
با عرض پوزش،دیگر در انجمن حضور ندارم،که به پیام ها پاسخ بدم.
ارسال پست

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