Electrobot

وبلاگ تخصصی مدارت الکترونیک و رباتیک

Electrobot

وبلاگ تخصصی مدارت الکترونیک و رباتیک

در این وبلاگ آموزش هایی از الکترونیک و رباتیک قرار داده خواهد شد و دیتاشیت مدارات کاربردی توضیح داده میشود .

طبقه بندی موضوعی

۲ مطلب با کلمه‌ی کلیدی «کامپلیر بسکام» ثبت شده است

۰۷ بهمن۱۸:۵۴

جلسه هشتم

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


2-
اولین دستور GOSUB هستش توسط این دستورشما می تونی بپری توی یک زیر برنامه و دستورات داخل اون زیربرنامه رو انجام بدی دقیقا همان کاری که دستور GOTO برای ما انجام می داد این دستور GOSUB هم برای ما انجام می ده با یک تفاوت و اون هم اینکه در دستور GOSUB ما با دستور RETURN می توانیم دوباره برگردیم GOSUB رو بخونیم کاری که با دستور GOTO نمی تونستیم انجام بدیم
1-
یک مثال بزن که نفهمیدم


2-
باشه اینم مثال :

کد:
CONFIG PINB.0 = INPUT
CONFIG PORTA = OUTPUT
DO
IF PINB.0 = 1 THEN GOSUB BENZ
LOOP
END
BENZ:
TOGGLE PORTA
WAITMS 50
RETURN

توسط برنامه بالا می تونیم با زدن میکرو سوییچ پورت A رو TOGGLE کنیم. یعنی برای بار اول که میکروسوییچ رو میزنیم پورت A یک می شه برای بار دوم که میزنی صفر میشه برای بار سوم که می زنی دوباره یک می شه برای بار چهارم که میزنی صفر میشه و الی اخر. در خط اول ما پایه B.0 رو به عنوان ورودی پیکره بندی کردیم . در خط دوم پورت A رو برای خروجی پیکره بندی کردیم . در خط سوم ما اول حلقه رو با نوشتن دستور DO عنوان کردیم. در خط چهارم ما نوشتیم
IF PINB.0 = 1 THEN GOSUB BENZ به معنی که اگر پایه B.0 میکروکنترلر یک شد بپر برو توی
زیربرنامه BENZ . در خط پنجم با دستور LOOP انتهای حلقه رو مشخص کردیم . در خط ششم نوشتیم END که برنامه ما هیچ وقت به اینجا نمی رسه . در خط بعدی ما یک زیربرنامه به اسم BENZ مشخص کردیم . خط هفتم نوشتیم TOGGLE PORTA یعنی وضعیت پورت A رو هر چی که هست معکوسش کن یعنی اگه یک هستش بکنش صفر و اگه صفر هستش بکنش یک . در خط هشتم ما یک تاخر 50 میل ثانیه ای گذاشتیم . در خط نهم نوشتیم RETURN که در ادامه بهت که توی این برنامه وضیفش چیه.
خوب میکروکنترلر میاد از خط اول برنامه شروع میکنه به خوندن خط اول خط دوم رو می خونه . به خط سوم که می رسه یعنی DO می فهمه که یک حلقه سر راهشه و توی این حلقه یکسره دور میزنه و خارج نمی شه تا وقتی که اون شرطی که گذاشتیم اجرا بشه یعنی IF PINB.0 = 1 THEN GOSUB BENZ . حالا فرض می کنیم که ما میکروسوییچ رو فشار دادیم و با این کارمون PINB.0 رو یک کردیم در اینجا میکرو میاد دستور شرط رو یعنی THEN GOSUB BENZ رو اجرا میکنه یعنی میپره می ره توی زیربرنامه BENZ و دستورات داخل این زیر برنامه رو اجرا میکنه. خوب حالا داخل این زیر برنامه ما این دستورات رو نوشتیم TOGGLE PORTA یعنی وضعیت پورت A رو هر چی که هستش معکوسش کن و در اینجا میکرو میاد پورت A رو یک میکنه و اگه شما به پورت A LED وصل کرده باشی می بینی که روشن می شه دستور بعدی که داخل این زیربرنامه هست WAITMS 50 که میکرو با خوندن این خط به مدت 50 میلی ثانیه در اجرای برنامه تاخیر ایجاد میکنه . دستور بعدی که ما داخل این زیربرنامه نوشتیم RETURN هستش که میکرو بعد از گذشت 50 میلی ثانیه که این دستور رو می خونه برمی گرده توی حلقه . و دوباره توی اون حلقه دور می زنه تا وقتی که دوباره شرط اجرا بشه و دوباره بپره بره توی زیربرنامه.
برنامه بالا رو اینطوری هم میشه نوشت که این روش منطقی تره :
3-

 

 

کد:
CONFIG PINB.0 = INPUT
CONFIG PORTA = OUTPUT
DO
DEBOUNCE PINB.0 , 1 , BENZ , SUB
LOOP
END
BENZ:
TOGGLE PORTA
RETURN

