• ¡Welcome to Square Theme!
  • This news are in header template.
  • Please ignore this message.
مهمان عزیز خوش‌آمدید. ورود عضــویت


امتیاز موضوع:
  • 17 رای - 2.12 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Title: آموزش کامل بسکام به همراه مثال
حالت خطی
#11
نقل قول: فصل چهارم : راه اندازي امکانات جانبي
Shiftin :
با اين دستور ميتوان تعداد بيت را درون يک متغير شيفت داد ، بيت ها بصورت سريال به يکي از پايه اي ميکرو اعمال ميشوند . اين دستور به فرم کلي زير است :
Shiftin Pin , Pclock , Var , Option [, Bits , Delay ]
Pin : نام پايه اي است که اطلاعات سريال به آن وارد مي شوند .
Pclock : نام پايه اي است که خط کلاک دستگاه ديگر به آن متصل مي شود .
Var: نام متغيري است که اطلاعات در آن ذخيره ميشوند .
Option: نوع شيفت دادن و کلاک را معين ميکند و يکي از اعداد زير است :
1 : هنگامي که فرکانس کلاک کم باشد ابتدا MSB ( بيت باازشتر) شيفت داده مي شود.
2 : هنگامي که فرکانس کلاک زياد باشد ابتدا MSB ( بيت باازشتر) شيفت داده مي شود.
3 : هنگامي که فرکانس کلاک کم باشد ابتدا LSB ( بيت کم ارزش) شيفت داده مي شود.
4 : هنگامي که فرکانس کلاک زياد باشد ابتدا LSB ( بيت کم ارزش) شيفت داده مي شود.
Bits : مشخص کننده تعداد بيت است که وارد متغير مي شود و نهايتا مي تواند 255 باشد (اين گزينه اختياري است)
Delay : تاخير زماني برحسب ميکرو ثانيه مي باشد که در بين دريافت هر بيت رخ مي دهد ( استفاده از اين گزينه اختياري است) (درصورت بالا بودن کلاک از اين گزينه استفاده نکنيد).
مانند:
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config PORTA =input
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 _
, Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Dim A As Word
Shiftin PINA.0 , PINA.1 , A , 0
End
در مثال بالا پايه کلاک پين A.1 و پايه ديتا پايه A.0 ميباشد ، که از ميکرو ديگر که برنامه آن را در دستور بعدي مشاهده مي فرمايد ، گرفته شده است .

Shiftout:
با اين دستور ميتوان يک متغير را بصورت سريال از يک پايه به بيرون داد . اين دستور به فرم کلي زير است:
Shiftout Pin , Pclock , Var , Option [, Bits , Delay ]
Pin : نام پايه اي است که اطلاعات سريال از آن خارج ميشوند.
Pclock : نام پايه اي است که خط کلاک دستگاه ديگر به آن متصل مي شود.(خروجي کلاک است)
Var: نام متغيري است که اطلاعات در آن وجود دارد و بايد ارسال شود.
Option: نوع شيفت دادن و کلاک را معين ميکند و يکي از اعداد زير است:
1 : هنگامي که فرکانس کلاک کم باشد ابتدا MSB ( بيت باازشتر) شيفت داده مي شود.
2 : هنگامي که فرکانس کلاک زياد باشد ابتدا MSB ( بيت باازشتر) شيفت داده مي شود.
3 : هنگامي که فرکانس کلاک کم باشد ابتدا LSB ( بيت کم ارزش) شيفت داده مي شود.
4 : هنگامي که فرکانس کلاک زياد باشد ابتدا LSB ( بيت کم ارزش) شيفت داده مي شود.
Bits : مشخص کننده تعداد بيت از متغير است که به بيرون شيفت داده مي شود و نهايتا مي تواند 255 باشد (اين گزينه اختياري است)
Delay: تاخير زماني برحسب ميکرو ثانيه ميباشد که دربين ارسال هر بيت رخ مي دهد ( استفاده از اين گزينه اختياري است) (درصورت بالا بودن کلاک از اين گزينه استفاده نکنيد).
مانند:
$regfile = "m16def.dat"
$crystal = 1000000
Config PORTA = Output
Dim A As Word
A = &B11001000 '200
Shiftout PINA.0 , PINA.1 , A , 0
End

