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