کسی سورس برنامه ساده کنترلر CNC بازبان bascom رو داره؟؟
من اینو نوشتم که فعلا G01 رو شبیه سازی میکنه ولی درست کار نمی کنه به نظرتون اشکال کار کجاست.پورت c و d محور های x,y رو کنترل می کنه با استپ موتور
$regfile = "m32def.dat"
$crystal = 8000000
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Config Lcdpin = Pin , Port = Porta , E = Portb.2 , Rs = Portb.3
Config Scl = Portb.0
Config Sda = Portb.1
Config Portd = Output
Config Portc = Output
Config Single = Scientific , Digits = 2
Dim I As Byte
Dim X As Single , Y As Single
Dim N As Single
Dim M As Single , E As Single , K As Word , L As Word
Dim Hadi(7) As Byte
Dim Bb As Byte , F As Byte , Kk As Integer
Dim A(70) As Byte
Dim C1 As Byte , C2 As Byte , C3 As Byte , C4 As Byte , C5 As Byte , C6 As Byte
Dim Q1 As Single , Q2 As Single , Q3 As Single , Q4 As Single , Dy As Single , Dx As Single , Ky As Single , Kx As Single , Px As Integer , Py As Integer , Ix As Integer , Iy As Integer
Declare Sub I2cw(byval Addr As Byte , Byval V As Byte )
Declare Sub Move1(byval X As Single , Byval Y As Single , Byval F As Byte )
Declare Function I2cr(byval Addrr As Byte) As Byte
A(1) = 11
A(2) = 01
A(3) = 1
A(4) = 00
A(5) = 10
A(6) = 00
A(7) = 200
A(8) = 11
A(9) = 01
A(10) = 10
A(11) = 00
A(12) = 5
A(13) = 00
A(14) = 200
A(15) = 11
A(16) = 01
A(17) = 5
A(18) = 00
A(19) = 10
A(20) = 00
A(21) = 200
C1 = 0
C2 = 0
C3 = 0
C4 = 0
C5 = 0
C6 = 0
Dx = 0
Kx = 0
Dy = 0
Ky = 0
For I = 1 To 7
Call I2cw(i , A(i))
Waitms 100
Hadi(i) = I2cr(i)
Next I
Waitms 100
Start1:
If A(1 + C1) = 11 Then Goto Gcod
If A(1 + C1) = 12 Then Goto Mcod
Gcod:
Select Case A(2 + C1)
Case 1
X = A(4 + C1)
X = X / 100
X = X + A(3 + C1)
Y = A(6 + C1)
Y = Y / 100
Y = Y + A(5 + C1)
F = A(7 + C1)
F = F
Call Move1(x , Y , F)
C1 = C1 + 7
Goto Start1
End Select
Mcod:
'******************************************** ***********
End
Sub I2cw(byval Addr As Byte , Byval V As Byte)
I2cstart
I2cwbyte &B10100000
I2cwbyte Addr
I2cwbyte V
Waitms 50
I2cstop
End Sub
Function I2cr(byval Addrr As Byte) As Byte
I2cstart
I2cwbyte &B10100000
I2cwbyte Addrr
I2cstart
I2cwbyte &B10100001
I2crbyte I2cr , Nack
Waitms 50
I2cstop
End Function
Sub Move1(byval X As Single , Byval Y As Single , Byval F As Byte )
Dx = X - Kx
Dy = Y - Ky
E = Dy / Dx
Px = Dy * 100
Py = Dy * 100
L = Round(e)
If Px > 0 And Py > 0 Then
If E > 1 Then
Do
Portc = Lookup(c4 , Dta1)
For Ix = 1 To L
Portd = Lookup(c5 , Dta1)
Waitms 200
Incr C5
If C5 = 4 Then C5 = 0
Next Ix
Incr C4
If C4 = 4 Then C4 = 0
Incr C6
Loop Until C6 = Px
Else
Do
Portd = Lookup(c5 , Dta1)
For Iy = 1 To L
Portc = Lookup(c4 , Dta1)
Waitms 200
Incr C4
If C4 = 4 Then C4 = 0
Next Iy
Incr C5
If C5 = 4 Then C5 = 0
Incr C6
Loop Until C6 = Py
End If
Elseif Px < 0 And Py < 0 Then
If E > 1 Then
Do
Portc = Lookup(c4 , Dta2)
For Ix = 1 To L
Portd = Lookup(c5 , Dta2)
Waitms 200
Incr C5
If C5 = 4 Then C5 = 0
Next Ix
Incr C4
If C4 = 4 Then C4 = 0
Incr C6
Loop Until C6 = Px
Else
Do
Portd = Lookup(c5 , Dta2)
For Iy = 1 To L
Portc = Lookup(c4 , Dta2)
Waitms 200
Incr C4
If C4 = 4 Then C4 = 0
Next Iy
Incr C5
If C5 = 4 Then C5 = 0
Incr C6
Loop Until C6 = Py
End If
Elseif Px > 0 And Py < 0 Then
If E > 1 Then
Do
Portc = Lookup(c4 , Dta1)
For Ix = 1 To L
Portd = Lookup(c5 , Dta2)
Waitms 200
Incr C5
If C5 = 4 Then C5 = 0
Next Ix
Incr C4
If C4 = 4 Then C4 = 0
Incr C6
Loop Until C6 = Px
Else
Do
Portd = Lookup(c5 , Dta2)
For Iy = 1 To L
Portc = Lookup(c4 , Dta1)
Waitms 200
Incr C4
If C4 = 4 Then C4 = 0
Next Iy
Incr C5
If C5 = 4 Then C5 = 0
Incr C6
Loop Until C6 = Py
End If
Elseif Px < 0 And Py > 0 Then
If E > 1 Then
Do
Portc = Lookup(c4 , Dta2)
For Ix = 1 To L
Portd = Lookup(c5 , Dta1)
Waitms 200
Incr C5
If C5 = 4 Then C5 = 0
Next Ix
Incr C4
If C4 = 4 Then C4 = 0
Incr C6
Loop Until C6 = Px
Else
Do
Portd = Lookup(c5 , Dta1)
For Iy = 1 To L
Portc = Lookup(c4 , Dta2)
Waitms 200
Incr C4
If C4 = 4 Then C4 = 0
Next Iy
Incr C5
If C5 = 4 Then C5 = 0
Incr C6
Loop Until C6 = Py
End If
End If
Locate 1 , 1 : Lcd Dx ; " " ; Dy ; " "
Kx = X
Ky = Y
End Sub
Dta1:
Data &B00001000 , &B00000001 , &B00000100 , &B00000010
Dta2:
Data &B00000010 , &B00000100 , &B00000001 , &B00001000
من اینو نوشتم که فعلا G01 رو شبیه سازی میکنه ولی درست کار نمی کنه به نظرتون اشکال کار کجاست.پورت c و d محور های x,y رو کنترل می کنه با استپ موتور
$regfile = "m32def.dat"
$crystal = 8000000
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
Config Lcdpin = Pin , Port = Porta , E = Portb.2 , Rs = Portb.3
Config Scl = Portb.0
Config Sda = Portb.1
Config Portd = Output
Config Portc = Output
Config Single = Scientific , Digits = 2
Dim I As Byte
Dim X As Single , Y As Single
Dim N As Single
Dim M As Single , E As Single , K As Word , L As Word
Dim Hadi(7) As Byte
Dim Bb As Byte , F As Byte , Kk As Integer
Dim A(70) As Byte
Dim C1 As Byte , C2 As Byte , C3 As Byte , C4 As Byte , C5 As Byte , C6 As Byte
Dim Q1 As Single , Q2 As Single , Q3 As Single , Q4 As Single , Dy As Single , Dx As Single , Ky As Single , Kx As Single , Px As Integer , Py As Integer , Ix As Integer , Iy As Integer
Declare Sub I2cw(byval Addr As Byte , Byval V As Byte )
Declare Sub Move1(byval X As Single , Byval Y As Single , Byval F As Byte )
Declare Function I2cr(byval Addrr As Byte) As Byte
A(1) = 11
A(2) = 01
A(3) = 1
A(4) = 00
A(5) = 10
A(6) = 00
A(7) = 200
A(8) = 11
A(9) = 01
A(10) = 10
A(11) = 00
A(12) = 5
A(13) = 00
A(14) = 200
A(15) = 11
A(16) = 01
A(17) = 5
A(18) = 00
A(19) = 10
A(20) = 00
A(21) = 200
C1 = 0
C2 = 0
C3 = 0
C4 = 0
C5 = 0
C6 = 0
Dx = 0
Kx = 0
Dy = 0
Ky = 0
For I = 1 To 7
Call I2cw(i , A(i))
Waitms 100
Hadi(i) = I2cr(i)
Next I
Waitms 100
Start1:
If A(1 + C1) = 11 Then Goto Gcod
If A(1 + C1) = 12 Then Goto Mcod
Gcod:
Select Case A(2 + C1)
Case 1
X = A(4 + C1)
X = X / 100
X = X + A(3 + C1)
Y = A(6 + C1)
Y = Y / 100
Y = Y + A(5 + C1)
F = A(7 + C1)
F = F
Call Move1(x , Y , F)
C1 = C1 + 7
Goto Start1
End Select
Mcod:
'******************************************** ***********
End
Sub I2cw(byval Addr As Byte , Byval V As Byte)
I2cstart
I2cwbyte &B10100000
I2cwbyte Addr
I2cwbyte V
Waitms 50
I2cstop
End Sub
Function I2cr(byval Addrr As Byte) As Byte
I2cstart
I2cwbyte &B10100000
I2cwbyte Addrr
I2cstart
I2cwbyte &B10100001
I2crbyte I2cr , Nack
Waitms 50
I2cstop
End Function
Sub Move1(byval X As Single , Byval Y As Single , Byval F As Byte )
Dx = X - Kx
Dy = Y - Ky
E = Dy / Dx
Px = Dy * 100
Py = Dy * 100
L = Round(e)
If Px > 0 And Py > 0 Then
If E > 1 Then
Do
Portc = Lookup(c4 , Dta1)
For Ix = 1 To L
Portd = Lookup(c5 , Dta1)
Waitms 200
Incr C5
If C5 = 4 Then C5 = 0
Next Ix
Incr C4
If C4 = 4 Then C4 = 0
Incr C6
Loop Until C6 = Px
Else
Do
Portd = Lookup(c5 , Dta1)
For Iy = 1 To L
Portc = Lookup(c4 , Dta1)
Waitms 200
Incr C4
If C4 = 4 Then C4 = 0
Next Iy
Incr C5
If C5 = 4 Then C5 = 0
Incr C6
Loop Until C6 = Py
End If
Elseif Px < 0 And Py < 0 Then
If E > 1 Then
Do
Portc = Lookup(c4 , Dta2)
For Ix = 1 To L
Portd = Lookup(c5 , Dta2)
Waitms 200
Incr C5
If C5 = 4 Then C5 = 0
Next Ix
Incr C4
If C4 = 4 Then C4 = 0
Incr C6
Loop Until C6 = Px
Else
Do
Portd = Lookup(c5 , Dta2)
For Iy = 1 To L
Portc = Lookup(c4 , Dta2)
Waitms 200
Incr C4
If C4 = 4 Then C4 = 0
Next Iy
Incr C5
If C5 = 4 Then C5 = 0
Incr C6
Loop Until C6 = Py
End If
Elseif Px > 0 And Py < 0 Then
If E > 1 Then
Do
Portc = Lookup(c4 , Dta1)
For Ix = 1 To L
Portd = Lookup(c5 , Dta2)
Waitms 200
Incr C5
If C5 = 4 Then C5 = 0
Next Ix
Incr C4
If C4 = 4 Then C4 = 0
Incr C6
Loop Until C6 = Px
Else
Do
Portd = Lookup(c5 , Dta2)
For Iy = 1 To L
Portc = Lookup(c4 , Dta1)
Waitms 200
Incr C4
If C4 = 4 Then C4 = 0
Next Iy
Incr C5
If C5 = 4 Then C5 = 0
Incr C6
Loop Until C6 = Py
End If
Elseif Px < 0 And Py > 0 Then
If E > 1 Then
Do
Portc = Lookup(c4 , Dta2)
For Ix = 1 To L
Portd = Lookup(c5 , Dta1)
Waitms 200
Incr C5
If C5 = 4 Then C5 = 0
Next Ix
Incr C4
If C4 = 4 Then C4 = 0
Incr C6
Loop Until C6 = Px
Else
Do
Portd = Lookup(c5 , Dta1)
For Iy = 1 To L
Portc = Lookup(c4 , Dta2)
Waitms 200
Incr C4
If C4 = 4 Then C4 = 0
Next Iy
Incr C5
If C5 = 4 Then C5 = 0
Incr C6
Loop Until C6 = Py
End If
End If
Locate 1 , 1 : Lcd Dx ; " " ; Dy ; " "
Kx = X
Ky = Y
End Sub
Dta1:
Data &B00001000 , &B00000001 , &B00000100 , &B00000010
Dta2:
Data &B00000010 , &B00000100 , &B00000001 , &B00001000
دیدگاه