برنامه بالا رو فقط تاخیر 50 میلی ثانیه ای شو حذف کردم . برنامه بالا رو تنها تغییری که توش انجام دادم خط چهارمش هستش یعنی DEBOUNCE PINB.0 , 1 , BENZ , SUB که ما با نوشتن این خط این رو به میکرو فهمونیدم که اگر یک موقع PINB.0 ما یک شد بپر برو توی زیربرنامه BENZ . اون SUB هم نوشتیم که به میکرو بفهمونیم که ما دستور GOSUB می خایم که این پرش صورت بگیره و اگه ننویسیم میکرو خودش پیش فرض با دستور GOTO میپره توی زیربرنامه . خوب حالا فرض کن که این شرط یعنی پایه B.0 یک شده در اینجا میکرو میپره میره توی زیربرنامه BENZ و دستورات داخل این زیربرنامه رو اجرا می کنه و وقتی که به دستور RETURN میرسه مفهمه که باید بپره بره توی حلقه و خط
DEBOUNCE PINB.0 , 1 , BENZ , SUB
رو دوباره بخونه و داخل این حلقه دوباره گیر میکنه تا وقتی که پایه B.0 دوباره یک بشه و دوباره بپره بره توی زیربرنامه و روز از نو روزی از نو.

دستور بعدی حلقه FOR –NEXT هستش که با این دستور می تونی یک حلقه شمارشی ایجاد کنی اگه توجه کنی تا حالا من یک حلقه DO-LOOP بهت گفتم که یک حلقه نا محدود بود ولی این حلقه FOR-NEXT یک حلقه محدود هستش یعنی میاد توی یک حلقه ایجاد میکنه البته تایک زمان مشخصی این کار رو میکنه که این زمان دست خودمون هستش که چقدر باشه به مثال زیر توجه کن :

کد:
DIM A AS BYTE
FOR A = 1 TO 10 STEP 1
CLS
LCD A
WAITMS 30
NEXT A
END

خوب بریم سر تحلیل برنامه . خط اول که ما یک متغییر به اسم A و از نوع بایت تعریف کردیم . در خط دوم ما نوشتیم که
FOR A = 1 TO 10 STEP 2 به این معنی که متغییر A رو افزایش بده از عدد 1 تا عدد 10 . و دستور STEP 1 که نوشتیم به این معنی هستش که یکی یکی بشمار یا به عبارتی یک پله یک پله بشمار
1-
ببین نفهمیدم این STEP 1 رو دوباره توضیح بده
2-
یعنی این که یکی یکی بشمار 1 و 2 و3 و4 و5 و6 تا عدد 10 . اگه ما به جای STEP 1 می دادیم STEP 2 دو تا دوتا میشمرد اینطوری 1 و 3 و5 و7 و9
خوب بریم سر ادامه وقتی که میکرو خط FOR A = 1 TO 10 STEP 2 رو می خونه شروع می کنه به افزایش متغییر A . بعد میاد خط بعدی که نوشته CLS رو می خونه و در این جا LCD رو پاک میکنه . بعد میاد خط LCD A رو میخونه و می فهمه که باید مقداری که داره افزایش پیدا میکنه رو نشون بده . خط بعدی نوشتیم WAITMS 30 که یک تاخیر 30 میلی ثانیه ای در اجرای برنامه انجام میده و کارش این هستش که بیاد مدت زمان افزایش رو تند یا کند کنه یا به عبارتی اهسته یا سریع کنه . خط بعدی نوشتیم NEXT A که میکرو با خوندن این خط دوباره برمیگرده و خط دوم رو یعنی خط
FOR A = 1 TO 10 STEP 2 رو می خونه . خط بعدی نوشتیم END که برنامه ما فعلا به این قسمت نمی رسه تا وقتی که شمارش تموم بشه
1-
من که چیزی نفهمیدم
2-
بزار تحلیلش کنم می فهمی
خوب حالا تحلیل برنامه : میکرو میاد از خط اول شروع میکنه به خوندن و می فهمه که ما یک متغییر به اسم a و از نوع بایت تعریف کردیم . در خط دوم که ما نوشتیم FOR A = 1 TO 10 STEP 1 میکرو میاد شروع میکنه به شمارش یا همون افزایش متغییر یک نکته رو بزار همیجا بگم که فرقی نداره که عددها چقدر باشه حتی می تونیم بگیم که از 10 شروع به شمارش کن تا مثال 110 هیچی محدودیتی وجود نداره البته حداکثر تا 255 میتونی بدی . خوب بری سر دستوری که نوشتیم . خوب بعد میکرو میاد دفعه اول خود مقدار 1 رو میزاره توی متغییر A بعد میاد با فرمان CLS ال سی دی رو پاک میکنه و با دستور LCD A میاد مقدار متغییر A رو که الان هست 1 رو روی ال سی دی نمایش می ده بعد بادستور WAITMS 30 میاد یک تاخیر 30 میلی ثانیه ای در اجرای برنامه ایجاد می کنه و در خط بعد تا که دستور NEXT A رو می خونه برمی گرده توی اون خط FOR A = 1 TO 10 STEP 1 و دوباره که این دستور رو خوند مقدار متغییر A رو یک واحد بیشتر می کنه یعنی 2 و دوباره با دستور CLS ال سی دی رو پاک می کنه و با دستور LCD A میاد مقدار متغییر A رو که الان هست 2 رو روی ال سی دی نمایش می ده . این روال همینطور ادامه داره تا این که مقدار متغییر A بشه 10 یا به عبارتی مساوی بشه با مقداری که در پایان شمارش بهش دادیم ( که در اینجا عدد 10 رو دادیم) و وقتی که این اتفاق افتاد میکرو میاد خط زیری NEXT A رو می خونه که ما در اینجا دستور END رو گذاشتیم که برنامه به پایان برسه ولی شما اگه حال کردی که شمارش دوباره اغاز بشه و دوباره بشماره می تونی قبل از دستور FOR یک زیربرنامه تعریف کنی و در بعد دستور NEXT A هم یک دستور پرش به این زیربرنامه رو بزاری که هر وقت که شمارش به پایان رسید میکرو بپره بره توی این زیربرنامه و شمارش رو از دوباره اغاز کنه مثل مثال زیر

