Electrobot

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

Electrobot

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

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

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

۳ مطلب با کلمه‌ی کلیدی «Electrobot» ثبت شده است

۰۷ بهمن۱۸:۴۳

جلسه هفتم

1-سلام چطوری

2-سلام ممنون چی کار می کنی

1-قربانت هیچکار . امروز اومدم که بقیه میکرو رو بهم یاد بدی

2-چشم . حالا کجا بودیم

1-توی قسمت جمع و تفریق و ...



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


کد:

DIM G AS BYTE

G = 6 – 2

CLS

LCD G

END

مثال بالا یک مثال خیلی ساده هستش . ما در خط اول یک متغییر تعریف کردیم به نام G در خط دوم بهش مقدار 6-2 رو دادیم که یعنی 4 . در خط بعدی با فرمان CLS ال سی دی را پاک کردیم تا اماده نوشتن بشه . در خط بعدی با فرمان LCD G از میکرو خواستیم تا مقدار متغییر G را روی LCD نمایش دهد که میکرو برای ما عدد 4 را نمایش می دهد یعنی حاصل عبارت 6-2 را نشان می دهد . در خط اخر هم با دستور END برنامه رو به پایان رسوندیم . این برنامه بالا رو اگه دوست داشتی می تونی با شبیه ساز خود BASCOM نگاه کنی .

یک مثال دیگه:


کد:

DIM L AS BYTE

DIM N AS BYTE

L = 12 - 3

N = 2 – 2

CLS

LCD L

WAITMS 100

CLS

LCD N

END

خوب توی برنامه بالا ما اومدیم دو تا متغییر به نام های N و L از نوع بایت تعریف کردیم . در خط سوم به متغییر L مقدار 12 – 3 دادیم . در خط بعدی به متغییرN مقدار 2-2 دادیم .در خط بعدی با فرمان CLS ال سی دی را پاک کردیم و در خط بعد با فرمان LCD L به میکرو دستور دایم که مقدار متغییر L را که هست 12 – 3 یعنی 9 رو نمایش بده و میکرو مقدار 9 را برای متغییر L نمایش میده . در خط بعد ما یک تاخیر در برنامه گذاشتیم . در خط بعدی با فرمان CLS ال سی دی را مجددا پاک کردیم و در خط بعدی با فرمان LCD N به میکرو دستور دادیم که مفدار متغییر N رو که هست 2-2 یعنی 0 رو به ما نشون بده که میکرو مقدار 0 رو روی LCD نمایش میده و در خط اخر هم برنامه به پایان می رسه.

یک مثال دیگه هم رو حساب معرفت میزنم :


کد:

DIM L AS BYTE

DIM N AS BYTE

DIM AHMAD AS BYTE

L = 12 - 3

N = 10 – 2

AHMAD = L + N

CLS

LCD L

WAITMS 100

CLS

LCD N

WAITMS 100

CLS

LCD AHMAD

END

این برنامه رو خودت می دونی که چی به چیه ولی بازم خودم می گم . ببین ما سه تا متغییر تعریف کردیم هر سه تا هم از نوع بایت هستن به نام های L و N و AHMAD . به متغییر های L و N مقدار دادیم و به متغییر AHMAD مقداری که دادیم این بود که اقای میکروکنترلر حاصل متغییر های L و N رو با هم جمع کن و حاصل را مقدار متغییر AHMAD قرار بده خوب مقدار متغییر L هست 12 – 3 یعنی 9 و مقدار متغییر N هست 10 – 2 یعنی 8 . ما با دستور AHMAD = N + L این فرمان را دادیم که مقدار متغییر AHMAD هست 9 + 8 یعنی 17 .

خوب بقیه دستورات هم به این شکل هستش فقط به جای علامت جمع و تفریق کافیه علامت های ضرب و تقسی رو بزاری که علامت تقسیم هستش /

و علامت ضرب هستش *

همینطور ایناها رو با هم جمع و تفرق و یا ضرب و تقسیم کن تا کامل دستت بیاد یا یک شرط بزار که مثال اگه مقدار عبارت

4 – 1 شد عدد 3 برو فلان کار رو انجام بده یا خیلی کارای دیگه میتونی انجام بدی.

1- خوب درس بعدی چیه ؟

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

1- خوب چرا همون اول نگفتی

2- خوب ترسیدم که باهم قاطی کنی بلایی که سرخودم تو کلاس اومده .استاد میومد چند تا دستور شبیه به هم رو که همش یک کار رو انجام می داد باهم می گفت بقیه هم قاطی می کردن

1- مثلا چی

2- مثلا همین دستور GOTO که پرش به یک زیربرنامه هستش رو با دستور GOSUB هم می شه انجام داد که هر دوتاش یک کار رو انجام میدن . یا بعضی از دستورات مربوط به LCD رو مثلا خاموش روشن کردن LCD – خاموش روشن شدن کرسر

و چند تا دستور دیگه .

1- اینا خیلی سخته

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

اول بریم سر بقیه دستورات LCD : خوب ما از ال سی دی فقط دو دستور CLS و LCD رو با هم مرور کردیم دستوررات بعدی به این شرح هستش :

دستور CONFIG LCD : توسط این دستور می شه اندازه LCD رو مشخص کرد . مثال :


کد:

DIM A AS BYTE

A = 10

CONFIG LCD = 16 * 2

CLS

LCD A

END

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

1-

هر اندازه ای که خاستیم می تونیم بدیم ؟

2-

نه اندازه ها باید استاندارد باشه و باید یکی از انواع اندازه های زیر باشه :

16 * 1 - 16 * 2 - 16 * 4 - 20 * 2 - 20 * 4 - 40 * 2 - 40 * 4

درضمن این اندازه ها رو می تونی از داخل نرم افزار که قبلا توضیح دادم هم تنظیم کنی

دستور بعدی DISPLAY هستش که جلوی این دستور باید یکی از دو گزینه ON یا OFF قرار بگیره . توسط این دستور میشه ال سی دی رو روش یا خاموش کرد . مثال :


کد:

DIM AHMAD AS BYTE

AHMAD = 3

CLS

LCD AHMAD

WAITMS 100

DISPLAY OFF

END

خوب در این برنامه ما یک متغییر به نام AHMAD از نوع بایت تعریف کردیم . بعد در خط دوم به متغییر AHMADمقدرا 3 رو دادیم . در خط بعدی با دستور CLS ال سی دی رو پاک کردیم . در خط بعدی توسط دستور LCD AHMAD دستور دادیم که مقدار متغییر AHMAD رو روی ال سی دی نمایش بده . در خط بعدی یک تاخیر 100 میلی ثانیه ای در برنامه ایجاد کردیم بعد از گذشت این مدت زمان میکرو خط بعدی رو می خونه که نوشته DISPLAY OFF و توسط این دستور LCD خاموش میشه. ودر خط اخر هم برنامه به پایان می رسه. در ضمن هر وقت که خاستی LCD رو که با دستور DISPLAY OFF خاموش کرده بودی دوباره روشنش کنی باید با دستور DISPLAY ON این کار رو بکنی.

