最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

8通道模擬信號(hào)輸出,8Bit分辨率,數(shù)字轉(zhuǎn)模擬芯片DAC5578芯片的使用(I2C通訊協(xié)議)

2019-05-05 15:43 作者:叭布-  | 我要投稿

個(gè)人的學(xué)習(xí)記錄,方便大家學(xué)習(xí)交流以及日后個(gè)人復(fù)習(xí),因?yàn)槲抑皇沁厡W(xué)邊做,如果存在錯(cuò)誤,請(qǐng)?jiān)谠u(píng)論區(qū)留下你的意見。

大部分資料來自于TI官網(wǎng)的DAC5578芯片數(shù)據(jù)手冊(cè),吃生肉很難受。

這個(gè)芯片輸出的最低電壓是0.2V,最高電壓也比VCC稍低

DAC5578芯片數(shù)據(jù)手冊(cè)下載地址:http://www.ti.com/cn/lit/ds/symlink/dac5578.pdf

DAC5578電源電壓范圍:2.7V?到5.5V

此次學(xué)習(xí)使用的電壓是3.3V。

驅(qū)動(dòng)芯片 : STM32F103C8? ?(感覺51單片機(jī)也行,但沒有實(shí)際使用過)

目標(biāo):使用 DAC5578?輸出模擬信號(hào)

代碼鏈接:https://pan.baidu.com/s/1_y0r4LiE4hXPTwtAZUIUjg? 提取碼 : fb1m

主要內(nèi)容在?User \ main.c?里

DAC5578引腳分布:

引腳說明:? ? ????????

AVDD?: 電源正極

GND : 電源負(fù)極

?VREFIN??: 基準(zhǔn)電壓,接電源正極

LDAC : 使緩存區(qū)數(shù)據(jù)更新到DAC輸出端,低電平觸發(fā)

ADDR0 : 芯片地址設(shè)置,

置0時(shí)(接GND),芯片地址為 1001 000,

置1時(shí)(接VCC),芯片地址為 1001 010,

浮空時(shí)(什么都不接),芯片地址為 1001 100 。

?CLR : 芯片重啟端,下降沿觸發(fā)

SCL :?I2C串行通訊時(shí)鐘端 (時(shí)鐘端

SDA : I2C串行通訊數(shù)據(jù)端?(數(shù)據(jù)端

VOUTA到VOUTH : 模擬信號(hào)輸出端


我是在面包板上用貼片轉(zhuǎn)直插的PCB進(jìn)行試驗(yàn),最好刮一刮導(dǎo)線的接觸面,保證接觸良好,電源電壓夠高,不然會(huì)導(dǎo)致數(shù)據(jù)寫入失敗。


數(shù)據(jù)傳輸使用的引腳需要上拉電阻,手冊(cè)上阻值范圍為1K到10K,個(gè)人使用的是5K電阻,然后接到單片機(jī)上,這里 SCL 我接到?PB0 ,SDA 接到 PB1。

單片機(jī)引腳需設(shè)為開漏輸出(寫 0?輸出低電平,寫 1 浮空),初始化時(shí)置為 1 。

浮空:對(duì)地電阻非常大,且電壓值幾乎為零


接下面的說明里,主機(jī)?代表單片機(jī),從機(jī)?代表DAC5578,時(shí)鐘端代表SCL,?數(shù)據(jù)端代表SDA?

單片機(jī)引腳定義:

最下面的兩個(gè)定義用來操縱引腳,例如??

DAC5578_SCL(LOW) 會(huì)使時(shí)鐘端變?yōu)?,DAC5578_SCL(HIGH) 會(huì)使時(shí)鐘端變?yōu)?

DAC5578_SDA(LOW) 會(huì)使數(shù)據(jù)端變?yōu)?,DAC5578_SDA(HIGH) 會(huì)使數(shù)據(jù)端變?yōu)?


初始化函數(shù):


通訊啟動(dòng):

主機(jī)發(fā)出啟動(dòng)信號(hào):?時(shí)鐘端為1時(shí),數(shù)據(jù)端出現(xiàn)下降沿(由1變0),等待。

DAC5578通訊啟動(dòng)時(shí)序圖

