專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命
提供開發(fā)工具、應用測試 完善的開發(fā)代碼案例庫分享
從全面的產(chǎn)品導入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!
單片機PIC16C7X在低功耗識別抄表的應用
摘要:介紹一種低功耗的自動識別抄表系統(tǒng)。詳細介紹其結(jié)構(gòu)和工作原理、設(shè)計思相,并給出兩種信息鈕的操作方法。
關(guān)鍵詞:低功耗 識讀器 通信座 接觸型iButton1990A 感應型TK5550
目前,許多行業(yè)的抄表系統(tǒng),一般都停留在手工抄寫然后人工匯總的水平上。隨著經(jīng)濟改革的深入發(fā)展,人們要求信息及時、準確、全面;顯然,手工抄寫不能滿足經(jīng)濟生活的要求。本文介紹了一種用單片機控制的抄表系統(tǒng),可以記錄多項信息,具有低功耗、低成本、便于攜帶、易于操作等特點,非常適合電廠、化工廠等相關(guān)行業(yè)的抄表系統(tǒng)。
1 系統(tǒng)的總體結(jié)構(gòu)及工作原理
該系統(tǒng)由信息訊、識讀器、通信座、計算機組成。將一個包含特定標識信息的“信息鈕”安放在某個固定位置上,該位置可能是一臺設(shè)備或一個部位,設(shè)備上安裝有許多表顯示設(shè)備運行狀況。工作人員定時或不定時記錄表上數(shù)據(jù),用攜帶的“識讀器”先讀信息鈕,提取信息鈕中的信息并儲存在“識讀器”內(nèi),信息鈕中的信息標識該設(shè)備,然后把該設(shè)備上各表的讀數(shù)逐薦通過識讀器上鍵盤輸入并儲存在“識讀器”內(nèi);巡檢結(jié)束時,用“通信座”通過網(wǎng)絡(luò)將存儲在“識讀器”內(nèi)的信息傳送至計算機進行處理,技術(shù)人員和管理人員就可準確掌握設(shè)備現(xiàn)場情況,并及時了解設(shè)備運行和管理中存在的問題。由于信息鈕中的信息具有唯一、無法仿制、無法人工偽造的特點,一個信息鈕只能標識一臺設(shè)備或一個部位,并且識讀器內(nèi)含有時鐘芯片,讀信息鈕的同時記錄當時時間。該系統(tǒng)用于管理和技術(shù)分析非常方便實用。考慮到有些設(shè)備和部門的現(xiàn)場情況,通信座和計算機之間采用管程和遠程兩種傳輸方式,近程通過RS232串口傳輸,遠程利用MODEM通過電話線傳輸。在該系統(tǒng)中,低功耗、便攜式識讀器的設(shè)計和制造是核心和關(guān)鍵。
2 低功耗便攜式識讀器的設(shè)計
2.1 設(shè)計原則
本系統(tǒng)中識讀器的設(shè)計要求有兩點:(1)小巧玲瓏,方便攜帶;(2)電池供電,功力量一定要小,延長電池使用壽命。根據(jù)這兩點要求,在設(shè)計中一是采用集成度高的貼片封裝芯片,二是芯片的外圍元件盡可能要少。通過對幾種型號CPU的篩選,我們在本系統(tǒng)中采用美國Microchip公司的PIC16C74作CPU,該芯片特別符合上述要求。PIC16C74有44個管腳,I/O管腳多,內(nèi)部集成了很多功能,可以節(jié)省很多外圍元件,減小系統(tǒng)功耗。
2.2 PIC16C74單片機
PCI16C74單片機是一種低功耗、高性能的芯片。由于采用全靜態(tài)CMOS設(shè)計,電源操作能耗很低,且非??煽?。片內(nèi)有上電復位電路、監(jiān)視定時器電路和RC振蕩器電路選擇等,不需要增加價格高的片外支持的功能元件,從而降低了系統(tǒng)成本和系統(tǒng)功耗。PIC的小晶片尺寸加上Microchip公司先進的CMOS技術(shù)使芯片具有很寬的性能范圍以及低工作電流(典型值:在3V,32kHz時工作電流為15μA)和極小的待命狀態(tài)電流(休眠方式3V工作情況下大于1μA)。低電流特性應用于長壽命電池供電的是非常理想的。
該芯片內(nèi)部帶有8個高速A/D轉(zhuǎn)換通道,在需要進行A/D轉(zhuǎn)換時,可以省去附加的A/D轉(zhuǎn)換外圍部件。
采用先進的類—RISC結(jié)構(gòu)、Harvard雙總線結(jié)構(gòu)、兩級指令流水線結(jié)構(gòu),具有8級堆棧,多個內(nèi)部和外部中斷位,指令只有35條,易于編程,軟件代碼少,執(zhí)行速度快。
該芯片還具有休眠(SLEEP)功能,執(zhí)行一條SLEEP指令,芯片就進入休眠方式??梢酝ㄟ^內(nèi)部或外部中斷方式喚醒芯片,使芯片重新進入正常工作狀態(tài)[2]。
3 讀信息鈕
在本系統(tǒng)的設(shè)計中,為了使產(chǎn)品應用范圍更寬、使用面更廣,考慮到各個行業(yè)有不同的要求,不同地點的應用環(huán)境又有很大差異,而信息鈕又是安裝在應用現(xiàn)場,所以設(shè)計的識讀器可以讀取兩種型號信息鈕,根據(jù)用戶的實際情況推薦可行的方案。這兩種型號信息鈕是:(1)接觸型iButton1990A;(2)感應型TK5550。這兩種型號信息鈕在實際安裝時都加上特制的護套,增強信息鈕耐腐蝕性、抗沖擊性,護套有不同的形狀,使安裝施工更加方便。
3.1 讀接觸型iButton1990A
iButton1990A接觸型存儲器是美國Dallas公司生產(chǎn)的自動識別芯片。讀寫簡單,只用一條數(shù)據(jù)線和一條地線,采用一線協(xié)議完成命令和數(shù)據(jù)的傳送。識別系統(tǒng)依靠存在脈沖檢測iButton1990A的存在,操作時需要的能量從數(shù)據(jù)線上“竊取”或從嵌入的鋰電池獲得。
接觸型iButton1990A內(nèi)部包括64位ID,其中前8位是家族碼,接下來是48位序列碼,這48位序列碼是唯一的,每個信息鈕各不相同,最后8位是校驗和,校驗和是對前56位作CRC校驗。操作時采用一線協(xié)議完成命令和數(shù)據(jù)的傳送。信息鈕上64位序列碼是由信息鈕生產(chǎn)廠家生產(chǎn)時用激光做的,用戶只能讀,不能寫,也即信息鈕上信息不能人為仿造和更改,保證信息鈕信息的唯一性和可識別性。
當iButton1990A被喚醒,接受到33H命令后讀iButton1990程序如下:
readbyte:
movlw 08h
movwf r2
bit_loop:
rrf r1,1
bcf porta,1
bsf rp0
bcf trisa,1
bcf rp0
bcf porta,1 ;為iButton1990A送低電平
nop
nop
nop
bsf rp0
bsf trisa,1 ;準備讀數(shù)據(jù)位
bcf rp0
nop
nop
nop
nop
nop
nop
bcf c
btfsc porta,1 ;取數(shù)據(jù)位放入進位位
bsf c
nop
movlw d'15' ;延時等待下一次讀
movwf r3
decfsz r3,1
decfsz r2,1
nop
goto bit_loop
rrf r1,1
nop
movlw d'15' ;延時等待下一次讀
movwf r3
decfsz r3,1
goto $-1
return
3.2 讀感應型TK5550
TK5550是由美國TEMIC公司開發(fā)的非接觸式讀/寫識別IC,其無線載頻范圍RF為100~150kHz。該芯片上有264位EEPROM,分成8個區(qū),每區(qū)33位,可以從基站按區(qū)讀和寫。每個區(qū)的第0位為LOCK位,該位被置1時這個區(qū)的數(shù)據(jù)不能再修改,且LOCK位無法恢復。LOCK位不隨其它位一起動射到基站,用戶實際使用的數(shù)據(jù)是每區(qū)的后32位,共256位。0區(qū)是為設(shè)置IC的操作模式而保留的。7區(qū)是口令區(qū),在口令加密功能啟動時這里存放IC的讀寫控制密碼,當加密功能沒有使用時該區(qū)也可以存放用戶數(shù)據(jù)。其它6個區(qū)用戶可以存放數(shù)據(jù)[3]。
感應型TK5550可以從基站按區(qū)讀和寫。TK5550可以設(shè)置成多種工作模式,所以TK5550操作非常方便,使用時可任選一種。另外,因TK5550可以寫,在設(shè)計時可以根據(jù)用戶要求把用戶信息編為特殊的碼,讓用戶看到信息就能夠確認信息所表示的含義。
下面給出在設(shè)置為曼切斯特碼時,讀TK5550的子程序:
tll equ 0x0e
tlh equ 0x19
thl equ 0x1c
thh equ 0x33
tdl equ 0x32
tdl 1 equ 0c0e
read_ok
movlw 08h
movwf r5
btfsc port_d,0 ;首先判斷是1,0?
goto read_3
movlw 00h
movwf r4
read_1
movlw tdl 1
xorwf r4,0
btfss status,z
goto read_2
goto trad_mo
read_2
btfsc port_d,0 ;確認0
goto reqd_6
incf r4,1
goto read_1
read_3
movlw 00h
movwf r4
read_4
movlw tdl 1
xorwf r4,0
btfss status,z
goto read_5
goto read_mo
read_5
btfss port_d,0 ;確認1
goto read_7
incf r4,1
goto read_4
read_6
bcf status,c
goto