کد:
DIM A AS BYTE
MAIN:
FOR A = 1 TO 10 STEP 1
CLS
LCD A
WAITMS 30
NEXT A
GOTO MAIN
END


دستور بعدی WHILE – WEND هستش این دستور همون کاری رو می کنه که دستور DO – LOOP انجام می داد ولی با یک تفاوت اون هم اینکه برای داخل شدن به این حلقه بی نهایت باید شرط مورد نظری که جلوی WHILE نوشته میشه اول اجرا بشه تا اجازه داخل شدن به این حلقه داده بشه . یک چیز دیگه هم که هست اینه که WHILE ابتدای حلقه هستش مثل همان DO که ابتدای حلقه بود و WEND هم انتهای حلقه مثل LOOP که انتهای حلقه بود به مثال زیر توجه کن که خیلی هم ساده هست.
1-
یک سوال فرق بین دستور WHILE – WEND با دستور DO – LOOP چی هستش
2-
در دستور DO – LOOP شما برای ورود به حلقه نیاز به اجازه نداشتی ولی توی دستور WHILE – WEND نیاز به کسب اجازه داری حالا این اجازه کی صادر میشه زمانی که شرطی رو که جلوی WHILE گذاشتیم اجرا بشه . اگه بخای به یک زبون دیگه حالیت کنم باید بگم که فرق این دوتا دستور مثل ابتدایی و دانشگاه هستش شما توی ابتدایی برای بیرون رفتن از کلاس باید از معلمتون اجازه می گرفتی ولی توی دانشگاه اجازه نمی گیری و سرتو میندازی پایین و می ری بیرون و اگه یک زمانی توی دانشگاه از استاد اجازه بگیری بقیه بهت می خندن توی میکرو هم همینطوره ممکنه که متغییرا بهت بخندن.
خوب بری یک مثال ساده هم برات بزنیم که حال کنی :

کد:
DIM K AS BYTE
K = 3
WHILE K = 3
CLS
LCD "OK"
WEND
END

خط اول ما یک متغییر به اسم K و از نوع بایت تعریف کردیم .
خط دوم به متغییر K مقدار دادیم . مقدار 3 دادیم
خط سوم با دستور WHILE ابتدای حلقه رو مشخط کردیم البته برای ورود به حلقه این حلقه یک شرط گذاشتیم که این شرط هر چیزی میتونه باشه که این شرط رو ما باید جلوی دستور WHILE با یکم فاصله بنویسیم . شرطی که نوشتیم K = 3 هستش یعنی اگر که مقدار K عدد 3 بود اجازه ورود به حلقه داده میشه .
خط چهارم که داخل حلقه قرار داره CLS هستش که می دونی چی کار می کنه
خط پنجم هم LCD "OK" هستش که این دستور هم داخل حلقه قرار داره
خط ششم WEND هسش یعنی پایان حلقه
خط هفتم هم END هستش که تا زمانی که شرط بر قرار باشه برنامه به این دستور نمی رسه
تحلیل این برنامه هم خیل ساده هسش میکرو میاد از خط اول شروع می کنه به خوندن خط اول خط دوم رو می خونه می رسه به خط سوم این جا رو گوش کن که خیلی مهمه اگه شرط برقرار بود یعنی مقدار K = 3 بود که الان هست اجازه ورود به این حلقه داده می شه ولی اگه شرط برقرار نبود میکرو میره و خط بعدی WEND رو می خونه که ما اینجا حال کردیم که اگه شرط برقرار نبود برنامه به END برسه وتموم بشه .
دستور بعدی DELAY هستش که این دستور یک دستور تاخیر در اجرای برنامه هستش همانند دستور های WAITMS – WAIT –WAITUS که دستور DELAY به مدت 1000 میکروثانیه در اجرای برنامه تاخیر ایجاد میکنه که نیاز هم به مثال نیست.
فعلا همینا رو داشته باش تا بعد .!!!

عرفان بیگی بروجنی | ۰۷ بهمن ۹۷ ، ۱۸:۵۴
۲۷ ارديبهشت۱۸:۲۳

