摘要:文中介紹基于AVR單片機的一種比較通用的聯機系統統分器的軟、硬件設計。系統采用主從式結構,主機和從機均以單片機為核心控制器,主機提供多級中英文菜單滾動顯示、矩陣式鍵盤輸入、微型打印機接口輸出等,通過串行通信對多臺從機采集到的數字信號進行實時匯總統計,在實際應用中運行穩定可靠,可擴展性好。
關鍵詞:AVR單片機;串行通信;聯機系統
中圖分類號:TP338文獻標識碼:A文章編號:1009-3044(2008)31-0971-03
A Design of Counter in Online System Based on AVR Single Chip
CHENG Tian-bao, TANG Ping, LI Hui-wu
(Guangdong Industrial University, School of Automation, Guangzhou 510006, China)
Abstract: The paper introduces a design of Online System’s counter based on AVR single chip ATmega16 and ATmega8. The counter consists of master and slave boards in which AVR chips was used as the core controller. The master single chip offered control function, such as Chinese and English control menu, matrix keyboard input, mini-printer output and gathering digital signals from slave single chips through serial communication. It works well in actual use and has perfect performance.
Key words: AVR single chip; serial communication; online system
1 引言
目前在各行業中以計分為主的各終端工作狀態,或是獨立工作,或是聯機工作,均需要計算上分下分并進行統計的功能,為了能夠正確及時統計各終端的計分情況,省去人工匯總統計的繁瑣,本文研究并設計了一種較為通用的基于AVR單片機的聯機系統統分器,采用一臺主機多臺從機組成的多機通信系統,在滿足各終端數字信號采集的基礎上,主機提供多級中英文菜單功能選擇操作,控制主機和從機的各種工作狀態。
AVR系列單片機是Atmel公司研發的增強型內置Flash的RISC精簡指令集高速8位單片機,AVR單片機系統設計具有開發周期短、性價比高、可靠性好、功能強大等特點,且為系統的設計及程序的升級和維護提供極大的方便。ATmega16和ATmega8在此系列中性價比較高,用于設計該系統能夠滿足實際的要求。
2 聯機系統統分器的結構及功能
2.1 系統結構
本統分器由主機和從機兩部分組成,主機與從機之間采用串行通信的聯機系統通信模式。主機主要負責操作界面的顯示、矩陣式鍵盤的輸入、打印機接口的輸出、串行通信接口的輸入/輸出等,從機主要負責終端數字信號的采集、信號采集結果的顯示、串行通信接口的輸入/輸出等。主從機的總體結構圖分別如圖1和圖2所示。
■
圖1 主機的總體結構圖 圖2 從機的總體結構圖
2.2 系統功能與特色
本系統主機的功能與特色主要包括:1) 提供菜單選擇模式進行人機交互操作,支持中英文操作菜單;2) 提供數據查看加密,不同的操作權限提供不同的加密處理;3) 提供密碼確認換期統計;4) 提供實時時鐘校正系統時間以及記錄換期時間;5) 提供打印最近10期各從機數據匯總統計列單;6) 提供詳細的數據查詢選項,如當期數據統計情況、歷史數據統計情況等;7) 提供查詢各終端工作狀態。
本系統從機的功能與特色主要包括:1) 提供終端數字信號采集顯示,由主機控制清零;2) 提供數字信號換算處理;3) 提供更改數字信號換算比例;4) 提供掉電數據保護。
3 聯機系統統分器硬件設計
3.1 控制芯片
控制芯片采用ATMEL公司ATmega16(主機)和ATmega8(從機)單片機,它們是基于AVR內核,采用RISC結構,低功耗CMOS的8位單片機,單時鐘周期指令,可達到接近1MIPS/MHz的性能。 ATmega16具有16KB在系統編程/應用程序(ISP/IAP)Flash程序存儲器、512字節的E2PROM、1K字節的片內SRAM、32個8位通用工作寄存器、32個可編程的I/O口、3個帶有比較模式靈活的定時器/計數器、1個可編程的串行接口USART、可編程帶內部振蕩器的看門狗定時器等。利用它在系統編程功能可以方便的進行程序的修改調試,參數可保存在內置的E2PROM中,內置看門狗定時器可以在程序異常時及時復位[1-2]。
3.2 電壓轉換及掉電預檢測電路
本系統主機和從機電路板供電電壓均為9V,經MC7805穩壓為5V供單片機使用。電壓轉換及掉電預檢測電路原理圖如圖3所示。
在系統意外斷電時,主機記錄當前匯總的上分、下分及差額,從機記錄當前終端的上分值、下分值,保證再次上電時主機和從機從斷電時刻的數值繼續工作。采用ATmega16/ATmega8內部的模擬比較器,注意選擇合適的電容和參考電壓,以保證有足夠的時間寫入需保存的參數。當模擬輸入端AIN1的電壓低于AIN0的電壓時,模擬比較器輸出ACO被設為1,觸發中斷,此時主機和從機需保存的參數被寫入單片機內部的E2PROM中[4]。
3.3 DS1302時鐘芯片電路
DS1302是DALLS公司推出的帶涓流充電的時鐘芯片,內含有一個實時時鐘/日歷和31字節靜態RAM,實時時鐘/日歷電路提供秒、分、時、日、月和年的信息,每月的天數和閏年的天數可自動調整,時鐘操作可通過AM/PM指示決定采用24或12小時格式,DS1302與單片機之間能簡單地采用同步串行的方式進行通信,僅需用到三個IO口線。主機上留有3.6V的電池座及電池,所以一旦時鐘運行后,掉電也不會停止。
3.4 液晶顯示接口電路
主機的液晶顯示模塊采用的液晶是HS12864-12_V4.0,該液晶有并行驅動方式和串行驅動方式兩種,本系統主機采用串行驅
動方式,僅占用單片機三個IO口,分別是串行的片選信號(LCD_CS)、串行的數據口(LCD_SID)、串行的同步時鐘(LCD_CLK),都與單片機的IO口直接相連。
從機的液晶顯示模塊采用的液晶是1602A_V1.0,該液晶有數據線4線傳輸驅動方式和數據線8線傳輸驅動方式兩種,本系統從機采用數據線4線傳輸驅動方式,即僅用數據線D4-D7,節省單片機4個IO端口的使用。
3.5 微型打印機接口電路
本系統主機使用的微型打印機是:Galaxy Miniature Printer YH245B,該打印機有并行驅動方式和串行驅動方式兩種,由于主機串口接口用于與從機通信,因此打印機采用并行驅動方式。并行驅動方式需要傳輸數據信號DATA1至DATA8,每個信號當其邏輯為“1”時為“高”電平,邏輯為“0”時為“低”電平;數據選通觸發脈沖信號線-STB,上升沿時讀入數據;打印機“忙”信號線BUSY,“高”電平表示打印機正“忙”,不能接收數據。
3.6 串行通信電路
從機與主機的通信采用RS-232C標準,此標準與單片機的TTL電平不兼容,故均采用MAXIM公司的MAX232進行電平轉換,外部接0.1uF電容以提高抗干擾能力。主機和從機串行口經電平轉換后,TXD和RXD交叉相連,GND直接相連,進行全雙工通信。為了增加ATmega16的驅動能力,采用反向器74LS14通過兩級反相來實現,從機除了用74LS14兩級反相驅動數據線外,可各加一個光耦器件6N135保證通信的可靠性[5]。
3.7 矩陣式鍵盤電路
要實現查看數據密碼加密、菜單功能切換、換期匯總統計等功能需要大量按鍵,因此采用4*4矩陣式鍵盤,僅占用8個IO端口,由于AVR單片機的IO口均有可選擇的內部上拉電阻,故鍵盤電路輸入口的上拉電阻可被省略。
3.8 數字信號采集電路
從機最主要的功能就是各終端計分信號的采集。實際應用中各工作終端引出來的計分信號電壓高達12V的脈沖信號,而AVR單片機IO端口一般只能承受5V以下的電壓,因此,計分信號通過分壓電路分壓濾波后輸入到單片機的外部計數端口。
4 聯機系統統分器軟件設計
考慮到系統可移植性及今后的維護和擴充,系統軟件采用C語言編寫,編譯工具采用ImageCraft的ICCAVR。ICCAVR是一種使用符合ANSI標準的C語言開發微控制器程序的工具,它是一個綜合了編輯器和工程管理的集成開發環境(IDE)。
本統分器的主機與從機軟件采用模塊化設計思想,包括主機軟件設計和從機軟件設計兩部分。
4.1 主機中英文菜單顯示軟件設計
主機通過液晶菜單顯示與矩陣式鍵盤輸 入實現人機交互操作。主機軟件系統的核心部分在于菜單結構的設計,采用一種基于節點編號的三叉樹狀菜單,其目錄結構體的定義如下:
typedef struct
{unsigned int KeyTab_MenuIndex;
//當前狀態索引號
unsigned int KeyTab_MaxItems;
//本級菜單最大條目數
unsigned int KeyTab_PressOk;
//按下\"回車\"鍵時轉向的狀態索引號
unsigned int KeyTab_PressEsc;
//按下\"返回\"鍵時轉向的狀態索引號
unsigned int KeyTab_PressDown;
//按下\"向下\"鍵時轉向的狀態索引號
unsigned int KeyTab_PressUp;
//按下\"向上\"鍵時轉向的狀態索引號
void (*CurrentOperate)();
//當前狀態應該執行的功能操作
}KeyTabStruct;
對于用戶按鍵操作切換不同菜單時,只需修改一個指向對應菜單節點的全局菜單節點指針即可。將菜單分為顯示型菜單和功能型菜單,顯示型菜單項用于切換各級菜單,功能型菜單則執行最底層菜單所對應的操作,通過設置標志位來區分中英文菜單。主機的菜單樹設計如圖4所示,此菜單設計結構具有較強的可擴展性和可移植性。
4.2 主機中斷服務程序設計
中斷服務程序包括內部定時器中斷,模擬比較器中斷和串口接收中斷。主機采用輪詢的方法與從機進行通信,內部定時器中斷服務程序負責每隔100ms發送地址信號給從機建立通信連接。模擬比較器觸發中斷后,關閉所有其它中斷,將需保存的參數寫入E2PROM。串口接收中斷服務程序主要是根據主機與從機通信協議的約定提取數據,用以更新操作界面的信息和參數顯示。
4.3 主機與從機通信協議的制定
主機采用輪詢的方法定時發送從機地址到總線上與從機建立通信連接,建立連接后根據通信協議進行數據傳輸。根據實際需要采用7字節為一個完整的數據幀,幀格式如表1所示。
主機在接收到從機的數據幀后檢驗符合協議則提取數據,并將從機發送過來數據幀的第2字節發回給從機,用以確認數據幀已經正確接收和更新從機下一數據幀的發送。
4.4 主機查看數據加密軟件設計
當用戶需要查看多臺從機的匯總統計數據或控制從機清零計分值時,通過鍵盤輸入密碼。單片機接收鍵入的代碼,并與存儲在E2PROM中的密碼進行比較,如果密碼正確,則允許用戶查看相應的數據或執行相應的控制;如果密碼不正確,允許用戶重新輸入密碼。最多可輸入三次,如果三次都不正確,單片機進入自鎖狀態,再次輸入正確密碼也無效(用管理員密碼解除自鎖狀態后輸入正確密碼方有效)。密碼分為管理員密碼(8位)和用戶密碼(4位)兩種,可起到重要數據的保密作用。
4.5 主機其他功能模塊軟件設計簡介
主機功能模塊還包括鍵盤掃描程序、微型打印機驅動程序、時鐘芯片應用程序等。鍵盤掃描程序采用動態掃描的原理,將輸入口置為高電平,然后分別依次置輸出口為低電平,并在某次某列輸出口為低電平時,判斷輸入口的電平是否有低電平,此稱為一次掃描。若所掃描的那列鍵盤有按鍵被按下,則會有輸入口的電平被拉低,然后根據輸入口的狀態判斷究竟是哪個按鍵被按下。微型打印機并行驅動占用較多IO端口,而驅動則較為簡單,根據使用手冊提供的打印控制命令即可完成各種打印功能。時鐘芯片采用三線接口與單片機進行同步通信,提供實時時鐘用于校準系統時間。
4.6 從機軟件設計簡介
從機軟件設計主要包括單片機內部定時器的應用、采集脈沖信號數換算比例的查看與更改。內部定時器0與定時器1采用外部計數模式用于采集終端的上下分脈沖信號,內部定時器2使用外部晶振來實現1秒定時更新定時器0與定時器1的TCNT0和TCNT1。采集脈沖信號數換算比例更改是通過鍵盤輸入來更改采集到脈沖信號數與發送到主機數據的比例,通過軟件編程實現三個按鍵“增加/查看”、“減少/更改”、“確定”的人機交互功能。
5 結論
本文介紹了采用ATmega16和ATmega8單片機作為主機和從機主控芯片的一種聯機系統統分器的設計,在實現主機多級菜單功能操作應用和從機正確采集終端脈沖信號的基礎上,實現主機與從機的多機聯機通信,實際應用中體現了該統分器運行的可靠性和穩定性。在此基礎上可作進一步研究將主機和從機之間的通信標準改為RS-485,提高數據傳輸距離(1.5Km以內);同時將主機控制芯片換為ATmega64,ATmega64擁有雙串口的功能,利用另外一個串口與PC機進行通信,充分利用PC機的資源,使該系統功能更加強大、完善,應用也更加廣泛。
該系統的創新點在于設計了一種較通用的聯機系統統分器,其可應用于娛樂行業各系統的聯機匯總,各銷售終端刷卡機的聯網統分等等。除此之外,在自動控制、儀器儀表等領域也可廣泛應用。
參考文獻:
[1] Atmel Corporation.ATmega16 Datasheet[EB/OL].http://www.atmel.com.
[2] Atmel Corporation.ATmega8 Datasheet[EB/OL].http://www.atmel.com.
[3] 沈文,Eagle lee,詹衛前.AVR單片機C語言開發入門指導[M].北京:清華大學出版社,2003.
[4] 馬潮.高檔8位單片機ATmega128原理與開發應用指南(上)[M].北京:北京航空航天大學出版社,2004.
[5] 王少卿,郭海珍,汪仁煌.基于AVR系列單片機的多機系統[J].微型電腦應用,2006,22(8):25-27.
[6] 雷鋼,王宏遠. 基于AVR單片機的控制系統設計[J].計算機與數字工程,2006,11(34):135-138.