الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

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

نویسندگان
پیوندهای روزانه
طبقه بندی موضوعی
آخرین نظرات

دوشنبه, ۲۱ دی ۱۳۹۴، ۰۷:۵۳ ق.ظ

۰

 

جلسه سوم


1-
سلام
2-
سلام خوبی
1-
قربانت
2-
چه خبر اون چیزایی رو که بهت گفته بودم رو کار کردی مثال حل کردی ازش
1-
اره . کار کردم اونم از همش . اقا یک سوال اگه بخایم مقدار یک متغییر رو روی LCD نمایش بدیم باید چطوری عمل کنیم
2-
این که خیلی اسونه با چند تا مثال جواب سوالتو میدم


مثال 1:

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM A AS BYTE
A = 3
CLS
LCD A
END

1-
خوب تحلیلش کن
2-
باشه
خط اول که معرفی میکرو هستش
خط دوم فرکانس کاری میکرو هستش
خط سوم ما یک متغییر را که نامش هست A و را از نوع بایت می باشد را تعریف کردیم
خط چهارم به متغییر مقدار دادیم
خط پنجم با دستور CLS ال سی دی را برای نوشتن جدید پاک کردیم
خط ششم دستور دایم که مقداری را که به متغییر A داده ایم روی LCD نمایش داده شود
خط هفتم با دستور END برنامه را به پایان رساندیم.
1- اها یعنی به متغییر A هر مقداری که داده باشیم مثلا 1 یا 0 یا 1001 روی LCD نمایش داده می شود
2- کاملا درسته واما مثال دوم: این دفعه می خایم دو تا متغییر رو یکی پس از دیگری روی LCD نمایش بدیم

 

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM ALI AS BIT
DIM IRAN AS BYTE
ALI = 0
IRAN = 224
CLS
LCD ALI
CLS
LCD IRAN
END

خط اول که معرفی خود میکرو
خط دوم معرفی فرکانس کاری میکرو
خط سوم اومدیم یک متغییر از نوع BIT که نامش است ALI رو معرفی کردیم
خط چهارم هم اومدیم یک متغییر از نوع بایت که نامش هست IRAN رو معرفی کردیم
خط پنجم به متغییر BIT که نامش بود ALI یک مقدار دادیم
خط ششم هم مثل خط پنجم
خط هفتم با دستور CLS ال سی دی را برای نوشتن اماده کردیم
خط هشتم به میکرو دستور دادیم که مقدار متغییر ALI رو روی LCD نمایش بدهد
خط نهم دوباره با دستور CLS ال سی دی رو برای نوشتن دوباره پاک کردیم
خط دهم هم به میکرو دستور دادیم که مقدار متغییر IRAN رو روی ال سی دی نمایش بده
و در خط اخر نیز با دستور END برنامه رو به اتمام رساندیم
2- مثال اخر :

 

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM G AS WORD
G = 12
CLS
LCD G
INCR G
CLS
LCD G
END

خط اول و دوم رو که دیگه تکراری شده که بخام توضیح بدم
خط سوم هم تغریبا مثل قبل اومدیم یک متغییر که نامش هست G و از نوع WORD می باشد را برای میکرو تعریف کردیم
خط چهارم به متغییر G یک مقدار دلخاه دادیم
خط پنجم ال سی دی را با دستور CLS برای اماده شدن پاک کردیم
خط ششم با دستور LCD G مقدار فعلی متغییر G را که هست 12 را روی LCD نمایش دادیم
خط هفتم به متغییر G یک واحد اضافه کردیم یعنی شد 13
خط هشتم با دستور CLS ال سی دی را برای نوشتن دوباره پاک کردیم
خط نهم به میکرو دستور دادیم مقدار متغییر G را که الان به ان یک واحد اضافه شده است یعنی شده 13 رو روی ال سی دی نمایش بده
خط دهم هم یعنی پایان برنامه


