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

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

عالی و ساده بود،ادامه دهید
18
82%
خوب و قابل فهم بود،ادامه دهید
4
18%
ساده و قابل فهم نبود.
0
بدون راي
تکراری و سخت بود.
0
بدون راي
 
کل آرا : 22
Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » چهارشنبه 20 مرداد 1395 15:47

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

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

مراحل آموزش پروژه یا طرح چشمک زن LED را به چهار قسمت تقسیم می کنیم :

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


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

طرح اصلی برای چشمک زدن 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 و ذخیری سازی .


ادامه دارد..

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

3 کاربر از این پست سپاسگزاري کرده اند

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » چهارشنبه 20 مرداد 1395 16:33

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

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

خوب اکنون که ان صفحه را مطالعه کردید،به آموزش ها ادامه بدهید.!

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

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

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

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

پس ما کتابخانه میکروکنترولر را تعریف می کنیم:
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


چون ما می خواهیم تاخیر در پروژه خود ایجاد کنیم،از کتابخانه موجود در کدویژن استفاده می کنیم(کتابخانه که گذشته نیز ان را معرفی کرده ایم)
نام این کتابخانه delay می باشدو کارش نیز ایجاد تاخیر یا مکث می باشد(و دقیقا بدرد جاهایی مثل طرح ما می خورد)

پس ان را اینطور معرفی می کنیم
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


خوب اکنون دیگر باید یک تابع اصلی را معرفی کنیم،که بدین شکل ان را معرفی می کنیم

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


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

مقدار DDRB (که B معرفی پایه ها پورت B می باشد) را به 0xff می باشد را مقدار دهی می کنیم( 0xff به هگز می باشد، که اگر بخواهیم ان را به باینری ترجمه کنیم می شود 11111111  هر کدام از این 1 ها، مربوط به یک پایه پورت B می باشد و 1 یعنی ان پایه را در وضعیت خروجی قرار بده)
(هگز،دسیمال،باینری را در اینده بیشتر توضیح خواهیم داد)
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

ما می توانیم، مقدار DDRB را بجایی هگز به باینری بنویسیم(وبرای برنامه نیز تفاوتی ندارد!) DDRB=0b11111111 (اما برای خلاصه تر شدن و راحتی کار ان را به هگز نوشته ایم)

خوب حال DDRB را در وضیعت خروجی قرار داده ایم،اکنون می خواهیم بار اول PROTB خاموش باشد (تا بعد کارهای مد نظرمان را انجام دهیم) پس ان را در وضعیت 0 قرار میدهیم(که وقتی 0 میشود، لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد نیز فعال میشود،)
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


،چون می خواهیم،LED دائم در حال چشمک زدن باشد،پس باید برنامه چشمک زدن را در حلقه بی نهایت while بنویسیم
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


ابتدا می خواهیم PORTB کامل، روشن شود،برای این منظور ان رو اینطور مقدار دهی می کنیم
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

با دستور بالا،همه PORTB فعال و VCC میشوند و LED روشن میشوند،اما ما نیاز داریم،مقداری بر روی این دستور مکث کنیم، برای این منظور،از دستور تاخیر زیر استفاده می کنیم
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

وقتی میکروکنترولر به دستور بالا می رسد، 1 ثانیه صبر می کند (عدد 1000 نوشته شده در delay_ms به میلی ثانیه می باشد)

سپس می خواهیم،از دوباره PORTB صفر شود،و 1 ثانیه نیز صبر کند،برای این منظور
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


میکروکنترولر بعد از خواندن دو دستور بالا،ابتدا پورت B را خاموش می کند و سپس 1 ثانیه صبر می کند!
در پایان چون در حلقه دستوری دیگری نیز وجود ندارد،حلقه به ابتدا بر می گردد و دستورات را نیز از دوباره انجام میدهد ( و این کار را نیز تا بی نهایت انجام می دهد !)
بدین شکل چشمک زن LED ساخته میشود
(*دقت کنید بعد از پایان دو خط دستوری بالا پرانتز تابع اصلی و حلقه while را نیز ببندید)
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


کل کدهایی برنامه:
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

تصویر از کدهایی برنامه،در برنامه:
ادامه دارد..

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

2 کاربر از این پست سپاسگزاري کرده اند

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » شنبه 13 شهریور 1395 08:56

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

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

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

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

میکروکنترولر ما 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 برای همیشه اجرا میشود،و به شکل زیر همیشه در حال خاموش و روشن کردن پورت ها خود می باشد ..
ادامه دارد...
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

3 کاربر از این پست سپاسگزاري کرده اند

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » چهارشنبه 24 شهریور 1395 11:35

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


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

قبل از هرچیز،بهتر است،به سایت سازنده پروگرامر خود رفته و اطلاعات ان را مطالعه فرمایید (اگر پروگرام شما به مانند این جانب می باشد،صفحه ات قبلی را ببینید ، و همچنین  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد صفحه را ببینید) نرم افزار پروگرام مخصوص ویندوز (به نام progisp )را از  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد دانلود کنید.(پسورد ان نیز http://www.eca.ir می باشد)،سپس ان را نصب بفرمایید.

بعد از ان ،فایل برنامه آموزش را نیز  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد  دانلود کنید،سپس از حالت زیپ خارج کنید.

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




خوب اکنون همه چیز آمادست،حال وقت ان است،میکروکنترولر را درون پروگرام قرار دهیم و به نرم افزار معرفی کنیم! به مانند تصویر زیر (و آموزش ها که قبلا ذکر شده بود) میکروکنترولر را قرار دهید و جامپر ذکر شده را قرار دهید
*میکروکنترولرهای شرکت Atmel معمولا به صورت دیفالت به فرکانس 1 مگاهرتز کار می کنند،بنابراین باید جامپر ذکر شده در تصویر را قرار دهید،تا پروگرام بدانند باید با فرکانس 1 مگاهرتز با میکروکنترولر ارتباط برقرار کند.
سپس Usb ها را وصل کنید و پروگرام را به کامپیوتر وصل کنید. سپس منوی قسمت select chip را باز کنید و میکروکنترولر atmega8a را انتخاب کنید.
خوب اگر پروگرام به درستی به کامپیوتر ارتباط برقرار کرده باشد و همچنین میکروکنترولر بدرستی بر روی پروگرام قرار گرفته باشد! با زدن گزینه RD، پایین نرم افزار، متن زیر  نمایش داده میشود!
اکنون دیگر همه چیز آماده می باشد،و باید اطلاعات را بر روی میکروکنترولر قرار بگیرد! برای این  بر روی گزینه Auto کلیک کنید.
لودینگ

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

پایان مبحث مثال LED چشمک زن.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

2 کاربر از این پست سپاسگزاري کرده اند

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » شنبه 10 مهر 1395 11:02

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

اما در ادامه،بهتراست مثال LED را باز تر کنیم تا بدین طریق با پورت ها بیشتر آشنایی پیدا کنیم.

چشمک زدن به ترتیب 8 LED

اما در مثالی دیگر قصد داریم به کمک همه پایه های پورت بی میکروکنترولر Atmega8 تعداد 8 LED را به ترتیب روشن کنیم! (یعنی دقیقا به تعداد همه پایه های پورت B)

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

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


کل کدهایی برنامه:
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


همانجور که در بالا می ببینید، در حلقه while مقدار پورت بی را 1 قرار می دهیم تا مقدار کل پورت بی بشود PORTB= 00000001 . سپس وارد یک حلقه for میشود و 8 بار تکرار میشود. در این 8 بار هر دفعه یک بار 500 میلی ثانیه برنامه توقف میشود،سپس مقدار ریجستر PORTB یک درجه شیفت به چپ پیدا می کند.
بدین ترتیب LED ها پشت سرهم روشن و خاموش میشوند .


*|  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد شبیه ساز و کدها |*

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

3 کاربر از این پست سپاسگزاري کرده اند

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » چهارشنبه 14 مهر 1395 11:16

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

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

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

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

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

باینری 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 حالت مختلف دیگر شمارش باینری خود را ادامه دهد ! که در ادامه می ببینید:

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

در بالا ما از حالت هفده ام تا دویصد پنجاه شش حالت مختلف باینری را به ترتیب شمارش کردم! و برای یک متغیر هشت بیتی بیش از 256 حالت مختلف وجود ندارد! (0 تا 255 که جمعا میشود 256 حالت )  (2 به توان 8 یعنی 2 هشت بار ضربدر خودش !)

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

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

بدین صورت :


;unsigned char B=0b00000001

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

برای درک بیشتر موضوع شمارش به روش باینری،بهترست  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد مثال را دانلود کنید،سپس فایل پرتئوس را اجرا کنید و خروجی ها را ببینید


مقداری دهی دسیمال DECIMAL یا DEC (که البته نام کاملش نیز هگزا دسیمال نیز می باشد Hex Decmial )

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

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

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

جدول  معادل باینری به دسیمال (گرچه در  بالا نیز ان را قرار داده بودیم!)
کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 



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

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


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

مقداری دهی به روش هگز! HEX

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

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

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

هر کدام از  مقدار هایی Hex معادل باینری و دسیمال نیز دارد! که در جدول زیر می توانید ببینید!
برای نوشتن مقدار ها به روش هگز،در برنامه باید 0x را قبل از ان بنویسید (به مانند باینری که باید 0b را می نوشتید)
حال برای درک بهتر، شمارش یک متغیر هشت بیتی به سه روش باینری و هگز و دسیمال انجام را می توانید در جدول پایین ببینید:

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

HEX:0xff  |   DECIMAL:255  |   BINARY:0b11111111




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

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


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

برای دیدن شمارش به سه روش ذکر شده،به کمک پرتئوس، لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد مثال را ببینید و اجرا کنید.
=========
برای آشنایی بیشتر با هگز و دسیمال و باینری، فرمول های بدست اوری انها، لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد مقاله را مطالعه فرمایید.
جهت معادل سازی سه مبنا به هم دیگر، می توانید از این دو برنامه استفاده کنید: برنامه  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد و برنامه  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

در پست بعدی مثال LED ها را ادامه خواهیم داد.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

3 کاربر از این پست سپاسگزاري کرده اند

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » پنج شنبه 15 مهر 1395 10:35

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

روشن شدن  LED ها به صورت BCD

در پست قبل،در رابطه با ترتیب شمارش باینری،توضیحاتی ارائه کرده ایم، حال برای درک بهتر این مسئله می خواهیم، چنین شمارش را با یک از پورت ها میکروکنترولر انجام دهیم.

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

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


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

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

 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد مثال(کدها و شبیه ساز)
---
بعد از انجام این پروژه می توانید بهتر،با شمارش باینری نیز آشنایی پیدا کنید.(برای درک بهتر،بهترست سرعت تاخیر برنامه را از 50 میلی ثانیه به 250 یا 500 میلی ثانیه افزایش دهید)

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

2 کاربر از این پست سپاسگزاري کرده اند

Furious Poster

Furious Poster



no avatar
پست ها

374

تشکر کرده: 28 مرتبه
تشکر شده: 65 مرتبه
تاريخ عضويت

يکشنبه 14 بهمن 1386 13:04

آرشيو سپاس: 754 مرتبه در 232 پست

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

توسط kingday » شنبه 18 دی 1395 21:44

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

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

jamalmusic از این پست سپاسگزاري کرده است

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » يکشنبه 19 دی 1395 09:01

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

برای پیدا کردن پاسخ صحیح تر،بهتر است،دیتاشیت را مطالعه فرمایید.
---
در  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد مقاله یک سایت،گفته شده با دستور مستقیم اسمبلی،میشه سرعت سوئیچ رو بیشتر کرد (بطور کلی دستورات اسمبلی بازده بهتر و مصرف توان انرژی در میکرو رو کمتر و بهینه تر می کنند)
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

jamalmusic از این پست سپاسگزاري کرده است

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » جمعه 4 فروردین 1396 12:36

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


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

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

سون سگمنت از 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 پایه میکروکنترولر بدهیم .! که انشالله در پست بعدی به ان می پردازیم.
ادامه دارد...
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

3 کاربر از این پست سپاسگزاري کرده اند

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » پنج شنبه 19 مرداد 1396 08:51

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

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


در ادامه مبحث قبلی قصد داریم،یک سون سگمنت ساده، تکی ، مدل کاتد مشترک(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  روشن میشوند،اینطور می توانید متوجه بشوید،که مدار را بدرستی اتصال داده اید
کدها:

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


دانلود پرتئوس و برنامه از  لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 

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

Colonel II

Colonel II



نماد کاربر
پست ها

6603

تشکر کرده: 1669 مرتبه
تشکر شده: 8138 مرتبه
تاريخ عضويت

سه شنبه 26 آذر 1387 16:20

آرشيو سپاس: 11653 مرتبه در 2024 پست

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

توسط sinaset » جمعه 31 شهریور 1396 08:24

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


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


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

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

کد: انتخاب همه
 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد 


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

 لينکها براي کاربران مهمان قابل دسترسي نيست، براي مشاهده ي لينکها لطفا ثبت نام کرده و وارد شويد سورس و شبیه ساز.

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

mohsen2017 از این پست سپاسگزاري کرده است

قبليبعدي

 


  • موضوعات مشابه
    پاسخ ها
    بازديدها
    آخرين پست

چه کسي حاضر است ؟

کاربران حاضر در اين انجمن: بدون كاربران آنلاين و 0 مهمان