راه اندازی موس با avr در بسکام
در ابتدای هرچیز این نکات را یاد اوری میکنم میکروی مورد استفاده ما هر میکرویی میتونه باشه چرا که از امکانات خاص میکرو مثل اینتراپت ویا … استفاده نمیکنیم فقط پورتهای ورودی و خروجی پس میتونه مگا8 باشه یا مگا16 ویا… که در این پروژه از مگا32 استفاده شده است.
ویدیوی راه اندازی موس با avr در بسکام
در شروع کار بهتره توضیحاتی در مورد راه اندازی موس با avr ونحوه ارسال دیتا رو بررسی کنیم:
پروتکل ارتباطی بین میکرو دو لاین دارد یکی کلاک ودیگری دیتا هست که برای میکرو وماوس هردو لاین میتواند هم ورودی وهم خروجی باشد .
وقتی با لاینی کارمان تمام شد باید ان را با یک مقاومت پول آپ کنیم یعنی وقتی لاین ازاد هست باید سطح منطقی یک داشته باشد برای این کار میکرو را از داخل پول آپ میکنیم در ضمن آزاد نگه داشتن لاین به معنی این هست که میکرو تعیین وضعیت این پایه را در اختیار ای سی ماوس قرار میده وخود میکرو ورودی تعیین میشه تا اطلاعات روی لاین رو بخونه
این اساس کار ارتباط دو سیمه هست که نمیخوام روی این موضوع زیاد تمرکز کنم چراکه هر دیوایسی یک اصولی برای نظم داده خود دارد به همین خاطر هست که وقتی یک دیوایسی رو به کامپیوتر وصل میکنیم درایور آن راهم باید نصب کنیم یا به صورت خودکار نصب میشه پس پروتکل دو سیمه یا همان پروتکل یو اس بی یکی هست ولی نحوه ارسال داده متفاوت هست در برنامه اخر این آموزش زیر برنامه های ارسال داده و دریافت داده به ماوس قرار دادم پس بریم ببینیم چطور وچه نوع دیتایی بفرستیم و در ضمن چه نوع دیتایی را بگیریم ویا به عبارتی داده دریافتی شامل چه اطلاعاتی هست.
موس در چند مد مختلف کار میکنه که هرکدام کاربرد خاصی داره بهترین مد کاری که باید برای ماوس تعیین کنیم مد ریموت هست که در این مد ماوس منتظر دریافت اطلاعات از میکرو هست در مدهای دیگه ماوس خودش در بازه های زمانی خاصی دیتا میفرسته ولی ما سرعت کمی داریم در میکرو پسقدرت دریافت اطلاعات ازمیکرو رو در مدهای دیگه نداره در مد ریموت ما 2 مود داریم:
Standard 3d mode(1
standard 2d mode(2
در مد2 ما 3 بایت اطلاعات دریافت میکنیم که 2بایت مربوط به سرعت حرکت موس در جهت X و Y ویک بایت هم مربوط /گبه وضعیت کلیدها که آیا کلیدها فشار داده شده یا نه و همچنین جهت حرکت ماوس که مثبت هست یا نه.
در مد1 علاوه بر اطلاعات قبلی یک بایت نیز مربوط به حرکت چرخ وسط ماوس میباشد
برای راه اندازی اولیه ماوس باید ماوس را ریست کنیم برای این کار FF هگز را به ماوس میفرستیم که در پاسخ سه بایت ماوس میفرسته که اهمیتی نداره سپس ماوس به صورت معمول در مد 2 کار میکنه پس همین ریست برای تنظیمات کافیه البته در این پروژه من. شما میتونید خیلی از تنظیمات دیگری مثل دقت ماوس و مد های مختلف کاری رو در ماوس داشته باشید .
پس بریم به دریافت اطلاعات از ماوس البته پس از ریست برای دریافت اطلاعات ماوس (همون سه بایت مشهورمون)کدBE سه بایت طبق جدول صفحه بعد دریافت میشه که باید خوب دقت بدید که در واقع تو برنامه روی این جدول مانور میدیم:
البته این موضوع رو هم متذکر بشم که دقت ماوس به طور پیشفرض به ازای هر میلیمتر 4واحد افزایش پیدا میکنه که اگه 1 باشه دقت میرهخ بالا اگه 8 باشه سرعت میاد پایین . ماوس سرعت خودکار نیز داد اما در مد استریم کار میکنه ندر مد ریموت پس در مد ریموت باید خودمون دقت رو تنظیم کنیم برای تنظیم ابتدا کد7E را میفرستیم سپس یک بایت دریافت میکنیم وسپس طبق جدول بایت دوم رو میفرستیم و سپس یک بایت در یافت میکنیم که بی ارزش هست:
برنامه راه اندازی ماوس با میکرو در بسکام
'| | COMPUTER MOUSE DRIVER BY AVR | | $regfile = "M32def.dat" $crystal = 8000000 Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = _ Porta.0 , E = Porta.4 , Rs = Porta.5 Cls Cursor Off Locate 1 , 2 : Lcd "MOUSE POSITION" Locate 2 , 5 : Lcd "READER" Wait 2 Cls '******************************************************************************* '****************************** **************** '****************************** DIM AND ALIAS AND CONFIG GLCD **************** '****************************** **************** '******************************************************************************* Dim Conter As Byte '--------------------------- READ AND SAVE MOUSE SPEED TO EEPROM Dim Status As Byte Dim Indata As Byte Dim Sdata As Byte Dim Parity As Bit '-------------------- DATA PORT AND PIN Dat Alias Portb.1 Datin Alias Pinb.1 '-------------------- CLOCK PORT AND PIN Clk Alias Portb.2 Clkin Alias Pinb.2 '-------------------- MOUSE DATA DDR (FOR PULLUP THE DATA LINE) Ds Alias Ddrb.1 '-------------------- MOUSE CLOCK DDR (FOR PULLUP THE CLOCK LINE) Cs Alias Ddrb.2 '--------------------- FOR READ MOUSE KEYS '--------------------- STATUS.0 AND .1 AND .2 IS POINTER TO MOUSE KEY POSITION Left_key Alias Status.0 Right_key Alias Status.1 Middle_key Alias Status.2 '-------------------------- SAVE X AND Y OF MOUSE CURSOR POSITION Dim Mous_data_x As Byte Dim Mous_data_y As Byte Deflcdchar 2 , 32 , 4 , 14 , 31 , 14 , 4 , 32 , 32 ' vasat Dim X As Byte Dim Y As Byte Dim X1 As Byte Dim Y1 As Byte Dim T As Byte '******************************************************************************* '************************************* **************************** '************************************* MAIN PROGRAM **************************** '************************************* **************************** '******************************************************************************* Wait 3 Cls Locate 1 , 1 : Lcd "x= " Locate 2 , 1 : Lcd "y= " Do Gosub Read_mouse If Left_key = 1 Then T = 0 Locate 1 , 11 : Lcd "<" End If If Right_key = 1 Then T = 0 Locate 1 , 13 : Lcd ">" End If If Middle_key = 1 Then T = 0 Locate 1 , 12 : Lcd Chr(2) End If If T = 9 Then Locate 1 , 11 : Lcd " " T = 0 End If Print "x=" Print X Print "y=" Print Y Locate 1 , 3 : Lcd X Locate 2 , 3 : Lcd Y Waitms 70 T = T + 1 Locate 1 , 3 : Lcd " " Locate 2 , 1 : Lcd "y= " '-------------------------- Loop '******************************************************************************* '****************************** **************** '****************************** READ MOUSE DATA **************** '****************************** **************** '******************************************************************************* '------------------- READ MOUSE DATA AND CALCULTION MOUSE CURSOL STATUS Read_mouse: '------------------------------------ CONNECTION TO MOUSE AND READ MOUSE DATA Gosub Read_mouse_data '------------------------------------ CALCULATION Y OF CURSOR POSITION '------ IMPORT THE MOUSE SPEED IN CALCULATION If Status.5 = 1 And Mous_data_y <> 0 Then Mous_data_y = 256 - Mous_data_y End If If Status.5 = 0 Then Y = Y + Mous_data_y Else If Y > Mous_data_y Then Y = Y - Mous_data_y 'Else 'Y = 0 End If End If If Y > 250 Then Y = 250 '------------------------------------ CALCULATION X OF CURSOR POSITION If Status.4 = 1 And Mous_data_x <> 0 Then Mous_data_x = 256 - Mous_data_x End If If Status.4 = 0 Then X = X + Mous_data_x Else If X > Mous_data_x Then X = X - Mous_data_x 'Else ' X = 0 End If End If If X > 250 Then X = 250 Return '******************************************************************************* '***************** ************* '***************** READ MOSE DATA 3 BYTE STATUSE AND X AND Y ************* '***************** ************* '******************************************************************************* '---------------------- MICRO CONTROLER REQUEST DATA FROM MOUSE '---------------------- BY SEND (EB HEX) AND RECIEVE X AND Y AND '---------------------- STATUS BYTE FROM MOUSE 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 '******************************************************************************* '**************************** ***************** '**************************** READ ON BYTE DATA FROM MOUSE ***************** '**************************** ***************** '******************************************************************************* '------------- RECIEVE 1 BYTE DATA FROM MOUSE Read_byte: '--------------------- DATA AND CLOCK IS HIGH '--------------------- SO MOUSE SEND DATA OUT Ds = 0 Dat = 1 Cs = 0 Clk = 1 Waitus 150 '------------------------- START BIT Bitwait Clkin , Reset Conter = 0 Waitus 5 Bitwait Clkin , Set '------------------------- END START BIT '------------------------- WHILE LOOP START While Conter < 9 Bitwait Clkin , Reset Indata.conter = Datin Incr Conter Bitwait Clkin , Set Wend '------------------------- WHILE LOOP END Clk = 0 Cs = 1 Return '******************************************************************************* '**************************** ***************** '**************************** SEND ON BYTE DATA TO MOUSE ***************** '**************************** ***************** '******************************************************************************* '-------------- SEND 1 BYTE DATA TO MOUSE Send_byte: Ds = 0 Dat = 1 Cs = 0 Clk = 1 Waitus 200 '------------------ MICRO CONTROL LINE AND SEND CLOCK PALS Clk = 0 Cs = 1 Waitus 150 '------------------SEND START BIT Dat = 0 Ds = 1 Waitus 100 '----------------- Cs = 0 Clk = 1 Waitus 40 '----------------- END OF START BIT Bitwait Clkin , Reset Conter = 0 Parity = 1 While Conter < 9 '----------------------- SEND PARITY BIT If Conter = 8 Then If Parity = 1 Then Ds = 0 Dat = 1 End If If Parity = 0 Then Ds = 1 Dat = 0 End If Else '----------------------- SEND DATA BIT If Sdata.conter = 1 Then Ds = 0 Dat = 1 Else Ds = 1 Dat = 0 End If End If Bitwait Clkin , Set Bitwait Clkin , Reset If Sdata.conter = 1 Then Toggle Parity Incr Conter Wend '-------------- RELEASE LINES BY MICRO Ds = 0 Dat = 1 Waitus 50 '-------------- STOP BIT READ BY MOSE Bitwait Datin , Reset Bitwait Clkin , Reset '-------------- START ACK (SEND BY MOUSE) While Datin = 0 And Clk = 0 '-------------- ACK END Wend Clk = 0 Cs = 1 Return '******************************************************************************* '************************** ************ '************************** RESET MOUSE AND CONFIG TO REMOTE MODE ************ '************************** ************ '******************************************************************************* '------------------- RESTART MOUSE BY SEND (FF HEX) '------------------- AND PULL MOUSE TO REMOTE MODE '------------------- BY SEND (F0 HEX) TO 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 '_______________________________________________________________________________
کد کامل نیست برای دیدن کامل کد پروژه رو دانلود کنید.
دانلود پروژه راه اندازی موس با avrدر بسکام
توضیحات بیشتر در مورد برنامه ی راه اندازی موس با avrدر ادامه همراه فایل های پروژه برای دانلود قرار داده شده است.