ucon-uart in application (thai)
DESCRIPTION
ติดต่ออุปกรณ์ภายนอกผ่านพอร์ต USB ด้วยบอร์ด UCON-UARTTRANSCRIPT
52 The Prototype Electronics
ตดตออปกรณภายนอกผานพอรต USB ดวยบอรด UCON-UARTกอนหนานการอนเตอรเฟสระหวางคอมพวเตอรกบอปกรณภายนอกทาไดงายๆ ผานพอรตอนกรมหรอพอรตขนานแตเมอพอรตอนกรมและพอรตขนานถกตดสทธไมมใหใชงานเหลอเพยงพอรตUSBซงเขาถงไดยากบอรดUCON-UARTจงถอกาเนดขนเพอแกปญหาน โดยแปลงกายตวเองใหเปนพอรตอนกรมมาดกนวาการเขยนโปรแกรมควบคมจะงายเหมอนกบพอรตอนกรมหรอไม
บอรด UCON-UART
บอรด UCON-UART เปนบอรดแปลงพอรต USB ใหเปนพอรตอนกรมหรอCOMPORTโดยหวใจหลกคอชปเบอรFT232RLของบรษทFTDIสามารถเขยนโปรแกรมตดตอได2รปแบบคอVCP(Visual Com Port) ทจาลองการทางานของพอรตอนกรมสมบรณแบบมขาสญญาณออกมาใหใชงานครบทง 9 เสน และแบบ D2xxทกาหนดขาพอรตใหเปนอนพตเอาตพตไดอยางอสระ ในบทความตอนนจะใชงานในรปแบบของ VCP กอน โดยรปรางของบอรดUCON-UARTและขาตอใชงานตางๆในโหมดVCPแสดงในรปท1
รปท 1 บอรด UCON-UART และขสำหรบตอใชงน
รปท 2 วงจรแสดงกรเชอมตอบอรด UCON-UART เขกบ LED เพอทดสอบกรสงคเอตพต รปท 3 แสดงกรเชอมตอวงจรจรงบนเบรดบอรด
FTDI
VUSBGND
UCON-UARTUSB to UART Converter
3.3V
3.3V
VUSB
DTRTxD
TxDDTRRTS
RTSRxDRIDSRDCDCTS SL
EEP
TXD
ENPW
REN
TXLE
D
Rx Tx USB
RXLE
DRE
SET
GN
D
LED1
R1510
R2510
R3510
LED2 LED3
FTDI
VUSBGND
UCON-UARTUSB to UART Converter
3.3V
3.3V
VUSB
DTRTxD
RTSRxDRIDSRDCDCTS SL
EEP
TXD
ENPW
REN
TXLE
D
Rx Tx USB
RXLE
DRE
SET
GN
D
Prot
o Kn
owled
ge
PC Interface
โดย:กฤษดาใจเยน
The Prototype Electronics 53
ขาสญญาณของพอรตอนกรม
กอนจะใชงานบอรด UCON-UART จะตองรจกหนาทของขาตางๆ ของพอรตอนกรมกนกอนโดยขาสญญาณของพอรตอนกรม9ขาแบงเปนขาอนพต5ขาขาเอาตพต3ขาอก1ขาเปนกราวดดงแสดงรายละเอยดในตารางท 1 ซงขาเหลานในอดตถกออกแบบมาเพอเชอมตอกบโมเดมการใชงานปกตจะใชขา TxD ในการสงขอมล และขาRxD ในการรบขอมล สวนขาอนๆ ทาหนาทเปนขาตรวจสอบการสอสารขอมลหรอทเรยกวาแฮนดเซกและเมอจาแนกขาสญญาณออกเปนสองประเภทคอ ขาอนพตและขาเอาตพต เราสามารถเขยนโปรแกรมเพอควบคมขาเหลานไดอยางอสระโดยโปรแกรมทใชเขยนทดสอบกคอ Visual BasicExpress 2008 ซงเคยแนะนาการใชงานไปแลวในTPEฉบบท2
ตรงท 1 ตำแหนงขมตรฐนของพอรตอนกรมและทศทงของขพอรต
ชอขา ทศทาง
DCD1 อนพต
RxD2 อนพต
TxD3 เอาตพต
DTR4 เอาตพต
GND5 กราวด
DSR6 อนพต
RTS7 เอาตพต
CTS8 อนพต
RI9 อนพต
หนาท
Data Carrier Detect
Receive Data
Transmit Data
Data Terminal Ready
Signal Ground
Data Set Ready
Request to Send
Clear to Send
Ring Indicator
การเขยนโปรแกรมควบคม
ทดสอบการขบอปกรณเอาตพต
ทดสอบโปรแกรมรปแบบแรกดวยการสงคาลอจก “0” และลอจก “1” ออกไปยงอปกรณภายนอกกนกอน วงจรในรปท 2 เปนวงจรนาเอาขาDTR,RTSและขาTxDมาตอเขากบLEDเพอใหเหนสถานะลอจก “0” (LEDดบ)และลอจก “1”(LEDตดสวาง)รปท3จะแสดงการเชอมตอจรงโดยใชเบรดบอรดแผนจวมาตอวงจร
(1)เปดโปรแกรมVisualBasicExpress2008
(2)สรางโปรเจกตใหม โดยเรยกจากเมนFile>NewProjectเลอกสรางโปรเจกตเปนแบบWindowsFormsApplicationดงรปท4
(3)ตงชอโปรเจกตในทนตงชอวาSimpleDigitalOutput
รปท 5 กรวงคอนโทรลตงๆ สำหรบโปรแกรมท 1
รปท 6 หนตงโปรแกรม Simple Digital Output เมอสงรนใหทำงน
โปรแกรมท 1 โปรแกรมสำหรบทดสอบสงคลอจกไปยงข TxD,DTR และ RTS ของบอรด UCON-UART
รปท 4 หนตงเรมตนขนตอนกรสรงโปรเจกตของ Visual Basic Express
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Port_Name As String() Dim Name_ As String
‘=========================================== ‘ กำหนดชอใหกบคอนโทรลตงๆ ‘=========================================== Me.Text = “Simple Digital Output” GroupBox1.Text = “Serial Port” Button1.Text = “Connect” Button2.Text = “E&xit” GroupBox2.Text = “Digital Ouput” Button3.Text = “TxD “ Button4.Text = “DTR “ Button5.Text = “RTS “
‘=========================================== ‘ คนหพอรตอนกรมทตดตงภยในคอมพวเตอร ‘=========================================== ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList ComboBox1.Sorted = True Port_Name = IO.Ports.SerialPort.GetPortNames() For Each Name_ In Port_Name ComboBox1.Items.Add(Name_) Next ComboBox1.SelectedIndex = 0 SerialPort1.PortName = ComboBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If SerialPort1.IsOpen Then ‘ ปดกรสอสรของพอรตอนกรม ถพอรตนนเปดอย SerialPort1.Close() Button1.Text = “Connect” ComboBox1.Enabled = True Else
SerialPort1.Open() ‘ เปดกรสอสรของพอรตอนกรม Button1.Text = “Disconnect” ComboBox1.Enabled = False
SerialPort1.DtrEnable = True ‘ สงลอจก “0” ใหข DTR SerialPort1.RtsEnable = True ‘ สงลอจก “0” ใหข RTS SerialPort1.BreakState = True ‘ สงลอจก “0” ใหข TxD End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If SerialPort1.IsOpen Then ‘ ปดกรสอสรของพอรตอนกรมและออกจกโปรแกรม SerialPort1.Close() End If End End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
SerialPort1.PortName = ComboBox1.Text ‘ เลอกของตำแหนงของพอรตอนกรมทตองกร End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
SerialPort1.BreakState = Not SerialPort1.BreakState ‘สลบบตทสงไปยงข TxD End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
SerialPort1.DtrEnable = Not SerialPort1.DtrEnable ‘สลบบตทสงไปยงข DTR End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
SerialPort1.RtsEnable = Not SerialPort1.RtsEnable ‘สลบบตทสงไปยงข RTS End SubEnd Class
54 The Prototype Electronics
FTDI
VUSBGND
UCON-UARTUSB to UART Converter
3.3V
3.3V
VUSB
DTRTxD
RTSRxDRIDSRDCDCTS SL
EEP
TXD
ENPW
REN
TXLE
D
Rx Tx USB
RXLE
DRE
SET
GN
D
รปท 7 วงจรเชอมตอสวตชเขกบบอรด UCON-UART เพอทดสอบรบคอนพตรปท 8 แสดงกรเชอมตอวงจรจรงบนเบรดบอรด
FTDI
VUSB
R110k
SW1RxD SW2
RI SW3DSR
SW4DCD SW5
CTS
R210k
R310k
R410k
R510k
GNDUCON-UARTUSB to UART Converter
3.3V
3.3V
VUSB
DTRTxD
RTSRxDRIDSRDCDCTS SL
EEP
TXD
ENPW
REN
TXLE
D
Rx Tx USB
RXLE
DRE
SET
GN
D
โปรแกรมยอย Button3_Click() Button4_Click() Button5_Click() จะใชเพอสลบลอจกทขา TxD DTR และ RTS ตามลาดบ
รนโปรแกรม หลงจากตอวงจรเรยบรอย ใหรนโปรแกรมจะพบหนาตางโปรแกรมดงรปท 6 เราจะตองเลอกตาแหนงพอรตอนกรมทเปนตาแหนงของ UCON-UART จากนนกดปม Connect เพอเปดพอรตอนกรม ขอความทปมจะแสดง Disconnect จะเหนวาLEDทตออยทง3ดวงดบทงหมดทดสอบกดปมTxDDTRและRTSจะเหนLEDตดและดบตามการกดคย จากนนกดปม Disconnectเพอปดพอรตอนกรม และกด Exit เพอออกจากโปรแกรม
ทดสอบการรบคาอนพต
ขารบสญญาณอนพตของพอรตอนกรมมมากถง 5 ขา การทดลองนจะเชอมตอสวตชทงหมด 5 ตวเพออานคาจากขาอนพตทง 5 ขาโดยแสดงวงจรการเชอมตอดงรปท 7 สวนในรปท8 เปนการตอใชงานจรงบนเบรดบอรดจวสวตชทง5 ตวเปนสวตชกดตดปลอยดบ ตอตวตานทานพลอพคา 10kΩ เพอใหสถานะทไมกดสวตชมลอจกเปน“1”
การอานคาอนพตสาหรบพอรตอนกรมนมขอจากด ดวยอปนสยดงเดมของขาพอรตเหลานกลาวคอมนจะมวรรณะทไมเทากน โดยถามการกดสวตชทขา CTS (Clear To Send) คางเอาไวสถานะทขาDCDและDSRจะไมสามารถคงคางคาเอาไวไดเนองจากเมอCTSทางานขาเหลานจะถกเคลยรสถานะไปดวยแตอยางไรกตามเมอไมมการใชงานทบซอนกน ขาพอรตเหลานกทาหนาทเปนขาอนพตไดอยางด
การเขยนโปรแกรมรบคาจากสวตช 5 ชอง
(1) เปดโปรแกรม Visual Basic Express2008
(2)สรางโปรเจกตใหม โดยเรยกจากเมนFile>NewProjectเลอกสรางโปรเจกตเปนแบบWindowsFormsApplication
(3)ตงชอโปรเจกตในทนตงชอวา SimpleDigitalInput
(4)ลากคอนโทรลตางๆ มาวางลงบนฟอรมในตาแหนงดงรปท9
(5)เขยนโปรแกรมใหกบคอนโทรลตางๆตามทแสดงในโปรแกรมท2
การทางานของโปรแกรม
ในโปรแกรมท 2 มหลายโปรแกรมยอยททางานเชนเดยวกบโปรแกรมท1ดงนนจะอธบายเฉพาะโปรแกรมยอยทเพมเตมขนมา ประกอบดวย
โปรแกรมยอย SerialPort1_PinChanged()
โปรแกรมยอยนจะถกเรยกขนมาทางานเมอเกดเหตการณ การเปลยนแปลงทขาอนพตโดยจะใหคา Eventype ออกมา เพอแจงสถานะของขาตาง ๆ โดยคา Eventype เปนคาตวเลขคาทเกยวของกบขาทง5ขามดงน
Eventype=8ขาCTSมลอจก“0”
Eventype=16ขาDSRมลอจก“0”
Eventype=32ขาDCDมลอจก“0”
Eventype=64ขาRxDมลอจก“0”
Eventype=256ขาRIมลอจก“0”
โดยคาเหลานสามารถใชตวแปรเหลานแทนได
IO.Ports.SerialPinChange.Brake=ขาRxD
IO.Ports.SerialPinChange.Ring=ขาRI
(4)ลากคอนโทรลตางๆมาวางลงบนฟอรมในตาแหนงดงรปท 5 โดยสวนสาคญทสดคอคอนโทรล SerialPort1 ซงใชในการสอสารกบบอรดUCON-UART
(5)เขยนโปรแกรมใหกบคอนโทรลตางๆตามทแสดงในโปรแกรมท1
การทางานของโปรแกรม
โปรแกรมยอย Form_Load()
จะเรมตนจากกาหนดคาคณสมบตของคอนโทรลตางๆ ทใชบนฟอรมเมอโหลดขนมาใชงานครงแรก จากนนจะคนหาพอรตอนกรมทตดตงอยภายในเครองคอมพวเตอรโดยแสดงรายชอCOMPORTทตรวจพบในComboBoxโดยจะรอใหผใชกดเลอกเพอเลอแลวกดปม Button1 เพอใชเชอมตอ
โปรแกรม ยอย ComboBox1_SelectedInde-Changed() จะ เกด เหตการณ (Event) เมอ ม การ เปลยนแปลง การ เลอก ตาแหนง พอรต อนกรม ภายใน ComboBox โดย จะ กาหนด ให ตาแหนง พอรต อนกรม เปน ตาแหนงท ถก เลอก
โปรแกรมยอย Button1_Click() จะตรวจสอบพอรตอนกรมตาแหนงปจจบนวาถกเปดใชอยหรอไม ถาไมจะทาเปดพอรตอนกรม ในตาแหนงทระบผาน ComboBox และสงลอจก “0” ใหกบขาเอาตพตทง 3 ขาโดย
ขา TxD ควบคมดวยคาสง BreakState
ขา DTR ควบคมดวยคาสง DTREnable
ขา RTS ควบคมดวยคาสง RTSEnable
ถาขาเหลานเปน TRUE จะใหเอาตพตเปนลอจก “0”
โปรแกรมยอย Button2_Click() ใชเพอออกจากโปรแกรม
PC Interface : UCON-UART
The Prototype Electronics 55
Public Class Form1 Dim Even_ As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Port_Name As String() Dim Name_ As String
‘=========================================== ‘ กำหนดชอใหกบคอนโทรลตงๆ ‘=========================================== Me.Text = “Simple Digital Input” GroupBox1.Text = “Serial Port” Button1.Text = “Connect” Button2.Text = “E&xit” GroupBox2.Text = “Digital Input” RadioButton1.Text = “RxD” RadioButton2.Text = “RI” RadioButton3.Text = “DSR” RadioButton4.Text = “DCD” RadioButton5.Text = “CTS” Timer1.Interval = 200 Timer1.Enabled = False
‘=========================================== ‘ คนหพอรตอนกรมทตดตงภยในคอมพวเตอร ‘=========================================== ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList ComboBox1.Sorted = True Port_Name = IO.Ports.SerialPort.GetPortNames() For Each Name_ In Port_Name ComboBox1.Items.Add(Name_) Next ComboBox1.SelectedIndex = 0 SerialPort1.PortName = ComboBox1.Text End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If SerialPort1.IsOpen Then ‘ ปดกรสอสรของพอรตอนกรม ถพอรตนนเปดอย Timer1.Enabled = False SerialPort1.Close() Button1.Text = “Connect” ComboBox1.Enabled = True Else
SerialPort1.Open() ‘ เปดกรสอสรของพอรตอนกรม Button1.Text = “Disconnect” ComboBox1.Enabled = False Timer1.Enabled = True End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If SerialPort1.IsOpen Then ‘ ปดกรสอสรของพอรตอนกรมและออกจกโปรแกรม SerialPort1.Close() End If End End Sub
Private Sub SerialPort1_PinChanged(ByVal sender As Object, ByVal e As System.IO.Ports.SerialPinChangedEventArgs) Handles SerialPort1.PinChanged Even_ = e.EventType End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Even_ = IO.Ports.SerialPinChange.Break Then RadioButton1.Checked = True Else RadioButton1.Checked = False End If If Even_ = IO.Ports.SerialPinChange.Ring Then RadioButton2.Checked = True Else RadioButton2.Checked = False End If RadioButton3.Checked = SerialPort1.DsrHolding RadioButton4.Checked = SerialPort1.CDHolding RadioButton5.Checked = SerialPort1.CtsHolding End SubEnd Class
โปรแกรมท 2 โปรแกรมทดสอบรบคจกขอนพตของพอรตอนกรม
ทดสอบการทางาน
เมอตอวงจรเรยบรอย และเขยนโปรแกรมตามโปรแกรมท 2 แลว ใหสงรนโปรแกรมเพอทดสอบการทางาน หนาจอของโปรแกรมจะแสดงดงรปท 10 จากนนทดลองกดสวตชไลลาดบทละตว สงเกตการเปลยนแปลงของสถานะทหนาจอ
จากโปรแกรม 2 โปรแกรมนกคงพอเปนไอเดย นาเอาพอรต USB ไปควบคมอปกรณภายนอกอยางงายๆ ไดแลวนะครบ
รปท 10 หนตงโปรแกรม Simple Digital Input เมอสงรนใหทำงน
รปท 9 กรวงคอนโทรลตงๆ สำหรบโปรแกรมท 2
IO.Ports.SerialPinChange.CDChanged=ขาDCD
IO.Ports.SerialPinChange.DSRChanged=ขาDSR
IO.Ports.SerialPinChange.CTSChanged=ขาCTS
หนาทหลกของโปรแกรมยอยจะนาค าEventype ทเกดขนสงใหกบตวแปร Even_ เพอให Timer1 เปนตวแสดงสถานะท RadioButtonแทน
โปรแกรมยอย Timer1_Tick()
ไทเมอรเปนคอนโทรลทออกแบบมาเพอใหเกดเหตการณตามชวงเวลาทกาหนด (Interval)ซงสาหรบโปรแกรมนตงคา Interval ไวเทากบ200 ซงหมายถงจะมเหตการณเกดทกๆ 0.2วนาท โดยจะทาการนาคาตวแปร Even_ ทอานคาไดมาเปรยบเทยบ แลวไปแสดงสถานะทปมRadioButtonแตสาหรบขาCTSDCDและDSRไมจาเปนตองเปรยบเทยบคาผานตวแปร Even_กไดเนองจากทง3ขามคาสงเฉพาะทเรยกตรวจสอบคาไดโดยตรงประกอบดวย
SerialPort1.CtsHolding
SerialPort1.CdHolding
SerialPort1.DsrHolding
ดงนนเฉพาะ 3 ขานในโปรแกรมจงใชการตรวจสอบคาโดยตรงไปยงRadioButton