Electrobot

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

Electrobot

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

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

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

۵ مطلب با کلمه‌ی کلیدی «آموزش Avr» ثبت شده است

۰۷ بهمن۲۱:۰۲

جلسه سیزدهم


سلام

2- سلام امروز می خام در مورد تایمر 2 برای ایجاد زمان خیلی دقیق برات بگم که اگه یک موقع خاستی یک زمان دقیق رو ایجاد کنی بتونی با تایمر کانتر دو این زمان رو ایجاد کنی از تایمر دقیق می تونی مثلا توی یک ساعت دقیق استفاده کنی .
1- بگو سرو پا گوشم
2- برای اینکه بتونی از تایمر کانتر 2 برای زمان دقیق استفاده کنی نیاز به یک RTC داری که مقدارش هم باید 32768 هرتز
باشه . این RTC یک قطعه دو پایه هستش که باید به پایه های TOC1 و TOC2 وصل بشه . شکل زیر رو نگاه کن :
http://www.4shared.com/file/22309579/4f8...d=c95a46aa
1- مدار خاص دیگه نیاز نداره ؟
2- نه هیچی نیاز نداره فقط کافیه این RTC رو به اون پایه هایی که گفتم وصل کنی
1- این RTC پایه مثبت یا منفی یا پایه تغذیه ای نداره ؟
2- نه فقط دوتا پایه داره که باید وصل کنی به پایه های TOC1 و TOC2 و هیچ جیز خاص دیگه ای نداره
1- این پایه های TOC1 و TOC2 کدوم یکی از پایه های میکرو هستن ؟
2- اینو دیگه باید از توی برگه مشخصاتش در بیاری ببینی که کجا هستش مثالا توی MEGA8 این دوتا پایه پایه های 9 و 10 هستن یا مثلا توی MEGA32 پایه های 28 و 29 هستن
2- خوب این شد از سخت افزار مدار حالا بریم سر برنامه ای که باید نوشت:
برنامه رو با یک مثال ساده برات شروع می کنم برنامه به این صورت هستش که PORTD رو توی زمان دقیق یک ثانیه TOGGLE کنیم
مثال اول :

کد:
CONFOG TIMER2 = TIMER , ASYNC = ON , PRESCALE = 128
CONFIG PORTD = OUTPUT
ENABLE INTERRUPTS
ENABLE TIMER2
ON TIMER2 NEX
DO
LOOP
END
NEX:
TOGGLE PORTD
RETURN

برنامه همینی هستش که می بینی دیدی که چقدر راحت هستش . خوب حالا بریم سر تحلیل برنامه :
توی خط اول که ما نوشتیم CONFOG TIMER2 = TIMER , ASYNC = ON , PRESCALE = 128 با این کار ما تایمر دو رو توی مد تایمر انتخاب کردیم ASYNC = ON این دستور که توی همین خط اول نوشتیم رو حتما باید بنویسی تا تایمر به صورت اسنکرون پیکره بندی بشه و کلاک رو از RTC دریافت کنه . PRESCALE = 128 این دستور رو که قبلا توی بحث تایمر کانتر یک برسی کردیم این 128 رو هم که نوشتیم برای این هستش که بتونیم زمان یک ثانیه رو بدست بیاریم وگرنه میتونی یکی از اعداد 1/ 8/ 64/ 128/ 256/ 1024 رو هم بنویسی تا زمان های کمتر یا بیشتری به دست بیاری
خط دوم CONFIG PORTD = OUTPUT در اینجا ما PORTD رو به عنوان خروجی تعریف کردیم
خط سوم ENABLE INTERRUPTS در این جا ما وقفه سراسری رو فعال کردیم که توی همه تایمرهایی که ما استفاده می کنیم باید این وقفه رو فعال کنیم.
خط چهارم ENABLE TIMER2 چون که ما از تایمر شماره 2 میکرو میخایم استفاده کنیم باید خود TIMER2 رو توسط این دستور فعال کنیم
خط پنجم ON TIMER2 NEX این دستور رو هم به این خاطر نوشتم که زمانی که وقفه تایمر خورد بپره بره توی زیر برنامه NEX
1- حالا این وقفه کی می خوره
2- صبر داشته باش بهت می گم. وقفه زمانی میخوره که زمان یک ثانیه رسیده باشه
2- خط ششم و هفتم ما یک حلقه DO -LOOP گذاشتیم که در ادامه می گم برای چه کاری هستش
خط هشتم END که میکرو هیچوقت این دستور رو نمی خونه یعنی نباید هم بخونه
خط نهم NEX: این یک زیر برنامه هستش که اینم در ادامه توضیح میدم
خط دهم TOGGLE PORTD این دستور به این معنی هستش که پورت D رو TOGGLE کن یا به عبارتی وضعیت پورت D رو از نظر صفر یا یک بودن معکوس کن یعنی اگه پورت صفر هستش حالا یکش کن یا اگه یک هستش حالا صفرش کن
خط یازدهم RETURN با این دستور بر می گردیم تو حلقه DO-LOOP

حالا بریم سر تحلیل دوم راستی قبل از این که تحلیل دوم رو شروع کنم اینو بهت بگم که این برنامه رو نمی تونی با شبیه ساز BASCOM و نه با پروتوس به طور دقیق تست کنی و باید حتما روی یک بردبرد ببندیش اینو گفتم که یک موقع نری با این شبیه سازا تستش کنی بعد که زمان های غیر عادی به دست اوردی تو دلت به ما فحش بدی.
تحلیل دوم برنامه :
میکرو میاد برنامه رو از خط اول شروع می کنه به خوندن خط اول رو می خونه و می فهمه که ما تایمر 2 را اون هم در حالت اسنکرون پیکره بندی کردیم بعد می ره خط دوم.
توی خط دوم میکرو می فهمه که ما PORTD رو به عنوان خروجی تعریف کردیم بعد می ره خط سوم
توی خط سوم که ENABLE INTERRUPTS هستش میکرو وقفه سراسری رو فعال میکنه بعد میره خط چهارم
توی خط چهارم که ENABLE TIMER2 هستش میکرو تایمر 2 رو هم فعال میکنه بعد میره خط پنجم
توی خط پنجم که ON TIMER2 NEX هستش میکرو می فهمه که هر وقت وقفه تایمر 2 خورد باید بپره بره توی زیر برنامه NEX که به جای NEX هر اسم دلخاه دیگه ای هم می تونی بزاری . در ضمن وقفه تایمر دو توی این برنامه زمانی می خوره که به زمان یک ثانیه رسیده باشیم .بعد میکرو میره به خط ششم.
توی خط ششم و هفتم ما یک حلقه بی نهایت DO-LOOP گذاشتیم این حلقه رو به این به دو دلیل گذاشتیم اول به خاطر این که ما شاید برنامه های دیگه این هم داشته باشیم مثال خوندن دما یا خوندن کیبرد ماتریسی یا ... دلیل دوم اینه که میکرو اونقدر توی این حلقه بمونه تا وقفه تایمر 2 بخوره . خوب حالا بیا فرض رو بر این بگیریم که زمان یک ثانیه ایجاد شده و وقفه تایمر 2 خورده که در این جا میکرو می فهمه که وقفه خورده و زمان یک ثانیه سررسیده و باید بپره بره توی زیربرنامه NEX و دستورات داخل این زیر برنامه رو انجام بده . پس ادامه برنامه رو از خط زیربرنامه NEX یا همون خط نهم ادامه میدم:
اولین دستور داخل زیربرنامه NEX هستش TOGGLE PORTD در این جا میکرو میاد وضعیت پورت D رو معکوس میکنه چون وضعیت قبلی صفر بوده اینجا میاد پورت D رو یکش می کنه . اگه یک LED به یکی از پایه های PORTD وصل کنی می بینی که LED روشن میشه.
دومین دستور داخل زیربرنامه NEX هستش RETURN که میکرو وقتی به این دستور رسید میپره میره توی اون حلقه ی DO-LOOP
اینم از برنامه دیدی که چقدر راحت بود
1- اره
2- خوب حالا که راحت بود یک دستور هستش که دیگه از این هم راحت تره حجم برنامه رو از اینی هم که هستش راحت تر می کنه تازه یک سری امکانات هم داره
خوب بزار همین مثالی رو که بالا برات زدم رو توسط این دستور برات بنویسیم در ضمن توی سخت افزار هیچ تغییری انجام نمیشه

