ucon-uart in application (thai)

4
52 The Prototype Electronics ต�ดตออุปกรณภายนอกผาน พอรต USB ดวยบอรด UCON-UART ก่อนหน้านี้การอินเตอร์เฟสระหว่างคอมพิวเตอร์กับอุปกรณ์ภายนอกท�าได้ง่ายๆ ผ่าน พอร์ตอนุกรมหรือพอร์ตขนาน แต่เมื่อพอร์ตอนุกรมและพอร์ตขนานถูกตัดสิทธิ์ ไม่มีให้ใช้ งานเหลือเพียงพอร์ต USB ซึ่งเข้าถึงได้ยาก บอร์ด UCON-UART จึงถือก�าเนิดขึ้นเพื่อแก้ ปัญหานี้ โดยแปลงกายตัวเองให้เปนพอร์ตอนุกรม มาดูกันว่าการเขียนโปรแกรมควบคุม จะง่ายเหมือนกับพอร์ตอนุกรมหรือไม่ บอร์ด UCON-UART บอร์ด UCON-UART เปนบอร์ดแปลงพอร์ต USB ให้เปน พอร์ตอนุกรมหรือ COM PORT โดยหัวใจหลักคือชิปเบอร์ FT232RL ของบริษัท FTDI สามารถเขียนโปรแกรมติดต่อได้ 2 รูปแบบคือ VCP (Visual Com Port) ที่จ�าลองการท�างานของพอร์ตอนุกรมสมบูรณ์ แบบมีขาสัญญาณออกมาให้ใช้งานครบทั้ง 9 เส้น และแบบ D2xx ที่ก�าหนดขาพอร์ตให้เปนอินพุตเอาต์พุตได้อย่างอิสระ ในบทความ ตอนนี้จะใช้งานในรูปแบบของ VCP ก่อน โดยรูปร่างของบอร์ด UCON-UART และขาต่อใช้งานต่างๆ ในโหมด VCP แสดงในรูปที่1 รูปที่ 1 บอร์ด UCON-UART และข�สำ�หรับต่อใช้ง�น รูปที่ 2 วงจรแสดงก�รเชื่อมต่อบอร์ด UCON-UART เข้�กับ LED เพื่อทดสอบก�รส่งค่�เอ�ต์พุต รูปที่ 3 แสดงก�รเชื่อมต่อวงจรจริงบนเบรดบอร์ด FTDI VUSB GND UCON-UART USB to UART Converter 3.3V 3.3V VUSB DTR TxD TxD DTR RTS RTS RxD RI DSR DCD CTS SLEEP TXDEN PWREN TXLED Rx Tx USB RXLED RESET GND LED1 R1 510 R2 510 R3 510 LED2 LED3 FTDI VUSB GND UCON-UART USB to UART Converter 3.3V 3.3V VUSB DTR TxD RTS RxD RI DSR DCD CTS SLEEP TXDEN PWREN TXLED Rx Tx USB RXLED RESET GND Proto Knowledge PC Interface โดย : กฤษดา ใจเย็น

Upload: innovative-experiment-coltd

Post on 13-Mar-2016

233 views

Category:

Documents


9 download

DESCRIPTION

ติดต่ออุปกรณ์ภายนอกผ่านพอร์ต USB ด้วยบอร์ด UCON-UART

TRANSCRIPT

Page 1: UCON-UART in Application (Thai)

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

โดย:กฤษดาใจเยน

Page 2: UCON-UART in Application (Thai)

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

Page 3: UCON-UART in Application (Thai)

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

Page 4: UCON-UART in Application (Thai)

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