دستور بعدی CURSOR هستش که جلوی این دستور یکی از چهار گزینه زیر باید قرار بگیره :

ON : که اگه ON جلوی CURSOR قرار بگیره CURSOR فعال میشه

OFF : که اگه OFF جلوی CURSOR قرار بگیره CURSOR خاموش میشه

BLINK : اگر BLINK جلوی CURSOR قرار بگیره CURSOR چشمک میزنه

NOBLINK : که اگه NOBLINK جلوی CURSOR قرار بگیره CURSOR چشمک نمی زنه

1-

خوب حالا این CURSOR چی هستش

2-

CURSOR یا به فارسی کرسر همون خطی هستش که وقتی داری مثلا با برنامه WORDPAD تایپ می کنی هی چشمک می زنه توی LCD هم این کرسر قرار داره که می تونه خاموش یا روشن یا چشمک زن باشه که دست خودمونه که چه بلایی سرش بیاریم .

مثال :


کد:

DIM A AS BYTE

A = 100

CURSOR BLINK

CLS

LCD A

END

خوب ما یک متغییر تعریف کردیم به نام A و از نوع بایت . در خط دوم مقدار دادیم .در خط سوم توسط دستور

CURSOR BLINK کرسر را از نوع چشمک زن انتخاب کردیم . در خط چهارم با دسترو CLS ال سی دی رو پاک کردیم . در خط بعد با دستور LCD A مقدار متغییر A رو روی ال سی دی نمایش دادیم. در خط اخر هم توسط دستور END برنامه رو به پایان رسوندیم.

دستور بعدی SHIFLCD هست که بعد از این دستور باید از یکی از دو فرمان LEFT یا RIGHT استفاده کرد . توسط این دستور می توان کل صفحه نمایش رو به اندازه یک واحد به چپ یا راست منتقل کرد . مثال :


کد:

CLS

LCD "AHMAD"

SHIFTLCD RIGHT

END

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

LCD "AHMAD" اومدیم ثابت AHMAD رو روی ال سی دی نمایش دادیم در خط بعد توسط دستور

SHIFTLCD RIGHT اومدیم کل صفحه ال سی دی رو یک واحد به سمت راست انتقال دادیم .

1-

این ثابت AHMAD رو که گفتی یعنی چی ؟

2-

هر چیز که در داخل " " قرار بگیره میشه یک ثابت

1-

یک سوال دیگه اگه ما خواستیم که دو یا چند واحد کل صفحه ال سی دی رو به سمت راست یا چپ هدایت کنیم باید چکار کنیم؟

2-

به ازای هر چند واحد که خاستیم کل صفحه ال سی دی رو به سمت راست هدایت کنیم باید دستور SHIFTLCD رو زیر هم بنویسیم. مثلا می خایم 4 واحد به سمت راست هدایت بشه از روشی که گفتیم باید به صورت زیر عمل کنیم:


کد:

CLS

LCD "AHMAD"

SHIFTLCD RIGHT

SHIFTLCD RIGHT

SHIFTLCD RIGHT

SHIFTLCD RIGHT

END

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

1-

اگه این دستور SIFTLCD رو هزار بار زیر هم بنویسم چی میشه

2-

مگه مرض داری ولی خوب در نهایت بعد چند بار اون نوشته روی ال سی دی از LCD خارج میشه.

دستور بعدی LOCATE هستش که جلوی این دستور باید مقدار بدی که در ادامه می گم چه مقداری باید بدی . توسط این دستور می تونی مکان نوشته ای که می خای روی ال سی دی نوشته بشه رو انتخاب کنی یا تغییر بدی مثلا شاید حال کردی که یک کلمه رو وسط ال سی دی نمایش بدی یا پایین سمت چپ یا هر جای ال سی دی که حال کردی نمایش بدی اونجاست که این دستور به کارت میاد. ببین هر ال سی دی بسته به این که اندازه ان چند در چند باشه تعدادی ستون افقی و تعدادی ستون عمودی داره مثلا در ال سی دی 16 * 2 تعداد ستون افقی 16 و تعداد ستون عمودی 2 هستش یا در ال سی دی 40 * 4 تعداد ستون افقی 40 و تعداد ستون عمودی 4 هست . خوب حالا که فهمیدی اندازه هایی که برای ال سی دی مشخص می کنن چه مفهومی داره می تونی اون مقداری رو که گفتم باید جلوی دستور LOCATE بنویسی رو به دست بیاری که باید به ترتیب زیر عمل کنی :

LOCATE 1 , 1

در بالا من یک نمونه مکان نما رو نوشتم البته هر مقداری که خواستی می تونی بدی به شرط این که مقدار رو خیلی زیاد ندی چون ممکنه اون کلمه ای که قرار روی ال سی دی نوشته بشه از ال سی دی بره بیرون . عدد اولی رو که نوشتم به این منظور بوده که مقدار مکان عمودی رو مشخص کردم . عدد دومی که جلوش نوشتم مقدار پیشروی کلمه به جلو در سمت ستون های افقی هستش . این اعداد برای هر نوع ال سی دی ممکنه فرق کنه مثلا در ال سی دی نوع 16 * 2 به علت این که تعداد ستون های عمودی ما 2 تا بیشتر نیست برای مقدار دهی به دستور LOCATE ما مجاز نیستیم که برای ستون عمودی بیشتر از 2 و برای ستون افقی بیشتر از 16 بدهیم . ویا در ال سی دی 16 * 1 فرق میکنه و به علت اینکه ما یک عدد ستون عمودی داریم نمی توانیم برای مقدار دهی به دستور LOCATE برای ستون عمودی بیشتر از 1 بدهیم و برای مقدار دهی برای ستور افقی بیشتر از 16 بدهیم .

1-

خوب حالا فکر کن که من ازسر کنجکاوی بیشتر از این عدد های مجاز دادم چه اتفاقی میوفته؟

2-

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

مثال :


کد:

CONFIG LCD = 16 * 2

DO

CLS

LOCATE 2 , 1

LCD "AHMAD"

WAITMS 50

CLS

LOCATE 1 , 1

LCD "AHMAD"

WAITMS 50

LOOP

END

برنامه بالا میاد یک بار کلمه ثابت AHMAD رو یک بار در قسمت پایین ال سی دی نمایش می ده و یک بار بالای ال سی دی .

خوب حال تحلیل برنامه :

