บทความ |
|
Basic Stamp
ควบคุม Step Motor
สามตัวพร้อมกัน แยกกันทำงานอย่างอิสระ
ผู้เขียน
... ทีมงาน AppSoftTech
การเขียนโปรแกรมควบคุมการทำงานไมโครคอนโทรลเลอร์ Basic Stamp
นั้น
จุดที่ยากที่สุดเห็นจะเป็นเรื่องของการเขียนโปรแกรมให้อยู่ในรูปแบบของ Multiple
Task คือการทำงานพร้อม ๆ กันของแต่ละ ซับรูทีน เช่นเดียวกับตัวอย่างนี้เป็นต้น
ที่นำเสนอแนวทางในการเขียนโปรแกรมที่มีลักษณะการทำงานของ Multiple Task
คือจะมีการตรวจสอบการกดคีย์สวิตซ์ และสั่งการทำงานไปขับ
Step Motor ให้ทำงาน โดยที่สามารถรองรับการกดคีย์เพื่อไปควบคุม
Step Motor ตัวที่ยังไม่ได้ถูกเรียกใช้งานได้ ในขนาดที่
Step Motor ตัวที่ถูกเรียกใช้งานก่อนหน้ายังคงทำงานอยู่
โดยเป็นพื้นฐานทางด้านแนวความคิดในการเขียนโปรแกรมในรูปแบบ Multiple
Task
'==================
'Program : Step Motor Multiple Task
'Copyright(c) : 2003 AppSoftTech Co.,Ltd.
'website : http://www.appsofttech.com
'
'{$STAMP BS2sx}
'{$PBASIC 2.5}
'===================
'{I/O pins}
INPUT 12
INPUT 13
INPUT 14
'{ constants }
Delay CON 100
'{ variables }
DrvA VAR Nib
DrvB VAR Nib
DrvC VAR Nib
mstepA VAR Nib
mstepB VAR Nib
mstepC VAR Nib
DataStep VAR Nib(3)
'{ DATA statements }
'-------------------
'{ initialization }
DIRA=$f
DIRB=$f
DIRC=$f
DataStep(0) = %0011
DataStep(1) = %0110
DataStep(2) = %1100
DataStep(3) = %1001
'-------------------
' { code }
Main:
IF IN12 = 0 THEN
DrvA = 1 'input bit12 on
mstepA = 0
ENDIF
IF IN13 = 0 THEN
DrvB = 1 'input bit13 on
mstepB = 0
ENDIF
IF IN14 = 0 THEN
DrvC = 1 'input bit14 on
mstepC = 0
ENDIF
GOSUB DrvMotorA
GOSUB DrvMotorB
GOSUB DrvMotorC
PAUSE Delay
' DEBUG "++++ Delay ++++",CR
GOTO Main
END
'-------------------
'{ subroutines }
' Drive Motor A
DrvMotorA:
IF DrvA > 0 AND DrvA < 16 THEN
' DEBUG "mstepA = ", DEC mstepA , CR
OUTA = DataStep(mstepA)
mstepA = mstepA + 1
IF mstepA > 3 THEN
mstepA = 0
DrvA = DrvA + 1
ENDIF
' DEBUG "DrvA = ", DEC DrvA , CR
ENDIF
IF DrvA = 0 THEN OUTA = 0
RETURN
' Drive Motor B
DrvMotorB:
IF DrvB > 0 AND DrvB < 16 THEN
OUTB = DataStep(mstepB)
mstepB = mstepB + 1
IF mstepB > 3 THEN
mstepB = 0
DrvB = DrvB + 1
ENDIF
ENDIF
IF DrvB = 0 THEN OUTB = 0
RETURN
' Drive Motor C
DrvMotorC:
IF DrvC > 0 AND DrvC < 16 THEN
OUTC = DataStep(mstepC)
mstepC = mstepC + 1
IF mstepC > 3 THEN
mstepC = 0
DrvC = DrvC + 1
ENDIF
ENDIF
IF DrvC = 0 THEN OUTC = 0
RETURN
ตัวอย่างนี้เป็นเพียงแนวทางในการเขียนโปรแกรมควบคุมการทำงานแบบทำงานหลาย ๆ
งานพร้อมกันโดยการตรวจสอบเงื่อนไขและแยกการทำงานอย่างอิสระ
ในการทำงานที่เกี่ยวกับ Multiple Task
ไม่ควรที่จะมีชุดคำสั่งที่เกี่ยวกับการหน่วงเวลาเข้ามา
เนื่องจากจะเป็นจุดที่ทำให้โปรแกรมเกิดการหน่วงเวลาในการตรวจสอบการทำงานในด้านต่าง
ๆ ทำให้การทำงานในรูปแบบ Multiple Task
ขาดความสมบูรณ์ไปได้
Home Page
|