سلام چطوری
سلام ممنون تو چطوری
1- قربانت اقا این avr چی بوده ما نمی دونستیما
2- اره تازه کجاشودیدی بزار یکم راه بیفتی اونوقت می فهمی چی بوده
1- یادم می یاد بهم قول داده بودی که بهم میکرو یاد بدی
2- حتما به روی چشم . خوب حالا قرار بود از کجا شروع کنیم
1- یک لحظه وایستا اول به چندتا از سوالایی که برام پیش اومده جواب بده بعد شروع کن به یاد دادن
2- در خدمتم هر چی سوال داری بگو که منو یاد اون اولایی که می خاستم میکرو یاد بگیرم می ندازی
1- سوال اول اینکه اصلا ما چرا از میکروکنترلر استفاده می کنیم اصلا چه مزیتی داره و کجاها ازش استفاده میشه؟
2- خوب . همونطور که از اسمش پیداست میکرو کنترلر یعنی یک کنترل کننده . این کنترل کننده می تونه هر پدیده ای رو کنترل کنه فقط کافیه که بهش برنامه بدی ( تکنولوژی دیگه) کنترل دقیق پدیده هایی همچون دما. فشار. نور. فاصله. و... . و کاربرد ان در بیشتر زمینه های رباتیک . ماشین های هوشمند و صنعت هستش
1- مثل plc ؟؟؟
2- بله با این تفاوت که میکرو کنترلر از نظر حجم و قیمت زمین تا اسمان با plc فرق می کند مثلا قیمت یک plc حدود هفتاد هزارتومنه اون هم با امکانات حداقل و ابعاد زیاد ولی میکروکنترلر با همه امکانات با قیمت 3000 تومان که ابعاد بسیار کمی هم داره در بازار ایران به وفور پیدا میشه . البته این تفاوت هیچ وقت از ارزش plc کم نخواهد کرد زیرا plc فقط در صنعت کاربرد دارد و یک المان صنعتی می باشد نسبت به میکروکنترلر بیشتر در صنعت استفاده می شه.
1- خوب یک سوال دیگه این میکروکنترلری که میگی سرعت اجرای فرمان هایی که باید اجرا کنه چقدر هستش
2- بستگی به فرکانس کاری میکرو داره . معمولا سرعت انجام دستوراللعمل هایی که انجام می ده بین 8 تا 16 میلیون دستور العمل در ثانیه هستش
1- چی درست شندیم 8 تا 16 میلیون فرمان اونم فقط توی یک ثانیه ؟؟؟
2- اره درست شنیدی
1- خوب این 8 تا 16 میلیون فرمان یا به قول خودت دستورالعمل سرعتش به چی بستگی داره
2- مستفیما به فرکانش کاری میکرو بستگی داره
1- اخرین سوال بعد برو سراغ ادامه مطالب اموزشی
2- در خدمتم بگو
1- این امکاناتی که گفتی بعضی از میکرو ها دارن بعضی ها هم ندارن باید از کجا متوجه بشیم خودت حتما همه رو حفظ کردی
2- ( با خنده) نه عزیز این میکرو ها هر کدومشون دارای یک دیتا شیت هستند که اطلاعاتی درباره میکرویی که می خای باهاش کار کنی بهت میده . اطلاعاتی از قبیل . ولتاز کاری . فرکانس کاری . امکانات میکرو و...
1- ok حالا برو سر اموزش
2- خواهش می کنم به روی چشم . بزار یک سر فصل خیلی کلی برات بگم که چه چیزایی رو باید بهت بگم 1- اول باید با نرم افزار bascom اشنا بشی 2- و در اخر باید دستورات برنامه نویسی رو یاد بگیری

خوب اول می ریم سر نرم افزار bascom که خیلی ساده هستش . منم خیلی کلی برات نرم افزارو توضیح می دم بقیشو خودت یکم سیخ بزنی یاد می گیری
1-
باشه هر طور که صلاح می دونی
2-
اول بزار در باره این نرم افزار بیسکام (bascom) برات بگم . خوب من قبلا بهت گفتم کارهایی رو که ما از یک میکرو می خایم باید به صورت برنامه بهش بدیم . خوب حالا این برنامه رو باید با یک نرم افزاری نوشته بشه یا نه
1-
بله
2-
خوب این نرم افزار همین بود که بهت گفتم . ما به وسیله این نرم افزار خواسته هایی که از یک میکرو AVR داریم را به صورت برنامه نویسی اجرا می کنیم. خوب بهتره که زیاد طولش ندم و مستقیم برم سر نرم افزار. اول بزار یک مقدار از منو های کاری نرم bascom1.11.7.4 برات توضیح بدم
File : اول روی گزینه file کلیل می کنی بعدش روی NEW کلیک می کنی . یک صفحه سفید باز میشه . این صفحه محیط برنامه نویسی هستش
منوی EDIT که چیز مهمی نداره
PROGRAM : با کلیک کردن روی این منو به اولین گزینه می رسیم که نوشته COMPILE . حتما با خودت می گی این COMPILE به چه دردی می خوره خوب الان من بهت می گم . گفتیم که ما در محیط برنامه نویسی برنامه مان را می نویسیم خوب ما بالخره باید بدانیم که این برنامه ای که نوشتیم دارای خطای نوشتاری هست یا نه خوب پس حالا فهمیدی به چه دردی می خوره .
1-
نگفتی چطوری از گزینه COMPILE‌ استفاده کنیم ؟؟
2-
شما بعد ای که برنامه رو نوشتی باید از منوی PROGRAM گزینه COMPILE رو انتخاب کنی سپس به طور اتومات برنامه شما چک می شه اگه خطایی بود زیر نرم افزار می نویسه اگه نبود که هیچی در ضمن شما این کار رو می تونی با کلید میانبر F7 هم انجام بدی
SIMULATE : این گزینه یک شبیه ساز هستش و برنامه ای رو که شما نوشتی رو برات شبیه سازی می کنه می کنه که من هیچ ازش خوشم نمی یاد چون دارای خطا هستش و بهتره کم ازش استفاده کنی . این کار رو می تونی با کلید میانبر F2 انجام بدی
SEND TO CHIP : شما بعد از این که برنامه رو توی محیط برنامه نویسی نوشتی و بعدش هم COMPILE کردی نیاز داری که برنامه رو بریزی داخلی میکرو این کار رو با کلیک روی گزینه SEND TO CHIP باید انجام بدی که خودش اتومات برنامه رو میریزه توی میکروکنترلر . این کار رو بازدن کلید F4 هم می تونی انجام بدی