نکته : در بعضي از کتاب ها از دستورات Shift In/Out ، با نام SPI نرم افزاري ياد شده است که اشتباه است !

Pulseout :
فرم کلي اين دستور به شکل زير است:
Pulseout PORTX , Y , Period
با اين دستور ميتوان يک پالس بر روي پورت PORTX و پايه Y دلخواه با زمان تناوب Period دلخواه بر حسب ميکرو ثانيه ايجاد کرد ( پایه ای که پالس بر روي آن ايجاد مي شود بايد به عنوان خروجي تعريف شود)
در صورتي که از حلقه استفاده نکنيد ، دستور فقط يک با اجرا مي شود ، اين پالس مربعي است ( در واقع و ضعيت پايه از صفر به يک يا بلعکس تغيير مي کند) .
مثال : ( در مسیر Example\4 - Puls موجود است . )
$regfile = "m16def.dat"
$crystal = 1000000
Config PORTC.0 = Output
Do
Pulseout PORTC , 0 , 1000
Pulseout PORTC , 1 , 1000
Loop
و خروجی برنامه فوق در تست پروتئوس :




Pulsein:
توسط اين دستور ميتوان زمان تناوب يک پالس مربعي را اندازه گرفت ، فرم کلي اين دستور به شکل زير است:
Pulsein Var , PINX , Y , State
اين دستورزمان تناوب پالس اعمال شده به پورت PINX و پين Y دلخواه را در متغير Var که بايد از جنس Word باشد قرار مي دهد .
شما ميتوانيد مشخص کنيد که زمان بين از صفر به يک رفتن يا از يک به صفر رفتن پالس اندازه گرفته شود ، براي حالت اول به جاي STATE صفر و براي حالت دوم به جاي STATE يک قرار دهيد .
مثال : ( در مسیر Example\5 - Time Puls موجود است )

$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2 : Cursor Off
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 , _
Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Dim X As Word
Config PORTC.0 = Input
Do
Bitwait PINC.0 , Reset
Pulsein X , PINC , 0 , 1
Locate 1 , 1 : Lcd "1 = " ; X ; " "
Bitwait PINC.0 , Set
Pulsein X , PINC , 0 , 0
Locate 2 , 1 : Lcd "0 = " ; X ; " "
Loop
End
در مثال بالا زمان تناوب پالس مثبت و منفی که به پين C.0 اعمال شده اندازه گرفته مي شود و سپس بر روي LCD نمايش داده مي شود . (زمان تناوب نبايد از 65535 ميلي ثانيه بيشتر باشد ، اين دستور از تايمر هاي ميکرو استفاده نمي کند .)

Sound :
توسط اين دستور ميتوان پالسي را بر روي يکي از پايه هاي ميکرو ظاهر کرد ، فرم کلي دستور به شکل زير است:
Sound PORTX.Y , Duration , Pulses
PORTX.Y نام پايه دلخواهي است که پالس از آن خارج مي شود ، Durationمشخص کننده تعداد پالس هاي خروجي است و Pulses زمان تناوب پالس برحسب ميکرو ثانيه است که حداکثر مقدار آن 65535 است.
مانند:
$regfile = "m16def.dat"
$crystal = 1000000
Config PORTC.0 = Output
Do
Sound PINC.0 , 10 , 60000
Loop
End
در مثال بالا پالس از پين c.0 خارج مي شود ، زمان تناوب آن 60 ميلي ثانيه است و 10 بار تکرار مي شود . از اين دستور معمولا براي راه اندازيBUZZER استفاده مي شود.

استفاده از کليد وکيبرد و کي پد و ...
استفاده از کليد :
براي اتصال کليد به avr در محيط بسکام روش هاي مختلفي وجود دارد که در زير به بيان هر يک ميپردازيم .
نکته ، پيني که کليد به آن متصل مي شود بايد به عنوان ورودي تعريف شود .

استفاده از دستور شرطي If:
با دستور IF قبلا آشنا شديد اکنون يکي از قابليت هاي را بررسي مي کنيم :
کليد ها داراي دو پايه مي باشد که يک پايه آن به يکي از پايه هاي ميکرو و ديگري به VCC يا GND متصل مي شود با استفاده از دستور شرطي If ميتوان فشرده شدن کليد را چک کرد ، هنگامي که کليد فشرده مي شود پايه اي که کليد به آن متصبل است صفر (به گراند متصل مي شود) يا يک (به 5 ولت متصل مي شود) مي شود.
مثال : در اين مثال يک سرکليد به VCC و سر ديگر به پورت C پايه 4 متصل شده است
If Portc.4 = 1 Then
Set Porta.0
end IF
در مثال بالا ، اگر کليد فشرده شودPORTC.4 به VCC متصل ميگردد(1مي شود) . شرط به اين قرار است که اگر PORTC.4 يک شد PORTA.0 نيز يک شود در غير اين صورت PORTA.0 صفر بماند .
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Config Portc = Input
Debounce Pinc.0 , 1 , A
If Portc.1 = 1 Then
Lcd "qwer"
End If
End
A:
Lcd "12345"
Return
در برنامه بالا اگر پين C.0 يک شود روي LCD عبارت 12345 نشان داده مي شود و اگر پين C.1 يک شود روي LCD عبارت QWER نشان داده مي شود.

Debounce:
فرم کلي اين دستور به شکل زير است:
Debounce PX.Y , State , Label [,Sub]
توسط اين دستور پينX.Y چک مي شود و هنگامي که مقدار آن برابر با State شد CPU ميکرو به Label پرش ميکند ، گزينه Sub اختياري است ، شما ميتوانيد از اين گزينه براي پرش به يک زير برنامه استفاده کنيد.
به جاي گزينه State ميتوانيد 0 يا 1 قرار دهيد ، در صورتي که State صفر باشد ، هنگامي که پايه مورد نظر از یک به صفر تغییر وضعیت داد ، به برچسب مورد نظر پرش مي شود و هنگامي که State يک باشد هنگامي که پايه به ولتاژ 5 ولت متصل شد پرش صورت مي گيرد (پيني که کليد به آن متصل است بايد به عنوان ورودي تعريف شود) .
این دستور برای دریافت از کلیدها می باشد و مدت زمان 20 میلی ثانیه را به عنوان حداقل زمان فشار دادن کلید برای لرزش گیری در نظر می گیرد )
مانند :
$regfile = "m16def.dat"
$crystal = 12000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2_
, Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Config PORTC = Input

W:
Locate 1 , 1
Lcd "pinc.0 ro 1 kon"
Debounce PINC.0 , 1 , Q
Goto W

Q:
Locate 1 , 1
Lcd "pinc.1 ro 1 kon"
Debounce PINC.1 , 1 , W
Goto Q
پیشنهاد می شود برای تشخیص فشردن کلید از دستور فوق استفاده شود .
هنگامي که کليد فشرده مي شود ، براثر لرزش دست چندين با دو کنتاکت آن به هم برخورد مي کنند و در نهايت ثابت ميشوند اگر از دستور Debounce استفاده نشود لرزش به منزله فشردن کليد است