1-
همه این مثالایی رو که گفتی توی محیط شبیه سازی قابل اجراست
2-
اره قابل اجراست و میتونی اونجا همه این مثال های رو مشاهده کنی.
خوب حال بریم سر مبحث بعدی
1- دستورات LCD همینا بود
2- نه هنوز چند تا دیگه هست که به موقش میگم
1- خوب برو سر مبحث بعدی
2- باشه . ببین گاهی وقتا لازم هستش که در بین برنامه هایی که داریم می نویسیم یک تاخیر ایجاد کنیم که این تاخیر می تونه یک ثاینه . ده ثانیه . یک میلی ثانیه . یک میکرو ثانیه یا هر تایمی که عشقت بود رو تاخیر ایجاد کنی
1- همین جا وایستا که یک سوال دارم . این تاخیر به چه درد می خوره لطفا فقط یک مثال کاربردی هم بزن
2- ببین مثالا شما می خای یک LED رو روشن کنی و می خای این LED بعد از مثلا ده ثانیه خاموش بشه خوب حالا ارزش این دستور باید حس کنی
1- اها فهمیدم حالا ادامه بده
2- تاخیراتی را که ما میتوانیم ایجاد کنیم بر حسب ثانیه- میلی ثانیه- میکرو ثانیه می باشد
WAIT 1 تاخیر برای مدت زمان یک ثانیه
WAITMS 1 تاخیر برای مدت زمان یک میلی ثانیه
WAITUS 1 تاخیر برای مدت زمان یک میکرو ثانیه
متاسفانه این مدت زمان های تاخیر زیاد هم دقیق نیستند مثلا شما دستور میدی که یک ثانیه تاخیر داشته باش میکرو میاد دوازده ثانیه تاخیر ایجاد میکنه
1- خوب پس چاره چیه؟؟
2- برای حل این مشکل شما باید از میلی ثانیه یا میکرو ثانیه بیشتر استفاده کنی مثال اگه می خای یک تاخیر یک ثایه ایجاد کنی باید بنویسی WAITMS 30 البته این یک مثال بود که اگه یکم با این دستورات ور بری همش دستت میاد
خوب حالا بریم سر مثال ها
مثال اول:

 

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM A AS BYTE
A = 112
CLS
LCD A
INCR A
WAITMS 500
CLS
LCD A
END

حالا تحلیل برنامه
خط اول و دوم که خودت میدونی
خط سوم هم که باید بدونی
خط چهارم هم باز باید بدونی ولی می گم که دلت نشکنه در خط چهارم ما به متغییر A یک مقدار دادیم
خط پنجم با دستور CLS ال سی دی را برای نوشتن و اماده شدن پاک کردیم
خط ششم با دستور LCD A مقدار متغییر A را که هست 112 روی ال سی دی نمایش دادیم
در خط هفتم با دستور INCR A یک واحد به متغییر A اضافه کردیم یعنی بود 112 حالا شد 113
در خط هشتم با دستور WAITMS 500 یک تاخیر پانصد میلی ثانیه ای ایجاد کردیم یعنی اینکه برنامه فعلا هیمنجا متوقف است و بعد از 500 میلی ثانیه برنامه از خط بعدی خوانده می شود
در خط نهم با دستور CLS ال سی دی را پاک کردیم
در خط دهم مقدار جدید متغییر A را که الان هست 113 روی ال سی دی نمایش دادیم
در خط اخر هم با دستور END برنامه رو پایان دادیم

 

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM S AS BYTE
S = 112
CLS
LCD S
INCR S
WAITMS 500
CLS
WAITMS 100
LCD S
END