کد:
CONFIG CLOCK = SOFT , GOSUB = SECTIC
CONFIG PORTD = OUTPUT
ENABLE INTERRUPTS
DO
LOOP
END
SECTIC:
TOGGLE PORTD
RETURN

همین . دیدی چقدر برنامه راحتی هستش
برنامه ساده هستش و به جز خط اول بقیه نیاز به توضیح نیست
توی خط اول ما نوشتیم CONFIG CLOCK = SOFT , GOSUB = SECTIC این دستور میاد تایمر رو در مد سنکرون پیکره بندی میکنه اونجایی هم که نوشتیم GOSUB = SECTIC این معنی رو میده که وقتی که به یک ثانیه رسیدیم بپر برو توی زیر برنامه SECTIC و دستورات داخل این زیر برنامه رو انجام بده یک نکته مهم رو هم بگم که اون زیر برنامه که ما اسمش SECTIC هستش رو یک موقع عوض نکنی اسمشو ها که برنامه EROR میده . راستی این دستوراتی که نوشتیم فقط مخصوص یک ثانیه هستش و این این دستور بیشتر برای ساخت ساعت استفاده می شه .
یکی از امکاناتی که این دستور CONFIG CLOCK = SOFT در اختیار ما قرار می ده ساخت ساعت همراه با تاریخ هستش که با نوشتن دو دستور زیر می تونیم این کار رو انجام بدیم
DATE$ = "21/05/86"
TIME$ = "10:35:58"
توسط دو دستور بالا می توان توسط یک برنامه ای که الان می نویسم یک ساعت همراه با تاریخ درست کرد :

کد:
CONFIG CLOCK = SOFT , GOSUB = SECTIC
ENABLE INTERRUPTS
DATE$ = "21/05/86"
TIME$ = "10:35:58"
DO
LOOP
END
SECTIC:
LCD TIME$
LOCATE 2,1
LCD DATE$
RETURN

برنامه بالا زیاد نیاز به توضیح نداره
خط اول که ما تایمر رو در مد سنکرون پیکره بندی کردیم و به میکرو فهموندیم که فرکانس مورد نیاز تایمر رو باید از از RTC دریافت کنه
خط دوم که وقفه سراسری رو فعال کردیم
خط سوم هم مقدار اولیه تاریخ رو دادیم که هر مقدار دیگه ای هم به غیر از اون هم می تونی بدی
خط چهارم هم مقدار اولیه ساعت رو دادیم که هر مقدار دیگه ای هم می تونی بدی
خط پنجم و ششم هم یک حلقه DO-LOOP گذاشتیم که میکرو اونتو بمونه تا وقتی که وقفه تایمر بخوره در ضمن وقفه تایمر راس یک ثانیه می خوره. حالا فرض کن که وقفه تایمر خورده و پریده توی زیربرنامه SECTIC . پس بریم که از میکرو عقب نمونیم بریم ببینیم که میکرو توی این زیربرنامه چکار می خاد انجام بده.
اولین دستور داخل زیر برنامه SECTIC هستش LCD TIME$ میکرو باخوندن این دستور یک ثانیه به مقدار پیش فرضی که ما در خط های سه و چهار گذاشتیم اضافه می کنه وساعت رو به اصطلاح به روز می کنه مثلا ما در پیش فرض ساعت 10 : 35 : 58 رو نوشتیم ولی بعد از این که وقتی که وقفه تایمر خورد و اومد توی زیر برنامه ساعت میشه 10 : 35 : 59
دومین دستور داخل زیر برنامه SECTIC هستش LOCATE 2,1 این دستور مکان نمای LCD رو به خط دوم یعنی خط پایینی میاره و ادامه نوشتن رو از این خط ادامه میده در مورد این دستور در جلسات قبلی توضیحات کافی دادم
سومین دستور داخل زیربرنامه SECTIC هستش LCD DATE$ این دستور هم تاریخ رو البته به صورت اتومات به روز می کنه البته از ادامه پیش فرضی که بهش دادیم عملکرد این دستور هم مثل دستور LCD TIME$ هستش .
اخرین دستور داخل زیربرنامه SECTIC هستش RETURN میکرو به محض خوندن این دستور بر میگره به داخل حلقه DO-LOOP
1- همه اینایی که گفتی درست ولی من یک چیز مهم رو نفهمیدم و اون اینکه توی مثال اولی که زدی توی برنامه رو نوشتی بعد گفتی که این برنامه هر یک ثانیه می ره توی زیر برنامه و دستورات داخل این زیر برنامه رو انجام می ده حالا سوالی که برای من پیش اومده اینه که تو چطوری یک کاری کردی که هر یک ثانیه میکرو بره توی زیر برنامه ایا فرمول خاصی داره زود بگو که همین مشکل داره گیجم میکنه؟؟؟؟؟؟؟؟
2- اره فرمول داره فرمولش هم اینه 128 * 256 / 32768 = 1 S فرمولش همینیه که می بینی چیز خاص دیگه ای نداره حالا بریم سر اینکه اصلا این عدد ها چی هستش تا گیج نشی :
من گفتم که یک RTC به مقدار 32768 هرتز وصل کن به پایه های TOC1 و TOC2 بعد یک دستوری داشتیم توی خط اول ASYNC=ON
که با نوشتن این دستور تایمر2 کلاکش رو دیگه از کریستال داخلی میکرو نمی گیره بلکه RTC که مقدارش هست 32768 هرتز دریافت می کنه . حالا فکر میکنی که تایمر 2 با این فرکانسی که از RTC دریافت می کنه چکار می کنه الان بهت می گم . ما توی خط اول یک دستوری داشتیم به نام
PRESCALE و مقداری که بهش دادیم این بود PRESCALE = 128 ما با نوشتن این دستور به میکرو دستور دادیم که اقای AVR عزیز این فرکانسی رو که داری از RTC دریافت میکنی که مقدارش هم هست 32768 تقسیم بر عدد 128 کن . و میکرو هم این کار رو می کنه طبق این محاسبه : 32768 / 128 = 256 یعنی در هر ثانیه دقیقا 256 هرتز به تایمر میرسه یا به عبارت دیگه در هر ثانیه 256 تا کلاک به
تایمر2 می خوره و تایمر این مقدار رو توی خودش می ریزه حالا از اونجایی که تایمر2 با 255 تا کلاک پر و با 256 تا کلاک سرریز میشه وقتی که 256 تا کلاک بهش خورد سرریز میشه و وقفه می خوره و می ره توی اون زیر برنامه ای که براش تعریف کرده بودیم. در ضمن این 256 تا کلاک توی یک ثانیه ایجاد میشه یا به عبارت دیگه در هر ثانیه 256 تا کلاک به تایمر2 می خوره طبق همون رابطه ای که نوشتم منظورم
رابطه ی 32768 / 128 = 256 هستش.
1- تو نوشتی که PRESCALE = 128 به جای عدد 128 هر عدد دیگه ای هم می تونیم بزاریم
2- هر عددی نه فقط اعداد 1 یا 8 یا 64 یا 128 یا 256 یا 1024 رو می تونیم بزاریم مثلا اگه به جای 128 عدد 64 رو بزاری تایمر2 هر
0.5 ثانیه سرریز میشه طبق این رابطه 64 * 256 / 32768 = 0.5 که در این رابطه 64 عدد PRESCALE هستش 256 مقدار گنجایش تایمر هستش که به ازای این مقدار تایمر سرریز میشه عدد 32768 هم که مقدار فرکانس یا کلاک RTC هستش. یا مثلا اگه عدد 256 رو بزاری تایمر2 هر 2 ثانیه سرریز میشه
طبق این رابطه 256 * 256 / 32768 = 2
1- پس مثال اگه عدد PRESCALE = 1024 باشه طبق این رابطه ای که گفتی 1024 * 256 / 32768 = 8 یعنی تایمر هر هشت ثانیه سرریز میشه درست گفتم یا نه ؟؟
2- اره کاملا درسته درسته . دوباره تاکید می کنم که این برنامه رو توی پروتوس یک موقع تست نکنی که تاخیرش زیاد هستش و حتما روی بردبرد مدارشو ببند.
فعلا

