趙建新
(哈爾濱華德學(xué)院 黑龍江省哈爾濱市 150025)
RS485 通信標(biāo)準(zhǔn)自從上世紀(jì)80年代以來,以其傳輸距離遠(yuǎn)、抗干擾能力強(qiáng)、布線成本低等優(yōu)點(diǎn),在工業(yè)控制領(lǐng)域中得到了廣泛應(yīng)用[1]。工業(yè)領(lǐng)域中的PLC、變頻器、電能表等設(shè)備大多采用RS485 通信標(biāo)準(zhǔn),為了方便用戶實(shí)時(shí)監(jiān)測這些設(shè)備的狀態(tài)信息,設(shè)計(jì)了一種RS485 通信標(biāo)準(zhǔn)的顯示屏,可以讀取工控設(shè)備的狀態(tài)信息并實(shí)時(shí)顯示到顯示屏上,在工控領(lǐng)域有著廣闊的應(yīng)用空間。
系統(tǒng)硬件組成框圖如圖1所示。
如圖1所示,工控設(shè)備通過RS485 接口把數(shù)據(jù)傳輸至MCU,MCU 將數(shù)據(jù)解包后,得到需要顯示的數(shù)據(jù),如果數(shù)據(jù)中包含文字則會(huì)從字庫芯片中查找字模,最后將數(shù)據(jù)顯示到12864 液晶屏上[2]。
MAX3485 是MAXIM 公司生產(chǎn)的一款3.3V 供電的RS485 電平收發(fā)芯片,靜態(tài)電流僅300uA,最高可達(dá)到2.5Mbps 傳輸速度,使用廣泛。MAX3485 應(yīng)用電路如圖2所示。
MAX3485 的2 腳和3 腳是使能管腳,低電平為接收狀態(tài),高電平為發(fā)送狀態(tài),因此2 腳和3 腳可以短接,僅需MCU 一個(gè)IO口即可控制。
STC12LE5A60S2 是STC 公司生產(chǎn)的一款3.3V 供電的單時(shí)鐘/機(jī)器周期(1T)的MCU芯片,指令集和管腳兼容傳統(tǒng)8051單片機(jī)(如圖3所示),速度比傳統(tǒng)51 單片機(jī)快6~12 倍,在工業(yè)控制,強(qiáng)干擾場合比較適用。
本系統(tǒng)運(yùn)行中涉及到字庫讀取、字模運(yùn)算等操作,對(duì)MCU 運(yùn)算性能要求高,因此速度快性能強(qiáng)的STC12LE5A60S2 是系統(tǒng)正常工作的保障。
本系統(tǒng)選用GT30L24A3W 為字庫芯片,2.7~3.6V 供電,功耗低,SPI 串行總線接口,操作方便。該字庫芯片內(nèi)建12*12、16*16、24*24、32*32 點(diǎn)陣字庫,支持GB18030 簡繁體漢字、JIS0208日文字符集、KSC5601 韓文字符集等180 國外文字符,并且兼容以上各種文字的Unicode 字符集。橫置橫排的字模排列格式[3]。用戶通過字符內(nèi)碼,計(jì)算出該字符所對(duì)應(yīng)點(diǎn)陣在芯片中的地址,然后可以從該地址連續(xù)讀出字符點(diǎn)陣信息。
片選輸入(CS#):CS#的下降沿為串行數(shù)據(jù)傳輸開始信號(hào),傳輸期間必須保持低電平,兩條指令之間為高電平。
串行數(shù)據(jù)輸出(SO):數(shù)據(jù)從芯片輸出,在時(shí)鐘的下降沿移出。
串行數(shù)據(jù)輸入(SI):數(shù)據(jù)從串行輸入芯片,在時(shí)鐘的上升沿移入。
串行時(shí)鐘輸入(SCLK):數(shù)據(jù)在時(shí)鐘上升沿移入,在下降沿移出。
總線掛起輸入(HOLD#):該信號(hào)變低電平并且SCLK 信號(hào)為低電平時(shí),進(jìn)入掛起狀態(tài);該信號(hào)變高電平并且SCLK 信號(hào)為低電平時(shí),結(jié)束掛起狀態(tài)。
表1:GT30L24A3W 指令參數(shù)表
圖1:系統(tǒng)硬件電路框圖
圖2:MAX3485 應(yīng)用電路圖
圖3:STC12LE5A60S2 管腳圖
本系統(tǒng)選用深圳晶聯(lián)訊電子有限公司生產(chǎn)的JLX12864G-1503型號(hào)的液晶屏,使用方便,顯示清晰,廣泛應(yīng)用于人機(jī)交互面板。
JLX12864G-1503 液晶模塊選用矽創(chuàng)公司生產(chǎn)的ST7567 驅(qū)動(dòng)IC,功能強(qiáng),穩(wěn)定性好,接口豐富,可以采用4 線SPI 或并口連接外部MCU(6800 時(shí)序和8080 時(shí)序可選)。
圖4:系統(tǒng)整體運(yùn)行流程圖
工業(yè)領(lǐng)域中的PLC、變頻器、電能表等設(shè)備通信協(xié)議一般為MODBUS 協(xié)議,這種協(xié)議沒有包頭包尾作為標(biāo)志,不知道該幀是否接收完成,一般采用超時(shí)方式。接收超時(shí)應(yīng)根據(jù)自己實(shí)際應(yīng)用加入,現(xiàn)在大多數(shù)都是硬件中斷接收,一進(jìn)中斷就將數(shù)據(jù)拷到接收緩存中,等有空再處理這些數(shù)據(jù)就可。但是如果利用循環(huán)查詢時(shí),最好加入超時(shí),讓接收函數(shù)能夠在一段時(shí)間內(nèi)持續(xù)檢測是否有數(shù)據(jù)過來。
大部分串口應(yīng)用程序都是以一字節(jié)為單位傳輸,當(dāng)檢測到特定字符(如換行)才判定一幀數(shù)據(jù)結(jié)束。這樣做的問題在于一旦特定字符受干擾丟失,會(huì)導(dǎo)致MCU 誤判。該系統(tǒng)需要以幀為單位傳輸數(shù)據(jù),只要字符與字符之間間隔超過一定的時(shí)間,那么就判定這一幀數(shù)據(jù)結(jié)束。
GT30L24A3W 使用SPI 接口和MCU 通信,該字庫芯片的讀取操作只有兩種模式:正常模式和快速模式。指令參數(shù)如表1所示。
正常模式下,需要用指令碼來執(zhí)行每一次操作。讀取操作如下:
(1)首先將片選信號(hào)(CS#)拉低,串行數(shù)據(jù)輸入(SI)發(fā)送1 字節(jié)的命令字(0x03)和3 個(gè)地址,每一位在串行時(shí)鐘輸入(SCLK)上升沿被鎖存。
(2)然后該地址的字節(jié)數(shù)據(jù)通過串行數(shù)據(jù)輸出引腳(SO)移位輸出,每一位在串行時(shí)鐘輸入(SCLK)下降沿被移出。(3)讀取字節(jié)結(jié)束后,將片選信號(hào)(CS#)拉高,結(jié)束本次操作??焖倌J较拢瑯有枰弥噶畲a來執(zhí)行每一次操作。讀取操作如下:
(1)首先將片選信號(hào)(CS#)拉低,串行數(shù)據(jù)輸入(SI)發(fā)送1 字節(jié)的命令字(0x0B)和3 個(gè)地址以及一個(gè)字節(jié)的Dummy,每一位在串行時(shí)鐘輸入(SCLK)上升沿被鎖存。
(2)然后該地址的字節(jié)數(shù)據(jù)通過串行數(shù)據(jù)輸出引腳(SO)移位輸出,每一位在串行時(shí)鐘輸入(SCLK)下降沿被移出。
(3)如果片選信號(hào)(CS#)持續(xù)保持為低,則下一個(gè)地址的字節(jié)數(shù)據(jù)繼續(xù)通過串行數(shù)據(jù)輸出引腳(SO)移位輸出。
以12×12 點(diǎn)陣為例,給出從首地址fontaddr 讀出12×12 點(diǎn)陣字符數(shù)據(jù)的程序操作。
(1)text[i]為漢字GB2312 編碼的高8 位。
(2)text[i+1]為漢字GB2312 編碼的低8 位。
(3)fontaddr 為漢字首地址。
(4)0x3cf80 + 376*24 為12×12 漢字點(diǎn)陣起始地址。
(5)0x3cf80 為12×12 全角字符點(diǎn)陣起始地址。
串口接收到一幀數(shù)據(jù)后,根據(jù)這一幀數(shù)據(jù)中的字符GB2312 碼,計(jì)算出該字符在字庫芯片中的首地址,取出字模并顯示到液晶屏上。系統(tǒng)整體運(yùn)行流程圖如圖4所示。
使用STC12LE5A60S2 單片機(jī)芯片和GT30L24A3W 多國語言字庫芯片設(shè)計(jì)的LCD12864 顯示器,顯示正常,穩(wěn)定可靠。不足之處在于屏幕尺寸小,顯示文本內(nèi)容有限。