EX-09
บอรดขยายพอรตเอาตพุตโดยใชการสื่อสารแบบซิงโครนัส
(C) Innovative Experiment Co.,Ltd.
คุณสมบัติทางเทคนิค สามารถขยายพอรตเอาตพุต 8 บิต 2 ชุด รวม เปน 16 บิต l ใชไอซีชิฟตรีจิสเตอรในการทํางาน l สามารถตอพวงเพือ ่ ขยายไดไมจาํ กัด (แนะนําไม ควรเกิน 4 บอรดตอ P-Board 1 บอรด) l เชือ ่ มตอกับ P-Board และ S-Board ผานทางคอน เน็กเตอร DATA BUS l เชื่อมตอกับ U-Board ผานทางคอนเน็กเตอร SHIFTOUT บอรดที่ใชงานรวมกันเพื่อทําการทดลองเพิ่มเติม (จําหนายแยก) l
P-Board บอรดเชือ่ มตอพอรตขนาน, S-BoardV2.0 บอรดเชื่อมตอพอรตอนุกรม, U-Board บอรดเชื่อมตอพอรต USB, EX-01 บอรด LED มอนิเตอร 16 ชอง, EX-03 บอรดสวิตชอนิ พุต 16 ชอง, EX-05 บอรดขับสเต็ปเปอรมอเตอร, EX-06 plus บอรดขับรีเลย 8 ชอง
AX-2000/AX-2000 Plus ชุดทดลองการเชือ่ มตอคอมพิวเตอรกบั อุปกรณภายนอก เปนชุดทดลองที่จัดเตรียมขึ้นเพื่อตอบสนองความตองการเรียนรูของผูสนใจดาน PC Interfacing โดย จะเนนไปที่การเชื่อมตอผานพอรตขนานหรือพอรตเครื่องพิมพและพอรตอนุกรมของคอมพิวเตอรพีซีเปนหลัก ในชุดทดลอง AX-2000 ไดจดั จําหนายใน 2 รูปแบบคือ เปนชุดสมบูรณประกอบดวยบอรดทดลอง 9-12 บอรด*, สเต็ปเปอรมอเตอร, อะแดปเตอร และหนังสือปฏิบัติการอีก 2-3 เลม* กับชุดแยก ซึ่งจะนําบอรดทดลองทั้งหมด รวมทั้งหนังสือมาแยกจําหนายสําหรับผูสนใจเฉพาะดาน ดังนั้นสําหรับผูที่จัดซื้อในชุดแยกนี้สามารถติดตาม บอรดทดลองในอนุกรมนีไ้ ดอยางตอเนือ่ งรวมถึงหนังสือคูม อื ไดจากตัวแทนจําหนายของบริษัท อินโนเวตีฟ เอ็ก เพอริเมนต จํากัด ในสวนของแผนดิสกโปรแกรมตัวอยางจะบรรจุอยูใ นชุดของ P-Board และ S-Board เทานัน้ ในกรณีทจี่ ดั ซือ้ แบบแยก สวนในชุดสมบูรณไดจัดเตรียมไวใหเรียบรอยแลว * บอรดทีใ่ ชในการทดลองมี 12 บอรดและหนังสือ 3 เลมในรุน AX-2000 Plus * บอรด EX-09 นีม้ จี ดั ใหพรอมในชุดทดลองรุน AX-2000 Plus เทานัน้ EX-09 บอรดขยายพอรตเอาตพุต
1
ทฤษฎี หลักการเบื้องตน ในรูปที่ 1 แสดงไดอะแกรมการทํางานเบือ้ งตนของการขยายพอรตโดยใชการสื่อสารอนุกรม แบบซิงโครนัส จะเห็นไดวา มีสายขอมูล (data : DI) เพียง 1 เสน ดังนั้นการสงผานขอมูลจึงตอง กระทําในลักษณะอนุกรม สวนที่เปนแบบซิงโครนัส (synchronous) ก็เนื่องจากมีการใชสัญญาณ นาฬิกา (CLK) มากําหนดจังหวะการทํางานใหสัมพันธกันระหวางตัวสงขอมูล (ซึ่งในที่นี้คือ คอมพิวเตอร) และตัวรับขอมูล (ซึง่ ก็คอื ไอซีชฟิ ตรจี สิ เตอร) นอกจากนัน้ จะมีสายสัญญาณควบคุมอีก 2 เสนคือ สัญญาณ RST ซึง่ ก็คอื สัญญาณรีเซต และสัญญาณ LE หรือสัญญาณแลตชสาํ หรับนําขอมูล ไปแสดงที่เอาตพุต ไอซีชฟิ ตรจี สิ เตอรทนี่ าํ มาใชจะเปนแบบขอมูลเขาอนุกรม-ขอมูลออกแบบขนาน (SIPO : Serial In Parallel Out) โดยเมือ่ เริม่ ตนจะตองรีเซตหรือเคลียรขอ มูลเดิมใหเปน “0” กอน จากนั้นสงขอมูล มาที่ขา DI แลวสงสัญญาณนาฬิกามา 1 ลูก ขอมูลก็จะถูกเลื่อนเขาไปเก็บในชิฟตรีจิสเตอร หากไม มีการสงสัญญาณแลตช ขอมูลเอาตพตุ จะยังคงเดิมไมเปลีย่ นแปลง จากนัน้ ทยอยสงขอมูลมาจนครบ 8 บิต แลวตามดวยการสงสัญญาณแลตช ขอมูลทัง้ หมดทีเ่ ก็บไวในรีจสิ เตอรกจ็ ะถูกสงออกมาที่เอาต พุต ดังในไดอะแกรมเวลารูปที่ 2 จึงทําใหดูเสมือนวา ใชสายสัญญาณของพอรต 3 เสน ทําใหเกิด พอรตเอาตพุต 8 เสน เพียงแตตองมีขั้นตอนและใชเวลาในการรับและเลื่อนขอมูลเล็กนอยและถา หากชิฟตรจี สิ เตอรมขี าขอมูลออกแบบอนุกรมเพิม่ เติมดวย จะทําใหสามารถขยายจํานวนพอรตออก ไปไดอีก โดยนําสัญญาณจากขาขอมูลออกแบบอนุกรม (serial data output : SO) มาเขาที่ขาขอมูล อินพุต (DI) ของชิฟตรีจิสเตอรแบบเดียวกันอีกตัวหนึ่ง จะทําใหเกิดการขยายพอรตออกไปไดอีก จาก 8 บิตเปน 16 บิต, 24 บิต, 32 บิตไปอยางตอเนื่อง ขาขอมูลออกแบบขนานของชิฟตรีจิสเตอรที่สามารถใชงานเปนพอรตเอาตพุต P7
DATA (DI) LATCH (LE) CLOCK (CLK)
P6
P5
P4
P3
P2
P1
P0
SERIAL DATA OUT (SO)
ตอเขากับขา DI หรือ SERIAL DATA IN ของชิฟตรีจิสเตอรในชุดตอไป เพื่อขยายพอรตเอาตพุตเพิ่มขึ้นอีก
RESET (RST)
ตอเขากับขา LE, CLK และ RST ของชิฟตรีจิสเตอรในชุดตอไป เพื่อขยายพอรตเอาตพุตเพิ่มขึ้นอีก
รูปที่ 1 ผังการทํางานเบื้องตนของการขยายพอรตแบบซิงโครนัสโดยใชชิฟตรีจิสเตอร 2
EX-09 บอรดขยายพอรตเอาตพุต
ขอมูล 8 บิต DATA (DI)
ขอมูล 8 บิต
1
0
0
1
1
1
0
1
1
0
0
0
1
1
1
0
1
0
0
1
1
1
0
1
1
0
0
0
1
1
1
0
1
0
0
1
1
1
0
1
CLOCK (CLK)
RESET (RST)
LATCH (LE)
SHIFT REGISTER
OUTPUT (P0-P7)
ขอมูล 8 บิต
1
0
0
0
1
1
1
0
ขอมูล 8 บิต
รูปที่ 2 ไดอะแกรมเวลาแสดงจังหวะการทํางานของชิฟตรจี สิ เตอรเพือ่ ขยายพอรตเอาตพตุ อยางไรก็ตามดวยแนวทางนี้อาจทําใหผูใชงานคิดวา สามารถเพิ่มจํานวนพอรตเอาตพุตได อยางไมจํากัด ในทางปฏิบัติสิ่งที่เกิดขึ้นเมื่อขยายพอรตเอาตพุตออกไปเปนจํานวนมากคือ 1. ความเร็วในการทํางานลดลง เนื่องจากใชการเลื่อนขอมูลของชิฟตรีจิสเตอร ดังนั้นหาก จํานวนขอมูลที่ตองการเลื่อนมีมาก เวลาที่ใชก็จะมากขึ้น 2. ความสามารถในการจายกระแสรวมลดลง ในกรณีทขี่ ยายพอรตเอาตพุตออกไปโดยไมได เพิม่ ความสามารถในการจายกระแสไฟฟาใหแกแหลงจายไฟของวงจร จะทําใหพอรตเอาตพุตแตละ บิตสามารถจายกระแสไดลดลงตามจํานวนพอรตที่เพิ่มขึ้น 3. สัญญาณรบกวน หากการขยายนั้นตองใชสายสัญญาณเชื่อมโยงกัน ยิ่งถาหากมีการขยาย มาก สายสัญญาณที่ใชก็จะตองมีความยาวเพิ่มมากขึ้น สงผลใหสัญญาณรบกวนสามารถเขามา รบกวนการทํางานไดงายขึ้น ดังนั้นจํานวนของพอรตที่สามารถขยายไดดวยวิธีการนี้จึงขึ้นอยูกับความสามารถในการ จายกระแสและความเร็วเปนปจจัยหลัก หากแหลงจายไฟมีความสามารถในการจายกระแสไดเพียงพอ ความเร็วจึงเปนสิ่งที่ตองคํานึงถึงเปนเรื่องตอมา หากยอมรับได ก็ตองออกแบบวงจรและการเชื่อม ตอใหดีเพื่อปองกันสัญญาณรบกวน หากทําไดครบและยอมรับในขอจํากัดดานความเร็วได ก็จะ สามารถขยายพอรตเอาตพุตดวยวิธีการนี้ไดอยางไมมีขีดจํากัด
EX-09 บอรดขยายพอรตเอาตพตุ โดยใชการสือ่ สารอนุกรมแบบซิงโครนัส มีวงจรสมบูรณและคุณสมบัติแสดงในรูปที่ 3 บอรดนี้ไดรับการออกแบบใหสามารถขยาย พอรตเอาตพตุ ไดมากถึง 16 ชอง (หรือบิต) ตอหนึ่งบอรดและสามารถตอพวงไดอยางไมจํากัดภาย EX-09 บอรดขยายพอรตเอาตพุต
3
สัญญาณขอมูลอนุกรมและควบคุมจะสงผานมาจากคอนเน็กเตอร SHIFT IN ซึ่งมีการจัดขา ตามมาตรฐาน UIC-10 จึงทําใหสามารถตอเขากับคอนเน็กเตอร DATA BUS ของ P-Board ไดทนั ที นั่นคือขาสัญญาณนาฬิกาหรือ CLK จะตรงกับขา D0, ขา LE ซึ่งเปนขาสัญญาณแลตชจะตรงกับขา D1, ขาขอมูลอนุกรมหรือ DI ตรงกับขา D2 และขารีเซต RST จะตรงกับขา D3 สัญญาณจากคอน เน็กเตอร SHIFT IN จะสงเขาไปยัง IC901 เพื่อทําการขยายพอรตเอาตพุต 8 บิตสงออกไปยังคอน +5V
R901-R904 470k
+5V C901 0.1/50V
+5V
16 +5V CLK DI
LE RST
14 11 12 10
9 K901 SHIFTIN
SI
Q0
SCK Q1 LE Q2 RST Q3 Q4 Q5 SO Q6 Q7 OE 13
15
D0
1
D1 D2 D3 D4 D5 D6 D7
2 3 4 5 6 7
8
D1 D3 D5 D7
D0 D2 D4 D6 K902 OUTL
IC901 74HC595A
+5V
C902 0.1/50V
+5V
16 +5V CLK DO
LE RST
14 11 12 10
9 K904 SHIFTOUT
SI
Q0
15 1
SCK Q1 2 LE Q2 3 RST Q3 4 Q4 5 Q5 6 SO Q6 7 Q7 OE 13
8
D8 D9 D10 D11 D12 D13 D14 D15
D9 D11 D13 D15
D8 D10 D12 D14 K903 OUTH
IC902 74HC595A
รูปที่ 3 วงจรสมบูรณของ EX-09 บอรดขยายพอรตเอาตพตุ ใตเงือ่ นไขดังทีไ่ ดกลาวมาแลวในหัวขอทีผ่ า นมา หัวใจสําคัญคือ ไอซีชิฟตรีจิสเตอรเบอร 74HC595 ซึง่ เปนชิฟตรจี สิ เตอรแบบอเนกกประสงคสามารถรับขอมูลเขาแบบอนุกรม และสงขอมูลออกไดทั้ง แบบขนานและอนุกรม ทัง้ ยังสามารถตอพวงไดไมรจู บอีกดวย ภายใน 74HC595 มีรีจิสเตอรขนาด 8 บิตบรรจุอยู 1 ตัว จึงทําใหสามารถใชงานกับขอมูลขนาด 8 บิตไดอยางเหมาะสม และเมื่อนํามา พวงกันดังทีใ่ ชในบอรด EX-09 ก็จะสามารถรองรับขอมูลไดมากถึง 16 บิต 4
EX-09 บอรดขยายพอรตเอาตพุต
P-Board SHIFT IN
OUTL
EX-09
SHIFT OUT
OUTH
SHIFT IN
OUTL
EX-09
SHIFT OUT
OUTH
พอรตเอาตพุตที่ขยายเพิ่มเติม พอรตเอาตพุตที่ขยายเพิ่มเติม จํานวน 16 บิตตอบอรด จํานวน 16 บิตตอบอรด พอรตเอาตพุตที่ขยายเพิ่มเติมรวม 32 บิต
รูปที่ 10-4 แสดงการตอพวงบอรด EX-09 เพือ่ เพิม่ จํานวนพอรตเอาตพตุ เน็กเตอร OUTL พรอมกันนั้นยังสงขอมูลอนุกรมออกมาทางขา SO ไปยังขา SI ของ IC902 เพื่อ ขยายพอรตเพิ่มอีก 8 บิต โดยขอมูล 8 บิตตอมาจะสงออกทางคอนเน็กเตอร OUTH ทําใหบอรด EX-09 นีส้ ามารถขยายพอรตเอาตพตุ เพิม่ เปน 16 บิตจากสายสัญญาณ DATA 4 เสนของพอรต ขนานและยังสามารถเพิม่ ตอไปไดอกี โดยขาสัญญาณ LE, CLK และ RST จากคอนเน็กเตอร SHIFT IN ถูกตอมายังคอนเน็กเตอร SHIFT OUT พรอมกับขา SO ของ IC902 จึงทําใหสามารถตอพวง บอรด EX-09 ไดอกี อยางงายๆ เพียงตอสายจากคอนเน็กเตอร SHIFT OUT ของ EX-09 บอรดที่ 1 เขากับคอนเน็กเตอร SHIFT IN ของ EX-09 บอรดถัดไป หากตอพวงกัน 2 บอรดก็จะสามารถ ขยายพอรตเอาตพตุ เพิม่ เปน 32 ชอง (หรือบิต) โดยใชขาสัญญาณเทาเดิมคือ 4 เสน ในรูปที่ 10-4 แสดงการตอพวงบอรด EX-09 เพือ่ เพิม่ จํานวนพอรตเอาตพตุ
EX-09 บอรดขยายพอรตเอาตพุต
5
การทดลอง การทดลองที่ 1 ขยายพอรตเอาตพุตใหแกพอรตขนาน
เครื่องมือและอุปกรณ
1. P-Board บอรดเชือ่ มตอพอรตขนาน 1 แผน 2. EX-01 บอรด LED มอนิเตอร 16 ชอง 1 แผน 3. EX-09 บอรดขยายพอรตเอาตพตุ แบบซิงโครนัส 1 แผน 4. คอมพิวเตอรที่ติดตั้งระบบปฏิบัติการวินโดวสและ Visual BASIC อยางนอยเวอรชัน 5.0 5. สายเชือ่ มตอ IDC-10 3 เสน
การทดลอง
1.1 ตอสาย IDC-1 0 จากคอนเน็กเตอร DATA BUS ของ P-Board ไปยังคอนเน็กเตอร SHIFT IN ของ EX-09 และตอสายจากคอนเน็กเตอร OUTH และ OUTL ของ EX-09 ไปยังคอนเน็กเตอร DATA BUS1 และ 2 ของบอรด EX-01 ตามลําดับ 1.2 วางคอนโทรลบนฟอรมและเปลีย่ นชือ่ ดังรูปที่ P1-1 แลวเขียนโปรแกรมดังนี้ Private Sub InitialShiftIn() Out &H378, &H8 End Sub Private Sub CLK() Out &H378, Inp(&H378) Xor &H1 Out &H378, Inp(&H378) Xor &H1 End Sub Private Sub RST() Out &H378, Inp(&H378) Xor &H8 Out &H378, Inp(&H378) Xor &H8 End Sub Private Sub LE() Out &H378, Inp(&H378) Xor &H2 Out &H378, Inp(&H378) Xor &H2 End Sub Private Sub DI(ByVal Logic As Boolean) If Logic Then Out &H378, Inp(&H378) Or &H4 Else Out &H378, Inp(&H378) And &HFB End If End Sub
6
EX-09 บอรดขยายพอรตเอาตพุต
รูปที่ P1-1 หนาตาของฟอรมทีส่ ราง ขึน้ จากไฟล LAB13A.VBP เพื่อขยาย จํานวนพอรตเอาตพุต โดยใชบอรด EX-09 1.3 เขียนโปรแกรมยอยสําหรับสงขอมูล 8 บิต Private Sub Shift8Bit(ByVal Data As Byte) Dim i As Integer For i = 7 To 0 Step -1 If (Data And (2 ^ i)) = (2 ^ i) Then DI True Else DI False End If CLK Next i End Sub
1.4 เขียนโปรแกรมใหเหตุการณ Form_Load , cmdReset_Click และ cmdOut_Click ดังนี้ Private Sub Form_Load() InitialShiftIn RST LE End Sub Private Sub cmdReset_Click() RST LE End Sub Private Sub cmdOut_Click() Shift8Bit CByte(“&H” & txtOutH.Text) Shift8Bit CByte(“&H” & txtOutL.Text) LE End Sub
เมื่อรับขอมูลจาก txtOutH ในรูปของเลขฐานสิบหก นํา &H มาตอขางหนาแลวแปลงคาให เปนไบต สงไปยังโปรแกรมยอย Shift8Bit เพื่อเลื่อนขอมูลออกไปให 74HC595 พรอมกับสง สัญญาณ Clock เมื่อครบ 8 บิต จะนําขอมูลจาก txtOutL มาแปลงเปนคาไบต และสงไปเมื่อสง ครบทัง้ 16 บิต สงสัญญาณแลตซ LED บนบอรด EX-01 จะแสดงผลของขอมูล โดยที่ขอมูลจาก txtOutH จะออกทีพ่ อรต OUTH และขอมูลจาก txtOutL จะออกที่พอรต OUTL ตัวอยางโปรแกรม ดูที่ไฟล LAB13A.VBP 1.5 เพิม่ คอนโทรลและจัดฟอรมดังรูปที่ P1-2 โดยใหปุมเปนคอนโทรล Array โดยใหแตละปุมมีชื่อ เดียวกันแต Index ไมซาํ้ กันตัง้ แต 0-15
EX-09 บอรดขยายพอรตเอาตพุต
7
1.6 เขียนโปรแกรมใหกับเหตุการณ cmdD_Click(Index As Integer) ดังนี้ Private Sub cmdD_Click(Index As Integer) Dim i As Integer Dim tmp As Byte If cmdD(Index).Caption = “OFF” Then cmdD(Index).Caption = “ON” Else cmdD(Index).Caption = “OFF” End If
tmp = 0 For i = 0 To 7 If cmdD(i + 8).Caption = “ON” Then tmp = tmp + (2 ^ i) Next i txtOutH.Text = Hex(tmp) Shift8Bit tmp tmp = 0 For i = 0 To 7 If cmdD(i).Caption = “ON” Then tmp = tmp + (2 ^ i) Next i txtOutL.Text = Hex(tmp) Shift8Bit tmp LE End Sub
เมื่อคลิ้กที่ปุม cmdD(Index) ใดๆ โปรแกรมจะตรวจสอบวา Caption ของปุมนั้นเปนคําวา ON หรือ OFF และทําการกลับ Caption ใหเปนคําตรงกันขาม จากนั้นจะตรวจสอบ Caption ของแตละปุมที่กลุม OUTH เพื่ออานคาแตละบิต แลวแปลงคาใหเปนเลขฐานสิบหกแสดงในชอง txtOutH และสงคาออกไปใหพอรต SHIFT IN บนบอรด EX-09 เมื่อสงครบ 8 บิต โปรแกรมจะ ทํางานกับกลุม OUTL เหมือนกับกลุม OUTH เมื่อสงครบทั้ง 16 บิตแลวจะสงสัญญาณแลตซ ออกไป เอาตพุตคาเดิมจะถูกทดแทนโดยคาเอาตพุตใหมที่สงออกไป สําหรับรายละเอียดทั้งหมดของโปรแกรมทดลองนี้ดูไดจากไฟล LAB13B.VBP
รูปที่ P1-2 หนาตาของฟอรมทีส่ รางขึน้ จากโปรแกรมทดลอง LAB13B.VBP ดวยการใช เทคนิคการสรางคอนโทรล Array
8
EX-09 บอรดขยายพอรตเอาตพุต
การทดลองที่ 2 การขับสเต็ปเปอรมอเตอรผา นบอรด EX-09 เครื่องมือและอุปกรณ
1. บอรดเชือ่ มตอพอรตขนาน P-Board 1 แผน 2. EX-05 บอรดขับสเต็ปเปอรมอเตอร 1 แผน 3. EX-09 บอรดขยายพอรตเอาตพตุ แบบซิงโครนัส 1 แผน 4. สเต็ปเปอรมอเตอรแบบยูนิโพลารขนาด 12V 100W 7.5 องศาตอสเต็ป 1 ตัว 5. แหลงจายไฟตรง +12V 2A หรือมากกวา 1 เครื่อง 6. คอมพิวเตอรที่ติดตั้งระบบปฏิบัติการวินโดวสและ Visual BASIC อยางนอยเวอรชัน 5.0 7. สายเชือ่ มตอ IDC-10 3 เสน
การทดลอง 2.1 ตอสายจากคอนเน็กเตอร OUTL ของบอรด EX-09 ไปยังคอนเน็กเตอร DATA BUS ของบอรด EX-05 แลวตอมอเตอรและแหลงจายไฟใหถูกตอง 2.2 สรางโปรแกรมขับสเต็ปเปอรมอเตอร โดยการวางคอนโทรล ตั้งชื่อ และกําหนดคาคุณสมบัติ ดังรูปที่ P2-1 2.3 หลักการของการทํางานโปรแกรมนี้ จะทําการวนลูปเมื่อเกิดเหตุการณ cmdRun_click เพื่อ ควบคุมมอเตอร โดยจะใชตัวแปรในการกําหนดลักษณะการขับและตัวแปรสําหรับการวนลูปเปน ชนิด boolean ประกาศตัวแปรที่สวน General Declare ดังนี้ Dim flgRun As Boolean Dim flgLeft As Boolean, flgRight As Boolean, flgFree As Boolean, flgBreak As Boolean
Name
hsc
Max
4
Min
1
LargeChange
5
SmallChange
1
Value
100
รูปที่ P2-1 หนาตางของโปรแกรมขับสเต็ปเปอรมอเตอรที่ใชในการทดลองนี้ สามารถ ทดลองและดูรายละเอียดของโปรแกรมไดจากไฟล LAB14A.VBP EX-09 บอรดขยายพอรตเอาตพุต
9
สรางโปรแกรมยอยสําหรับการเปลี่ยนลักษณะการขับที่เ หตุการณ cmdFree_Click, cmdBreak_Click, cmdLeft_Click และ cmdRight_Click ดังนี้ Private Sub cmdBreak_Click() flgLeft = False flgRight = False flgBreak = True flgFree = False End Sub Private Sub cmdFree_Click() flgLeft = False flgRight = False flgBreak = False flgFree = True End Sub Private Sub cmdLeft_Click() flgLeft = True flgRight = False flgBreak = False flgFree = False End Sub Private Sub cmdRight_Click() flgLeft = False flgRight = True flgBreak = False flgFree = False End Sub
2.4 สรางโปรแกรมยอยสําหรับการหนวงเวลาโดยใชคาจาก hsc และการสงขอมูลทั้ง 16 บิต
Private Sub Delay() Dim a As Single a = Timer Do While Timer < a + (hsc.Value / 100) DoEvents Loop End Sub Private Sub Shift16Bit(Optional ByVal OutH As Byte = 0, Optional ByVal OutL As Byte = 0) Shift8Bit OutH Shift8Bit OutL LE End Sub
2.5 เขียนโปรแกรมใหกับเหตุการณ cmdRun_Click และ Form__Unload ดังนี้ Private Sub cmdRun_Click() If flgRun Then flgRun = False cmdRun.Caption = “Run” Exit Sub Else flgRun = True cmdRun.Caption = “Stop” End If Do While flgRun If flgLeft Then Shift16Bit 0, 8 Delay Shift16Bit 0, 4 Delay Shift16Bit 0, 2 Delay
10
EX-09 บอรดขยายพอรตเอาตพุต
Shift16Bit 0, 1 Delay ElseIf flgRight Then Shift16Bit 0, 1 Delay Shift16Bit 0, 2 Delay Shift16Bit 0, 4 Delay Shift16Bit 0, 8 Delay ElseIf flgBreak Then Shift16Bit 0, 3 Delay ElseIf flgFree Then Shift16Bit 0, 0 Delay End If
Loop End Sub Private Sub Form_Unload(Cancel As Integer) Shift16Bit 0, 0 ‘ Release Motor End End Sub
2.6 รันโปรแกรม เมื่อคลิกปุม Run จะเห็นวามอเตอรไมทํางานเนื่องจาก ตัวแปรที่กําหนดลักษณะ การขับมอเตอรทกุ ตัวมีคา เริม่ ตนเปน False จึงไมมกี ารสงขอมูล เพิ่มโคดที่เหตุการณ Form_Load ใหกําหนดทิศทางเริ่มตน flgLeft = True
ตัวอยางโปรแกรมนี้ดูที่ไฟล LAB14A.VBP ในซีดีรอมของ Computer Interface จากซอรสโปรแกรม สังเกตไดวา ทุกครัง้ ทีส่ ง ขอมูลไปควบคุมมอเตอร คาทีพ่ อรต OUTH เปน 0 ถาที่พอรต OUTH มีอุปกรณใดตออยู ในโปรแกรมสามารถแทรกคาสําหรับควบคุมอุปกรณ ตัวนั้นไดในการสงคาครั้งเดียว ซึ่งในการเขียนโปรแกรมจะตองมีการคํานวณหรือกําหนดคาของ พอรต OUTH และ OUTL ไวลวงหนากอนสงขอมูลไป ซึ่งจะแสดงใหเห็นในการทดลองตอไป
การทดลองขับสเต็ปเปอรมอเตอรพรอมกับขับ LED ผานบอรด EX-09
2.7 เพิม่ คอนโทรลและคอนโทรล Array ดังรูปที่ P2-2 กําหนดใหปมุ cmdD มี Index ตั้งแต 8 - 15 2.8 ประกาศตัวแปรสําหรับเก็บคาพอรต OUTH และ OUTL ที่สวน General Declaration Dim OutH As Byte, OutL As Byte
2.9 แกไขโปรแกรมทีเ่ หตุการณ cmdRun_Click ใหสง สถานะของพอรต OUTH แทนคา 0 และมีการ เก็บสถานะของพอรต OUTL หลังจากสงขอมูลออกไปขับมอเตอร ตัวอยางบางสวนแสดงไดดงั นี้ Shift16Bit OutH, 1 OutL = 1 Delay Shift16Bit OutH, 2 OutL = 2 Delay
....
EX-09 บอรดขยายพอรตเอาตพุต
11
2.10 เขียนโปรแกรมที่เหตุการณ cmdD_Click และ cmdReset_Click ดังนี้ Private Sub cmdD_Click(Index As Integer) Dim i As Integer Dim tmp As Byte If cmdD(Index).Caption = “OFF” Then cmdD(Index).Caption = “ON” Else cmdD(Index).Caption = “OFF” End If tmp = 0 For i = 0 To 7 If cmdD(i + 8).Caption = “ON” Then tmp = tmp + (2 ^ i) Next i txtOutH.Text = Hex(tmp) OutH = tmp Shift16Bit OutH, OutL End Sub Private Sub cmdReset_Click() Dim i As Byte For i = 8 To 15 cmdD(i).Caption = “OFF” Next i txtOutH.Text = 0 OutH = 0 Shift16Bit OutH, OutL End Sub
2.11 รันโปรแกรม สัง่ ใหมอเตอรหมุน และเปดปด LED การทํางานของโปรแกรมจะใชตวั แปร OUTH และ OUTL เก็บสถานะของพอรตไวทกุ ครัง้ ทีม่ กี ารเปลีย่ นแปลง เมือ่ มีการสงขอมูลก็จะนําคาสถานะ จากตัวแปรทัง้ สองสงออกไปดวย สถานะทีพ่ อรตทัง้ สองจึงถูกตอง ในการใชงานสามารถนําวิธีการ เก็บและสงขอมูลไปประยุกตใชกับระบบตางๆ ไดเชนกัน สําหรับรายละเอียดทั้งหมดของโปรแกรมทดลองนี้ดูไดจากไฟล LAB14B.VBP
รูปที่ P2-2 หนาตางของโปรแกรมขับสเต็ปเปอรมอเตอรพรอมกับ LED ทีใ่ ชในการทดลองนี้ สามารถทดลองและดูรายละเอียดของโปรแกรมไดจากไฟล LAB14B.VBP 12
EX-09 บอรดขยายพอรตเอาตพุต