منو TOOLS : این منو باشه بعدها برات توضیح میدم چون فعلا باهاش سروکار نداری

منوی OPTIONS: با کلیک روی این منو اولین گزینه ای که به چشم می خوره COMPILER هستش که مهمه بقیه هم باهاش سروکار نداشتم پس فکروتو مشغول بقیش نکن حرفه ای که شدی شاید بقیش برات کاربرد داشته باشه . خوب حالا این COMPILER رو که روش کلیک می کنی پنج گزینه دیگه ضاهر میشه . اولی نوشته CHIP : به معنی انتخاب میکرو هستش شما میکرویی رو که می خای ازش استفاده کنی رو توی ان قسمت انتخاب می کنی . گزینه بعدی OUTPUT هستش که باهاش کاری نداریم .گزینه بعدی COMMUNCIATION هستش وقتی روی این گزینه کلیک می کنی یک پنجره باز می شه شما باید در قسمت FERQUENCY مقدار فرکانس کاری میکروAVR رو بر حسب هرتز اینجا وارد کنی
1-
یک سوال از کجا بفهمم که فرکانس کاری میکرویی که ازش می خام استفاده کنم چنده ؟؟
2-
با خواندن دیتا شیت یا همان کاتالوگ خود مکرو کنترلر . گزینه بعدی 12C هستش که با اونم کاری نداریم . گزینه بعد LCD هستش
1-
حتما باید این گزینه رو هم بی خیال شیم
2-
برعکس گزینه LCD گزینه مهمی هستش . تو در این قسمت باید مشخص کنی که LCD باید به کدوم یکی از پایه های میکروکنترلر وصل بشه و اندازه LCD رو هم می تونی توی این قسمت مشخص کنی
1-
خوب بیشتر توضیح بده در باره این گزینه
2-
این گزینه باشه وعتی که LCD رو بهت توضیح دادم اونوقت این گزینه رو هم بهت یاد میدم
1-
این LCD خیلی مشکله ؟؟
2-
نه اتفاقا بسیار اسون و کار کردن باهاش بسیار لذت بخشه. راستی یک گزینه دیگه توی منویTOOLS هستش به نام PROGRAMMER . که مال اتخاب نوع پروگرامر هستش
این هم از قسمت های مهم نرم افزار BSCOM
اگه سوالی هست بگو
1-
ما چرا باید از گزینه COMPILE استفاده کنیم
2-
برای این که ببینیم برنامه ای رو که نوشتیم از لحاظ نوشتاری (لغت) مشکلی داره یا نه . اگه بعد از نوشتن برنامه COMPILE نکنی نرم افزار اجازه ریخت برنامه روی میکروکنترلر رو نمیده
1-
اها گرفتم چی می گی
2-
خوب حالا بریم سر اصل مطب که اشنایی با برنامه نویسی هستش که مهمترین بخشه پس خوب گوش کن
1-
ای به چشم
2-
پس بزار اول یک مقدمه ای بگم بعد . ببین برنامه ای رو که شما می خای برای میکروکنترلر توی محیط برنامه نویسی نرم افزار بنویسی به زبان های مختلف نوشته می شه و هر زبان برنامه نویسی نرم افزار مخصوص خودشو داره مثلا برای نوشتن برنامه به زبان بیسیک از نرم افزار BASCOM . برای نوشتن با زبان C از نرم افزار CODVISION استفاده می کنیم . که من بیسیک رو دوست دارم وبهت یاد می دم . چون زبان برنامه نویسی بسیار ساده ای هستش . خوب دیگه وقتشه بریم سر دستورات برنامه نویسی.
دستور $REGFILE : اولین حرکتی که باید در محیط برنامه نویسی انجام بدی اینه که میکروکنترلری رو که می خای ازش استفاده کنی رو باید در محیط برنامه نویسی ذکر کنی مثلا تو یک میکرو کنترلر ATMEGA16 خریدی پس باید در محیط برنامه نویسی اینطور میکرو رو معرفی کنی

کد:
$REGFILE = "M16DEF.DAT" برای ATMEGA16
$REGFILE = "8535DEF.DAT" برای AT90S8535
$REGFILE="AT12DEF.DAT" برای ATTINY12

