MAXQ610微控制器不包括電池備份的實(shí)時(shí)時(shí)鐘(RTC),但1-Wire?網(wǎng)絡(luò)的靈活性使得可以在任何基于MAXQ1904的應(yīng)用中直接添加DS610 RTC i按鈕?。與DS1904通信、設(shè)置時(shí)鐘和控制值以及與原始秒數(shù)之間的時(shí)間值轉(zhuǎn)換,都可以在MAXQ610的能力范圍內(nèi),即使使用匯編語言也是如此。本應(yīng)用筆記說明如何在基于MAXQ610的應(yīng)用中增加RTC功能。顯示了實(shí)現(xiàn)此應(yīng)用程序的演示代碼。本文的原理和技術(shù)同樣適用于其它基于MAXQ?的微控制器,該微控制器具有能夠驅(qū)動1-Wire通信協(xié)議的通用I/O (GPIO)引腳。
介紹
許多微控制器包括定時(shí)器電路,但只有少數(shù)微控制器包括電池備份實(shí)時(shí)時(shí)鐘(RTC)。然而,許多應(yīng)用需要RTC,使用1-Wire網(wǎng)絡(luò)可以輕松添加RTC。本文介紹如何將支持1-Wire協(xié)議的RTC添加到基于微控制器的系統(tǒng)中。包含必要的代碼。本文解釋了同樣適用于通用I/O (GPIO)引腳能夠驅(qū)動1-Wire通信協(xié)議的微控制器的原理和技術(shù)。
設(shè)計(jì)目標(biāo)
本演示展示了如何使用1-Wire接口實(shí)現(xiàn)以下操作的方法:
讀取所選 RTC 的 64 位 ROM ID
啟動和停止 RTC
讀取 RTC 的當(dāng)前值
將 RTC 設(shè)置為新值
該演示還將以可讀格式顯示當(dāng)前 RTC 值,即從原始秒轉(zhuǎn)換為年/月/日/時(shí)間格式。它將允許用戶通過增加各種轉(zhuǎn)換值(例如,年,月,日)來修改時(shí)鐘值,而不是計(jì)算并輸入秒的新值。
對于存儲日期/時(shí)間值秒數(shù)的任何應(yīng)用程序,我們必須選擇一個(gè)零基線。對于此應(yīng)用程序,該基線是 1 年 2000 月 12 日上午 00:00:00000000,其原始秒數(shù)為零 (<>h)。
系統(tǒng)設(shè)置
1-Wire接口是本文的基礎(chǔ)。它允許您將支持1-Wire協(xié)議的RTC添加到任何微控制器中。本例將使用DS1904 RTC i按鈕?。該應(yīng)用使用MAXQ610微控制器,因?yàn)樗梢院苋菀椎嘏cRTC通信,設(shè)置時(shí)鐘和控制值,并在原始秒和相應(yīng)的日歷日期之間進(jìn)行轉(zhuǎn)換,即使使用匯編語言也是如此。
低功耗MAXQ610非常適合便攜式應(yīng)用,但缺少電池供電的RTC。但是,您可以使用其GPIO引腳之一將此微控制器連接到專用RTC。微控制器的演示代碼是使用基于匯編的MAX-IDE環(huán)境編寫的。設(shè)計(jì)工作在Maxim評估(EV)板MAXQ610-KIT上。源代碼、項(xiàng)目文件和其他文檔均可下載。
運(yùn)行應(yīng)用程序
您需要以下硬件來運(yùn)行演示代碼:
MAXQ610評估板
5V 直流電源
串行到JTAG或USB到JTAG接口板
JTAG編程電纜(2×5帶狀電纜,帶0.100in引腳連接器)
直通 DB9 串行接口電纜
具有可用 COM 端口或 USB 轉(zhuǎn)串行適配器的電腦
DS1904L-F5# RTC i按鈕
DS9094F+ 通孔安裝 i按鈕夾
代碼在MAXQ610評估板上運(yùn)行。原型設(shè)計(jì)區(qū)域安裝了一個(gè) i 按鈕夾 (DS9094F+),在 i 按鈕夾中插入了一個(gè) DS1904L-F5# RTC i按鈕。然后從 i按鈕夾進(jìn)行連接:
將i按鈕夾的接地引腳(與DS1904背面/未標(biāo)記側(cè)接觸的夾頂側(cè)標(biāo)有“+”的引腳)連接到MAXQ610評估板上的GND測試點(diǎn)之一。
將iButton夾子的數(shù)據(jù)引腳(夾子內(nèi)側(cè)接觸DS1904正面/標(biāo)記側(cè)的引腳)連接到MAXQ2評估板上的端口引腳P0.3 (接頭引腳P1.610)。
您還需要以下軟件:
MAX-IDE匯編語言開發(fā)環(huán)境,用于MAXQ微控制器
微控制器工具包 (MTK) 或其他具有“啞終端”模式的終端仿真器
MAX-IDE環(huán)境的最新安裝包和文檔可在MAXQ RISC微控制器頁面找到。
RTC的數(shù)據(jù)通過1-Wire協(xié)議串行傳輸;只需要一個(gè)數(shù)據(jù)引線和一個(gè)接地回路。該 RTC 包含一個(gè)唯一的 64 位 ID,在 ROM 中出廠光刻,以及一個(gè)作為二進(jìn)制計(jì)數(shù)器實(shí)現(xiàn)的 RTC/日歷。它位于耐用的MicroCan包裝中,可防塵,防潮和防震。該封裝幾乎可以安裝在任何表面上,包括印刷電路板 (PCB) 和塑料鑰匙扣。運(yùn)行時(shí),RTC 為使用微控制器的任何電子設(shè)備或嵌入式應(yīng)用添加日歷日期、時(shí)間和日期戳、秒表、小時(shí)計(jì)、間隔計(jì)時(shí)器和日志功能。
RTC 包含一個(gè)分辨率為 32 秒的 1 位計(jì)數(shù)器,可提供大約 136 年的范圍。保持時(shí)鐘運(yùn)行所需的所有硬件,包括32kHz晶體和電池,都密封在內(nèi)部。所得器件的使用壽命超過 10 年,在室溫為 +2°C 時(shí),時(shí)鐘精度約為每月 ±25 分鐘。 工作模式(停止或運(yùn)行)和時(shí)鐘計(jì)數(shù)器的值可通過1-Wire接口讀取或?qū)懭搿?/p>
驅(qū)動1-Wire網(wǎng)絡(luò)
1-Wire接口通過單線和單接地回路提供電源和通信。這意味著單個(gè)端口引腳使微控制器能夠與1-Wire傳感器通信。為在1-Wire網(wǎng)絡(luò)上工作開發(fā)了各種傳感器和其他組件。
1-Wire網(wǎng)絡(luò)采用單主機(jī)和多個(gè)從機(jī),采用多點(diǎn)配置。時(shí)序要求非常靈活,允許所有從站以高達(dá)16kbps的通信速度與主站同步。每個(gè)1-Wire傳感器都有一個(gè)全球唯一的64位ROM ID,因此1-Wire主站可以單獨(dú)、精確地選擇從機(jī),無論它們在網(wǎng)絡(luò)上的物理位置如何。
1-Wire線路以漏極開路模式工作:主站(以及從機(jī),當(dāng)需要輸出時(shí))通過將線路拉至地來指示“零”,或者通過讓線路浮高來指示“一”。此操作通常通過線路和V之間連接的分立上拉電阻來實(shí)現(xiàn)抄送.端口引腳具有弱上拉模式的微控制器(如MAXQ610)可以簡單地將端口引腳切換回該模式,讓線路高懸;無需外部電阻。由于主機(jī)和從機(jī)將線路拉低且從不主動拉高,因此1-Wire網(wǎng)絡(luò)以有線OR配置工作。這種方法可防止多個(gè)從站同時(shí)嘗試在1-Wire總線上傳輸時(shí)發(fā)生線路沖突。
為了驅(qū)動1-Wire網(wǎng)絡(luò),微控制器使用軟件在單個(gè)引腳上生成時(shí)隙。所有時(shí)隙均由1-Wire主機(jī)啟動,因此當(dāng)1-Wire線路未與從器件通信時(shí),微控制器無需監(jiān)控<>-Wire線路。
復(fù)位時(shí)隙寬約為 1ms。在前半段時(shí)段,主機(jī)(MAXQ610)將1-Wire線保持在低電平。時(shí)隙進(jìn)行到一半時(shí),它釋放1-Wire線并使其漂浮在高處。線路上存在的任何1-Wire從站都會在后半段通過復(fù)位并拉下線路來響應(yīng)。然后,從站產(chǎn)生存在脈沖,向主站指示一個(gè)或多個(gè)從站存在并準(zhǔn)備通信。
寫入時(shí)隙的寬度為60μs至120μs,由主機(jī)用于將位(0或1)傳輸?shù)揭粋€(gè)或多個(gè)從機(jī)。兩種類型的寫入時(shí)隙都從主站將線路拉低至少一微秒開始。為了傳輸 1,主站隨后在剩余的時(shí)間段內(nèi)釋放線路(讓它高浮動)。為了傳輸 0,主站將線路保持低電平,直到時(shí)隙結(jié)束。
讀取時(shí)隙的寬度為60μs至120μs,由主機(jī)用于從從器件讀取位(0或1)。時(shí)隙從主站將線路拉低至少一微秒開始。然后,主機(jī)釋放線路,允許從機(jī)將其保持在低電平(0)或使其浮動到高處(1)。在時(shí)隙的中途,主機(jī)對線路進(jìn)行采樣,以從從機(jī)讀取位值。
MAXQ610在12MHz頻率下以每微秒約12個(gè)指令周期運(yùn)行,因此在軟件中使用端口引腳(P1.2)即可輕松執(zhí)行標(biāo)準(zhǔn)的0-Wire協(xié)議。它以類似的方式實(shí)現(xiàn)讀取時(shí)隙。注意,1-Wire總線上的所有數(shù)據(jù)字節(jié)首先傳輸最低有效位(LSB)。
1-Wire總線上的上拉電阻值根據(jù)網(wǎng)絡(luò)上的器件數(shù)量而變化,但通常額定值為4kΩ至5kΩ。相反,MAXQ610端口引腳上的弱上拉電阻在15kΩ至40kΩ之間變化,取決于工作電壓。為了避免1-Wire總線從低電平狀態(tài)高電平浮動時(shí)出現(xiàn)過長的時(shí)間間隔,該代碼會短暫驅(qū)動具有正常高電平狀態(tài)的總線(通過P2.0),在將P2.0設(shè)置為正常的弱上拉模式之前,將總線“捕捉”到高電平狀態(tài)。此操作不會對1-Wire總線造成中斷,前提是避免了從機(jī)可能嘗試將總線拉低的時(shí)間間隔。或者,您可以在1-Wire總線上放置一個(gè)物理外部上拉電阻,然后在標(biāo)準(zhǔn)低電平模式下驅(qū)動端口引腳(對于零狀態(tài)),將端口引腳驅(qū)動至三態(tài)模式(對于高狀態(tài))。
啟動、停止和設(shè)置時(shí)鐘
由于1-Wire總線上可能存在多個(gè)1-Wire器件,因此與這些器件的通信分兩個(gè)階段進(jìn)行。總線主控器首先選擇一個(gè)1-Wire器件進(jìn)行通信,然后發(fā)出通信信號2總線主控器發(fā)送復(fù)位脈沖后,1-Wire總線上的所有從器件將返回到默認(rèn)的未選中狀態(tài)。然后,總線主站可以使用幾個(gè)命令來選擇將在第二階段與之通信的設(shè)備。以下命令使用與每個(gè)從設(shè)備關(guān)聯(lián)的 64 位 ROM ID。所有1-Wire器件都支持這些命令。
跳過 ROM [CCh]
此單字節(jié)命令激活總線上的所有從設(shè)備。如果只有一個(gè)1-Wire器件,或者總線主控器需要向總線上的所有1-Wire器件發(fā)送相同的命令,則此功能非常有用。上述應(yīng)用總線上只有一個(gè)器件(例如DS1904 RTC),因此總線主控器(例如MAXQ610微控制器)在讀取或?qū)懭隦TC之前始終使用此命令激活RTC。
讀取只讀存儲器 [33小時(shí)]
此單字節(jié)命令激活總線上的所有從設(shè)備,并使它們將其64位ROM ID值傳輸回總線主站。由于它激活所有從設(shè)備,因此只能用于單從系統(tǒng)。否則,多個(gè)從設(shè)備在嘗試同時(shí)傳輸其ROM ID時(shí)將導(dǎo)致數(shù)據(jù)沖突。由于總線上只有一個(gè)器件(DS1904),MAXQ610在開始時(shí)使用此命令讀取DS1904的ROM ID。
匹配光盤 [55h]
此命令從1-Wire總線上的多個(gè)從機(jī)中選擇一個(gè)從機(jī)。總線主站傳輸此命令后,通過傳輸要選擇的從設(shè)備的64位ROM ID進(jìn)行跟進(jìn)。具有匹配ROM ID的器件通過進(jìn)入活動狀態(tài)進(jìn)行響應(yīng),而總線上的所有其他器件進(jìn)入非活動狀態(tài),等待總線主站的下一次1-Wire復(fù)位。(此處描述的應(yīng)用程序中未使用此命令。
搜索 ROM [F0h]
此命令允許總線主站使用迭代發(fā)現(xiàn)過程來確定1-Wire總線上一個(gè)或多個(gè)從器件的ROM ID值3(此處描述的應(yīng)用中未使用此命令。
讀取和寫入時(shí)鐘和控制值
當(dāng)總線主站使用跳過ROM或讀取ROM命令選擇1-Wire從器件(即RTC、DS1904)時(shí),該器件即可接受特定于它的1-Wire命令。這些命令(圖 1)詳述如下:
讀取時(shí)鐘 [66h]
該命令允許總線主站讀取DS1904的器件控制字節(jié)和4字節(jié)(32位)RTC值。器件控制字節(jié)確定驅(qū)動RTC的32kHz振蕩器是運(yùn)行還是停止。如下面的代碼所示,只有一個(gè)命令同時(shí)讀取設(shè)備控制字節(jié)和時(shí)鐘值。即使不需要這兩個(gè)值,也必須在設(shè)備輸出時(shí)鐘數(shù)據(jù)之前讀取設(shè)備控制字節(jié)。
寫入時(shí)鐘 [99h]
作為讀取時(shí)鐘的補(bǔ)充,該命令允許總線主機(jī)為器件控制字節(jié)和DS1904 4字節(jié)時(shí)鐘計(jì)數(shù)器設(shè)置新值。請注意,在新值生效之前,必須寫入全部5個(gè)字節(jié)并發(fā)送一個(gè)1-Wire復(fù)位脈沖。上述應(yīng)用代碼包括單獨(dú)設(shè)置器件控制字節(jié)和時(shí)鐘值的例程,首先從DS5讀取1904字節(jié)數(shù)據(jù)(1字節(jié)器件控制加上4字節(jié)時(shí)鐘計(jì)數(shù)器),然后寫回?cái)?shù)據(jù)并進(jìn)行適當(dāng)?shù)母摹?/p>
圖1.這些DS1904時(shí)鐘功能命令取自數(shù)據(jù)資料。
轉(zhuǎn)換時(shí)間和日期值
若要將原始秒數(shù)轉(zhuǎn)換為可打印形式,應(yīng)用程序?qū)⒎謩e確定每個(gè)日期和時(shí)間字段(年、月、日、小時(shí)、分鐘和秒)的值,從最大的字段(年)開始向下工作:
秒≥(每年秒數(shù)),從秒數(shù)中減去(每年秒數(shù))并增加年份。
秒≥(每月秒數(shù)),從秒數(shù)中減去(每月秒數(shù))并增加月。
秒數(shù)≥(每天秒數(shù)),從秒數(shù)中減去(每天秒數(shù))并增加“天”。
秒數(shù)≥(每小時(shí)秒數(shù)),從秒數(shù)中減去(每小時(shí)秒數(shù))并增加小時(shí)數(shù)。
當(dāng)秒≥ 60 時(shí),從秒中減去 60 并增加分鐘。
秒的剩余值是第二個(gè)字段。
即使總線主站為除法提供硬件支持,簡單的除法運(yùn)算也不足以計(jì)算前兩個(gè)字段值(年和月)。這是因?yàn)槊總€(gè)字段單位的秒數(shù)會因閏年(影響年和月的值)和每月天數(shù)(僅影響月)的影響而變化。例如,從 2000 年(閏年)開始:
2000 年每年的秒數(shù))= 366(天)× 24(小時(shí)/天)× 60(分鐘/小時(shí))× 60(秒/分鐘)= 31,622,400 秒。
標(biāo)準(zhǔn)年份少一天(365 天),這會將秒/年更改為 (31,622,400 - 86,400) = 31,536,000。
因?yàn)槊克哪晔情c年,所以我們按如下方式計(jì)算年份(請注意,此偽代碼中的第 2、3 和 4 項(xiàng)是相同的)。
如果秒≥(每閏年的秒數(shù)),則從秒中減去(每閏年的秒數(shù))并遞增年份,否則停止。
如果“秒數(shù)”≥(每年秒數(shù)),請從“秒數(shù)”中減去(每年秒數(shù))并遞增“年份”,否則停止。
如果“秒數(shù)”≥(每年秒數(shù)),請從“秒數(shù)”中減去(每年秒數(shù))并遞增“年份”,否則停止。
如果“秒數(shù)”≥(每年秒數(shù)),請從“秒數(shù)”中減去(每年秒數(shù))并遞增“年份”,否則停止。
返回第 1 行。
“月份”字段的值以類似的方式計(jì)算:
如果秒≥(一月為秒),則從秒中減去(一月為秒)并遞增月,否則停止。
如果秒≥(二月為秒),則從秒中減去(二月為秒)并遞增月,否則停止。
如果秒≥(三月為秒),則從秒中減去(三月為秒)并遞增月份,否則停止。
繼續(xù)完成剩余的幾個(gè)月。
運(yùn)行演示
要運(yùn)行演示,請加載并運(yùn)行應(yīng)用程序。然后使用DB9串行電纜將MAXQ610評估板從J1 SKT連接到PC上的COM1。啟動 MTK(或其他終端模擬器)并以 1 波特打開 COM38400。初始輸出應(yīng)類似于以下內(nèi)容:
@ ID: 24B91231000000B2 AC 18F83065 + 18F83065 Apr 10 2013, 02:15:01 pm + 18F83066 Apr 10 2013, 02:15:02 pm + 18F83067 Apr 10 2013, 02:15:03 pm + 18F83068 Apr 10 2013, 02:15:04 pm + 18F83069 Apr 10 2013, 02:15:05 pm
第二行代碼包含DS1904 ROM ID值(24B91231000000B2)、器件控制字節(jié)(AC)和當(dāng)前時(shí)鐘值(18F83065)。后續(xù)行中的“+”值表示時(shí)鐘正在運(yùn)行。時(shí)間值的刷新和顯示頻率與更改頻率一樣高,應(yīng)為每秒一次。按“-”停止時(shí)鐘。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7487瀏覽量
151042 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3237瀏覽量
114464 -
電池
+關(guān)注
關(guān)注
84文章
10457瀏覽量
128994
發(fā)布評論請先 登錄
相關(guān)推薦
評論