عرفان بیگی بروجنی | ۰۷ بهمن ۹۷ ، ۲۱:۰۲
۰۷ بهمن۲۱:۰۰

جلسه دوازدهم
1- سلام خوبی
2- سلام ممنون تو چطوری
1- این بد نیستم . خوب برو سر اصل مطلب امروز می خای چیرو بهم باد بدی
2- امروز می خام برات از INT0 یا وقفه خارجی میکرو برات بگم
1- حالا چی هست کارش چیه ؟
2- کارش فقط و فقط اشکار کردن هستش . یعنی شما در هر جای برنامه که باشی با تحریک کردن این پایه INT0 می تونی به یک زیر برنامه بپری و ...
کاربردش کجا هستش کاربردش توی جا که بخای . به عنوان مثال شما یک برنامه برای یک دستگاه پرس پیشرفته نوشتی که قرار میکروکنترلر روی این دستگاه نصب بشه که توی این برنامه هم کیبرد هستش هم اندازه گیری دما هم تایمر و چندتا کار دیگه . یکی از کارهایی که این دستگاه پرس باید انجام بده اینه که وقتی که پرس داره به سمت پایین میاد یک سنسور فعال میشه و با فعال شدن یا سنسور یک تایمر شروع به شمارش کنه و بعد از مثلا پنج ثانیه پرس برمیگرده به حالت اول . با این اوصاف ما باید برنامه رو طوری طراحی کنیم که برنامه ما در هر وضعیتی که بود بره وتایمر رو فعال کنه . حالا تو اگه باشی برای این قسمت از برنامه چه کار میکنی
1- میام و سنسور رو وصل می کنم به یکی از پایه های میکرو بعد برنامه رو به از همون دستوری بود که ورودی برای میکرو تعریف میکردیم یعنی این دسترو:
DEBOUNCE PINB.0 , 1 , STAR
بعد میکرو میپره میره توی زیر برنامه STAR و کاری رو که گفتی یعنی تایمر رو فعال میکنه
2- بخش سخت افزاری رو خوب اومدی ولی این دستور DEBOUNCE که گفتی کاملا توی این قسمت اشتباه بود می دونی چرا
1- نه چرا ؟؟؟؟
2- مگه ما نگفتیم که این میکروکنترلر قراره بهش کیبرد ماتریسی – سنسور دما و چنتا چیز دیگه وصل بشه . خوب با این اوصاف میکرو یکسره در حال خوندن این کیبرد و اندازه گیری دما هستش کی وقت میکنه بیاد دستور DEBOUNCE رو بخونه البته نه اینکه دستور DEBOUNCE رو نخونه منظورم اینه که ممکنه که موقعی که سنسور فعال شد میکرو در حال خوندن یک قسمت دیگه از برنامه باشه . پس ما باید یک ترتیبی بدیم که برنامه میکرو در هر قسمتی از برنامه که باشه بره اون کاری رو که ما ازش خاستیم رو انجام بده و این کار رو با استفاده از INT0 انجام میده . حالا بزار چند تا مثال میزنم می فهمی که چی به چیه
CONFIG INT0 = X
گفتیم که برای استفاده از بعض امکانات میکرو نیاز به پیکره بندی ان داریم که ما با نوشتن دستور بالا این کار رو انجام دادیم . و به میکرو فهماندیم که می خاهیم از امکان INT0 ان استفاده کنیم بعد از علامت مساوی نوشتیم X که به جای X باید یکی از گزینه های زیر رو بنویسی :
RISING : برای اشکار کردن لبه بالا رونده از RISING استفاده می کنیم .
FALLING : برای اشکار کردن لبه پایین رونده از FALLING استفاده میکنیم.
LOW LEVEL : برای اشکار کردن سطح صفر از LOW LEVEL استفاده می کنیم.
1- والا ما که نمیدونیم این لبه بالا رونده – لبه پایین رونده و سطح صفر چی هستش؟؟
2- الان میگم برات میگم . به این شکل موج توجه کن ( برای دیدن شکل روی لینک زیرکلیک کنید)
http://www.4shared.com/file/21102873/ca6...ISING.html

این یک پالس می تونه توسط یک شسی یا یک سنسور یا هر چیز دیگه ایجاد شده باشه . حالا اون قسمتی از شکل موج رو که قرمز هستش رو میگن سطح صفر یا LOW LELEL اون قسمت ابی رنگ رو بهش میگن لبه بالا رونده یا RISING اون قسمت سیاه رنگ رو بهش میگن سطح یک یا HIGH LEVEL و اون قسمتی که سبز رنگ هستش رو هم می گن لبه پایین رونده یا FALLING
1- فهمیدم ادامه بده . راستی کاربردهای دیگه ای هم داره
2- اره یکی از این کاربرد ها در دیمر دیجیتال هستش که برای اینکه ما بفهمیم شکل موج AC از صفر عبور کرده یا نه از INT استفاده می کنیم .
1- این پایه int0 کدوم یکی از پایه های میکرو هستش ؟
2- در هر میکرو فرق میکنه کافیه به دیتاشیت یا همون برگه مشخصاتش مراجعه کنی
یک مثال ساده برات می زنم بعد میریم سر مثال های دیگه .
در برنامه زیر به ازای هر بار که شسی رو فشار بدی خروجی TOGGLE میشه :

کد:
Config int0 = rising
Config portb = output
Enable Interrupts
Enable Int0
On Int0 eca
Reset portb
Do
Loop
End
eca:
Toggle Portb
Return

خوب حالا بریم سر تحلیل برنامه :
در خط اول ما با دستور Config int0 = rising پیکره بندی int0 رو انجام دادیم یعنی به میکرو گفتیم که ما می خاهیم از int0 استفاده کنیم. راستی ما بعد از علامت مساوی نوشتیم rising و به معنی این هستش که ما می خاهیم پایه int0 نسبت به لبه بالا رونده حساس باشه
در خط دوم با دستور config portb = output ما پورت b رو به عنوان خروجی تعریف کردیم .
در خط سوم با دستور enabe interrupts وقفه سراسری رو فعال کردیم . راستی اینو یادم رفت که بگم هر وقت که خاستی از int0 استفاده کنی باید این وقفه سراسری رو فعال کنی .
در خط چهارم با دستور enable int0 ما int0 رو فعال کردیم . در ضمن اگر خاستی که در هر جای برنامه int0 رو غیر فعال کنی می تونی به جای enable از disble استفاده کنی
در خط پنجم نوشتیم On Int0 eca این دستور این مطلب رو می رسونه که اگر پایه int0 با یک لبه بالا رونده تحریک شد میکرو بپره بره توی زیر برنامه eca
خط ششم نوشتیم reset portb به این معنی که پورت b رو صفر کن
خط هفتم و هشتم هم به ترتیب do-loop هستش که یک حلقه بینهایت هستش ما این حلقه رو برای این گذاشتیم که میکرو اول برنامه که همه دستورات پیکره بندی رو خوند و رسید به این حلقه بیوفته توی این حلقه و تا زمانی که وقفه int0 نخورد توی این حلقه گرفتار باشه حالا وقفه کی می خوره الان بهت می گم وقفه زمانی می خوره که پایه int0 توسط یک لبه بالا رونده تحریک بشه.
خط نهم نوشتیم end که خودت می دونی چی هستش در ضمن برنامه ما هیچ وقت به end نمی رسه.
خط دهم نوشتیم ahmad: که یک زیر برنامه هستش که توی تحلیل دوم می گم که چرا نوشتمش .
خط یازدهم نوشتیم toggle portb به این معنی که حالت پورت b رو در هر وضعیتی که هست ( منظورم صفر یا یک ) معکوسش کن یعنی اگر یک بوده حالا صفرش کن و اگر صفر بوده حالا یکش کن .
خط دوازدهم نوشتیم return به این معنی که برگرد برو سر جای اولت یعنی دوباره برو توی حلقه .


