4.2 常用通訊之 API 函式
4.2.12 GetCommModemStatus
BOOL GetCommModemStatus(
hFile:串列埠的 Handle 值,此值即為使用 CreatFile 函式 後所傳回的值。
IpEvtMask:指向所偵測到的狀態的參數位址,32 位元長度,
訊息常數如下所示。
MS_CTS_ON:CTS 腳位升至高電位。
MS_DSR_ON:DSR 腳位升至高電位 MS_RING_ON:RI 腳位升至高電位。
MS_RLSD_ON:CD 腳位升至高電位。)
4.3 使用流程
PC 端所使用的是由 Borland C++所撰寫的程式 其主要功能有:(如下圖所示)
當我們只有一部電腦要測試此程式功能是否正確時
要先把 COM1 的 pin2(接收)跟 pin3(傳送)互接,這樣當按下[傳 送]這個鈕時,pin3 所送出的資料會被 pin2 所收到,而顯示在 此成市右下角的[資料街收區]
pin4(DTR)跟 ping6(DSR)、pin7(RTS)跟 pin8(CTS)這兩 組也互接,當按下[DTR][RTS]時,所對應的 DSR,CTS 也會收到 訊號,這樣的測試不只是在程式的是介面上有所動作,真正的拿 三用電表去測時,會發現是有訊號送出的。
4.4 流程圖
開始
以 CreatFile 開啟 通訊埠
開啟成功?
通訊參數設定
其他函式操作 繼續操作?
顯示錯誤訊息
結束
以 CloseHandle 關閉通訊埠 否
是
否
是
第五章 電壓調變
目的:
因為 UP1 只能接受 0~5 伏特的電壓,但是 RS232 送出的 邏輯 1 為+12V、邏輯 0 為-12V,所以無法直間將兩端連 結起來,必須要經過電壓調變的動作讓 PC 端所送出的電 壓能落在 0~5 伏特之間,才不會損壞 UP1。
做法:
在此我們用了網路上所找到的一個連接方法,這個圖 就在 5.2 節(P.16),所以我們在 PCB 上洗出了這個電 路,用來連接兩端。
5.1 元件介紹:
所使用的 IC 皆為 Motorola 所生產的,型號分別為 MC1488,MC1489。
MC1488
此顆 IC 是將 UP1 端(FPGA)欲傳送給電腦的訊 號,經過電壓調變,讓 RS232 能分辨出 Logic 0 和 Logic 1
因為 UP1 可承受的最大電壓有 限,此 IC 的用處就是介於電腦端 傳輸資料給 UP1 時,將 RS232 的 電壓調變成 UP1 可接受的範圍之 內。
MC1489
5.2 整體架構圖
FPGA
5Volts 5Volts
Resistor8K
MC1488
MC1489
+12Volts
-12Vlots
Resistor3K
Capacitor 330pf
第 6 章 VHDL 模擬圖
▲ 上圖為縮小圖
▲當 counter 在 171 變到 0 時,會把資料傳入 q
第 7 章 RS232 之中的問題與解決辦法
7.1 電壓的問題
我們的專題是利用 RS232 的傳輸把 8bit 數字傳到 UP1 上,基 本上 code 沒有太大問題,但在連接上卻有了問題,因為 PC 端送 出的電壓是 12V,而 FPGA 端的電壓卻是 5V,所以我們必須做降 壓的動作。其實已經有簡易的解決方法,有一塊較高階的板子已 經解決掉 RS232 的電壓問題,只要將兩端直接連接就可,不過 我們決定自己完成這個部分,所以從 PC 到 FPGA 中間接上 MC1489,而從 FPGA 到 PC 中間則是接 MC1488。然而還有電源的 問題,就是 MC1489 上要接上 5V 的電源,而 MC1488 上則是要接 上 12V 和-12V 的電源,5V 是沒問題,但-12V 就有問題了,為了 解決-12V 這個問題我們使用了主機板所使用的 power,因為有提 供正負 12 的電源。
第 8 章 個人心得
8.1 張原銘心得
開始作這個專題時,讓我真的覺得萬事起頭難,因為雖然 RS232 在生活中使用電腦時,都會不經意的用到,可是我對他卻沒有 一個大概的認識,一直到開始作這專題時,必須要開始收集相關的資 料,才慢慢開始了解這個最普遍的介面。
因為我們是兩個同學分工合作,我是負責 PC 端將資料送出 的,而鄭凱元同學是負責 RS232 的 VHDL 也就是 UP1 端,當我們各自 完成自己的工作時,卻發現無法直接將兩端組合起來,因為電壓的問 題,讓我們必須要去接觸兩個從沒用過的 IC,來架在 PC 端和 UP1 間,
就算找到他的資料,我們也不知道要如何使用,在這個階段,也急不 得,只能先多看一點相關的資料,在心裡有個大概的架構,才開始著 手畫這電路,接著焊接上去就完成了。
這個專題不僅讓我了解 Rs232,也讓我接觸到,資訊系較少 接觸到的硬體部分,像是洗 PCB 電路板。雖然我的的專題並不是很驚 天動地的題目,不過學著從學習,計畫到完成一件事情是很可貴的經 驗,我覺得這才是專題的意義所在。
8.2 鄭凱元心得
這次的做專題的過程中,我覺得我學到了不少東西,一方面 是有關 RS232 傳送資料的方法,也利用到 MC1488 和 MC1489 來升 降壓,也才有機會洗電路板,洗電路板的經驗是讓我覺得最有趣 的時候,也是最有成就感的時候,還有有關 VHDLcode 的知識,
雖然 code 是直接利用學長給我的 code,但也是有下了一番工夫,
才開始對 RS232 的傳輸模式有些基本的概念。
我覺得收穫最大的是學會如何與人溝通和合作,就像王益文 老師所說的,台灣的學生不懂得表達自己的想法,所以別人不懂 你知道多少東西,也更不可能和你有進一步的合作。這一次專題 能夠完成,現在想起來還是王益文老師給我們的機會,實在非常 感謝老師。除此之外,和學長的互動,以及和團隊的合作都是密 不可分的,我很高興有機會能夠完成這次的專題,一切的努力都 是值得的。
附錄A.Altera Max + plus II 工具簡介
我們使用Altera 公司所開發的MAX plus II 的FPGA 設 計軟體,來說明如何使用VHDL 電路設計語言,來設計Altera 公司所提供的FPGA ,我們所使用的版本為10.1 版。
。MAX+Plus II 所支援的功能項目
1.Graphic Editor 2.Symbol Editor 3.Waveform Editor
4.Text Editor (with AHDL or VHDL templates) 5.Floorplan Editor
6.Compiler 7.Simulator 8.Timing Analyzer
操作的流程如下:
[STEP 1]:建立專案
選擇[File\Project\Name] 出現如下的對話匡
這時鍵入你所要建立的專案名稱,在這要注意的是這個 名稱, 一定要和你的VHDL主檔案的檔名一樣,否則將 無法順利編譯。
[STEP 2]:建立 VHDL 檔(*.vhd)
選擇[File\New] 出現如下的 New 對話盒,
點選 Text Editor file,表示要建立文字型態的檔案,
按 OK 決定後,會出現一個空白的文字編輯器,接著再 選擇[File\Save As] 出現如下對話盒
將副檔名改為VHD後存入即可(副檔名要自己改)。現在 你已經可以開始建立你的VHDL元件了。
VHDL 除錯
在除錯方面,Max+Plus2 並沒有提供很直接的工具,這使得 如果我們想知道中間的傳輸訊號值時,變的不方便,我的作法是 將想要知道的訊號線,在其名稱前加上 “db” 當做這元件的一隻 輸出腳,例如:有一訊號 WriteReg ,我想知道他的值,但是他 並非一般的輸出腳,於時我便會做一隻假的輸出腳,名為
dbWriteReg 並將他加到元件的輸出中。
但是如果元件的接腳太多,或是元件太大,這時如果加太多 的”db”腳會使編譯器無法順利完成Compiler 的動作,這時就只 好刪除一些”db”腳,或換一顆較大的模擬晶片。
[STEP 3]:編譯程式
選擇[Max+Plus2\Compiler]出現Compiler對話盒,
按下Start 開始編譯,有錯誤時,將在下面產生Message
Box 來告知你,當這六大編譯項目都通過時,你就可以 開始檢驗你的時序圖了。
[STEP 4]:建立時序分析圖 (*.scf)
選擇[File\New] 出現剛才的New對話盒,這時候選擇 WaveFormEditor file 出現波形分析器,將要分析的接腳 用加入這個檔案中,給定輸入的準位值,即可。
[STEP 5]:時序圖的分析
選擇[Max+Plus2\Simulator] 出現如下的對話匡
決定Start Time和 End Time後按下Start便可進行分 析,點選 Open SCF便可觀察結果。
[STEP 6]:Floorplan
選擇[Max+Plus2\Floorplan Editor] 出現如下
完成 Floorplan 後重新 Compile 一次,再把排線與 UP1 和電腦 print port 連接。
[STEP 7]:程式的燒錄
在 Menu bar->選取 MAXplus II->選取 programmer->按 cancel 取消 hardware 設定
在 Menu bar->選取 options ->選取 hardware setup -> 在 hardware type 中選取 byteblaster(MV)->確定 parallel port 為 LPT1 後按 OK
依照下面步驟設定燒錄檔:
在 Menu bar->選取 JTAG -> 選取 Multi Device JTAG Chain Setup ->在 programming file name 中點選 Select programming file 點選 lab1.sof 後按 OK-> 在 Multi Device JTAG Chain Setup 中按下 Add->按下 JCF 儲存->儲存完畢 後按下 OK,最後在 programmer 中按下 program 即進行 燒錄。圖形如下: