ex-09_2006

Page 1

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 บอรดขยายพอรตเอาตพุต


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.