از خط اول تا خط هشتم
خط نهم ال سی رو رو پاک کردیم
خط دهم یک تاخیر در برنامه با مدت زمان 100 میلی ثانیه ایجاد کردیم و بعد از اینکه صد میلی ثانیه گذ شت برنامه از خط بعدی ادامه پیدا می کنه
خط یازدهم دستور دادیم که مقدار جدید S را که 113 هستش رو روی ال سی دی نمایش بده
خط اخر هم پایان برنامه
1- اینم توی محیط شبیه ساز قابل اجراست
2- بله حتما. موافقی که بریم سر مبحث بعدی
1- اره بریم
2- خوب حالا رسیدیم به قسمت های جون دارتر میکرو. اگه یادت باشه اون اوایل بهت گفته بودم که میکروکنترلر دارای یک سری امکانات هستش مثل تایمر – کانتر - مبدل انالوگ به دیجیتال همچنین گفتم که یکی از امکاناتش ورودی خروجی یا همون I/O هستش که کاربردای فراون داره . مثلا در ساده ترین حالت شما با استفاده از این امکان می تونی یک LED رو روشن یا خاموش یا هر دو حالت رو انجام بدی
1- I/O چی هست
2- I یعنی ورودی O هم یعنی خروجی البت هردو از نوع دیجیتال هستند
1- ها فهمیدم . میشه یک مثال دیگه از کاربردش بزنی
2- چراکه نه حتما. فرض کن می خای با یک میکرو سوییچ ( یک نوع کلید ) یک موتور رو روشن خاموش کنی و حتما باید با یک عدد میکروسوییچ یک بار که میزنی روشن و دفعه بعد که میزنی خاموش شود
1- میکرو سوییچ همون شسی هستش ؟
2- اره میکروسوییچ همون کلید زنگ در خونتون هستش
2- در کل برای استفاده از امکانات میکروکنترلر باید از روش پیکره بندی استفاده شود که بهش می گن CONFIG یعنی شما با این کار به میکروکنترلر اعلام می کنی که می خاهم از فلان امکانات استفاده کنم . بزار اول یک سری دستورات رو لیست وار معرفی کنم بعد یکی یک اونها رو توضیح بدم
PORT
PIN
SET
RESET
TOGGLE
خوب حالا درباره هر کدوم توضیح میدم
PORT به معنی خروجی هستش هر وقت که خاستی از میکرو یک خروجی بگیری از این دستور باید استفاده کنی . مثلا یک LED رو می خای روشن کنی یا هر چیز دیگه
PIN به معنی ورودی هستش هر وقت که خاستی یه میکروکنترلر یک ورودی بدی بایداز این دستور استفاده کنی مثلا می خای یک کلید به ورودی وصل کنی البته این دستور PIN و PORT به تنهایی کاربرد ندارن که در ادامه میگم که باید چیکار کنی
SET که همون یک دیجیتال خودمونه
RESET که همون صفر دیجیتال خودمونه
TOGGLE یعنی عکس حالت فعلی بعنی اگر قبلا یک بوده حالا صفر میشه اگه قبلا صفر بوده حالا یک میشه
بزار قبل از اینکه توضیحاتمو کامل کنم یک سری اطلاعات درباره پایه های میکرو بدم . ببین هر میکرو بسته به نوعش یک تعداد پایه داره که از 8 پایش هست تا 40 پایه که هر هشت پایه رو یک پورت می نامند البته ربطی به اون پورتی که توی دستورات بهت گفتم نداره هر پورت رو که هشت پایه هستش رو با یک اسم نام گذاری می کنن که استاندارد هستش به نام های پورت A پورتB پورت C پورت D میکرو ها حداکثر چهار پورت ورودی خروجی دارن. در ضمن هر کدام از پورت ها می توانند ورودی یا خروجی باشند که بستگی به انتخاب برنامه نویس داره علامت پورت ها به ترتیب زیر هستش:
A,0
A.1
A.2
A.3
A.4
A.5
A.6
A.7
برای پورت های B C و D هم مثل بالا هستش
1-
یک سوال . اگه بخاد حداکثر چهار پورت داشته باشه و هر پورت هم که هشتا پایه هستش پس در کل میشه 32 پایه پس چرا بعضی از میکرو ها 40 پایه هستند
2-
خوب 32 پایه هستش با به عبارتی چهار پورت بقیش مال VCC GND و... هستش
1-
اها فهمیدم ادامه بده
2-
خوب گفتیم که برای استفاده از امکانات میکرو باید انها را پیکره بندی کنیم یا به عبارتی CONFIG کنیم . حالا ما برای استفاده از ورودی خروجی میکروکنترلرI/O هم باید اونو پیکره بندی کنیم یعنی به میکرو اعلام کینم که اقا ما میخاهیم از فلان پایه تو به عنوان ورودی یا مثلا خروجی استفاده کنیم.
اگه خاستیم از یک پورت به عنوان خروجی استفاده کنیم باید به ترتیب مثال زیر عمل کنیم:
مثال : مثلا می خاهیم از پورت A به عنوان خروجی استفاده کنیم :
CONFIG PORTA = OUTPUT
حالا تحلیل این دستور. CONFIG که بهت گفتم یهنی چی PORTA یعنی می خواهیم از پورت A به عنوان خروجی استفاده کنیم به جای A از هر پورت دلخاه دیگه هم می تونیم استفاده کنیم . علا مت مساوی = رو که باید همیشه بزاری . عبارت OUTPUT هم یعنی خروجی
اگه خاستیم از یک پورت به عنوان ورودی استفاده کنیم باید به ترتیب مثال زیر عمل کنیم :
مثال : مثلا می خاهیم از پورت B به عنوان وردی استفاده کنیم
CONFIG PINB.0 = INPUT
حالا گوش فرا بده به تحلیل این دستور. CONFIG که گفتم قبلا. خوب PINB.0 یعنی ما می خاهیم از پایه B.0 به عنوان ورودی استفاده کنیم . = هم که هیچی همیشه باید بزاری. کلمه INPUT را وقتی میزاری که خاسته باشی از یک پایه به عنوان ورودی استفاده کنی
3-
خوب بزار یک مرور بکینم . اگر خاستیم که از یک پایه به عنوان ورودی استفاده کنیم از دستور
CONFIG PINC.0 = INPUT استفاده کنیم که ما دراین مثال از پورت C.0 به عنوان ورودی استفاده کردیم نکته اینجاست که هر وقت که خاستی از یک پایه به عنوان ورودی استفاده کنی باید شماره پایه رو هم مثل همین مثال بالا که برای زدم استفاده کنی به جای PINB.0 هم می تونی مثال بزاری PINB.1 یا PINB.3 یا بزاری PINB.7 که بستگی داره به انتخاب تو
اگر خاستیم که از یک پورت به عنوان خروجی استفاده کنیم از دستور زیر استفاده می کنیم باید از دستور زیر استفده کنی
CONFIG PORT C = INPUT ما در این مثال به میکرو فهماندیم می خاهیم از پورت C تو به عنوان خروجی استفاده کنیم
1-
شما ره پایه رو نباید بنویسیم
2-
نه نباید بنویسیم بعدا ما بین برنامه مشخص می کنیم که کدام پایه باید خروجی بدهد
بزار ادمه درس رو با یک مثال برات بگم فرض کن ما میخایم از پایه D.4 میکرو کنترلر یک خروجی بگیرم و یک LED رو روشن کنیم برای این کار از برنامه زیر استفاده می کنیم:

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTD = OUTPUT
SET PORTD.4
END

 