خوب حالا بریم سر تحلیل دوم: میکروکنترلر میاد برنامه رو از خط اول شروع میکنه به خوندن
خط اول نوشتیم config int0 = rising در اینجا میکرو میفهمه که ما int0 رو پیکره بندی کردیم .
در ادامه میاد خط دوم رو میخونه یعنی config portb = output در اینجا ما پورت b رو به عنوان خروجی تعریف کردیم که به این پورت b میتونی هر چیزی وصل کنی مثلا LED .
در خط سوم نوشتیم enable interrupts و با این کار به میکرو فرمان فعال کردن وقفه سراسری رو دادیم . راستی اینو بگم که هر وقت از int0 خاستی استفاده کنی این وقفه سراسری رو هم با همین دستوری که نوشتم یعنی enable interrupts فعال کن .
خط چهارم نوشتیم enable int0 میکرو با خوندن این دستور int0 رو برای ما فعال میکنه بعد میره به خط پنجم.
خط پنجم ما نوشتیم on int0 eca میکرو با خوندن این دستور می فهمه که هر وقت که به پایه int0 یک پالس با لبه بالا رونده خورد باید بپره بره توی زیر برنامه eca و دستورات داخل این زیر برنامه رو اجرا کنه .
1- یک سوال میکرو از کجا میفهمه که وقتی که پالس با لبه بالا رونده به پایه int0 خورد باید بره توی زیر برنامه چرا بالبه پایین رونده نره توی زیر برنامه
2- از اونجایی که ما در اول برنامه براش با دستور config int0 = rising مشخص کردیم که باید به لبه بالا رونده حساس باشه و میکروهم تابع دستوری هستش که ما بهش میدیم در مورد این که چرا با لبه پایین رونده این کار رو نکنه باید بگم که کافیه به جای rising بدیم falling اون وقته که به لبه پایین رونده حساس میشه . خوب حال بریم سر ادامه تحلیل برنامه
خط ششم ما نوشتیم reset portb به این معنی که کل پورت b رو صفر کن . میکرو این خط رو میخونه و میره سراغ خط بعدی
خط هفتم و هشتم ما یک حلقه بینهایت یعنی do –loop نوشتم که بدبختی میکرو اینجا شروع میشه میکرو با رسیدن به این دستورات میوفته توی یک حلقه بینهایت و اگه قسمت باشه تا ابد اونجا گرفتار میشه . مگر اینکه یک پالس فداکار بیاد و نجاتش بده .
1- منظورت رو نفهمیدم تا کی توی این حلقه do – loop هستش
2- تا زمانی که ما به پایه int0 یک پالس با لبه بالا رونده بدیم . به محض اینکه ما این عمل رو انجام بدیم میکرو میفهمه که وقفه خورد و باید بره توی اون زیر برنامه eca که ما از قبل تعیین کرده بودیم. حالا بیا فرض رو بر این بگیریم که ما یک پالس با لبه بالا رونده به پایه int0 دادیم و میکرو هم رفت توی زیر برنامه eca . پس تحلیل برنامه رو از زیر برنامه eca که در خط دهم هستش پی می گیریم .
در خط دهم ما زیر برنامه eca رو داریم که میکرو الان پریده توی این زیر برنامه و می خاد دستورات داخل این زیربرنامه رو انجام بده :
اولین دستور داخل این زیربرنامه هستش toggle portb میکرو با خوندن این دستور پورت b رو toggle میکنه . چون در اول برنامه ما با دستور reset portb پورت b رو صفر کرده بودیم حالا که میکرو دستور toggle portb رو انجم میده پورت b میشه یک یا به عبارتی عکس حالت قبل . در اینجا اگه که یک led رو به یک از پایه های پورت b وصل کرده باشی می بینی که led روشن میشه.
دومین یا به عبارتی اخرین دستور داخل این زیربرنامه هستش return میکرو با خوندن این دستور بر می گرده توی حلقه do –loop و مثل دفعه قبل توی این حلقه اونقدر میمونه تا دوباره یک پالس با لبه بالا رونده به پایه int0 بخوره تا دوباره بره توی زیربرنامه eca و دوباره دستورات داخل این زیر برنامه رو اجرا کنه اگه این میره دوباره portb رو toggle کنه پورت b این دفعه صفر میشه به عبارتی عکس حالت قبل. یعنی اگه شما یک led به یکی از پایه های پورت b وصل کرده باشی led خاموش میشه.
اینم عکس سخت افزار مداری

http://www.4shared.com/file/21102971/e36a084c/no1.html
خوب حاضری بریم سر مثال بعدی
1- اره ولی بزار این دفعه من یک مدار بگم تو برنامه شو بنویس
2- فکر خوبیه بگو
1- من یک مداری میخام به این صورت کار کنه . وقتی که تغذیه میکروکنترلر رو وصل میکنیم یک led روشن خاموش بشه به عبارت دیگر چشمک بزنه و یک led دیگه هم توی مدار باشه که در حالت اول خاموش باشه . یک میکروسوییچ هم توی مدارمون باشه که باید وصل بشه به پایه int0 این میکروسوییچ رو هر بار که میزنیم led دوم toggle بشه یعنی برای بار اول که میکروسوییچ رو زدیم led روشن بشه و برای بار بعدی که زدیم led خاموش بشه و این سیکل ادامه داشته باشه .
2- خوب من توی این مداری که گفتی led اولی که قرار یکسره چشمک بزنه رو وصل میکنم به پایه b.0 و led دومی که قراره به ازای هر بار که ما میکروسوییچ رو میزنیم toggle بشه رو وصل کردم به پایه b.1 میکروسوییچ رو هم که قراره به پایه int0 وصل بشه رو هم وصل کردم به پایه int.0
حالا بریم سر برنامه :

کد:
Config Int0 = Rising
Config Portb = Output
Enable Interrupts
Enable Int0
On Int0 led
Do
Toggle Portb.0
Waitms 100
Loop
End
Led:
Toggle Portb.1
Return


تحلیل اول برنامه :
خط اول config int0 = rising با این دستور پایه int0 رو برای پالس با لبه بالارونده پیکره بندی کردیم
خط دوم config portb = output در این دستور ما پورت b رو به عنوان خروجی پیکره بندی کردیم
خط سوم enable interrupts در این دستور ما وقفه سراسری رو فعال کردیم که در هر جا که خاسته باشیم از int0 استفاده کنیم باید این وقفه سراسری رو هم فعال کنیم
خط چهارم enable int0 در این دستور ما int0 رو فعال کردیم
خط پنجم on int0 led این دستور به این معنی هستش که هر وقت وقفه int0 خورد بپر برو توی زیر برنامه led . در ضمن وقفه int0 موقعی می خوره که ما یک پالس با لبه بالارونده به پایه int0 بدیم.
خط ششم do این دستور اول یک حلقه بی نهایت هستش
خط هفتم Toggle Portb.0 این دستور پایه b.0 رو toggle میکنه
خط هشتم Waitms 100 این دستور یک تاخیر 100 میلی ثانیه ای در اجرای برنامه ایجاد میکنه
خط نهم loop انتهای حلقه بینهایت رو مشخص میکنه
خط دهم end به معنی انتهای برنامه هستش که میکرو هیچ وقت این دستور رو نمی تونه بخونه
خط یازدهم led: ما در اینجا یک زیر برنامه با اسم led مشخص کردیم که درون این زیر برنامه دو دستور وجود داره که در خط دوازدهم و سیزدهم هستش
خط دوازدهم toggle portb.1 اولین دستور داخل زیربرنامه هستش و همونطور که از اسمش پیداست پایه b.1 رو toggle میکنه
خط سیزدهم return دومین و اخرین دستور داخل زیربرنامه هستش میکرو با خوندن این دستور برمیگرده توی حلقه بینهایت.

