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