?延時(shí)函數(shù)?和 通訊啟動(dòng)函數(shù):? ? ?

寫入數(shù)據(jù):

每次改變DAC5578的輸出都需要寫入4次數(shù)據(jù),每次寫入1字節(jié)(8Bit)

寫入?1Bit 數(shù)據(jù)的方法如下:

? ? ????拉低時(shí)鐘端 ,? 數(shù)據(jù)端送入數(shù)據(jù),等待,

????????拉高時(shí)鐘端 ,? 等待(數(shù)據(jù)起效);? ?

寫入1個(gè)字節(jié)(8Bit)需要將上面的流程執(zhí)行8次。


DAC5578數(shù)據(jù)寫入時(shí)序圖


? ? ? ? 時(shí)鐘端?為0時(shí),數(shù)據(jù)端送入數(shù)據(jù),

????????時(shí)鐘端為 1?時(shí),數(shù)據(jù)起效。

? ? ? ? 數(shù)據(jù)先寫高位,再寫低位,每次寫入?1字節(jié),

????????例如 1011 0100 (0xb4) ,它的最高位是?1 ,接著是?0、1、 1、 0、 1、 0、 0。


? ? ? ?每次寫完?1個(gè)字節(jié)?,就需要接收一次來自從機(jī)的響應(yīng)(ACK),確認(rèn)寫入成功。?

? ? ? ?主機(jī)將時(shí)鐘端拉低,數(shù)據(jù)端拉高(釋放引腳),等待,??

???????時(shí)鐘端拉高,等待,

? ? ? ?檢查數(shù)據(jù)端的電平,若為?0?,寫入成功,不然,寫入失敗。

寫入成功
寫入失敗

注意:數(shù)據(jù)端必須要有合適的上拉電阻,過大過小都不能用,且單片機(jī)的引腳必須是開漏模式(寫 0 輸出低電平,?寫 1?浮空),不然會(huì)干擾到從機(jī)的響應(yīng)信號(hào)!


數(shù)據(jù)寫入函數(shù):


因?yàn)樵O(shè)為開漏輸出,這時(shí)主機(jī)的 數(shù)據(jù)端 是浮空的,從機(jī)若發(fā)出響應(yīng),便會(huì)將自己的 數(shù)據(jù)端? 拉低,主機(jī)就會(huì)讀取到 0?,不然,受上拉電阻的影響,主機(jī)將會(huì)讀取到 1 。

使用 LED?展示寫入結(jié)果,LED的相關(guān)程序在我提供的文件里有,在這不作詳解。


當(dāng)主機(jī)收到從機(jī)的第四個(gè)響應(yīng)后,主機(jī)應(yīng)發(fā)出通訊結(jié)束的信號(hào)。

通訊結(jié)束:

????????????數(shù)據(jù)端和時(shí)鐘端都置為 0 ,拉高時(shí)鐘端,等待,拉高數(shù)據(jù)端。

通訊結(jié)束函數(shù):


寫入的數(shù)據(jù)里,每個(gè)字節(jié)的作用如下:

第1個(gè)字節(jié)的前7位時(shí)芯片的地址位,ADDR0引腳接VCC時(shí),該芯片的地址為?1001 010?。

最后一位寫 0 (Write)表示主機(jī)要寫入數(shù)據(jù),寫 1?(Read)表示主機(jī)要讀取數(shù)據(jù),

簡(jiǎn)稱(R/W)位。

所以這個(gè)字節(jié)的數(shù)據(jù)為? 1001 0100? (0x94)。

第二個(gè)字節(jié)的前四位是指令,寫 0010 (選擇DAC端口,并即刻輸出DAC信號(hào),需要LDAC一直為0),后四位選擇輸出端口(通道),數(shù)據(jù)與端口的對(duì)應(yīng)關(guān)系如下

寫 0000?選中VOUTA ,寫 0001?選中VOUTB,......,寫 1111?選中全部端口。

如果要改變 VOUTA 的輸出信號(hào),則這個(gè)字節(jié)的數(shù)據(jù)為 0010 0000? ?(0x20)。

如果要改變 VOUTC的輸出信號(hào),則這個(gè)字節(jié)的數(shù)據(jù)為 0010?0010? ?(0x22)。

