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