:: در صورت نبودن و یا اشکال لینک دانلود کتاب ها، لطفا در نظرات همان مطلب اطلاع دهید

تا در اسرع وقت رسیدگی و یا راهنمایی شود ::

آموزش میکروکنترلر پیک (4)(شمارنده با کلید)

on . در مجموعه برق و الکترونیک

 

با استفاده از مثال امروز می خواهیم کار کردن با کلید را فرا بگیریم. می خواهیم برنامه ای بنویسیم که شمارنده باینری باشد (مانند جلسه قبل) با این تفاوت که با کلیدی که به یکی از پین های پورت B    وصل شده است می خواهیم عمل ریست کردن را انجام دهیم. یعنی هر بار که کلید را فشار دادیم، شمارش باینری از صفر شروع شود.

ابتدا بایستی با دستور پر کاربرد BUTTON    آشنا شویم. در واقع این دستور تماس لرزان ناشی از فشردن دکمه(   (debouncing    را حذف می کند. هنگامی که کلید را فشار می دهیم، پلاتین های آن به صورت ناگهانی قطع و وصل نمی شوند بلکه قبل از این که وضعیت کلید به حالت پایدار برسد، قطع و وصل کلید چندین بار به صورت جست و خیز در مدت کوتاهی ادامه می یابد. به علت سرعت بالای میکروکنترلر ها این جست و خیزهای سریع نیز خوانده می شوند و امکان دارد در روند برنامه اختلال ایجاد کند. برای رفع این مشکل از دستور BUTTON    استفاده می کنیم.

 

 این دستور تنها با 8 پایه ی تشکیل دهنده پورت B    عمل می کند. شکل کلی دستور BUTTON    به صورت زیر می باشد:

BUTTON Pin, State, Delay, Rate, Var, Action, Lable

 

که در آن:

 Pin شماره پایه متصل به کلید (یکی از پایه های پورت B   

State   وضعیت پایه به هنگام فشار دادن دکمه است (صفر یا یک)

Delay تعداد شمارش سیکل پیش از آن که debouncing    شروع شود.(صفر تا 255) اگر صفر نوشته شود هیچ debouncing    و تکرار خودکار اجرا نخواهد شد و اگر 255 نوشته شود، debouncing    انجام خواهد شد ولی تکرار خودکار انجام نخواهد شد.

Rate نرخ تکرار خودکار می باشد. در حقیقت مدت فشرده نگه داشتن کلید را تعیین می کند. ( صفر تا 255)

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

Action   وضعیت دکمه برای اجرای پرش می باشد ( اگر دکمه فشار داده نشده باشد صفر و اگر فشار داده شده باشد 1 )

Lable   محلی از برنامه که در صورت درست بودن Action   ، عملیات باید از آن جا ادامه پیدا کند.

شماتیک دو مدل دکمه را که می توان با دستور Button    استفاده کرد، در ذیل آورده شده است.

button

 

با استفاده از شماتیک سمت راست، وقتی کلید فشرده می شود، ولتاژ 5 ولت که معادل 1 می باشد به پایه ی ورودی اعمال می شود و در شماتیک سمت چپ با فشرده شدن کلید، صفر به پایه ی ورودی اعمال می شود.

برنامه زیر یک شمارنده باینری است که با استفاده از کلیدی که به پورت B.7    وصل شده، می توان این شمارش را ریست کرد. به دستورات Button    توجه کنید.

TRISB=%1000000

B0 VAR BYTE : B1 VAR BYTE

LOOP1:

B1=0

FOR B0=0 TO 127

PORTB=B0

PAUSE 250

BUTTON 7,1,245,0,B1,1,LOOP2

NEXT B0

GOTO LOOP1

LOOP2:

PORTB=0

BUTTON 7,0,245,0,B1,1,LOOP1

GOTO LOOP2

END

توجه داشته باشید که چون از 7 پایه ی پورت B    برای شمارش استفاده کردیم، شمارنده می تواند تا 127 بشمارد.   (2^7=128)  

شماتیک مدار به صورت زیر می باشد:

scheme3

 

مادامی که کلید فشرده شده باشد، خروجی روی پورت B    صفر خواهد بود. دستور Button    اول که درون حلقه ی loop1   قرار دارد در واقع می گوید وقتی کلید porttb.7   فشار داده شد (1 شد) برنامه به حلقه loop2    پرش کند. و دستور Button    دوم می گوید وقتی کلید مورد نظر رها شد (صفر شد) برنامه به حلقه ی loop1    پرش کند.

در خط دوم از نکته ی زیر استفاده شده است.

نکته) برای نوشتن چند فرمان در یک خط می توانیم از علامت : بین دو دستور استفاده کنیم. به عنوان مثال(   (B1=0 : B2=0   .

آموزش میکروکنترلر پیک (3)(شمارنده باینری)

on . در مجموعه برق و الکترونیک

 مثال امروز ما شمارش به صورت باینری می باشد. یعنی می خواهیم میکرو led   ها را به صورت شمارش باینری روشن کند. هدف اصلی از این برنامه آشنایی با دستور for    می باشد که در واقع یک دستور حلقه ای است.

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

 

For index=start to stop (step(-) inc)

 Body

Next index

از این دستور برای افزایش یا کاهش یک متغیر استفاده می شود. در این دستور index   نام متغیر مورد نظر است که می خواهیم در هر گام به آن افزوده شود یا از آن کاسته شود، start   مقدار اولیه متغیر است و step   مقدار افزایش یا کاهش است که هر بار دستور next   اجرا می شود این افزایش یا کاهش در متغیر اعمال می شود و stop   مقدار نهایی می باشد که هر وقت index=stop   شد، حلقه for   متوقف شده و دستورات بعدی برنامه اجرا می شوند.

Body   نیز دستورات مورد نظر می باشند که می خواهیم میکرو آن را در حلقهfor   اجرا کند.

نکته) اگر هیچ مقداری برای step   در نظر گرفته نشود، هر بار که برنامه به عبارن next   می رسد، متغیر به مقدار یک واحد افزایش می یابد.

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

TRISB=0

B0 VAR BYTE

LOOP:

FOR B0=0 TO 255

PORTB=B0

PAUSE 250

NEXT B0

GOTO LOOP

END

با دستورات خط اول و دوم که از قبل آشنا هستید. همانطور که ملاحظه می کنید در این برنامه از ساده ترین شکل حلقه   for استفاده شده است. متغیر B0   از صفر تا 255، یک واحد یک واحد می شمارد و در هر شمارش آن را روی پورت B   نمایش می دهد و 250 میلی ثانیه تاخیر ایجاد می کند.

بعد از این که تا 255 را نشان داد با دستور goto loop   دوباره به ابتدای حلقه ی loop   باز می گردد و یک بار دیگر شمارش را از صفر شروع می کند.

این هم مثالی برای کسانی که می خواهند به صورت کاهشی از این دستور استفاده کنند:

 

 

For B2=20 TO 10 step -2

Next

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

scheme3

 

ساعت با قابلیت تنظیم ساعت و دقیقه

on . در مجموعه برق و الکترونیک

ساعت با قابلیت تنظیم ساعت و دقیقه و ثانیه

 اجزاي مدار
 PIC16F876-LCD LM016L
  زبان برنامه نويسي: C
 محتوايات پوشه:
 سورس كد و فايل پروتئوس و  فايل هگز (HEX)
 

عملکرد مدار

با نگه داشتن کلید اول به مدت یک ثانیه می توانید حالت تنظیم ساعت یا دقیقه را انتخاب کنید و با دو کید پایین می توانید آن دو را تنظیم کنید.
 

دانلود

 منبع : www.eca.ir

آموزش میکروکنترلر پیک (2)(led راه رونده)

on . در مجموعه برق و الکترونیک

برنامه بعدی که می خواهیم بنویسیم و اجرا کنیم، led راه رونده است، یعنی led ها پشت سر هم روشن می شوند و با روشن شدن هر led ، led قبلی خاموش شود.

TRISB=0

SYMBOL B=PORTB

B0 VAR BYTE

MAIN:

B0=1

B=B0

PAUSE 100

SUB:

B0=B0*2

B=B0

PAUSE 100

IF B0=%10000000 THEN MAIN

GOTO SUB

END

خط اول: مشخص می کند که تمام پایه های پورت B به عنوان خروجی استفاده می شود.

 

خط دوم: از دستور symbol استفاده شده، با استفاده از این دستور می توان مثلا برای پورت B یک کلمه ی دیگر قرار داد کرد. که ما دراینجا از B به جای پورت B استفاده کردیم. یعنی هرجا در برنامه از کلمه B استفاده کردیم ، منظورمان همان PORTB است.

 

برنامه اصلی : برای این که منظورمان را پیاده کنیم می توانیم از راه حل زیر استفاده کنیم: بدین صورت که ابتدا خروجی پورت B، یک شود، سپس 10 شود، و پس از آن 100 و همینطور تا  10000000 ادامه دهیم و دوباره به حالت اول برگردیم. یکی از ساده ترین راه ها برای تحقق این راه حل استفاده از دستور فوق در برنامه است:

 

1

10×1=10

10×10=100

10×100=1000

.

.

عدد 10 اول در مبنای ده همان 2 می باشد که در برنامه استفاده کردیم. بعد از رسیدن به  10000000 باید برنامه به حالتی برگردد که خروجی 1 شود که برای این منظور از یک حلقه استفاده می کنیم.

شماتیک مدار:

1.jpg

 

اکنون مانند قسمت قبل این آموزش(قسمت اول)، فایل hex را ساخته و در میکرو LOAD می کنیم و برای اجرای برنامه روی گزینه run کلیک می کنیم.

در اینجا لازم می دانم چند نکته را هم در پایان این قسمت قرار دهم.

 

نکته 1) به جای استفاده از دستور PORTB=B0 می توانیم از دستور POKE PORTB,B0 استفاده کنیم.

 

نکته 2) برای تعریف یک متغیر جدید از دستور VAR استفاده می کنیم. اگر بعد از آن BYTE استفاده کنیم، متغیرمان یک بایتی در نظر گرفته می شود. بهتر است از B0,B1,…,B51 برای متغیر بایتی استفاده کنیم. و برای متغیرهای دوبایتی از W0,W1,…,W52 استفاده کنیم. W0 از B0,B1 تشکیل شده است.

 

نکته3) یک بایت از 0 تا 255 می تواند بشمارد.(یعنی 2 به توان 8)

 