芯片的其他指令請(qǐng)參考數(shù)據(jù)手冊(cè)第 31 頁。

第三和第四字節(jié)的數(shù)據(jù)大小可以調(diào)節(jié)輸出的電壓的大小,DAC5578的分辨率只有 8Bit,所以只有第三字節(jié)有效,第四字節(jié)寫什么都行。

第三字節(jié)可選擇的數(shù)值范圍是 0 到 255,理想狀況下,寫入0時(shí),輸出電壓為 0V,寫入255時(shí),輸出電壓與VREFIN的電壓相同。

實(shí)際上,該芯片寫入 0?時(shí),輸出的電壓值為 0.2V,最大值也比VREFIN的電壓略低,但對(duì)于我現(xiàn)在的應(yīng)用場(chǎng)景,這些都在允許的范圍內(nèi)。

第四字節(jié)是預(yù)留給 DAC6578 (10Bit分辨率)?和 DAC7578 (12Bit分辨率)?的,在DAC5578里,這個(gè)字節(jié)沒有用,但必須寫。

設(shè)置輸出電壓的函數(shù):

主函數(shù):

最后的運(yùn)行結(jié)果應(yīng)為,LED2穩(wěn)定閃爍,LED1微弱的發(fā)出亮光后滅掉,萬用表測(cè)量VoutA的電壓是1.65V左右。

一定要保證電源電壓足夠大,之前我有時(shí)同樣的程序,時(shí)不時(shí)寫入失敗就因?yàn)閷?dǎo)線接觸不好,供電電壓只有2.6V左右,真是坑爹呢。

請(qǐng)務(wù)必確認(rèn)電路連接的正確,一開始VREFIN我什么都沒接,浪費(fèi)了一個(gè)早上,差點(diǎn)就放棄了

程序里所有的延時(shí)函數(shù)都可以不要,依然能穩(wěn)定驅(qū)動(dòng)芯片,我一開始看數(shù)據(jù)手冊(cè)上寫什么,就做什么了。手冊(cè)上給出了這個(gè)芯片的其他功能,但我還不會(huì)用,也沒什么興趣就不看了。

STM32自身也帶有I2C通訊協(xié)議的外設(shè),但我第一次解讀這些全英文的數(shù)據(jù)手冊(cè),為了穩(wěn)一點(diǎn)還是自己模擬I2C通訊好了,這也是我第一次接觸I2C協(xié)議,大家自己嘗試一下,可能比這么寫還快哦。

第一次干這種事一開始感覺就是摸黑走路呢,非常感謝翻譯軟件的存在,過去的一周時(shí)間里也有過幾次放棄的念頭,用其他芯片代替好了,但那很浪費(fèi)單片機(jī)引腳和錢,也懷疑過芯片質(zhì)量,但最后算一切順利了呢。


覺得這個(gè)專欄對(duì)你有所幫助的請(qǐng)點(diǎn)個(gè)贊,投個(gè)幣,還有收藏,當(dāng)然,關(guān)注就是對(duì)我的最大支持啦。雖然我也不知道下一次更新是什么時(shí)候,會(huì)更新什么就是了。

感覺有些地方?jīng)]看懂的請(qǐng)留下你的評(píng)論。當(dāng)然,去Bing搜索更快些。

最后附上使用DAC5578輸出不斷變化的電壓的GIF。


8通道模擬信號(hào)輸出,8Bit分辨率,數(shù)字轉(zhuǎn)模擬芯片DAC5578芯片的使用(I2C通訊協(xié)議)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
牙克石市| 北安市| 河东区| 榆林市| 兴仁县| 疏附县| 娄底市| 息烽县| 博白县| 武定县| 平塘县| 五寨县| 剑川县| 盈江县| 保定市| 陕西省| 天全县| 和硕县| 尤溪县| 商丘市| 海南省| 奎屯市| 西畴县| 泰和县| 广宁县| 蕉岭县| 霞浦县| 德保县| 互助| 阳新县| 长宁区| 青海省| 湘潭市| 浙江省| 德阳市| 隆安县| 措美县| 太保市| 靖宇县| 满洲里市| 大理市|