یک راه دیگه هم هست که میکرو رو از داخل تنظیمات خود نرم افزار معرفی می کنی
1-
چطوری . یعنی دیگه نمی خاد دستور $REGFILE رو بنویسیم
2-
نه لازم نیست . برای این کار به منوی OPTIONS نرم افزار مراجعه می کنی سپس گزینه COMPILR و بعد گزینه CHIP رو کلیک می کنی یک پنجره باز می شه که اول صفحه نوشته CHIP . که جلوش یک کادر هستش که میکرو رو اونجا انتخاب می کنی سپس OK می کنی
1-
پس همیشه در برنامه اولین کاری که باید بکنم اینه که میکروکنترلر رو معرفی کنم طبق روش بالا که گفتی نه ؟
2-
اره کاملا درسته
دستور $CRYSTAL : دومین گامی که بعد از معرفی میکرو باید انجام بدی اینه که فرکانس کاری میکرو رو برای نرم افزار مشخص کنی که برای این کار از دستور $CRYSTAL استفاده میکنی مثلا فرض کن فرکانس میکروی MEGA16 تو 8 مگاهرتز هستش یعنی 8000000 هرتز که با این دستور فرکانس کاری رو معرفی می کنی البته به هرتز :
$CRYSTAL = 8000000
فرکانس کاری میکرو رو هم می تونی از داخل نرم افزار انتخاب کنی به این صورت که می روی داخل منوی OPTIONS سپس گزینه COMPILER سپس گزینه COMMUNICATION رو کلیک می کنی یک پنجره باز می شه در داخل این پنجره یک جایی نوشته FERQUENCY که جلوش شما باید فرکانس رو انتخاب کنی و بعد OK کنی
END : در گام سوم پایان هر برنامه ای باید از دستور END استفاده کنی یعنی اتمام برنامه
1-
خوب بگو ببینم که گام چهارم چی هستش
2-
گام چهارمی وجود نداره خیط شدی . در واقع برنامه نویسی یعنی قسمت شیرین کار از اینجا شروع میشه. خوب حالا بهت توضیح میدم که برای نوشتن یک برنامه باید چکار کرد اولین چیزی رو که باید بهت یاد بدم متغییرها هستند . همونطور که از اسمش پیداست یعنی قابل تغییر هستش . انواع متغییر ها عبارتند از: 1- BIT 2- BYTE 3- WORD 4- INTEGER 5- LONG 6- SINGLE 7- STRING .
BIT که یعنی 0 و 1
BYTE تشکیل شده از هشت بیت و هر BYTE 0 تا 255 مقدار دارد
WORD تشکیل شده از دو BYTE و هر WORD 0 تا 65535 مقدار دارد
با بقیه متغییر ها هم فعلا کاری نداریم
1-
خوب درست کارش چی هست و کجا کاربرد داره
2-
بزار وقتی که یکم رفتیم جلوتر کم کم می فهمی خوب ادامه مطلب رو گوش کن
دستور DIM : DIM به معنی معرفی اسم متغییر است که می تونه هر اسمی باشه مثلا : A یا B یا ALI یا TEMO حتی اسم خودت فقط برای اینه که متغییر رو یک نامی بهش بدی که با بقیه متغییرها قاطی نشه
دستور AS : AS به معنی نوع متغییر هستش که باید یکی از انواع متغییر های BIT یا BYTE یا INTEGER باشه
مثال:

کد:
DIM A AS BYTE
DIM B AS BIT
DIM ALI AS BYTE
DIM N AS SINGLE

1-
یک مثال مفهومی تر بزن
2-
باشه مثلا در DIM A AS BYTE . به این معنی که متغییری که نامش هست A از نوع بایت (BYTE) می باشد
DIM ALI AS BIT . یعنی متغییری که نامش هست ALI از نوع بیت BIT می باشد .
1-
حالا فهمیدم
2-
بزار بریم جلوتر مثال روز برات روشن میشه که این دستورات کجا کاربرد داره
در ضمن شما گاهی لازم است که به متغییر مقدار هم بدی که به ترتیب زیر عمل می کنی
مثلا شما یک متغییر داری از نوع بایت
DIM S AS BYTE
که می تونی از 0 تا 255 بهش مقدار بدی به تریتیب زیر
S = 1 یا S = 12 یا S = 0 یا S = 255 یا هر رقمی که از 0 تا 255 دوست داشتی البته اگه لازم بود
دستور INCR : با نوشتن این دستو شما می توانید یک متغییر را افزایش بدی به مثال زیر توجه کن بهتر می فهمی
DIM B AS BYTE
B=0
INCR B
بزار از خط اول برات توضیح بدم برنامه ای که ما نوشتم رو میکرو میاد از خط اول شروع می کنه به خوندن خط اول یعنی ما یک متغیری داریم به نام B و از نوع BYTE
خط دوم به متغییر B مقدار دادیم
خط سوم دستور دادیم که متغیر B رو یک واحد افزایش بده وقتی که میکرو به خط سوم رسید و اونو خوند اگه متغییر ما بوده 0 الان میشه 1
1-
کاربردش چیه این دستور INCR
2-
کاربردش توی شمارنده هستش
دستور DECR : این دستور برعکس دستور قبل هستش و یک واحد از متغییر ما کم می کنه
مثال :

کد:
DIM U AS BYTE
U = 20
DECR U

خط اول یعنی ما یک متغییری داریم که اسمش هست U و از نوع بایت
خط دوم به U مقدار دادیم
خط سوم یک واحد از مقدار U کم کردیم
بزار یک مثال کاربردی تر بزنم :

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM K AS BYTE
K = 100
INCR K
DECR K
END

خوب حال خوب گوش کن
خط اول ما اومدیم نوع میکرو مونو مشخص کردیم که هست مگا16
خط دوم فرکانس کاری میکرو رو مشخص کردم
خط سوم گفتیم که ما یک معغییری داریم به نام K و از نوع بایت
خط چهارم برای متغییر بایت یک مقدار دادیم
خط پنجم دستور دادیم که یک واحد به متغییر K اضافه کن یعنی اگه 100 بوده الان می شه 101
خط ششم دستور دادیم که یک واحد از متغییر K کم کن یعنی الان که هست 101 یک واحد که کم بشه میشه 100
خط هفتم دستور پایان برنامه رو دادیم
1-
سوال دارم اگه مثلا در مثال بالا دستور INCR و یا DECR رو دو بار زیر هم بنویسیم چی می شه
2-
برای پاسخ به سوالت به یک مثال دیگه توجه کن

 

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM K AS BYTE
K = 100
INCR K
DECR K
DECR K
DECR K
INCR K
END

خوب حال خوب گوش کن
خط اول ما اومدیم نوع میکرو مونو مشخص کردیم که هست مگا16
خط دوم فرکانس کاری میکرو رو مشخص کردم
خط سوم گفتیم که ما یک معغییری داریم به نام K و از نوع بایت
خط چهارم برای متغییر بایت یک مقدار دادیم
خط پنجم دستور دادیم که یک واحد به متغییر K اضافه کن یعنی اگه 100 بوده الان می شه 101
خط ششم دستور دادیم که یک واحد از متغییر K کم کن یعنی الان که هست 101 یک واحد که کم بشه میشه 100
خط هفتم دوباره دستور دادیم که یک واحد از متغییر K کم کن خوب متغییر K که الان هستش 100 میشه 99
خط هشتم دوباره دستور دادیم که یک واحد از متغییر K کم کن خوب متغییر K که 99 بوده میشه الان 98
1-
فهمیدم بزار خط نهم و دهم رو خودم بگم ببینم یاد گرفتم یا نه
خط نهم یعنی خط نهم دستور دادیم یک واحد به متغییر K اضاف بشه یعنی الان که K هستش 98 بعد از خونده شدن دستور خط نهم میشه 99 و خط دهم یعنی اتمام برنامه
2-
احسنت افرین داری راه میافتی ها
1-
دستور بعدی چیه
2-
دستور بعدی در مورد LCD هستش . بزار اول در مورد خود LCD برات بگم بعد دستوراتش رو با هم مرور می کنیم
LCD ها انواع مختلفی دارند اولی گرافیکی – دومی کارکتری که من با کارکتری کار می کنم شبیه lcd ماشین حساب هستش که از نظر ابعاد هم باهم فرق دارن مثلا 16 در 1 – 16 در 2 – 16 در 4 – 40 در 4 و...
1-
خوب مثلا این شماره ها برای چیه مثلا همین 16 در 2
2-
عدد اول یعنی 16 به ما میگه که این lcd ما 16 ردیف ( افقی ) داره عدد دوم بعنی 2 به ما می گه این lcd دو ستون ( عممودی ) داره
1-
حالا گرفتم
2-
این lcd ها 14 پایه دارند که ما فقط از 9 پایه ان استفاده می کنیم که برای استفاده از ان و وصل ان به میکروکنترلر به ترتیب زیر عمل می کنیم
پایه اول vss نام دارد که به زمین وصل میشه
پایه دوم vdd هستش که به ولتاژ 5 ولت وصل میشه
پایه سوم vee هستش که به زمین وصل میشه
پایه چهارم rs هستش که به میکرو وصل می شه . بعدا بهت می گم به کجای میکرو وصل میشه
پایه پنجم rw هستش که اونم به زمین وصل میشه
پایه ششم E هستش که اونم به میکرو وصل می شه
پایه های 7 8 9 10 که هیچی به جایی وصل نمیشن
پایه 11 DB4 اسمش هست اونم به میکرو وصل میشه
پایه 12 DB5 اسمش هست اونم به میکرو وصل میشه
پایه 13 DB6 اسمش هست اونم به میکرو وصل میشه
پایه 14 DB7 اسمش هست اونم به میکرو وصل میشه

1-
یک سوال بعضی از پایه های بالا رو که معرفی کردی گفتی وصل میشه به LCD ولی نگفتی به کدوم پایه LCD باید وصل بشه
2-
بله نگفتم ولی اگر یکم صبر کنی بهت میگم . اگه یادت باشه وقتی که داشتم نرم افزار BASCOM رو برات توضیح می دادم گفتم که توی منوی OPTINS بعد COMPILER یک گزینه هست به نام LCD شما اونجا مشخص می کنی که پایه های میکروکنترلر به کدوم پایه LCD وصل بشه که باید به ترتیب زیر عمل کنی بعد از این که وارد گزینه LCD توی نرم افزار شدی یک پنجره باز میشه که سمت راست اون شش کادر هستش که شما باید اونجا مشخص کنی که LCD به کدوم پایه های میکرو وصل بشه . می دانیم که اکثر میکرو ها دارای چهار PORT هستند البته به غیر از خانواده TINY
1-
پورت چیه واز؟؟
2-
به هر هشت پایه میکرو یک پورت میگن که هر پورت باز خودش یک اسم داره مثلا ATMEGA32 دارای چهار پورت هستش به نام های A –B –C –D هر کدو از این پورت ها هشت پایه هستند
1-
از کجا بفهمیم که مثلا پورت A یا پورت C کجاست
2-
باز هم از روی دیتاشیت خود ایسی
1-
خوب ادامه بده
2-
هنگامی که شما می خای LCD رو به میکرو وصل کنی باید در گزینه LCD یک پورت رو به دلخاه انتخاب کنی
1-
فرقی نمیکنه که کدوم پورت باشه
2-
نه هر کدو از پورت ها که دوست داشته مثلا پورت A یا پورت D
1-
اها خوب ادامه بده
2-
مثلا حال کردی که LCD رو به پورت C وصل کنی برای این کار در نرم افزار وقتی که به قسمت LCD رفتی و یک پنجره باز شد در قسمت راست پنجره شش گزینه برای انتخاب وجود داره که باید به ترتیب زیر عمل کنی :
اولین گزینه از بالا نوشته ENABLE که باید PORTC.5 رو انتخاب کنی
دومین گزینه نوشته RS که باید PORTC.4 رو انتخاب کنی
سومین گزینه نوشته DB7 که باید PORTC.3 رو انتخاب کنی
چهارمین گزینه نوشته DB6 که باید PORTC.2 رو انتخاب کنی
پنجمی گزینه نوشته DB5 که باید PORTC.1 رو انتخاب کنی
ششمین گزینه نوشته DB4 که باید PORTC.0 رو انتخاب کنی
حال فهمیدی کدوم پایه های میکرو به LCD وصل میشه
1-
اها پس سخت افزاری هم باید به ترتیبی که مثل بالا مشخص کردیم LCD رو به میکروکنترلر وصل کنیم
2-
کاملا درسته. شما مختاری که هر PORT که دوست داشتی رو به میکرو وصل کنی ولی باید هر پورتی که توی ذهنت در نظر داری رو توی نرم افزار مثل شکل بالا انتخاب کنی
یک نکته دیگه اینکه در قسمت سمت چپ همین پنجره LCD یک گزینه هست به نام LCD TYPE که شما اونجا اندازه LCD تو مشخص می کنی مثلا یک LCD رفتی خریدی که اندازش هست 16در 2 توی این گزینه باید 16*2 رو انتخاب کنی بعدی OK رو بزنی . خوب حال بریم سر دستورات LCD :
دستور CLS : این دستور کل LCD رو پاک و اماده نوشتن می کنه که همیشه باید قبل از دستور نوشت روی LCD این دستور نوشته بشه
دستور LCD : خوب با این دستور شما می تونی یک عبارت رو روی LCD نمایش بدی مثلا یک عدد یا یک اسم یا یک کلمه یا یک متغییر . البته قبل این دستور باید حتما CLS نوشته بشه این مثال توجه کن

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CLS
LCD " ALI "
END


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

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CLS
LCD " 999 "
END

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

کد:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CLS
LCD " ALI "
END

درضمن تنظیمات روهم مثل بالا که گفتم پایه های LCD رو توی نرم افزار انتخاب کن رو مثل بالا انتخاب می کنی
بعد دکمه F7 رو بزن تا برنامه چک بشه
بعد دکمه F2 رو بزن تا وارد محیط شبیه ساز بشی . توی محیط شبیه ساز خیلی دکمه هستش که من فقط چند تارو که کاربرد داره برات میگم
دکمه اوال از بالا سمت چپ شبیه دکمه PLAY ویدو هست که اسمش هست RUN PROGRAM که برای اجرای برنامه شبیه ساز هستش
دکمه بعدی که هچی دکمه بقلیش شبییه دکمه استپ ویدو هست که اسمش هست STOP PROGRAM که برای توقف شبیه سازی هستش
چند تا دکمه اون طرفتر یک دکمه که داخلش یک مستطیل ابی رنگی هستش و روش نوشته LCD . این دکمه رو وقتی که میزنی یک LCD توشه
خوب ادامه حالا که وارد محیط شبیه ساز شدی اول برای شبیه سازی مثال بالا دکمه LCD رو انتخاب می کنی بعد دکمه RUN PROGRAM رو میزنی باید یک ده پانزده ثانیه صبر می کنی تا روی LCD نوشته بشه ALI
برای امروزدیگه بسه باشه بقیش برای یک فرصت دیگه فعلا بای

عرفان بیگی بروجنی | ۲۷ ارديبهشت ۹۷ ، ۱۸:۲۳