نکته 4) یک کلمه از دو بایت تشکیل شده است.

 

آموزش میکروکنترلر پیک (1)(چشمک زن ساده)

on . در مجموعه برق و الکترونیک

از امروز قصد دارم آموزش کار با میکروکنترلر PIC را به صورت مثال شروع کنم. برای این منظور از مثال های بسیار ساده شروع می کنیم و کم کم سطح پروژه ها را بالا می بریم. همچنین برای کم کردن هزینه و ... ، فعلا به صورت عملی کار نمی کنیم و فقط آن ها را شبیه سازی می کنیم.

ابتدا لازم است نرم افزارهای مورد نیاز را برای تمرین فراهم کنید که لیست آن ها به قرار زیر می باشد:

 

1- Micro Code Studio (برای نوشتن برنامه ها و کامپایل کردن – من خودم از ورژن 2.1 استفاده می کنم)

2- نرم افزار شبیه ساز proteus (بهترین نرم افزار برای شبیه ساز میکروها می باشد – هم اکنون آخرین ورژن آن 7.4 می باشد)

بعد از نصب این دو نرم افزار کار را شروع می کنیم.

همانطور که گفتم این آموزش بر اساس مثال می باشد تا خستگی کمتری به دنبال داشته باشد.

مثال 1) می خواهیم یک LED با فاصله زمانی 1 ثانیه چشمک بزند.

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