در خط اول ما اومدیم به میکرو فهموندیم که اقای میکروکنترلر ال سی دی که ما داریم استفاده می کنیم از نوع 16 * 2 هستش

در خط دوم ما با دستور DO ابتدای حلقه رو مشخص کردیم

در خط سوم با دستور CLS ال سی دی رو پاک کردیم

در خط چهارم با دستور LOCATE 2 , 1 مکان یا نقطه ای از ال سی دی رو که می خای چیز رو روش نمایش بدیم رو مشخص کردیم که با نوشتن عدد 2 این رو به میکرو فهموندیم که باید در خط دوم عمودی یعنی پایین ال سی دی بنویسی . و با نوشتن عدد 1 بعد از عدد دو این رو به میکرو فهموندیم که باید در اول ستون افقی ال سی دی چیزی بنویسی.

در خط پنجم با دستور LCD "AHMAD" کلمه AHMAD رو در خط پایین اول ال سی دی نمایش دادیم

در خط ششم با دستور WAITMS 50 یک تاخیر 50 میلی ثانیه ای در اجرای برنامه ایجاد کردیم.

در خط هفتم با دستور CLS دوباره ال سی دی رو پاک کردیم .

در خط هشتم با دستور LOCATE 1 , 1 دوباره یک ادرس مکان برای جایی که میکرو باید روی ال سی دی نمایش بدهد دادیم که هردو رو عدد 1 دادیم یعنی اول ال سی دی

در خط بعدی با دستور LCD "AHMAD" دوباره کلمه AHMAD رو روی ال سی دی نمایش دادیم با این تفاوت که مکانی که این دفعه ال سی دی کلمه AHMAD رو نمایش میده فرق کرده و اول ال سی دی داره نمایش می ده نه این که در خط پایین

در خط بعدی با دستور WAITMS 50 یک تاخیر 50 میلی ثانیه ای در اجرای برنامه ایجاد کردیم

در خط بعدی هم با دستور LOOP انتهای حلقه رو مشخص کردیم که برنامه ما در این حلقه دور می زنه و کارش رو از اول شروع می کنه و به END هیچ وقت نمی رسه و برنامه به پایان نمی رسه.

یک نکته ای رو که باید بگم و تو هم سوال نکردی این هستش که همیشه باید دستور LOCATE بین CLS و LCD نوشته بشه مثل زیر


کد:

CLS

LOCATE 2 , 1

LCD "AHMAD"

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

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

پایان قسمت هفتم

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

جلسه چهارم

تمرینات قسمت سوم:
بنا به درخاست یکی از دوستان از این به بعد در پایان هر قسمت تمرینات مربوط به همان قسمت را می زارم و در قسمت بعدی جواب انها را می نویسم . دوستان سعی کنند خودشان تمرینات را جواب دهد و در قسمت بعدی پاسخ ان را ببینند تا اشکالات بر طرف شود.
1-
برنامه ای بنویسید که روی LCD نوشته شود MICRO
2-
برنامه ای بنویسید که ابتدا روی LCD نوشته شود AVR . و بعد از 30 میلی ثانیه تاخیر LCD پاک شود و دوباره روی ان نوشته شود ALI
3-
برنامه ای بنویسید که در ان پایه A.0 میکرو SET شود ( منظور PORTA.0 میباشد)
4-
برنامه ای بنویسید که در ان پایه A.1 یک بار SET شود و بعد از 50 میلی ثانیه تاخیر RESET شود
5-
برنامه ای بنویسید که در ان پایه های B.5 و D.7 میکرو یک بار هم زمان باهم SET شوند و بعد از 60 میلی ثانیه تاخیر RESET شوند.
درضمن دوستان توجه داشته باشند اگر در جایی به اشکال برخوردید حتما سوال کنید . یک نکته اینکه SET و RESET وورودی خروجی های میکرو رو نمیشه تویه محیط شبیه ساز تماشا کرد و برای شبیه سازی بهتره از نرم افزار PROTEUS استفاده کنید خوشبختانه یک فایل اموزشی این نرم افزار رو با فرمت PDF و به زبان فارسی دارم که اگر تونستم اپلودش کنم براتون میزارم یا میتونید به لینک زیر مراجعه کنید .
http://www.eca.ir/forum2/index.php?board=135.0

اغاز قسمت چهارم :
1-
سلام خوبی
2-
سلام قربانت تو چطوری چکار می کنی با این میکروکنترلر
1-
منم خوبم . با این میکروکنترلر داریم حال می کنیم والا قبلا برای طراحی یک مدار ساده دیجیتال مجبور بودم چند روز روش کار کنم ولی حالا دیگه نه . بعدشم یک چیزو یادت رفته بود بگی
2-
چی؟؟
1-
از TOGGLE مثال نزدی
2-
باشه توی این درسی رو که امروز بهت میدم از این دستور هم استفاده می کنم که یاد بگیری . خوب شروع کنیم
1-
اره
2-
خوب قرار بود از کجا شروع کنیم
1-
قرار بود ورودی رو بهم بگی . گفته بود قبل از اینکه ورودی رو درس بدی باید چند تا دستور شرط و ... رو برام بگی
2-
اره این جلسه قبل از اینکه ورودی یا همون PIN رو بهت بگم باید . دستور حلقه – دستور پرش رو اول بگم بعد بریم سر ورودی . چون که این طوری بهتره
1-
حرفی نیست بریم
2-
خوب اول بریم سراغ حلقه . ببین به یک چیز توی برنامه های قبلی توجه کرده بودی
1-
نه چی ؟؟
2-
ما میومدیم یک برنامه رو می نوشتیم این برنامه هم یک کاری رو برامون انجام میداد و در نهایت برناه به END می رسید و برنامه کلا تمام می شد . و برای شروع مجدد مجبور بودیم برنامه رو دوباره اجرا کنیم . خوب حالا فرض کن ما یک برنامه ای رو میخایم که مثلا PORTB.0 رو هر 40 میلی ثانیه یک بار روشن و خاموش کنه و این کار ادامه داشته باشه یعنی اینکه 40 میلی ثانیه روشن باشه و 40 میلی ثانیه خاموش باشه . برای این کار باید از دستور استفاده کنیم که برنامه هیچ وقت به پایان نرسه که این دستور اسمش هست حلقه
1-
خوب حالا این حلقه چکار میکنه
2-
این حلقه باعث میشه برنامه توی این قسمت دور بزنه و هیچ وقت به END نرسه یعنی برنامه تمام نشه مگر اینکه ما یک شرط بزاریم که از حلقه بیرون بزاریم
1-
چه شرطی
2-
اونو تو قسمت دستور شرط برات می گم
2- حلقله DO –LOOP
برای گذاشتن حلقه DO رو اول می نویسیم و در خط های بعدی برنامه ای که باید در حلقه باشد رو می نویسیم و در نهایت LOOP رو می نویسیم
1-
من که چیزی نفهمیدم . یک مثال بزن
همون مثالی رو که PORTB.0 باید SET و RESET بشه رو برات می نویسم . از این به بعد هم دیگه $REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000 رو نمی نویسم خودت اونا رو نوشته فرض کن
خوب حالا برنامه ای که گفتم:

