یکی از کارهای بسیار جالب که میشود با avr انجام داد اتصال موس و کیبورد به این میکرو است که در پروژه هایی که نیاز به تایپ و یا حرکت موس در صفحا باشد کاربرد خواهد داشت.علاوه بر این avr را میتوان به عنوان موس و یا کیبرد به کامپیوتر معرفی کرد و از این طریق یک موس ژیروسکوپی و یا موس بیسیم طراحی کرد که نمونه ی آن قبلا در سایت قرار داده شده است.ما قبلا پروژه راه اندازی موس و کیبرد با fpga را در سایت قرار داده بودیم که حاوی اطلاعات بسیار مفیدی است.
نحوه ی عملکرد موس های ps2 :
برای ارتباط بین موس و avr دو سیگنال کلاک و دیتا را باید به میکرو متصل نمود که این دو سیگنال هم به عنوان ورودی و هم خروجی عمل میکنند.موسها معمولا برای تشخیص آزاد بودن لاین یک پروتکل مشترک دارند که در زمانی که لاین پول آپ شد به معنی آزاد بودن خط است(وقتی لاین ازاد هست باید سطح منطقی یک داشته باشد).میکرو های avr به دلیل داشتن حالت پول آپ داخلی میتوانند به راحتی با پول آپ کردن خط کنترل خط را به موس بسپارند و آن پایه را به عنوان ورودی تعریف کنند.در شکلهای زیر چیدمان پایه ها رای اتصال به میکرو مشخص شده است:
5-pin DIN (AT/XT): 1 - Clock 2 - Data 3 - Not Implemented 4 - Ground 5 - Vcc (+5V) |
|
6-pin Mini-DIN (PS/2): |
|
6-pin SDL: |
مد های مختلف راه اندازی موس
موسها معمولا در چند مد کاری مختلف عمل میکند که بهترین مد برای کار با میکرو مد ریموت است که در این مد ماوس منتظر دریافت اطلاعات از میکرو میماند و پس از دریافت دستور از میکور دیتاها را ارسال مینماید اما در مدهای دیگر موس بدون توجه به میکرو دیتا ارسال میکند که میکرو سرعت لازم را برای دریافت اطلاعات را نداشته و به همین دلیل مد ریموت را استفاده میکنیم که در این مد دو حالت دو بعدی و 3 بعدی داریم که ما از حالت دو بعدی استفاده میکنیم:
Standard 3d mode
standard 2d mode
در مد دو بعدی ما 3 بایت اطلاعات دریافت میکنیم که 2بایت مربوط به سرعت حرکت موس در جهت X و Y ویک بایت هم مربوط به وضعیت کلیدها که آیا کلیدها فشار داده شده یا نه و همچنین جهت حرکت ماوس که مثبت هست یا منفی.در مد سه بعدی علاوه بر اطلاعات قبلی یک بایت نیز مربوط به حرکت چرخ وسط ماوس میباشد.
برای راه اندازی اولیه ماوس باید ماوس را ریست کنیم برای این کار FF هگز را به ماوس ارسال مینماییم که در پاسخ سه بایت ماوس دریافت خواهد شد که اهمیتی ندارد سپس ماوس به صورت معمول در مد 2 کار میکند.البته در این پروژه شما میتوانید تنظیمات دیگری مانند دقت ماوس و مد های مختلف کاری را در ماوس اعمال نمایید.بایت های دریافت شده بر اساس جدول زیر دیکد خواهند شد:
شماره بایت دریافتی | بیت اول | بیت دوم | بیت سوم | بیت چهارم | بیت پنجم | بیت ششم | بیت هفتم | بیت هشتم |
بایت اول | کلیک چپ | کیک راست | کلید وسط | همیشه یک است | اگر یک باشد جهت x مثبت | اگر یک باشد جهت y مثبت | پرچم سرریز x | پرچم سرریز y |
بایت دوم | سرعت در جهت x | |||||||
بایت سوم | سرعت در جهت y |
توضیحات خط به خط برنامه:
خواندن دیتاهای موس:
زیر برنامه ی اصلی Read_mouse_data میباشد که هر بار دیتاهای مورد نیاز را از موس میخواند:
Read_mouse_data:
Sdata = &HEB
Gosub Send_byte
Gosub Read_byte
Gosub Read_byte
Status = Indata
Gosub Read_byte
Mous_data_x = Indata
Gosub Read_byte
Mous_data_y = Indata
Return
در این زیر برنامه ابتدا برای دریافت 3 بایت دیتا مقدار EB به موس ارسال میگردد که موس در پاسخ مقدار FA ارسال میکند و پس از آن باید 3 بایت دیتا را دریافت نماییم.موس پس از ارسال موفق دیتاها کانترهای خود را ریست خواهد کرد.
ریست موس:
در زیر برنامه ی مهم بعدی Reset_mouse است که هر چند مورد استفاده قرار نگرفته است ولی گاها مورد نیاز است:
Reset_mouse:
Sdata = &HFF
Gosub Send_byte
'------------------ MOUSE SEND 3 BYTE (FA,AA,00) DATA OFTER RESTARTED
Gosub Read_byte
Gosub Read_byte
Gosub Read_byte
Sdata = &HF0
Gosub Send_byte
'----------------- MOUSE SEND 1 BYTE (FA) DATA ODTER SET REMOTE MODE
Gosub Read_byte
'---------------------------------------
Sdata = &HE8
Gosub Send_byte
Gosub Read_byte
Sdata = &H00
Gosub Send_byte
Gosub Read_byte
Waitms 100
Return
End
در این برنامه ابتدا مقدار FF ارسال میگردد تا موس وارد حالت ریست گردد و در این حالت موس مقدار FA را ارسال خواهد کرد و پس از آن یک بایت که ممکن است AA و با FC باشد را ارسال خواهد کرد که AA به معنی موفقیت و FC به معنی ارور خواهد بود.موس پس از این آیدی خود را که همیشه 00 است ارسال خواهد کرد.میکرو نباید قبل از دریافت آیدی هیچ دیتایی به موس ارسال نماید.حال پس از دریافت بایت سوم میکرو مقدار F0 را به موس ارسال خواهد کرد تا موس ریست شود.پس از آن با ارسال F0 موس را در حالت ریموت قرار میدهیم و موس برای تایید مقدار FA را ارسال خواهد کرد.حال مقدار E8 را برای تعیین رزولیشن ارسال میکنیم که موس در پاسخ مقدار FA را ارسال خواهد کرد و منتظر دریافت یک بایت خواهد ماند که باید بر اساس جدول زیر یکی از رزولیشنهای مورد نظر را ارسال نماییم.پس از این موس مقدار FA را ارسال و وارد حالت ریموت خواهد شد.
رزولیشن | بایت ارسالی |
1 به 1 | 00 |
1به 2 | 01 |
1به 4 | 02 |
1به 8 | 03 |
زیر برنامه های ارسال و دریافت یک بایت از موس:
دو زیر برنامه Read_byte و Send_byte در واقع با وردی قرار دادن و یا خروجی کردن پایه ی دیتا و ایجاد کلاک بر روی پایه کلاک ارسال و دریافت یک بایت را با ارسال بیت به بیت هر بایت در یک حلقه ی While انجام میدهند.
اتصال کیبورد کامپیوتر به میکرو avr
با اتصال کیبورد کامپیوتر خود به میکرو میتوانید تایپ کنید و در lcd ببینید و توسط آن پروژه های مختلفی طراحی کنید. کیبورد کامپیوتر دارای 4 سیم میباشد که 2 عدد مربوط به تغذیه کیبورد و یکی برای دیتا و یکی برای کلاک (پالس همزمانی ) میباشد .البته توجه کنید که کیبرد باید از نوع at باشد و روی کیبردها معمولاً عبارت at چاپ شده است.باید توجه کنید که پایه های کیبرد دقیقا شبیه به موس است و کلاک و دیتا را میتوانید از جدول قبل پیدا کنید. با توجه به جدول فوق پایه های کیبورد را شناسایی کنید و پایه های تغذیه کیبورد را به 5+ و زمین وصل کنید و فقط دو سیم از کیبورد به میکرو وصل میشود یکی برای دیتا و دیگری برای کلاک. سیم دیتای کیبورد به یکی از پایه های دلخواه میکرو و سیم کلاک را حتما به پایه INT0 یا INT1 میکرو مانند شکل زیر وصل کنید:
شرح عملکرد برنامه ی راه اندازی کیبرد کامپیوتر:
- در خط اول معرفی آیسی atmega8 در خط دوم فرکانس کاری میکرو
- خط سوم و چهارم پیکره بندی lcd 2*16 برای پورت B میکرو
- و پیکره بندی کیبورد config keyboard که pind.2 برای کلاک کیبورد (پایه INT0 میکرو atmega8 ) و پایه pind.3 برای دیتای کیبورد پیکره بندی شده .
- زیر برنامه key که جلوی keydata برای کد اسکی حروف کیبورد است که میکرو طبق این برنامه کلیدی را که ما فشار دادیم با توجه به زیر برنامه key کد اسکی حروف را از جدول استخراج کرده و کارکتر مربوطه را آشکار میسازد.
- در خط بعد متغیری به نام A تعریف کردیم که کد اسکی در این متغیر ریخته میشود
- شروع حلقه do loop
- با دستور getatkbd کد اسکی کلیدی که فشار دادیم در متغیر A ریخته شده
- در خط بعد دستور شرطی که اگر A به غیر از 0 بود (برای زمانی که کلیدی فشار داده میشود)
- میکرو به خط بعد رفته و A را در LCD نمایش میدهد (البته کد اسکی کلید فشار داده شده کیبورد <>>>>>> ولی اگر بخواهیم حرف یا عدد مربوط به کلیدی که فشار دادیم در روی lcd نمایش بدهد باید دستور زیر را بجای lcd a بنویسید که این دستور کد اسکی کلید کیبورد را به رشته ای تبدیل میکند .)
- در خط بعد پایان شرط و پایان حلقه و میکرو در این حلقه منتظر میماند تا شما دوباره کلیدی را فشار دهید و میکرو آن را برای شما در lcd نمایش دهد.
- در خط بعد زیر برنامه key که میکرو کد اسکی را از این زیر برنامه میخواند و باید دقیق نوشته شود تا کلید فشرده شده درست نمایش داده شود.
محتویات پوشه ی دانلودی:
- برنامه ی راه اندازی موس (فایل شماتیک با پروتیوس 7.10 و فایل بسکام)
- برنامه راه اندازی کیبورد کامپیوتر(شماتیک و بسکام)
- فایل کتابخانه ps2mouse_emulator.lbx بسکام به صورت جدا(برای اتصال میکرو به عنوان موس و کیبرد به کامپیوتر).
حداقل اشتراک | محتویات | زمان ایجاد | حجم فایل | تعداد دانلودها |
یک ماهه (VIP) | پروتیوس و بسکام | سه شنبه, 18 آبان 1395 14:50 | 1.12 KB | 4 |
تنها کاربران عضو یا دارای مجوز میتوانند دانلود نمایند |
حداقل اشتراک | محتویات | زمان ایجاد | حجم فایل | تعداد دانلودها |
یک ماهه (VIP) | پروتیوس و بسکام | سه شنبه, 18 آبان 1395 22:59 | 48.71 KB | 4 |
تنها کاربران عضو یا دارای مجوز میتوانند دانلود نمایند |