می خواهیم این مثال را روی میکروی 16F84A اجرا کنیم. این میکرو دارای دو پورت A و B (پورت A چهار پایه و پورت B 8 پایه دارد) به عنوان پایه های خروجی یا ورودی است. منظور از خروجی این است که داده از پردازشگر میکرو به پایه های آن ارسال می شود و منظور از ورودی این است که داده از محیط خارج از میکرو و توسط این پایه ها به پردازشگر میکرو می رسد.

 

 

حال برنامه Micro Code Studio را اجرا می کنیم و شروع می کنیم به نوشتن برنامه چراغ چشمکزن.

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

TRISB=%00000000

این دستور تمام 8 پایه پورت B را به عنوان خروجی تعریف می کند. علامت % نشان دهنده باینری بودن این عدد می باشد.

برنامه Micro Code Studio پورت ها را به این صورت می شناسد: مثلا برای پورت B0، portb.0

حالا باید به میکرو بگوییم پورت b0 را یک کند، یعنی روشن کند:

portb.0=1

 

سپس می خواهیم این پورت 1 ثانیه روشن بماند:( عدد جلوی دستور PAUSE تاخیر بر حسب میلی ثانیه می باشد)

pause 1000

پورت b.0 خاموش شود:

portb.0=0

دوباره یک ثانیه تاخیر و بعد دوباره به دستور portb.0=1 برگردد، پس کل برنامه به صورت زیر شد:

TRISB=%00000000

MAIN:

portb.0=1

pause 1000

portb.0=0

pause 1000

goto main

end

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

حال از منوی کشویی بالای برنامه Micro Code Studio میکروی 16F84A را انتخاب می کنیم. سپس روی دکمه save کلیک می کنیم و در انتها روی گزینه compile only کلیک می کنیم. حال در جایی که save کردیم می بینیم که یک فایل با پسوند hex وجود دارد. از این فایل برای شبیه سازی در پروتئوس استفاده می کنیم.

برنامه پروتئوس را باز کرده و شماتیک را مثل زیر می بندیم:

1.jpg

نکته) در تنظیمات میکرو فرکانس را روی 4 مگاهرتز (برابر با کریستال خارجی) انتخاب می کنیم. در همین پنجره یعنی تنظیمات میکرو آدرس فایل hex را وارد می کنیم و روی ok کلیک می کنیم.

منظور از VDD همان ولتاژ 5 ولتی منبع تغذیه می باشد.

سپس روی دکمه Run کلیک کرده و نتیجه را مشاهده کنید.

 

آخرین کتاب ها