کد:
CONFIG PORTA = OUTPUT
DO
TOGGLE PORTA.0
WAITMS 40
LOOP
END

خوب حالا تحلیل برنامه :
این برنامه هیچ گاه به END نمی رسد تا برنامه تمام شود
خط اول رو که PORTA رو به عنوان خروجی پیکره بندی کردیم
خط دوم DO را گذاشتیم
خط سوم با نوشتن TOGGLE PORTA.0 این را رساندیم که PORTA.0 در هر حالتی از حالت ها صفر یا یک که بوده باید وضعیتش معکوس شود یعنی اگه صفر بوده حالا باید یک شود . اگر یک بوده حالا باید صفر شود
خط چهارم هم اخر حلقه را گذاشتیم
خط پنجم هم نوشتیم END البته برنامه هیچ گاه به خاطر این که ما یک حلقه گذاشتیم به END نمی رسد
توجه کن که ما برنامه ای رو که می خاستیم رو داخل این حلقه گذاشتیم و برنامه داخل این حلقه دور میزند . بار اول برنامه TOGGLE PORTA.0 رو می خونه و پایه A.0 رو SET یا همون یک می کنه بعد 40 میلی ثانیه صبر می کنه و برنامه از خط بعد شروع می شه خط بعد LOOP هستش که میکرو با خوندن LOOP دوباره بر میگرده برنامه رو از خط پایینی DO شروع به خوندن می کنه یعنی دوباره همون TOGGLE PORTA.0 رو می خونه این بار چون پایه A.0 در حالت SET یا همون یک بوده این بار یاد بشه عکس همین حالت بشه یعنی RESET یا صفر میشه بعد 40 میلی ثانیه صبر میکنه و میکرو برنامه رو از خط بعدی میخونه بعنی دستور LOOP رو می خونه . با خوانده شدن دستور LOOP میکرو برنامه رو از خط زیری DO شروع به خوندن می کنه یعنی دوباره TOGGLE PORTA.0 رو می خونه این بار چون در حالت قبلی پایه A.0 در حالت صفر بوده این بار یک می شه برنامه به همین منوال ادامه داره و ادامه پیدا می کنه و هیچ وقت به پایان نمی رسه
1-
گرفتم چی می گی ولی اگه ممکنه یک مثال دیگه هم بزن
2-
باشه
مثال دوم:

کد:
CONFIG PORTB = OUTPUT
DO
SET PORTB.5
WAITMS 60
RESET PORTB.5
WAITMS 60
LOOP
END

خوب حالا بریم سر تحلیل برنامه:
برنامه از خط اول شروع میشه و میکرو خط اول رو می خونه
خط دوم که DO هستش که ابتدای حلقه ما هستش
خط سوم SET PORTB.5 یعنی پایه B.5 یک بشه
خط چهارم یک تاخیر در برنامه با مدت زمان 60 میلی ثانیه گذاشتم
خط پنجم RESET PORTB.5 یعنی پایه B.5 صفر بشه
خط ششم با گذاشتن دستور LOOP انتهای حلقه رو مشخص کردیم
خط هفتم هم نوشتیم END که برنامه به خاط داشتن حلقه هیچ گاه به END نمی رسد
برنامه به این صورت است که از خط اول شروع به خونده شدن توسط میکرو میشه و پیکره بندی رو می خونه . بعد میوفته توی حلقه و اولین عبارتی رو که می خونه SET PORTB.5 هستش که در این زمان میکرو پایه B.5 رو یک می کنه بعد توسط دستور WAITMS 60 حدود 60 میلی ثانیه تاخیر ایچاد می کنه بعد از سپری شدن این مدت زمان میکرو برنامه رو از خط بعدی شروع به خوندن می کنه یعنی RESET PORTB.5 که میکرو توسط این دستور پایه B.5 رو صفر می کنه بعد توسط دستور WAITMS 60 میکرو 60 میلی ثانیه در اجرای برنامه دوباره تاخیر ایجاد می کنه بعد از سپری شدن این مدت زمان میکرو برنامه رو از خط بعدی یعنی LOOP شروع به خوندن می کنه که با خوانده شدن LOOP برنامه می پره از خط بعدی DO یعنی SET PORTA.0 شروع میشه و دوباره پایه B.5 یک میشه و دوباره 60 میلی ثانیه تاخیر ایجاد میشه دو باره پایه B.5 صفر میشه و 60 میلی ثانیه تاخیر ایجاد میشه بعد دوباره به LOOP می رسه و دوباره میکرو میپره و برنامه رو از خط بعدی DO شروع به خوندن میکنه و الی بی نهایت این برنامه تکرار می شه
1-
عالی بود کامل گرفتم
2-
خدارو شکر. جهنم ضرر یک مثال دیگه هم میزنم که LCD هم توش باشه

کد:
DO
CLS
LCD "AHMAD"
WAITMS 50
CLS
LCD "MICRO"
WAITMS 60
LOOP
END

خوب حالا نوبت می رسه به تحلیل برنامه :
برنامه از DO شروع میشه DO یعنی ابتدای حلقه . در خط بعد با دستور CLS ال سی دی پاک می شه و اماده نوشتن . در خط بعدی به میکرو دستور می دیم که عبارت AHMAD رو روی LCD نمایش بده . در خط بعد فرمان ایجاد تاخیر به مدت زمان 50 میلی ثانیه را می دهیم پس از سپری شدن این مدت زمان میکرو برنامه را از خط بعد می خواند . خط بعدی با دستور CLS صفحه LCD را پاک کردیم تا برای نوشتن دوباره اماده شود. در خط بعد فرمان دادیم که عبارت MICRO روی صفحه LCD نمایش داده شود. در خط بعد دستور دادیم که 60 میلی ثانیه تاخیر ایجاد شود که پس از سپری شدن این تاخیر برنامه از خط بعد اجرا می شود. به خط بعدی یعنی LOOP که می رسیم میکرو تا اینکه این دستور LOOP رو می بینه بی درنگ می پره میره برنامه رو از خط بعدی DO شروع می کنه به اجرا کردن . بعنی از خط CLS و همینطور ادامه می ده
3-
رو حساب رفاقت می خام یک مثال دیگه هم بزنم که حالشو ببری

کد:
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
WAITMS 50
LOOP
END