Encoder :
ENCODER نوعي کليد دوطرفه مي باشند که تصوير آن را در شکل روبرو مشاهده مي کنيد :
از اين قطعه در کيبردها و لوازم صوتي تصويري و ... براي کم و زياد کردن صدا و نور و ... استفاده مي شود.در واقع اين قطعه از دو کليد تشکيل شده است ، هنگامي که شما سري را به سمت راست مي چرخانيد ، کليد سمت راست (که يک پايه آن به پايه وسط و پايه ديگر به پايه سمت راست متصل است) قطع و وصل مي شود ، و هنگامي که سري را به سمت چپ مي چرخانيد کليد سمت چپ ( که يک پايه آن به سر وسط و پايه ديگر به پين سمت چپ متصل است ) قطع و وصل مي شود ، با استفاده از دستور زير ميتوان عمليات مناسب با جهت چرخش ( قطع و وصل شدن هر کليد ) را انجام داد:
Var = Encoder (PIN1 , PIN2 , Leftlabel , Rightlabel , Wait(
Var : يک متغيير از جنس دلخواه ميباشد که به ازاي پالس هاي فرد مقدار آن صفر و به ازاي پالس هاي زوج مقدار آن يک است (مقدار آن حول صفر ويک تغيير مي کند)
PIN1 : نشان دهنده پايه اي است که پين 1 (چپ يا راست ) انکدر به آن متصل مي شود.
PIN2 : نشان دهنده پايه اي است که پين 2 (چپ يا راست ) انکدر به آن متصل مي شود.
Leftlabel : نام برچسبي است که در هنگام به چپ چرخيدن انکودر به آن پرش مي شود . باز گشت از برچسب با دستور Return انجام مي شود.
Rightlabel : نام برچسبي است که در هنگام به راست چرخيدن انکودر به آن پرش مي شود. باز گشت از برچسب با دستور Return انجام مي شود.
Wait : در صورتي که شما به جاي اين کلمه 1 بگذاريد CPU ميکرو بر روي اين دستور متوقف مي شود ، هنگامي که انکدور چرخيد CPU به زير برنامه مي رود و بعد از انجام دستورات موجود در زير برنامه دوباره روي اين دستور متوقف شده و منتظر مي ماند تا پالسي اعمال شود و درصورتي که 0 قرار دهيد CPU مدام در حلقه گردش ميکند و اگر دستور انکودر در حلقه باشد آن را چک مي کند و اگر نباشد که هيچ .
مانند :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2 : Cls
Config Lcdpin = Pin , Db4 = PORTD.0 , Db5 = PORTD.1 , Db6 = PORTD.2 , _
Db7 = PORTD.3 , E = PORTD.4 , Rs = PORTD.5
Config PORTB = Input
Dim C As Word , A As Byte : Lcd C
Do
A = Encoder(PINB.0 , PINB.1 , Q , W , 0)
Home L : Lcd A ; " "
Loop
End

Q:
Decr C
Home : Lcd C ; " "
Return

W:
Incr C
Home : Lcd C ; " "
Return
در مثال بالا پايه مشترک انکدر به گراند و پايه چپ آن به پين B.0 و پايه راست آن به پين B.1 متصل شده است .
[عکس: bnk.png]

برای ورود بر روی تصویر کلیک کنید.
www.avrprj.ir
 
پاسخ
  


پیام‌های این موضوع
RE: آموزش کامل بسکام به همراه مثال - توسط a.mehran - 09-26-2014، 04:20 PM

موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش اصطلاحات میکرو AVR a.mehran 1 5,297 09-26-2014، 04:45 PM
آخرین ارسال: a.mehran
  مدار فاصله سنج اولتراسونیک با بسکام a.mehran 2 4,917 09-02-2014، 07:56 AM
آخرین ارسال: a.mehran
  pwm با بسکام a.mehran 0 2,997 09-01-2014، 10:02 PM
آخرین ارسال: a.mehran
  راه اندازی سون سگمنت با بسکام a.mehran 0 3,078 09-01-2014، 09:56 PM
آخرین ارسال: a.mehran

پرش به انجمن:


Browsing: 3 مهمان