خط اول ودوم که هیچ
خط سوم ما اومدیم به میکرو اعلام کردیم که می خاهیم از پورت C تو به عنوان یک خروجی استفاده کنیم
خط چهارم نوشتیم SET PORTD.4 ما بانوشتن کلمه SET این منظور را رساندیم که می خاهیم پورت D.4 یک شود . و همچنین جلوی SET نام پایه ای رو که باید یک شود یا به عبارتی دیگر SET شود رو هم اعلام کردیم
در خط اخر هم با دستور END برنامه را به پایان رساندیم
1-
یعنی اگه یک LED رو به پایه D.4 میکروکنترلر وصل میکردیم LED روشن می شد
2-
اره روشن می شد
مثال دوم: می خاهیم همان پورت D.4 را یک بار که روشن شد بعد از دو ثانیه خاموش شود

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTD = OUTPUT
SET PORTD.4
WAITMS 2000
RESET PORTD.4
END

خط اول دوم که هیچ
خط سوم هم اومدیم تعرف کردیم که از پایه D.4 می خاهیم به عنوان خروجی استفاده کنیم
خط چهارم با دستور SET PORTD.4 پایه D.4 رو یک کردیم
خط پنجم با دستور WAITMS 2000 این را رساندیم که می خاهیم 2000 میلی ثانه به عبارتی دو ثانیه در همین جا تاخیر ایجاد شود در طول این دو ثانیه PORTD.4 در همان حالت یک باقی می ماند. بعد از دو ثانیه برنامه از خط بعد ادامه پیدا می کند
خط ششم با دستور RESET PORTD.4 به میکرو دستور دادیم که همان پایه D.4 را ریست کن یعنی صفر کن
خط اخر هم که یعنی پایان برنامه. در این مثال اگر که ما یک LED به پایه D.4 وصل می کردیم LED برای بار اول با دستور SET روشن می شد و این روشن بودن با دستور WAITMS 2000 دو ثانیه به طول می انجامید و بعد از دو ثانیه با دستور RESET PORTD.4 LED خاموش می شد چون پایه را صفر کردیم.
مثال سوم : فرض کن می خا هیم دو تا پایه رو هم زمان یک کنیم و بعد از دو ثانیه فقط یکی از انها را صفر کنیم .

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTC = OUTPUT
SET PORTC.2
SET PORTC.7
WAITMS 2000
RESET PORTC.7
END