خط اول رو که خودت می دونی یعنی اینکه ما یک متغییر داریم که اسمش هست G و از نوع بایت
خط دوم به متغییر G مقدار دادیم
خط سوم ابتدای حلقه را مشخص کردیم
خط چهارم یک واحد به متغییر G اضافه کردیم
خط پنجم با دستور CLS ال سی دی را برای نوشتن پاک کردیم
خط ششم دستور دادیم که مقدار متغییر G روی LCD نمایش داده شود
خط هفتم یک تاخیر 50 میلی ثانیه ای در برنامه ایجاد کردیم
خط هشتم با دستور LOOP انتهای حلقه را مشخص کردیم
خوب حالا تحلیل اصلی رو گوش کن :
میکرو میاد برنامه رو از خط اول شروع می کنه به خوندن و می فهممه که یک متغییر از نوع بایت ایجاد شده . بعد خط دوم رو می خونه که نوشته مقدار این متغییر هست صفر . خط سوم ابتدای حلقه مشخص شده است . خط چهارم با دستور INCR G یک واحد به متغییر G اضافه کردیم یعنی اگه بوده صفر حالا که یک واحد بهش اضاف شده میشه 1 . خط بعدی با دستور CLS ال سی دی را پاک کردیم تا برای نوشتن حاضر شود . خط بعدی دستور دادیم که مقدار متغییر G که الان هست 1 روی LCD نمایش داده شود . خط بعدی با دستور WAITMS 50 دستور تاخیر به مدت 50 میلی ثانیه را صادر کردیم . خط بعدی هست LOOP که میکرو وقتی که به این دستور می رسه می پره میره و برنامه رو از خط زیری DO شروع می کنه به خوندن توجه کن که از خط بعدی DO شروع می کنه به خوندن نه اینکه از بالا . داریم به جای جالبش می رسیم . خوب حالا باید برنامه از خط بعدی DO خونده بشه خط بعد از DO نوشته چی نوشته INCR G خوب یعنی اینکه یک واحد به متغییر G اضافه بشه خوب حالا اخرین مقدار متغییر G بوده 1 ( به دلیل اینکه دفعه قبل با دستور INCR G یک واحد به ان اضاف کرده بودیم ) و حالا که دوباره دستور دادیم که یک واحد دیگر به متغییر G اضافه بشه اینبار میشه 2 . خط بعدی با دستور CLS ال سی دی را برای نوشتم دوباره پاک می کنیم . در خط بعدی با دستور LCD G مقدار متغییر G را روی ال سی دی نمایش می دهیم یعنی مقدار جدید که همان 2 است. خط بعدی دوباره یک تاخیر ایجاد می شود و پس از سپری شدن این مدت زمان برنامه از خط بعدی اجرا می شود . خط بعدی هست LOOP باز هم مثل دفعه قبل برنامه از خط زیری DO شروع می شه وروز از نو روزی از نوع همینطور به متغییر G یکسره اضافه می شه تا جایی که متغییر G برسه به 255 وقتی که به این مقدار رسید متغییر G پر می شود ( چون از نوع بایت است و با 255 پر می شود و با 256 سرریز می شود) . وقتی که این 255 برسه به 256 متغییر سر ریز میشه و دوباره از صفر شروع به شمردن می کنه . دیگه از این ساده تر نمی شد توضیح داد.
1-
اقا یک سوال
2-
بپرس
1-
توی مثالات به یک نکته توجه کردی
2-
نه چی
1- مثال توی قسمتی که می خاستی توی یک حلقه مثال LCD رو بزنی نوشتی LCD "ALI" ولی وقتی که خاستی مقدار یک متغییر رو نشون بدی این نوشتی LCD G که مقدار متغییر G رو نشون بده حالا سوال اینجاست چرا ALI رو داخل " " گذاشتی ولی متغییر G رو داخل " " نزاشتی
2- سوال خوبی بود . ببین هر وقت که خاستی یک متغییر رو نشون بدی لازم نیست که اونو داخل " " قرار بدی یعنی نباید داخل " " قرار بدی ولی هر وقت که خاستی یک عبارت رو روی ال سی دی نمایش بدی باید اونو داخل " " قرار بدی
1- فهمیدم . این حلقه تموم شد
2- اره
1- پس اگه خاستیم از داخل این حلقه بیرون بیایم باید چکار کنیم
2- اینو برات می گم وقتی که دستورات شرط رو گفتم
خوب حالا رسیدیم به دستورات شرط
1-
چی هست این دستور شرط
2-
گاهی لازم است که اگر یک حالتی که برای ما مد نظر است اتفاق بیفته دستور شرط یک کاری رو مثلا یک پایه رو برامون یک می کنه
1-
ببین نفهمیدم دوباره بگو
2-
باشه برمیگردیم سر دو تامثال قبل که یک متغییر داخل یک حلقه بود و هر دفعه که دو ر می زد یک واحد به متغییر اضافه می شد . خوب اگه این کار ادامه پیدا کنه این متغییر هی پرو میشه با 255 و دوباره از صفر شروع می کنه دوباره پر می شه با 255 و دوباره از صفر شروع می کنه به اضافه شدن حالا ما حال کردیم که اگر این متغییر G به مثلا 22 رسید یک کاری رو برامون انجام بده حالا هر کاری رو که حال کردیم رو بره برامون انجام بده مثلا یک پورت رو بیاد برامونSET کنه یا اینکه بره رویه LCD یک چیزی بنویسه . که ما باید از دستور شرط استفاده کنیم . یک مثال ساده دیگه که می تونم برات بزنم اینه که مثلا بابای تو بهت می گه که اگر اخر سال معدل تو 20 شد برات دوچرخه می خرم . خوب بابات برای تو یک شرط گذاشته که اگر این شرط که 20 شدن معدل تو است اجرا بشه . دستور شرط که خریدن دوچرخه توسط بابات هست اجرا میشه . حالا فهمیدی
1-
بابا ما از کوچیکی داریم 20 می گیرم بابامون برامون هیچی نگرفته . ولی مطلبو خوب گرفتم
2-
عالیه. خوب بریم سر دستور شرط
IF همان دستور شرط است
THEN یعنی اگر شرط اجرا شود این THEN میاد برای ما یک کاری رو انجام می ده
1-
مثال برن
2-
همون مثال دوچرخه رو می زنم . خوب بابای فلانی بهش گفته که اگر معدلش 20 بشه یعنی شرط IF . .. براش یک دچرخه می خره یعنی یک کاری رو در قبال شرطی رو که گذاشته برای پسرش انجام می ده یعنی THEN
1-
اها گرفتم. از مثال های برنامه هم برام بگو
2-
باشه . بریم سر اون مثالی که متغییر G رو توی یک حلقه قرار داده بودیم حالا ما می خایم که اگر این متغییر G به 6 برسه بره و PORTA.0 رو SET کنه :