تحلیل دوم :
ببین نمی خوام زیاد کشش بدم برای همین خیلی خلاصه می گم.
میکرو میاد از اول برنامه شروع میکنه به خوندن خط اول تا پنجم رو می خونه و به این نتیجه می رسه که ما یک از int0 می خاهیم استفاده کنیم و در ضمن می خواهیم از پورت b به عنوان خروجی استفاده کنیم .
در خط ششم یعنی do که اول حلقه هستش میوفته توی حلقه و اولین دستور داخل این حلقه رو که هست toggle portb.0 رو اجرا میکنه یعنی وضعیت پایه b.0 رو عکس حالت قبلش میکنه از اونجایی که حالت قبل یا حالت فعلی هستش صفر این دفعه میاد پایه b.0 رو یک میکنه و شما محلاحضه میکنی که اون led ی که به این پایه وصل هستش روشن میشه .
بعد میره خط هفتم رو می خونه waitms 100 این دستور 100 میلی ثانیه توی اجرای برنامه تاخیر ایجاد میکنه توی این 100 میلی ثانیه تاخیر پایه b.0 در همون حالت یک بودن هستش . البته اینو بگم که در عمل از 100 میلی ثانیه بیشتر طول میکشه . بعد میره خط هشتم رو می خونه
خط هشتم هستش loop این دستور اخر حلقه رو مشخص کرده میکرو به محض اینکه این دستور رو می خونه می فهمه که باید بره از خط ششم دوباره شروع به خوندن کنه یعنی از دستور do این دستور رو می خونه و دوباره میوفته توی این حلقه و دستورات داخل این حلقه رو انجام میده و دوباره portb.0 رو toggle می کنه و سپس 100 میلی ثانیه تاخیر ایجاد می کنه و می رسه به loop و با خوندن این دستور loop همانند قبل دوباره می ره به خط ششم یعنی do و این سیکل همینطور ادامه داره . این قسمت از برنامه که داخل حلقه هستش مربوط به قسمت چشمک زن هست اگه توجه کنی portb.0 یکسره داره toggle میشه البته با تاخیر 100 میلی ثانیه ای و با این کارش اون led که به پایهb.0 وصل هستش رو روشن خاموش می کنه .
1- سوال دارم . این تاخیر 100 میلی ثانیه ای رو برای چی گذاشتی ؟
2- برای اینکه سرعت toggle شدن رو کم کنه یا به عبارت دیگه سرعت چشمک زدن led رو کم کنه
تا ما بتونیم اونو ببینیم .
1- یعنی ما میتونیم با کم و زیاد کردنش سرعت چشمک زدن led رو کنترل کنیم ؟
2- اره مثلا میتونی به جای waitms 100 بنویسی waitms 50 اینطوری سرعت چشمک زدن led زیاد میشه یا اکر عددش رو زیادتر کنی مثلا 200 یا 300 میتونی سرعت چشمک زدن led رو کم کنی . حالا بریم سر ادامه تحلیل برنامه
خب اونجایی بودیم که برنامه ما توی حلقه بی نهایت do-loop گیر کرده بود و با این کارش یک led رو برای ما روشن خاموش میکرد . حالا با فرض کنیم ما میکروسوییچ رو فشار دادیم و با این کارمون یک پالس با لبه بالا رونده ایجاد کرده ایم که در این حالت وقفه int0 میخوره و میکرو میپره میره توی اون زیربرنامه ای که ما براش مشخص کردیم یعنی زیر برنامه led و دستورات داخل این زیربرنامه رو اجرا میکنه . حاالا بیا فرض کنیم که این اتفاق هم افتاده و میکرو میخاد بره توی زیربرنامهled
اولین دستور داخل زیر برنامه led هستش toggle porb.1 میکرو با خوندن این دستور پایه b.1 رو toggle میکنه یعنی عکس وضعیت فعلی و از انجایی که در وضعیت فعلی پایه b.1 صفر بوده این دفعه توسط دستور toggle portb.1 یک میشه و میبینی که اون led که به این پایه وصل شده روشن میشه . سپس میکرو میره خط بعدی رو اجرا میکنه یعنی دستور return و با خوندن این دستور اونو اجرا میکنه و برمیگرده داخل همون حلقه do –loop و دوباره شروع میکنه به انجام دادن دستورات داخل همون حلقه do –loop . اگه دوباره میکروسوییچ رو فشار بدی میکرو باز وقفش میخوره و میاد توی زیر برنامه led و دوباره پایه b.1 رو toggle میکنه و چون در وضعیت فعلی پایه b.1 یک هستش این دفعه با با دستور toggle portb.1 این پایه صفر میشه و میبینی که اون led که به این پایه وصل هستش خاموش می شه.
اینم شکل سخت افزاری مدار:
http://www.4shared.com/file/21103003/f548a34d/no2.html
2-حالا اگه سوالی هستش بپرس
1- سوالم اینه که ایا ما توی این مدار با فشاردادن میکروسوییچ یک لبه بالا رونده ایجاد میکردیم یا نه؟
2- اره ببین ما تا وقتی که کاری به میکروسوییچ نداشته باشیم وضعییت در حالت سطح صفر هستش . به محض اینکه میکرو سوییچ رو فشار دادیم یک لبه بالا رونده اینجاد میشه . و اگر همچنان دستموم رو روی میکرو سوییچ نگه داریم وضعیت در حالت سطح یک قرار داره . به محض اینکه ما دستمون رو از روی میکرو سوییچ برداریم یک لبه پایین رونده ایجاد میشه که و دوباره به سطح منطقی صفر بر میگرده .
2- خوب حالا که سوالات تموم شد بزار یک چیز رو دوباره یاداوری کنم و اون اینکه از int0 در مواقعی استفاده میشه که ما خاسته باشیم هر وقت که پایه int0 تحریک شد میکرو درهر وضعیتی که باشه بره و اون کاری رو که ما ازش خاستیم رو انجام بده که توی این دوتا مثالی که برات زدم کاملا مشخص هستش. یعنی میکرو اب دستشه بزاره و بره اون کاری رو که ما میگیم انجام بده .
فعلا خدانگهدار

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

جلسه یازدهم


