基于ATmage8的打鈴器設(shè)計
0 引言
本設(shè)計根據(jù)學(xué)校常規(guī)教學(xué)和臨時教學(xué)活動(如考試等)對打鈴時間的要求,對打鈴器的設(shè)計進(jìn)行了改進(jìn),使其可分別工作在夏制、冬制、臨時三種模式下。每種工作模式支持多達(dá)80個時間點的打鈴輸出,并且根日期的設(shè)置,打鈴器可以自動切換冬夏兩種工作模式,實現(xiàn)不同時制的打鈴。如需臨時改變打鈴時間,將系統(tǒng)切換至臨時工作模式,設(shè)置打鈴時間即可,極大地簡化了打鈴器的操作。通過電路設(shè)計的優(yōu)化改進(jìn),提高了設(shè)備的可靠性和操作易用性,并在使用過程中表現(xiàn)出了較高穩(wěn)定性和實用性。
1 系統(tǒng)硬件設(shè)計
打鈴器由ATmega8單片機(jī)最小系統(tǒng)、DS1302時鐘電路、LED數(shù)碼顯示電路、串行口通訊電路、按鍵電路和打鈴輸出控制電路構(gòu)成,系統(tǒng)電路如圖1所示。
ATmage8單片機(jī)是美國ATEMEL公司的一款高性能、低功耗的8位AVR微處理器,內(nèi)含32個8位通用工作寄存器、RC時鐘振蕩電路、8K字節(jié)的系統(tǒng)內(nèi)可編程Flash、512字節(jié)的EEPROM及1K的SRAM。ATmega8內(nèi)含豐富的總線接口,并有專門的SPI接口,可方便實現(xiàn)與時鐘電路的連接。
時鐘芯片采用的是DS1302。它是一種高性能、低功耗、帶RAM的實時時鐘電路,可以對年、月、日、周日、時、分、秒進(jìn)行計時。在工作過程中,SCM對這些時鐘單元的數(shù)據(jù)循環(huán)讀取,將讀到的時間與打鈴時間比對,以確定是否打鈴。通過修改相應(yīng)的時間單元,可實現(xiàn)系統(tǒng)時間的調(diào)整。
時間顯示采用了4位共陽LED數(shù)碼管動態(tài)顯示方式,PC口與數(shù)碼管的段碼相連,PB0、PB1、PB6、PB7作為位選信號分別控制數(shù)碼管的共陽極;S1~S4分別與PD4、PD5、PD6、PD7相連,用于系統(tǒng)設(shè)置和時間調(diào)整;串行通訊接口電路分別與ATmega8的RXD和TXD引腳相連,通過與PC聯(lián)機(jī),可快速完成打鈴器的系統(tǒng)設(shè)置、打鈴時間設(shè)定及系統(tǒng)時間的調(diào)整;SPI接口與DS1302的數(shù)據(jù)I/O相連,從DS1302中讀取實時時鐘。
PD2與打鈴控制電路相連,電路如圖2所示,打鈴輸出時,該引腳被置為低電平,三極管Q1飽和導(dǎo)通,經(jīng)光耦隔離并觸發(fā)Q2飽和導(dǎo)通,繼電器JD1得電閉合,并觸發(fā)雙向晶閘管AK極導(dǎo)通,AC220V電源經(jīng)BT136的AK極,電鈴線圈得電響鈴。當(dāng)響鈴時間結(jié)束后,PD2被置為高電平,Q1截止,后續(xù)電路均失電,響鈴?fù)V埂?/p>
2 軟件設(shè)計
打鈴器上電后,SCM將從片內(nèi)的EEPROM中讀取設(shè)置參數(shù)進(jìn)行系統(tǒng)的初始化,然后讀取DS1302時間單元,將時間通過定時中斷程序顯示出來。在工作過程中,每個打鈴時間點用兩個字節(jié)分別表示小時和分鐘的時間值,當(dāng)秒單元為‘00’時,系統(tǒng)將調(diào)用一次打鈴時間比較子程序,以確定當(dāng)前時間是否打鈴,系統(tǒng)的主程序流程如圖3所示。
打鈴器可工作在冬制、夏制和臨時打鈴三種模式,每種工作模式最多可設(shè)置80個打鈴時間點,基本滿足任何工作場合要求。每個打鈴時間點用2個字節(jié)表示,3種工作模式共占480字節(jié)的存儲空間,根據(jù)工作模式的不同,打鈴時間分3個區(qū)存放在ATmage8的EEPROM存儲器中。系統(tǒng)上電后,SCM根據(jù)模式特征字自動判別工作模式,并將對應(yīng)區(qū)間的打鈴數(shù)據(jù)復(fù)制到SCM片內(nèi)的SRAM區(qū)。
2.1 打鈴時間比較子程序
在主程序中,SCM讀取DS1302的數(shù)據(jù)后,對秒數(shù)據(jù)進(jìn)行判斷。當(dāng)秒單元為“00”時,程序立即調(diào)用打鈴時間比較子程序,否則將不執(zhí)行該子程序的調(diào)用。在打鈴時間比較子程序中,SCM首先從片內(nèi)的EEPROM區(qū)取出當(dāng)前工作模式的打鈴次數(shù)字,將其復(fù)制到Ring cnt計數(shù)變量中,然后將當(dāng)前模式的第一組打鈴時間與系統(tǒng)時間進(jìn)行比較,若打鈴時間與當(dāng)前時間相等,置PD0引腳為低電平,打鈴控制電路接通并響鈴,同時置響鈴標(biāo)志位為‘1’,程序返回。若不相等,Ring cnt變量減一,繼續(xù)比較下一組打鈴時間,直到時間相等或Ring cnt變量減為‘0’,則子程序返回。程序流程圖如圖4所示。響鈴標(biāo)志位置‘1’后,系統(tǒng)將啟動15s定時,定時結(jié)束后,PD0置高電平當(dāng),電鈴?fù)V构ぷ?,同時將響鈴標(biāo)志位也置‘0’。
2.2 串口通訊子程序
打鈴器的時間設(shè)定、查詢和系統(tǒng)設(shè)置可通過鍵盤操作完成。為了準(zhǔn)確快捷地完成打鈴器設(shè)置,系統(tǒng)還支持串口操作功能,通過串行口與PC機(jī)進(jìn)行通訊,在上位機(jī)上可以完成打鈴器的相關(guān)設(shè)置。上位機(jī)軟件通過串行口向打鈴器發(fā)送命令,完成打鈴器參數(shù)的設(shè)置與查詢,命令格式為:命令字+數(shù)據(jù)+結(jié)束標(biāo)識,其具體組成如表1所示。在通訊過程中,SCM在RAM區(qū)開辟一塊存儲空間接收上位機(jī)發(fā)送的數(shù)據(jù)。每接收到一個字節(jié)都判斷其是否為結(jié)束標(biāo)識,若為結(jié)束標(biāo)識,則停止接收,否則繼續(xù)接收。當(dāng)數(shù)據(jù)接收完成后,程序便開始查詢命令字狀態(tài),并根據(jù)表1中命令字含義進(jìn)行數(shù)據(jù)的相關(guān)處理。若命令字為查詢命令字時,則SCM根據(jù)命令字含義返回相應(yīng)的數(shù)據(jù)至PC,并通過上位機(jī)軟件顯示出來,上位機(jī)軟件如圖5所示。
3 結(jié)束語
本打鈴器電路簡潔,價格低廉,且簡單易用。通過在學(xué)校一年多的使用檢驗,打鈴器走時精準(zhǔn),性能穩(wěn)定可靠,具有較高的推廣價值。