کد:
CONFIG PORTA = OUTPUT
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
IF G = 6 THEN SET PORTA.0
WAITMS 50
LOOP
END

برنامه بالا رو که تا حدودی می دونی چیه چون قبلا توضیحشو دادم فقط می مونه خط هفتم که نوشته IF G = 6 THEN SET PORTA.0 ما در اینجا با گذاشتن شرط یعنی IF G = 6 شرط گذاشتیم که اگر متغییر G به عدد 6 رسید . ادامه نوشتیم THEN SET PORTA.0 بروی SET کن PORTA.0 . فهمیدی
1-
اره ولی مگه شرط بندی حروم نیست
2-
چرا حرومه . ولی باید مواظب باشی که شرط رو نبازی
خوب رسیدیم به دستورات زیر برنامه ( GOTO - GOSUB )
1-
چی هستن این زیر برنامه ها
2-
با یک مثال برات توضیح می دم توی مثال قبل اگر دقت کرده باشی متغییر G وقتی که به عدد 6 می رسید می رفت و PORTA.0 رو SET می کرد و همینطوری به متغییر G اضافه می شد . حالا اگر که ما حال کردیم بعد از این که متغییر G به عدد 6 رسید بره همون کاره خودشو یعنی SET کردن PORTA.0 رو انجام بده ولی برنامه دیگه تموم بشه و دیگه شمارش نکنه یا به عبارتی به END برسه . خوب برای این کار باید از زیر برنامه استفاده کنیم به مثال زیر توجه کن :

کد:
CONFIG PORTA = OUTPUT
DIM G AS BYTE
G = 0
DO
INCR G
CLS
LCD G
IF G = 6 THEN GOTO AHMAD
WAITMS 50
LOOP
AHMAD :
SET PORTA.0
END

خوب حالا بریم تحلیل برنامه . برنامه رو که می دونی چجوریه منظورم معنی خط ها هستش البته به غیر از خط هشتم که نوشته
IF G = 6 THEN GOTO AHMAD
خوب این خط یعنی اینکه اگر متغییر G رسید به عدد 6 دستور شرط را اجرا کن که دستور شرط این است GOTO AHAD یعنی بپر برو به زیربرنامه ای که استش هست احمد . توجه کن که به جای اسم AHMAD هر اسم دیگه ای می تونی بزاری هر اسمی که حال کردی . بعد از اینکه متغییر G بع عدد 6 رسید دستور شرط اجرا می شود و میکروکنترلر برنامه را از خط بعدی زیربرنامه AHNAD می خواند یعنی خط SET PORTA.0 را می خونه و پورت A.0 رو ست می کنه بعد از این که ست کرد خط بعدی رو می خونه که نوشته END به محض اینکه این دستور END رو خوند برنامه متوقف می شه و به پایان می رسه .
پس فهمیدی که زیر برنامه برای وقتی هستش که ما می خوایم یک دستور شرط رو اجرا کنیم
به یک مثال دیگه توجه کن :

کد:
CONFIG PORTA = OUTPUT
DIM G AS BYTE
METAL:
G = 0
RESET PORTA.0
DO
INCR G
CLS
LCD G
IF G = 6 THEN GOTO AHMAD
WAITMS 50
LOOP
AHMAD:
SET PORTA.0
WAITMS 50
GOTO METAL
END

خوب حالا تحلیل برنامه . میکرو میاد برنامه رو از خط اول شرومیکنه به خوندن که خط اول مربوط به پیکره بندی PORTA به عنوان خروجی هستش . بعد میاد خط دوم رو می خونه که در این خط ما یک متغییر که اسمش هست G و از نوع بایت می باشد رو تعریف کرده ایم. خط سوم یک زیر برنامه هستش به نام METAL که فعلا بهش کار ندارم تا بعد در ضمن این نکته رو باید یادت باشه که هر وقت یک زیر برنامه رو می نویسی باید جلوش دو نقطه رو بزاری اینطوری METAL: . خط بعدی به متغییر یک مقدار دادیم که صفر است . خط بعدی نوشتیم RESET PORTA.0 که به این هم فعلا کار نداریم . خط بعدی DO هستش که ابتدای حلقه را مشخص می کنه . خط بعدی نوشته INCR G یعنی به مقدار متغییر G یک واحد اضاف کن یعنی صفر که بوده حالا که یک واحد اضاف بشه می شه یک . خط بعدی با دستور CLS ال سی دی را پاک کردیم تا برای نوشتن دوباره اماده شود . خط بعدی با فرمان LCD G این را رساندیم که مقدار متغییر G رو روی ال سی دی نمایش بده که الان باید عدد یک رو روی ال سی دی نمایش بده . در خط بعدی نوشتیم IF G = 6 THEN GOTO AHMAD یعنی اگر متغییر G ما به عدد 6 رسید برو دستور شرط رو که هست THEN GOTO AHMAD اجرا کن بعنی بپر برو توی زیر برنامه AHMAD البته وقتی دستور شرط اجرا میشه که متغییر G به عدد 6 برسه . خط بعدی یک تاخیر در برنامه با مدت زمان 50 میلی ثانیه را گذاشتیم که بعد از سپری شدن این مدت زمان برنامه از خط بعدی شروع می شه خوب تا این جا که متغییر ما عدد 1 هستش . بعد که میکرو میرسه به دستور LOOP دوباره دور می زنه و خط زیری DO رو می خونه که نوشته INCR G یعنی یک واحد به متغییر G اضافه کن خوب متغییر G الان هستش 1 بعد که به این دستور رسید این دفعه یک واحد بهش اضافه می شه و می شه دو . این عمل انقدر ادامه می یابد تا متغییر G برسه به عدد 6 . همین که به عدد 6 رسید از اونجایی که ما یک شرط با دستور
IF G = 6 THEN GOTO AHMAD گذاشتیم یعنی اینکه وقتی متغییر G به عدد شش رسید یعنی IF G = 6 برو دستور شرط رو که هستش THEN GOTO AHMAD اجرا کن یعنی اینکه بپر برو توی زیر برنامه AHMAD خوب حالا میکرو میپره میره برنامه رو از خط زیری زیر برنامه AHMAD می خونه که نوشته SET PORTA.0 یعنی پایه A.0 رو یک کن . بعدش نوشته WAITMS 50 یعنی اینکه به مدت زمان 50 میلی ثانیه در برنامه تاخیر ایجاد کن که در طول این مدت PORTA.0 در وضعیت SET قرار دارد بعد از این که این مدت زمان سپری شد برنامه از خط بعدی اجرا می شه خط بعدی یعنی GOTO METAL یعنی اینکه بپر برو توی زیر برنامه METAL و میکرو هم همین کار رو می کنه و می پره می ره توی زیر برنامه METAL و برنامه از خط بعدی این زیر برنامه که هستش G = 0 ادامه پیدا می کنه این خط به این معنی هستش که متغییر G رو که بوده 6 حالا بیا صفرش کن . در خط بعدی یعنی RESET PORTA.0 یعنی اینکه پایه A.0 رو که ست کرده بودی حالا بیا ریستش کن یعنی صفر کن. خوب حالا هم متغییر G ما صفر هستش هم اینکه PORTA.0 ما صفر یا همون ریست هستش . بعد میکرو می یاد برنامه رو از خط بعدی شروع میکنه به خوندن که نوشته DO بعنی اول زیربرنامه . خط بعدی نوشته INCR G یعنی یک واحد به متغییر G ما که الان دوباره صفرش کردیم اضافه کن که بشه یک . دوباره روز از نو روزی از نو یعنی اینکه دوباره شروع می کنه به اضافه کردن متغییر تا دوباره برسه به 6 بعد که رسید به 6 دوباره بپره بره به زیر برنامه AHMAD اونجا باز PORTA.0 رو یک می کنه بعدش تاخیر ایجاد می کنه بعد با دستور GOTO METAL می پره میره به زیر برنامه METAL که در بالای برنامه هستش بعد دوباره متغییر رو که 6 هستش رو صفر می کنه به دنبالش PORTA.0 رو هم که یک بوده صفر می کنه باز دوباره...................................
حالا رسیدیم به دستور GOSUB
این دستور همان دستور GOTO هستش با این تفاوت که یک دستور دیگه همراهش هست به نام اقای RETURN که این RETURN رو هر جای برنامه که بنویسیم میکرو میاد برنامه رو از خط بعدی GOSUB شروع می کنه به خوندن . که دربارش وقتی که خواستم ورودی رو بهت درس بدم می گم .
ورودی PIN :
ورودی در میکرو کاربردای فراوونی داره مثلا در ساده ترین حالت می خای یک میکروسوییچ به میکروکنترلر وصل کنی که با هر بار زدن این میکروسوییچ یک LED روشن و خاموش بشه در مراحل پیشرفته هم مثلا در ساخت یک ربات کاربرد داره به این صورت که یک سنسور مادون قرمز بهش وصل بشه و مثلا به یک خط سیاه حساس باشه و از این طور کارا
خوب بریم سر دستور ورودی . باز هم می خوام با یک مثال برات توضیح بدم
فرض کن که می خایم با یک میکرو سوییچ که به میکرو وصل کردیم یک LED رو یک بار روشن و یک بار خاموش کنیم که برنامه به صورت زیر است و خیلی خیلی ساده :