خط اول و دوم که هیچ
خط سوم هم که باید حتما یاد داشته باشی
خط چهارم اومدیم فرمان دادیم که پایه C.2 را یک کن
خط پنجم هم اومدیم فرمان دادیم که پایه C.7 رو یک کن
خط ششم دو ثانیه تاخیر در برنامه ایجاد کردیم که در طول این مدت پایه های C.2 و C.7 در حالت یک است
خط هفتم با دستور RESET PORTC.7 فقط پایه C.7 رو صفر کردیم. ولی پایه C.2 در همان حالت یک باقی مانده است
خط اخر هم که هیچ
مثال سوم : این مثال رو ببینم که می تونی تحلیل کنی

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTA = OUTPUT
CONFIG PORTC = OUTPUT
SET PORTA.1
SET PORT C.0

حالا خودت تحلیلش کن
1-
خط اول و دوم رو که بلدم
خط سوم اومدیم به میکرو اعلام کردیم که می خاهیم از پوت A به عنوان خروجی استفاده کینم
خط چهارم هم مثل خط سوم
خط ششم دستور یک شدن پایه A.1 رو صادر کردیم
خط هفتم هم دستور یک شدن پایه C.0 رو صادر کردیم
خوب بود
2-
عالی بود
1-
حال ورودی رو برام توضیح بده
2-
ورودی باشه برای وقتی که چندتا از دستورات شرط و چندتا دستور دیگه رو گفتم برات میگم
1-
خوب حالا این صفر و یک شدن پایه ها رو میشه تو شبیه ساز نرم افزار تماشا کرد
2-
متاسفانه نه نمیشه
1-
پس باید چکار کنم
2-
دو راه داری اول اینکه بری یک میکرو بخری و خودت امتحان کنی دوم اینکه با استفاده از نرم افزار پروتوس اونو شبیه سازی کنی .
1-
خوب این پروتوس رو برام توضیح بده
2-
اینو دیگه خودت برو یاد بگیر توی انجمن های برق و الکترونیک ایرانی که تعدادشون هم زیاده به خوبی توضیح دادن
1-
باشه حالا چی رو می خای برام توضیح بدی
2-
فعلا تا همین جاشو داشته باش تا بعدا ادامشو برات توضیح بدم
پایان قسمت سوم

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی