با سلام و خسته نباشید خدمت شما دوستان عزیز:
آق کسی میدونه که این دستورات چی میگن,لازم به ذکر است که این برنامه در کتاب 11 پروژه آقای مهندس سیدمهدی حسینی برای کنترل دو سرو موتور مورد استفاده قرار گرفته ولی من خیلی کم تونستم این برنامه رو تحلیل کنم گه کسی میدونه خواهشا" سعی کنه که خط به خط دستورات رو توضیح بده چون که من باید تغیراتی در برنامه انجام بدم ولی قبل از آن باید بفهمم چی به چیه,(شدیدا" به این برنامه برای پروژه ام نیاز دارم اگه کسی میدونه خواهشا" کمکم کنه خیلی گیرم). :sad::cry: :cry2:
ممنونماز اینکه این مطلب رو خواندید.
کلیات برنامه:
ما پنج تا کلید داریم که دو تا برای جلو و عقب کردن سرو موتور اولی و دو تا برای سرو موتور دومی بکار میرود و اخرین کلید هم برای reset کردن هر دو موتور مورد استفاده قرار میگیرد که باعث میشود هردو موتور در موقعیت اول خود قرار بگیرند.و همچنین از یک LCD برای نشان دادن موقعیت هر یک از سروها استفاده شده است.(برنامه کاملا" درست است و در محیط Proteus تست شده است).
'Servo Motor
'-----------------------
$regfile = "m48def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = _
Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.0
Config Lcd = 16 * 2
Config Portb.1 = Output
Config Portb.2 = Output
Config Portc = Input
'--------------------------
Clkpr = &H80
Clkpr = &H00
'-------------Timer1 As PWM
Tccr1a = &HA2
Tccr1b = &H1A
Tcnt1h = &H00
Tcnt1l = &H00
Icr1h = &H3A
Icr1l = &H98
Ocr1ah = &H05
Ocr1al = &HDC
Ocr1bh = &H05
Ocr1bl = &HDC
'--------------------------
Declare Function Lcd_show_position()as Byte
'--------------------------
Dim Pwm1 As Word
Dim Pwm2 As Word
Dim Pwm_temp As Word
Dim L As Byte
Dim M1 As Byte , M2 As Byte
'--------------------------
Pwm1 = 1500
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1ah = Pwm_temp
Ocr1al = Pwm1
Pwm2 = 1500
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1bh = Pwm_temp
Ocr1bl = Pwm1
'--------------------------
Cursor Off
Cls
Lcd "Start"
Waitms 500
Cls
Lcd "Servo1> Deg"
Lowerline
Lcd "Servo2> Deg"
Waitms 500
L = Lcd_show_position()
'--------------------------
Do
M1 = Pinc And &H03
M2 = Pinc And &H0C
'--------------------------
Select Case M1
Case 2:
If Pwm1 < 2400 Then
Incr Pwm1
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1ah = Pwm_temp
Ocr1al = Pwm1
L = Lcd_show_position()
End If
Case 1:
If Pwm1 > 600 Then
Decr Pwm1
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1ah = Pwm_temp
Ocr1al = Pwm1
L = Lcd_show_position()
End If
End Select
'--------------------------
Select Case M2
Case 8:
If Pwm2 < 2400 Then
Incr Pwm2
Pwm_temp = Pwm2
Shift Pwm_temp , Right , 8
Ocr1bh = Pwm_temp
Ocr1bl = Pwm2
L = Lcd_show_position()
End If
Case 4:
If Pwm2 > 600 Then
Decr Pwm2
Pwm_temp = Pwm2
Shift Pwm_temp , Right , 8
Ocr1bh = Pwm_temp
Ocr1bl = Pwm2
L = Lcd_show_position()
End If
End Select
'---------------------------
If Pinc.4 = 0 Then
Cls
Lcd "Servo1> Deg"
Lowerline
Lcd "Servo2> Deg"
Pwm1 = 1500
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1ah = Pwm_temp
Ocr1al = Pwm1
Pwm2 = 1500
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1bh = Pwm_temp
Ocr1bl = Pwm1
L = Lcd_show_position()
End If
Loop
End
'--------------------------
Function Lcd_show_position() As Byte
Dim P1 As Integer
Dim P2 As Integer
P1 = Pwm1 - 600
P1 = P1 / 10
P2 = Pwm2 - 600
P2 = P2 / 10
Locate 1 , 9
Lcd " "
Locate 1 , 9
Lcd P1
Locate 2 , 9
Lcd " "
Locate 2 , 9
Lcd P2
End Function
آق کسی میدونه که این دستورات چی میگن,لازم به ذکر است که این برنامه در کتاب 11 پروژه آقای مهندس سیدمهدی حسینی برای کنترل دو سرو موتور مورد استفاده قرار گرفته ولی من خیلی کم تونستم این برنامه رو تحلیل کنم گه کسی میدونه خواهشا" سعی کنه که خط به خط دستورات رو توضیح بده چون که من باید تغیراتی در برنامه انجام بدم ولی قبل از آن باید بفهمم چی به چیه,(شدیدا" به این برنامه برای پروژه ام نیاز دارم اگه کسی میدونه خواهشا" کمکم کنه خیلی گیرم). :sad::cry: :cry2:
ممنونماز اینکه این مطلب رو خواندید.
کلیات برنامه:
ما پنج تا کلید داریم که دو تا برای جلو و عقب کردن سرو موتور اولی و دو تا برای سرو موتور دومی بکار میرود و اخرین کلید هم برای reset کردن هر دو موتور مورد استفاده قرار میگیرد که باعث میشود هردو موتور در موقعیت اول خود قرار بگیرند.و همچنین از یک LCD برای نشان دادن موقعیت هر یک از سروها استفاده شده است.(برنامه کاملا" درست است و در محیط Proteus تست شده است).
"دوستان عزیز اون قسمتهایی که پررنگ تر هستند بیشتر نمیفهمم چی به چیه"
'Servo Motor
'-----------------------
$regfile = "m48def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = _
Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.0
Config Lcd = 16 * 2
Config Portb.1 = Output
Config Portb.2 = Output
Config Portc = Input
'--------------------------
Clkpr = &H80
Clkpr = &H00
'-------------Timer1 As PWM
Tccr1a = &HA2
Tccr1b = &H1A
Tcnt1h = &H00
Tcnt1l = &H00
Icr1h = &H3A
Icr1l = &H98
Ocr1ah = &H05
Ocr1al = &HDC
Ocr1bh = &H05
Ocr1bl = &HDC
'--------------------------
Declare Function Lcd_show_position()as Byte
'--------------------------
Dim Pwm1 As Word
Dim Pwm2 As Word
Dim Pwm_temp As Word
Dim L As Byte
Dim M1 As Byte , M2 As Byte
'--------------------------
Pwm1 = 1500
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1ah = Pwm_temp
Ocr1al = Pwm1
Pwm2 = 1500
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1bh = Pwm_temp
Ocr1bl = Pwm1
'--------------------------
Cursor Off
Cls
Lcd "Start"
Waitms 500
Cls
Lcd "Servo1> Deg"
Lowerline
Lcd "Servo2> Deg"
Waitms 500
L = Lcd_show_position()
'--------------------------
Do
M1 = Pinc And &H03
M2 = Pinc And &H0C
'--------------------------
Select Case M1
Case 2:
If Pwm1 < 2400 Then
Incr Pwm1
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1ah = Pwm_temp
Ocr1al = Pwm1
L = Lcd_show_position()
End If
Case 1:
If Pwm1 > 600 Then
Decr Pwm1
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1ah = Pwm_temp
Ocr1al = Pwm1
L = Lcd_show_position()
End If
End Select
'--------------------------
Select Case M2
Case 8:
If Pwm2 < 2400 Then
Incr Pwm2
Pwm_temp = Pwm2
Shift Pwm_temp , Right , 8
Ocr1bh = Pwm_temp
Ocr1bl = Pwm2
L = Lcd_show_position()
End If
Case 4:
If Pwm2 > 600 Then
Decr Pwm2
Pwm_temp = Pwm2
Shift Pwm_temp , Right , 8
Ocr1bh = Pwm_temp
Ocr1bl = Pwm2
L = Lcd_show_position()
End If
End Select
'---------------------------
If Pinc.4 = 0 Then
Cls
Lcd "Servo1> Deg"
Lowerline
Lcd "Servo2> Deg"
Pwm1 = 1500
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1ah = Pwm_temp
Ocr1al = Pwm1
Pwm2 = 1500
Pwm_temp = Pwm1
Shift Pwm_temp , Right , 8
Ocr1bh = Pwm_temp
Ocr1bl = Pwm1
L = Lcd_show_position()
End If
Loop
End
'--------------------------
Function Lcd_show_position() As Byte
Dim P1 As Integer
Dim P2 As Integer
P1 = Pwm1 - 600
P1 = P1 / 10
P2 = Pwm2 - 600
P2 = P2 / 10
Locate 1 , 9
Lcd " "
Locate 1 , 9
Lcd P1
Locate 2 , 9
Lcd " "
Locate 2 , 9
Lcd P2
End Function
دیدگاه