کد:
CONFIG PINB.0 = INPUT
DIM A AS BYTE
Ali:
DO
DEBOUNCE PINB.0 , 1 , SONY
LOOP
END
SONY:
INCR A
CLS
LCD A
GOTO ALI

خوب حالا وقت تحلیل برنامه هستش: درخط اول ما اومدیم با نوشتن دستور CONFIG PINB.0 = INPUT پایه B.0 رو به عنوان ورودی تعریف کردیم . در خط بعد یک متغییر از نوع بایت که اسمش رو گذاشتیم A تعریف کردیم . در خط بعدی یک زیر برنامه به نام ALI گذاشتیم که فعلا بهش کار نداریم و در ادامه توضیحش می دم. در خط بعدی با نوشتن DO ابتدای حلقه را مشخص کردیم . در خط بعدی نوشتیم که DEBOUNCE PINB.0 , 1 , SONY که هر وقت خاستی که یک ورودی رو تعریف کنی بهتره از این دستور استفاده کنی یا به عبارتی حتما استفاده کنی خوب حالا لابد از خودت می پرسی که این دستورات چی هست این دستور که همش باید توی یک خط نوشته بشن رو یکی یکی برات بازش می کنم DRBOUNCE رو همیشه وقتی که می خای یک ورودی رو تعریف کنی اولش باید بزاری و کاربردشم اینه که یک تاخیر خیلی خیلی کوچیک که به چشم هم نمیاد ایجاد می کنه و باعث می شه که پایه ورودی نویز نگیره یک بار دیگه دوباره می گم ما نوشتیم که DEBOUNCE PINB.0 یعنی پایه B.0 رو از نظر نویز محافضتش کن خوب این تا بعدش علامت , رو گذاشتیم تا جملات از هم تفکیک شوند که باید حتما علامت , رو بزاری در ادامه ما نوشتیم که 1 خوب حالا این 1 یعنی چی . این 1 یعنی اگر پایه B.0 یا یک 1 شد یا به عبارتی SET شد با میتونیم بگیم که یک نوع شرط است که در مقابل یک شدن پایه B.0 گذاشته ایم و جلوی این 1 دوباره علامت , گذاشتیم تا از جمله بعدیش تفکیک بشه . در جمله بعدیش نوشتیم SONY که این یعنی اینکه اقا اگر این پایه B.0 ما 1 شد بپر برو توی زیربرناه SONY که به جای اینSONY هر اسم دخواه دیگه ای هم می تونی بزاری . یک بار دیگه برات این جمله رو به صورت کلی توضیح می دم معنی این جمله دستوری این هستش که اگر PINB.0 ما 1 شد بپر برو توی زیربرنامه SONY و اگر صفر بود که هیچی . در خط بعدی نوشتیم LOOP که انتهای حلقه را با این کلمه مشخص کردیم . در خط بعدی نوشتیم END که برنامه هیچگاه به END نمی رسد . در خط بعدی نوشتیم SONY که SONY یک زیربرنامه است که می تونست هر اسم دیگه ای باشه . در خط بعدی نوشتیم INCR A که به معنی اضافه کردن یک واحد به متغییر A می باشد . در خط بعدی نوشتیم که CLS یعنی پاک کن کل صفحه ال سی دی رو تا برای نوشتن اماده بشه. در خط بعدی نوشتیم GOTO ALI یعنی بپر به زیربرنامه ALI .
خوب حالا بریم سر طرز کار مدار : این مدار در واقع یک شمارنده هستش . طرز کارش هم اینطوریه که میکرو میاد سه خط اول رو می خونه بعد میره می یوفته توی حلقه DO - LOOP و اونجا داخل این حلقه هی دور میزنه تا کی تا وقتی که PINB.0 ما یک بشه یعنی شرطی که گذاشته ایم اجرا بشه که شرط ما این هستش که پایه B.0 یک بشه بعد از اینکه این شرط اجرا شد میکرو میاد دستور شرط رو اجرا می کنه دستور شرط کدومه همونی که بهت گفتم یعنی پرش به زیر برنامه SONY . ومیکرو که گوش به فرمان برنامه هست می پره می ره داخل زیر برنامه SONY و از خط بعدی زیر برنامه SONY که نوشته
INCR A رو می خونه و طبق این دستور یک واحد به این متغییر A اضافه می کنه یعنی میکنش 1 . بعدش می یاد خط بعدی رو می خونه که نوشته CLS یعنی اینکه کل ال سی دی پاک بشه تا برای نوشتن حاضر بشه . در خط بعدی نوشتیم که
LCD A به این معنی که مقدار متغییر A رو که هستش یک روی LCD نمایش بده . در خط بعدی نوشته GOTO ALI یعنی اینکه بپر برو توی زیر برنامه ALI و میکرو هم همین کار رو می کنه و می پره می ره اولین خط بعد از زیر برنامه ALI رو که نوشته DO رو می خونه و دوباره میوفته توی این حلقه و باز هم دوباره انقدر توی این حلقه هستش و توی این حلقه دور می زنه تا وقتی که دویاره PINB.0 یک بشه یا به عبارتی SET بشه اونوقت دوباره روز از نو روزی از نو و میپره دوباره توی زیربرنامه SONY و دستورات داخل این زیر برنامه رو دباره اجرا می کنه که در خط اول این زیر برنامه نوشته
INCR A یعنی دوباره یک واحد به متغییر A اضافه کن و میکرو هم این کار رو میکنه و متغییر A که یک بوده الان میشه 2 بعد میاد دستور CLS رو می خونه که لازم به توضیح نیست . بعد می یا دستور LCD A رو می خونه که مقدار جدید این متغییر A رو که الان هستش 2 رو روی LCD نمایش می ده بعد میاد دستور GOTO ALI رو می خونه و می پره می ره توی زیر برنامه ALI دوباره میوفته توی حلقه و الی اخر . با استفاده از این برنامه می تونی یک شما رنده درست کنی که می تونه از عدد 0 تا 255 رو بشماره و اگر خاستی رنج شمارشش از 255 بیشتر باشه می تونی به جای BYTE توی برنامه بنویسی WORD . این برنامه در کارخونه هم کاربرد داره البته باکمی تغییرات کوچیک در برنامه و مثلا بایک سنسور می شه قطعات عبوری از روی خط تولید رو شمارش کرد.
1-
از نظر اتصالات سخت افزاریش هم توضیح بده برام
2-
این که خیلی ساده هستش کافیه تغذیه میکرو رو وصل کنی و با یک میکروسوییچ که یک سرش رفته باشه به VCC 5 ولت و سر دیگه میکروسوییچ هم رفته باشه به پایه B.0 و اتصالات ال سی دی این مدار رو کاملش کنی.
1-
جالب بود
2-
تو به این می گی جالب بزار یکم راه بیوفتی اونوقت این طور مدارا برات پیش پا افتاده هستش . وقتی که میتونی میکروکنترلر رو از طریق تلفن .SMS و اینترنت کنترلر کنی دیگه این مدارات در نظرت بچه بازی هستش
1-
چطوری از طریق اینایی که گفتی کنترل می کنن
2-
دیگه باید یکم اطلاعاتت در مورد پورتهای کامپیوتر و PC INTERFACES کامل باشه که بتونی از طریق مثلا اینترنت یک موتور رو کنترل کنی وگرنه برنامه نویسی میکرو که چیز نیست
1-
با این PC INTERFACES چه کار میتونی بکنی و اصلا چی هستش
2-
اندازه گیری و کنترل با استفاده از پورتهای استاندار تحت ویندوز رو می گن PC INTERFACES مثلا شما توی محیط نرم افزار ویرژال بیسیک یک برنامه ای می نویسی که اگر مثلا فلان دکمه کیبرد فشرده شد خروجی فلان پورت کامپیوتر رو یک کن که این خروجی ها از نظر استاندارد با استاندارد میکروکنترلر فرق دارند و باید از ای سی MAX232 استفاده کنی که از نظر استاندارد با هم مطابق شوند .
1-
علم چقدر پیشرفت کرده ها
2-
بله . بزار یک مثال دیگه هم بزنم ولی توضیحش رو خیلی خلاصه برات می گم

