DS1267為雙通道數(shù)字電位器,具有串行“移位寄存器”型接口。移位寄存器有一個輸入引腳,用于移入數(shù)據(jù),還有一個輸出引腳,在寫入時將數(shù)據(jù)移出移位寄存器的最后一位。這樣就可以將多個DS1267以菊花鏈方式連接在一起,并在同一串行總線上一起編程。本應(yīng)用筆記通過電路示例和偽代碼示例描述了如何實(shí)現(xiàn)此目的,展示了如何為任何微處理器開發(fā)代碼。
介紹
Dallas Semiconductor的數(shù)字電位器DS1267非常適合需要數(shù)模轉(zhuǎn)換器(DAC)的系統(tǒng),或需要可編程偏置電流、電壓或電阻而無需傳統(tǒng)機(jī)械電位器人工干預(yù)的系統(tǒng)。DS1267在一個封裝中提供兩個數(shù)字電位器。獨(dú)特的3線協(xié)議允許將其中多個芯片串聯(lián)或并聯(lián)放置??蛇x的堆疊配置允許芯片的兩個8位電位計(jì)串聯(lián)放置,提供9位精度。DS1267可用于輸入范圍為-5V至+5V的雙電源系統(tǒng),只要基板偏置電壓低于所使用的最低輸入電壓即可。
本應(yīng)用筆記概述了通過公共總線與多個DS1267通信的不同配置。它還提供與兩個以菊花鏈形式串聯(lián)在一起的DS1267通信所需的硬件和軟件。
與DS1267通信的硬件設(shè)置
連接3線總線以與多個芯片通信有兩種主要方式。這些設(shè)備可以串聯(lián)或并聯(lián)連接。對于任一類型的連接,一次將向器件寫入 17 位數(shù)據(jù)塊。數(shù)據(jù)將確定電位計(jì)游標(biāo)器的位置和每次復(fù)位取消置位時的堆棧輸出。
系列
標(biāo)準(zhǔn)串聯(lián)連接如下圖1所示。這種連接方法適用于具有雙向端口的微處理器,這些端口在預(yù)期輸入時具有高阻抗。這允許使用反饋電阻從C驅(qū)動DQ引腳外菊花鏈中的最后一個設(shè)備。如果不希望從器件讀取數(shù)據(jù),則可以省略隔離電阻。這種方法允許無限數(shù)量的芯片串聯(lián)放置。
圖1.三個DS1267串聯(lián),與反饋電阻串聯(lián),用于讀取移位寄存器。
注意:反饋電阻應(yīng)約為10kΩ,以便在I/O引腳2和C之間提供足夠的隔離外當(dāng) I/O 引腳 2 驅(qū)動 DQ 時。
第二種串行連接方法(圖2)必須用于具有集電極開路I/O端口的微處理器。在集電極開路端口上,有一個內(nèi)部(8051微處理器如此)或外部上拉電阻,無需高壓側(cè)驅(qū)動器即可產(chǎn)生高信號。這樣做通常是為了消除微處理器與連接到它的某個外部設(shè)備爭用的可能性。如果在C之間連接了隔離電阻外和DQ,如圖1所示,那么每當(dāng)C時,它都會在寫入周期中導(dǎo)致器件錯誤外試圖將 DQ 引腳驅(qū)動為低電平,因?yàn)?C外將超過弱上拉電阻的驅(qū)動。圖2所示的設(shè)置允許使用一個額外的引腳讀取DS1267中的移位寄存器,僅用于集電極開路端口上的輸入。典型的3線信號像以前一樣控制DS1267。
圖2.DS1267與用于從移位寄存器讀取的獨(dú)立輸入串聯(lián)。
在兩種串聯(lián)連接情況下,DS1267的反饋都可以省略,只需要三根線即可寫入任意數(shù)量的DS1267。如果以后必須知道電位器的狀態(tài),則必須使用2字節(jié)的RAM來跟蹤寫入總線上每個DS1267的值。串聯(lián)方法的主要缺點(diǎn)是串行總線上的n個DS1267寫入或讀取的時間是單芯片的n倍。
平行
第二類設(shè)置是并行配置。圖3所示為并行設(shè)置,可用于寫入多個DS1267,DQ和CLK在公共和獨(dú)立的RST信號中。該系統(tǒng)的優(yōu)點(diǎn)是只需17個DS1267時鐘周期即可寫入所使用的任何器件。缺點(diǎn)是每增加一個DS1267就需要一個額外的輸出引腳。如果需要多個DS1267和高速寫入,則可以通過增加解碼器對地址進(jìn)行解碼,以產(chǎn)生復(fù)位(片選)信號。這將允許操作 2(# 可用選擇引腳)DS1267s.因此,如果有三個I/O引腳可用于解碼地址,則可以對它們進(jìn)行解碼,允許1267個DS16雙通道電位器(<>個電位器,采用<>個封裝)工作在公共DQ和CLK信號下。如果下面的系統(tǒng)使用解碼器,則可以再增加五個電位計(jì),而不會損失另一個輸出引腳。
圖3.三條并行配置的DS1267共用DQ和CLK線路。
上述設(shè)置不包含任何DS1267讀數(shù)的規(guī)定。如果要在使用解碼器的系統(tǒng)中讀取電位計(jì),則可以將解碼器地址行與多路復(fù)用器一起使用,以讀取所有 C外s,像以前一樣進(jìn)入單個雙向I/O引腳或單獨(dú)的輸入引腳。
圖4(下一頁)所示的硬件設(shè)置用于生成附錄A中的代碼,為DS22C2微處理器提供87.520 MHz時鐘。DS232A將5V CMOS信號轉(zhuǎn)換為RS232電平,用于微處理器和PC之間的通信。DS232A連接到標(biāo)準(zhǔn)串行端口插頭,該插頭可以連接到PC,允許微處理器以19200波特(1個停止位,無奇偶校驗(yàn),無流量控制)反饋。兩個電位計(jì)以菊花鏈形式連接(串聯(lián)),并連接到端口 1 上的微處理器。第一個DS1267以堆疊配置連接,提供9位DAC。第二個DS1267提供兩個8位DAC。由于它們是串聯(lián)連接的,因此每次讀取和寫入嘗試都將涉及移動 2*17 位。LED 也已連接到端口 1.0 作為狀態(tài)指示器。
注意: 8051 具有收集器開路端口;因此,C 必須使用單獨(dú)的輸入引腳外.使用DQ作為雙向端口引腳會導(dǎo)致微處理器和DS1267之間的通信錯誤。此外,如果要使用串行端口,時鐘速率必須接近 22.118 MHz。如果時鐘速率低于該頻率的 2-3%,可能會導(dǎo)致串行端口通信錯誤。
圖4.DS87C520微處理器DS232A串行端口發(fā)送器和兩個DS1267以菊花鏈形式連接在3線總線上。
3線協(xié)議
3線協(xié)議是一種簡單的協(xié)議,通過1267位移位寄存器對DS17的兩個電位器進(jìn)行編程。移位寄存器由復(fù)位、數(shù)據(jù)和時鐘信號控制。復(fù)位 (RST) 用于選擇芯片。該信號為高電平有效,必須在嘗試寫入或讀取器件時置位。數(shù)據(jù)引腳(DQ)用于將數(shù)據(jù)傳輸?shù)狡骷?shù)據(jù)正確放置在DQ上后,時鐘信號(CLK)被脈沖以同步數(shù)據(jù)傳輸。這些事件的時序在DS1267數(shù)據(jù)資料中給出。移入器件的數(shù)據(jù)可以繼續(xù)轉(zhuǎn)移到另一個具有級聯(lián)輸出的3線器件(C外.)級聯(lián)輸出也可以路由回控制器,以允許微處理器讀取它所寫的內(nèi)容。
串聯(lián)的兩個器件的數(shù)據(jù)格式如圖5所示。
圖5.兩個17位DS1267移位寄存器級聯(lián)在一起,用于串聯(lián)工作。
在這種配置中,移入寄存器的第一個位一直移位到最后。因此,在數(shù)據(jù)傳輸開始時放置在 DQ 上的第一個位將是 STK#2。這是DS1267 #2的堆??刂莆?。接下來發(fā)送的8位是控制DS8 #1上游標(biāo)1267位置的2位,圖中標(biāo)有電位器3。請注意,字節(jié)的 MSB 首先發(fā)送到該部分。然后接下來的8位將控制電位計(jì)2。發(fā)送的下一個位將是STK#1,它控制DS1267 #1的堆棧輸出。電位計(jì) 1 和 0 的字節(jié)將分別跟隨堆??刂莆?。如果總線上僅連接一個芯片,則只有17位數(shù)據(jù)將傳送到該器件,但數(shù)據(jù)的格式與圖5前半部分所示相同。
要將17位寫出到DS1267之一,必須執(zhí)行以下步驟:
斷言 RST(高)
在DQ引腳上放置一個數(shù)據(jù)位
脈沖CLK
重復(fù)步驟 2) 和 3) 再重復(fù) 16 次
取消斷言 RST(低)
如果 n 個 DS1267 級聯(lián)在一起,則在取消 RST 之前執(zhí)行步驟 2) 和 3) n x 17 次。
如果可選反饋電阻與雙向端口一起使用,則存儲在移位寄存器中的值 通過完成以下操作進(jìn)行讀取:
置位 RST,并將 I/O 引腳 2 置于高阻抗?fàn)顟B(tài)。
讀取 I/O 引腳 2(等于 C外如果 I/O 引腳 2 處于高阻抗?fàn)顟B(tài))。
脈沖CLK。
重復(fù)步驟2)和3)16倍以上。
取消斷言 RST。
從具有 C 的部分讀取外連接到單獨(dú)的輸入,以下序列必須 完成:
斷言 RST。
讀取 C外在輸入引腳處。
C 的寫入值外到DQ。
脈沖CLK。
重復(fù) 2)、3) 和 4) 再重復(fù) 16 次。
取消斷言 RST。
注:C 的值外必須寫回 DQ,因?yàn)樽x取和寫入嘗試之間的復(fù)位和時鐘信號的操作沒有區(qū)別。因此,C外被寫回 DQ,如圖 1 中的硬件所做的那樣。此外,如果串聯(lián)連接n個DS1267,則序列2、3和4必須執(zhí)行n x 17次,否則DS1267中的數(shù)據(jù)將不與讀取例程開始時相同。
使用軟件生成的1267線通信控制兩個DS3
主要的3線通信程序
1267-Wire協(xié)議部分所述的DS3通信方法通過四個程序在代碼中完成。這些例程用于寫入 34 位、讀取 34 位、序列化要發(fā)送到每個電位計(jì)的數(shù)據(jù)字節(jié),以及將從電位計(jì)接收的數(shù)據(jù)位重建為字節(jié)。前兩個套路分別調(diào)用后兩個套路。該代碼位于附錄 A 中,下面列出了這些例程的簡要說明。
WritePots3
此例程是主編寫例程。它寫入存儲在稱為 stack1 和 stack2 的內(nèi)存位置中的堆??刂莆唬⑹褂?WriteBits3 例程將所有數(shù)據(jù)寫入電位計(jì)。寫入DS1267的數(shù)據(jù)以4個字節(jié)(PotData0、PotData1、PotData2和PotData3)存儲。
WriteBits3
此例程通過將 MSB 旋轉(zhuǎn)到進(jìn)位,將進(jìn)位寫入 DQ,最后脈沖 CLK 來寫入累加器中存儲的字節(jié)??偣仓貜?fù)八次,將整個字節(jié)寫入DS1267。
ReadPots3
此例程是主閱讀例程。它讀取堆棧控制位,并將其存儲在稱為 stack1 和 stack2 的內(nèi)存位置。它還使用 ReadBits3 例程回讀控制每個電位計(jì)的 8 位信息,并將值存儲在標(biāo)記為 PotData4、PotData0、PotData1 和 PotData2 的 3 字節(jié)中。
讀取位3
此例程從用于存儲游標(biāo)位置的電位計(jì)讀回 8 位,將 8 位轉(zhuǎn)換為字節(jié),并將數(shù)據(jù)傳遞回累加器中的調(diào)用過程。
其他例程
這些例程都通過執(zhí)行下面描述的功能來支持主通信例程。
initSP1
初始化串行端口 1。
介紹
通過串行端口 1 在 PC 終端上顯示歡迎消息
init3wire
初始化 3 線總線信號(RST、DQ、CLK),并設(shè)置用于寫入電位計(jì)的變量中的值(堆棧 1、堆棧 2、PotData0、PotData1、PotData2、PotData3
重量
可編程等待功能。使用 wait16us,并寄存器 R5、R6 和 R7,以實(shí)現(xiàn) 14.42 μs 和 3.7 min 之間的延遲。
等待16us
每次調(diào)用延遲 1.6 μs。
展示罐:
使用 outchar 和 binasc 顯示從每個電位計(jì)讀回的值。DS1267的工作不需要代碼,但是當(dāng)您可以在嘗試讀取后驗(yàn)證存儲字節(jié)中的數(shù)據(jù)是否使用 outchar 通過串行端口 1 將空終止的字符串發(fā)送到 PC。發(fā)送的字符串存儲在代碼末尾的消息部分中。
主程序
主程序執(zhí)行以下順序:
禁用中斷
初始化串行端口 1
初始化 3 線引腳和變量
反轉(zhuǎn)位于 P1.0 上的 LED,表示程序的開始
將電位計(jì)寫入初始化期間存儲的值
延遲 5 秒,這樣做是為了萬用表可用于確定讀取功能(下一個)是否將電位計(jì)覆蓋為不同的值
讀取電位計(jì)
顯示結(jié)果
開始閃爍 LED,每秒閃爍一次,表示程序已完成執(zhí)行
主程序
主程序執(zhí)行以下順序:
禁用中斷
初始化串行端口 1
初始化 3 線引腳和變量
反轉(zhuǎn)位于 P1.0 上的 LED,表示程序的開始
將電位計(jì)寫入初始化期間存儲的值
延遲 5 秒,這樣做是為了萬用表可用于確定讀取功能(下一個)是否將電位計(jì)覆蓋為不同的值
讀取電位計(jì)
顯示結(jié)果
開始閃爍 LED,每秒閃爍一次,表示程序已完成執(zhí)行
審核編輯:郭婷
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119816 -
電位器
+關(guān)注
關(guān)注
14文章
1003瀏覽量
66672 -
微處理器
+關(guān)注
關(guān)注
11文章
2244瀏覽量
82267
發(fā)布評論請先 登錄
相關(guān)推薦
評論