1- سلام خوبی
2- سلام ممنون
1- خوب امروز می خای چه مبحثی رو شروع کنی
2- امروز می خام در مورد کانتر یا همون شمارنده بگم
1- حالا این کانتر چکار می کنه؟
2- کانتر پالس ها رو میشماره مثلا شما می خای یک پاسی رو که از یک جا تولید شده رو بشماری از کانتر استفاده می کنی کانتر یعنی شمارنده .
1- کاربردش چیه؟
2- اولین کاربردی که به ذهن من میرسه فرکانس متر هستش . به این صورت که ما مقدار پالس هایی که در مدت زمان یک ثانیه تولید میشه رو اندازه گیری می کنیم بعد روی LCD نمایش می دیم
1- پس می تونیم مثلا از این کانتر در خط تولید یک کارخانه هم استفاده کنیم که تولیدات یک خط تولید رو بشماره
2- اره میشه ولی وقتی که با دستور INCR می تونی این کار رو بکنی چرا با کانتر این کار رو انجام بدی
1- راست میگی یا . گفتی که یکی از کاربرداش فرکانس متر هستش میشه یکم بیشتر توضیح بدی
2- تعریف فرکانس تعداد پالس هایی که در مدت زمان یک ثانیه تولید میشه هستش . یعنی اگه ما بتونیم تعداد پالس هایی روکه در مدت زمان یک ثانیه تولید میشه رو اندازه گیری کنیم میشه گفت که فرکانس متر درست کردیم . به طور کلی برای این کار میایم کانتر و تایمر رو همزمان با هم راه اندازی می کنیم تایمر رو روی یک ثانیه می زاریم که هر یک ثانیه بره و مقدار کانتر رو بخونه و روی LCD نمایش بده به این صورت که ما پالس ها رو به پایه کانتر می دیم این پالس ها در مدت زمان یک ثانیه توسط کانتر شمرده می شه . بعد از یک ثانیه تایمر و کانتر STOP میشن و مقدار کانتر در مدت زمان یک ثانیه روی ال سی دی نمایش می دیم .
من اینجا نحوه کار با کانتر یک رو برات می گم :
پالس هایی رو که ما می خاهیم توسط کانتر یک بشماریم رو باید به پایه T1 بدیم .
یک نکته مهم این که کانتر یک با 65535 تا پر میشه و با 65536 تا سرریز میشه یا به عبارتی صفر میشه . به زبان ساده تر اگه ما به پایه T1 که مربوط به کانتر یک هستش 65535 تا پالس بدیم کانتر پر میشه و اگه 65536 تا پالس بدیم کانتر سرریز میشه و دوباره از صفر شروع میشه.
2- خوب حالا بریم سر دستورات و پیکره بندی کانتر ( counterSad ما در اینجا از تایمر یک به عنوان کانتر استفاده کرده ایم
Config Timer1 = Counter , Edge = Rising
Config Timer1 = Counter : ما در این جا به میکرو دستور دادیم که می خواهیم از تایمر یک به عنوان کانتر استفاده کنیم
, Edge = Rising : ما در این جا به میکرو دستور دادیم که می خواهیم لبه بالا رونده رو بشماریم . اگه خواسته باشیم که لبه پایین رونده رو بشماریم به جای RISING می نویسم FALLING

ENABLE INTERUPTS : این دستور رو هر بار که از تایمر کانتر میکرو استفاده می کنی باید بنویسی با این کار وقفه ها رو فعال می کنیم
ENABLE COUNTER1 : با این دستور کانتر یک رو فعال کردیم که همیشه باید بنویسیش .
ON COUNTER1 SHOW : با این دستور به میکرو دستور می دیم که هر وقت که وقفه کانتر 1 خورد برو توی زیربرنامه SHOW یا به عبارت دیگه با این دستور به میکرو دستور می دیم که هر وقت کانتر سرریز شد ( با همان مقدار 65536 تا ) برو توی زیر برنامه SHOW
COUNTER1= X : با این دستور می تونیم به کانتر یک مقدار بدیم و یعنی به جای X عدد بزاریم مثلا COUNTER = 65530 با این کار ما کانتر یک رو با مقدار 65530 تا پر کردیم و کانتر از این مقدار شروع به شمردن می کند یعنی اگه یک پالس به پایه T1 بدم مقدار کانتر میشه 65531 اگه 6 تا پالس به پایه T1 بدیم کانتر سرریز می کنه و صفر میشه .
STOP TIMER1 : با این دستور می تونیم عملیات شمردن کانتر رو متوقف کنیم . توجه کن که اگه با این دستور عملیات شمردن کانتر رو متوقف کنیم مقدار کانتر صفر نمی شه بلکه روی همون مقداری که تا الان شمرده استپ می شه .
START TIMER1 : این دستور عکس STOP TIMER1 هستش یعنی هر جا که ما عملیات شمارش رو توسط دستورSTOP TIMER1 متوقف کرده باشیم با دستور START TIMER1 می تونیم شمردن رو اغاز کنیم .

بزار یک مثال بزنم که بهتر بفهمی :
برنامه زیر به ازای هر پالسی که به پایه T1 میکروکنترلر می خوره یک متغییر رو یک واحد اضافه می کنه

کد:
Config Timer1 = Counter , Edge = Rising
Enable Interrupts
Enable Counter1
On Counter1 Show
Counter1 = 65535
Dim A As WORD
Do
Loop
End
SHOW:
Counter1 = 65535
Incr A
Cls : Lcd A
Return


حالا تحلیل برنامه :
در خط اول ما تایمر یک رو در مد کانتر پیکره بندی کردیم یعنی به میکرو گفتیم که از تایمر یک می خواهیم به عنوان کانتر (شمارنده) استفاده کنیم و در ادامه همین خط نوشتیم Edge = Rising که با این دستور به میکرو فهموندیم که لبه بالا رونده رو می خایم بشماریم اگه ما به جای RISING می نوشتیم FALLING میکرو فقط لبه پایین رونده پالس رو میشمرد .
خط دوم Enable Interrupts : که با این دستور وقفه سراسری رو فعال می کنیم این دستور رو هر وقت که از کانتر یا تایمر استفاده می کنی باید بزاری .
خط سوم Enable Counter1 : با این دستور کانتریک رو فعال می کنیم این دستور رو هم هر وقت که از کانتر استفاده می کنی باید بنویسی.
خط چهارم On Counter1 Show2 : با این دستور به میکرو دستور می دیم که هر وقت کانتر سرریز شد ( با همان مقدار 65536 تا ) بپر برو توی زیر برنامه SHOW ( SHOW اسم زیربرنامه است که هر اسم دلخواه دیگر می تواند باشد مثلا AHMAD ).
خط پنجم Counter1 = 65535 : به کانتریک مقدار 65535 دادیم یعنی کانتر از ادامه این عدد شروع به شمردن می کند به جای این عدد هر عدد دخواه دیگر هم می توانیم بدهیم.
خط ششم Dim A As WORD: ما با این دستور یک متغییر به اسم A و از نوع WORD تعریف کردیم که در ادامه می گم که چه کاری رو انجام میده.
خط هفتم DO : با نوشتن این دستور ابتدای حلقه رو مشخص کردیم.
خط هشتم LOOP : با این دستور انتهای حلقه رو مشخص کردیم.
خط نهم END : این دستور یعنی انتهای برنامه که برنامه هیچ وقت به این دستور نمی رسه .
خط دهم SHOW : در اینجا یک زیر برنامه به اسم SHOW تعریف کردیم که داخل این زیر برنامه دستورات زیر نوشته شده :
خط یازدهم Counter1 = 65535 : اولین دستور داخل زیربرنامه SHOW است که در این جا به کانتریک مقدار 65535 دادیم یعنی کانتر از ادامه این عدد شروع به شمردن می کند به جای این عدد هر عدد دخواه دیگر هم می توانیم بدهیم.
خط دوازدهم INCR A : دومین دستور داخل زیر برنامه SHOW است که وقتی میکرو این خط رو می خونه مقدار متغییر A رو یک واحد اضافه میکنه.
خط سیزدهم Cls : Lcd A : سومین دستور داخل زیربرنامه SHOW است که با این دستور میکرو مقدار متغییر A رو روی LCD نمایش می ده .
خط چهاردهم RETURN : چهارمین دستور داخل زیربرنامه SHOW است که با این دستور میکرو بر می گرده اول برنامه .

تحلیل دوم :
برنامه از ابتدا توسط میکرو خونده میشه :
خط اول ما اومدیم تایمر یک رو در مد کانتر استفاده کردیم
خط دوم Enable Interrupts : ما در این جا وقفه سراسری رو فعال کردیم توجه کن که هر وقت از تایمر یا کانتر استفاده می کنی این دستور رو حتما بنویسی تا وقفه سراسری فعال بشه.
خط سوم Enable Counter1 : با این دستور میکرو کانتر یک رو فعال می کنه و میره سر خط بعدی
خط چهارم On Counter1 Show : میکرو این دستور رو می خونه ولی فعلا تا زمانی این دستور رو اجرا نمی کنه یعنی به زیر برنامه SHOW پرش نمی کنه تا زمانی که وقتش برسه
1- وقتش چه وقت می رسه
2- هر وقت که کانتر یک با مقدار 65536 تا سرریز کنه بدون درنگ این دستور توسط میکرو خونده و میپره توی زیر برنامه SHOW
خط پنجم Counter1 = 65535 : با این دستور میکرو میکرو کانتر یک رو تا مقدار 65535 تا پر می کنه . این دستور مثل این هستش که ما 65535 تا پالس به پایه T1 میکرو داده باشیم و کانتر هم به اندازه همین مقدار پر شده باشه.
خط ششم DIM A AS WORD : میکرو وقتی که به این خط از برنامه می رسه می فهمه که ما یک متغییر از نوع WORD به اسم A انتخاب کرده ایم و میره خط بعدی رو می خونه .
توی خط هفتم و هشتم ما یک حلقه DO - LOOP گذاشتیم میکرو به محض این که این دستور رو میخونه میوفته توی این حلقه و از این حلقه بیرون نمیاد . خوب حالا رسیدیم به قسمت جذاب ماجرا. توی این گیروداری که میکروی بیچاره افتاده توی حلقه ما تنها کمکی که به این میکروی بیچاره میتونیم بکنیم اینه که یک پالس ناقابل بدیم به پایه T1 میکرو .
1- خوب چه اتفاقی میوفته
2- اها یادت میاد که ما مقدار کانتر رو تا 65535 تا پر کردیم و بهتم گفتم که مقدار کانتر اگه به 65536 تا برسه کانتر سرریز میشه و از اونجایی هم که ما توسط دستور On Counter1 Show به میکرو دستور دادیم که اگه سرریز کردی بپر برو و توی زیر برنامه SHOW
1- خوب اره چه ربطی داره ؟
2- ربطش به اینه که ما با دادن یک پالس به پایه T1 یک واحد به مقدار کانتر یک اضافه کردیم یعنی 65535 + 1 = 65536 فهمیدی حالا
1- اها حالا فهمیدم
2- پس بزار بقیه ماجرا رو بگم. بعد ازا ین که ما با دادن یک پالس به پایه T1 مقدار کانتر رو به 65536 رسوندیم طبیعتا کانتر سرریز میشه و چون قبلا بهش دستور داده بودیم که اگه کانتر سرریز شد بپر توی زیر برنامه SHOW میکرو هم بدون استخاره میپره میره توی زیر برنامه SHOW و دستوراتی رو که ما داخل زیربرنامه SHOW نوشتیم رو اجرا میکنه . حالا فرض رو بر این میزاریم که ما یک پالس به پایه T1 دادیم و میکرو سرریز شده و پریده توی زیربرنام SHOW و بحث رو از اونجا دوباره پی میگیرم.
بعد از این که میکرو پرید توی زیربرنامه SHOW میاد دستورات داخل این زیربرنامه رو اجرا میکنه به ترتیب زیر :
اولین دستور داخل زیربرنامه SHOW هست Counter1 = 65535 : چون که کانتر یک قبلا سرریز شده و مقدارش صفر شده ما باید دوباره بیایم مقدار کانتر یک رو برگردونیم به حالت قبل یعنی 65535 .
دومین دستور داخل زیربرنامه SHOW هست INCR A یعنی یک واحد به مقدار متغییر A اضافه کن .
سومین دستور داخل زیر برنامه SHOW هست CLS:LCD A به این معنی که مقدار متغیر A رو روی LCD نمایش بده
چهارمین یا به عبارت دیگه اخرین دستور داخل زیربرنامه SHOW هست REUTURN که با این دستور میکرو دوباره میره توی زیر برنامه SHOW و دوباره منتظر یک پالس دیگه میمونه تا دوباره سرریز بشه و دوباره بپره بره توی زیربرنامه SHOW و دستورات زیربرنامه SHOW رو دوباره اجرا کنه.
1- یک سوال اگه ما خواستیم که کانتر به جای این که به ازای هر یک پالس بپره توی زیربرنامه SHOW بیاد و به ازای هر دوتا پالس این عمل رو انجام بده باید چه کار کنیم ؟
2- برای این کار ما باید یک کاری انجام بدیم که مقدار کانتر به ازای هر دوتا پالس سرریز بشه یعنی بعد از این که دوتا پالس به پایه T1 خورد سرریز بشه . پس باید به جای Counter1 = 65535 بنویسیم Counter1 = 65534 یعنی ما مقدار کانتر رو با 65534 تا پر کردیم و برای سرریز شدن کانتر تا 65536 به دو تا پالس نیاز داریم . اینطوری پالس اولی که به پایه T1 بخوره مقدار کانتر یک واحد افزایش پیدا می کنه و از 65534 میرسه به 65535 و هیچ اتفاق خاصی نمیوفته ولی با دادن پالس دومی مقدار کانتر یک واحد دیگه افزایش پیدا می کنه یعنی از 65535 میرسه به 65536 و اینجاست که کانتر سر ریز میکنه و میپره توی زیربرنامه SHOW
1- یک سوال دیگه از کجا بفهمیم که پایه T1 میکرو کجاست ؟
2- از روی دیتاشیت یا برگه مشخصات میکرو یک کار دیگه هم می تونی انجام بدی و اون این که بری توی سایت http://www.atmel.com و اونجا می تونی برگه مشخصات اون نوع میکرویی که باهاش کار می کنی رو دانلود کنی.
1- بازم سوال چرا توی از دستور Counter1 = 65535 دوبار توی برنامه استفاده کردی
2- ببین وقتی که ما تغذیه میکرو رو وصل می کنیم میکروکنترلر یک بار برنامه رو از اول شروع میکنه به خوندن و برای اولین بار دستور Counter1 = 65535 رو که ما در خط پنجم نوشتیم رو می خونه و با این دستور کانتر رو با مقدار 65535 تا پر می کنه و بعدش می یوفته توی حلقه DO-LOOP بعدش اونقدر توی این حلقه می مونه تا ما یک پالس به پایه T1 بدیم تا این که سرریز بشه و بره توی زیر برنامه SHOW . حالا بیا فرض رو بر این بزاریم که ما دستور Counter1 = 65535 رو در خط یازدهم ننوشته باشیم . خوب اگه ما این دستور رو درخط یازدهم ننویسیم میکرو میاد و تمام دستورات داخل زیربرنامه رو انجام می ده و با دستور RETURN که ما در اخر برنامه نوشته بودیم برمی گرده میره تو حلقه DO-LOOP و از اونجایی که کانتر یک بار سرریز شده یعنی مقدارش صفر شده دیگه با پالس بعدی نمیره توی زیر برنامه چون الان مقدار کانتر صفر هستش و ما باید 65536 تا پالس به پایه T1 بدیم تا بره توی زیر برنامه . حالا ما برای جلوگیری از این کار اومدیم دوبار دستور Counter1 = 65535 رو نوشتیم تا هر بار که دستورات زیر برنامه رو انجام داد مقدار کانتر رو برگردونه به 65535 و دوباره اماده یک پالس بعدی باشه .
پایان

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

سلام چطوری
سلام ممنون تو چطوری
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
برای امروزدیگه بسه باشه بقیش برای یک فرصت دیگه فعلا بای

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

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

1- سلام خوبی
2- سلام خوبم تو خوبی
1- اره خوبم . چکار می کنی کم پیدایی
2- اره یک چند وقتیه دارم پروژه دانشگاه رو انجام می دم
1- چی هست این پروژت
2- هیچی ساخت یک دور سنج موتور با میکروکنترلرAVR
1- چی میکروکنترلرavr ؟؟؟؟ میکرو کنترلر دیگه چیه
2- میکروکنترلر رو اگه بخام به زبون ساده بهت بگم یک کنترل کننده هستش که تقریبا هر چی ازش بخای برایت انجام میده
1- پس بگو یک رباته
2- نه منظورم هر کاری نبود ببین مثل یک کامپیوتر که بهش فرمان میدی اون هم انجام میده البته از نظر ظاهری که نگاهش کنی یک ایسی 40 پایه هستش
1- چی؟؟؟؟؟ مگه میشه یک کامپیوتر به اندازه یک ایسی چهل پایه باشه
2- نه خود کامپیوتر منظورم از کامپیوتر اینه که بهش فرمان می دی اونم انجام میده
1- بازم نفهمیدم بیشتر توضیح بده اصلا به چه دردی میخوره
2- بزار بیشتر برات توضیح بدم این یک ایسی هستش که ما به وسیله کامپیوتر برنامه نویسی می کنیم بعد برنامه رو می ریزیم توی میکرو . کاربردش هم خیلی زیاده مثلا باهاش می تونی ساعت . فرکانس متر. قفل رمز درست کنی
1- یکم بیشتر درباه خود میکرو توضیح بده
2- این میکرویی که بهت میگم یک خانواده هستش که انواع مختلفی داره که تشکیل شده از سه گروه 1-tiny 2-90s 3-mega
1- خوب فرق این سه گروه باهم چیه مثلا tiny با 90s یا با mega چه فرقی دارن
2- فرفشون توی امکاناتی که دارن هستش و همین فرق باعث شده که قیمت هاشونم باهم فرق کنه
1- منظورت از امکاناتشون چیه
2- ببین بزار بیشتر برات درباره خود میکرو توضیح بدم . از امکاناتی که این میکرو ها دارن میشه به تایمر – کانتر- تولید موج pwm – حافظه ای که اطلاعات رو توی خودش حفظ کنه – سرعت بالای انجام دستورات- I\O (یا همون ورودی خروجی خدمون) – مبدل انالوگ به دیجیتال adc – مقایسه کننده انالوگ و... . حالا که با امکاناتش اشنا شدی همینو بهت بگم که بعضی از میکرو ها توی امکاناتشون و توی مقدار حافضه با هم فرق دارن برای همین قیمتهاشونم باهم فرق میکنه
1- خوب حالا کدوم از همه امکاناتش بیشتره
2- نوع mega از همه امکاناتش بیشتر و از نظر مقدار حافضه هم از همه حافضه اش بیشتره بعد نوع 90s و در نهایت نوع tiny
1- این همه امکانات همه توی یک ایسی پس حتما باید یک صد هزار تومنی قیمتش باشه
2- نه اگه بهت بگم که بهترین نوع این میکرو که نوع mega هستش رو توی خود بازار ایران با سه هزار تومن می تونی بخری باورت نمی شه
1- چی فط سه هزار تومن اون هم بهترین نوعش اخه چطور ممکنه این همه امکانات فقط سه هزارتومن اون هم بهترین نوعش!!!!!!!!!!!!!!!!!!!!!!
2- خوب دیگه تکنولوژیه دیگه
1- راستی گفتی یکی از امکاناتش حافضه هستش بگو ببینم اصلا این حافضه به چه دردی می خوره؟؟
2- یادت میاد که بهت گفته بودم که باید به این میکرو فرمان بدیم
1- اره
2- خوب این فرمان ها رو ما با یک نرم افزار مینویسیم
1- خوب چه ربطی داره به سوال من
2- یکم صبر داشته باش . این برنامه ای که مانوشتیم توی این حالفضه قرار می گیره
1- بیشتر توضیح بده
2- حافضه میکرو avr دو تا هستش یکی حافضه بلند مدت که بهش می گن eeprom و دومی هستش حافضه کوتاه مدت که بهش می گن flash
1- خوب فرقشون باهم چیه
2- فرقشون در اینه که در حافظه کوتاه مدت با قطع تغذیه (ولتاژ) میکرو اطلاعات از بین می ره ولی در حافضه بلند مدت با قطع شدن تغذیه میکرو اطلاعات از بین نمیره
1- اها فهمیدم . خوب یادم میاد بهم گفتی که هر کاری ازش بخایم برامون انجام میده چطوری باید بهش بگیم که فلان کار رو انجام بده ؟
2- خوب بزار به صورت کلی بهت بگم که گیج نشی . ما برای کارهایی که از این میکرو می خایم باید بهش برنامه بدیم این برنامه توسط نرم افزار نوشته می شه
1- چه نرم افزاری؟
2- نرم افزارای مختلفی هستش که باهاش برای میکرو برنامه می نویسن برنامه هایی رو که من می شناسم bascom –codvision و ... هستش که من با bascom کار می کنم. خوب حالا بزار ادامه مطلب رو بگم . برنامه ای رو که ما می نویسیم زبان های مختلفی داره
1- منظورت انگلیسی یا فارسی هستش
2- نه بابا منظورم زبان های برنامه نویسی هستش که عبارتند از baisic-c –اسمبلی
1- یعنی باید همه ای زبان های برنامه نویسی رو بلد باشیم
2- نه بابا ناراحت نباش من خودم وقتی که می خاستم میکروکنترلر یاد بگیرم هیچ کدوم از این زبان ها رو یاد نداشتم . چقدر سوال می کنی منو از موضوع پرت کردی . هر کدوم از این زبان ها در یک نرم افزار خاص خودش نوشته می شه مثلا اگه دوست داشتی برنامه رو با زبان بیسیک بنویسی باید با نرم افزار baisic کار کنی اگه خاستی با زبان c برنامه بنویسی باید با نرم افزار codvision برنامه بنویسی . خوب حالا وقتی که برنامه رو نوشتی باید برنامه رو بریزی توی میکرو . حتما می خای بپرسی چطوری برنامه رو میریزن توی میکرو خوب بهت می گم با یک پروگرامر
1- چی پروگرامر دیگه چیه؟
2- نترس پروگرامر وسیله ای هستش که میکرو رو روی اون قرار میدی ویک سر دیگش وصل می شه به پرینتر کامپیوتر بعد که به کامپیوتر نصب شد از طریق نرم افزار فرمان ارسال برنامه به داخل میکرو رو میدی مثلا در نرم افزار بیسکام که بعدا مفصلا بهت توضیح میدم با زدن کلید F4 برنامه ریخته می شه داخل میکرو
1- ببین من نفهمیدم نقش این پروگرامر این وسط چیه
2- پروگرامر واسطه ای هست میان میکرو و کامپیوتر . خوب اخه مرد حسابی برنامه ای که تو برای میکرو نوشتی باید بره توی میکرو یا نه . پس از روی هوا هم که نمی شه برنامه رو فرستاد پس میان یک پروگرامر وصل می کنند به کامپیوتر و میکرو رو روی این پروگرامر قرار میدن بعد از توی کامپیوتر فرمان ارسال برنامه رو می دن
1- ببین درست فهمیدم یا نه پروگرامر تنها نقشی که داره اینه که برنامه ای که ما توی کامپیوتر نوشیتم رو بریزه توی میکروکنترلر
2- افرین
1- بازم سوال دارم
2- بگو
1- این امکاناتی رو که گفتی میکرو داره چطوری می تونیم ازش استفاده کنیم
2- این کار رو موقع برنامه نویسی بهش می گیم . مثلا می خایم از کانتر میکرو ( کانتر به معنی شمارنده ) استفاده کنیم . باید در اول برنامه بنویسیم که از کانتر می خا هیم استفاده کنیم . به این کار در اصتلاح می گویند config . البته بعدا درباره برناه نویسیش – نحوه کار با نرم افزار – اتصال سخت افزاری میکرو برای کامل توضیح می دم
1- یک مثال می تونی بزنی که کاربرد این میکرو و امکاناتش چیه؟؟؟
2- اره ولی قول بده که نترسی که برنامه شو بنویسم چون که بعدا درباره کل دستورات برنامه نویسی و نحوه کار با نرم افزار برات توضیح می دم
1- باشه
2- خوب گفتی یک مثال بزن منم یم مثال خیلی ساده میزنم . فرض کن که با دو تا میکروسوییچ می خایم یک led رو روشن خاموش کنیم . برای این کار اول باید برنامه توسط نرم افزار نوشته بشه که من در اینجا از زبان بیسیک برای نوشتن برنامه استفاده میکنم :

کد:
$regfile = "8515DEF.DAT"
$crystal = 8000000  
Config Porta = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Debounce = 25
Do
Debounce Pinb.0 , 1 , Sett , Sub
Debounce Pinb.0 , 1 , Resett , Sub
Loop
End

Sett:
Set Porta.0
Return
Resett:
Reset Porta.0
Return


1- خوب درباره اینا توضیح بده
2- صبر داشته باش اسیاب به نوبت گفتم که بعدا درباره تک تک دستورات و نحوه کار با نرم افزار برات توضیح می دم
1- قول می دی
2- قول می دم که تک تک دستورات رو با مثال زباد برات توضیح بدم
1- خوب حالا من چکار کنم
2- فعلا برو نرم افزار بیسکام (bascom) رو نصب کن تا بعد
1- باشه پس فعلا تا بعد

منبع: iranled.com

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