کد:
CONFIG PORTA = OUTPUT
CONFIG PINB.0 = INPUT
DIM A AS BYTE
Ali:
DO
DEBOUNCE PINB.0 , 1 , SONY
LOOP
END
SONY:
INCR A
CLS
LCD A
TOGGLE PORTA
GOTO ALI

در برنامه بالا فقط یک چیز اضافه شده اونم دستور TOGGLE PORTA که با وجود این دستور هر وقت که میکرو به زیر برنامه SONY پرش می کنه علاوه براین که یک واحد به متغییر A اضافه می کنه و روی ال سی دی هم نمایش می ده موقعییت PORTA رو هم عوض می کنه یعنی اگر صفر باشه یک می شه و اگه یک باشه صفر می کنه و دفعه بعد که به این زیر برنامه رفت دوباره اگر صفر باشه یکش می کنه و اگه یک باشه صفرش می کنه بزار منظورمو ساده بگم اگر شما یک LED به پایه های A.0 تا A.7 وصل کنی به ازای هر بار زدن میکروسوییچ این LED ها یک بار روشن و باردیگه خاموش می شن.

برای امروز دیگه کافیه بقیش باشه برای جلسه بعدی

پایان قسمت چهارم

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

مدار راه اندازی درایور L6203

برای راه اندازی موتور ها در انواع ربات ها از جمله مسیر یاب نیازمند یک سرور موتور مناسب هستیم که اغلب از درایور های l298 یا l293  استفاده میشود اما برتری l6203 نسبت به بقیه دراور ها سرعت عمل بالای آن است و موجب میشود که ربات بی نقصی داشته باشید ولی مسئله ای که مورد اهمیت است این است که درایور l6203 فقط یک موتور را کنترل میکند و برای دو موتور مجزا نیازمند دو درایور مجزا هستیم . L6203 یک آی سی درایور موتورهای الکتریکی DC باولتاژ خروجی 48 ولت و جریان تا 4A می باشد.

این آی سی با اعمال PWM قابلیت تغییر سرعت موتور را دارد.


دیتاشیت درایور L6203

 ما یک مدار عملی برای راه اندازی l6203 در اختیار شما قرار میدهیم که مدار کاملا سالم و تست شده می باشد . L6203


در این مدار میتوان به جای استفاده از led ها از دیود4007 استفاده کرد .

قطعات مورد نیاز :

درایورL6203

خازن 10nf

خازن100nf

مقاومت و led ( میتوان از دیود 4007 هم استفاده کرد )

این مدار بسیار ساده و عملی میباشد .

عرفان بیگی بروجنی | ۱۵ بهمن ۹۶ ، ۰۱:۳۳