AD7124踩过的坑
花了正好一個星期的時間,終于基本上調(diào)通了,當(dāng)然,不僅是指可以正確通過SPI和片子交互,而且采集氧量信號的精度也是非常高,至少在mv級別了。
過程中遇到了一系列問題,搞的人也是很崩潰。
先是SPI通訊的問題,ADI官方給的開發(fā)板的代碼,用的并不是keil,spi的讀寫函數(shù)我根本沒法用,因此只好自己來寫。
我的spi代碼從5420移植而來,但7124和5420有很大的不同,而且復(fù)雜了很多。
5420的讀寫是兩函數(shù),而7124的讀寫需要整合為一個.
在讀寫count個字節(jié)時,5420的for是從count開始,而7124是從0開始,因?yàn)閯傞_始時沒有搞對,所以導(dǎo)致讀出的數(shù)據(jù)都是反的,
比如讀id,正確的是0x04,但我讀出的卻是0x20
還有,在5420中是CLR_SCL之后才給SDIN上放數(shù)據(jù),但對于7124卻需要在CLR_SCL之前放數(shù)據(jù)。
因?yàn)槭謨灾忻枋觯篠CL下降沿驅(qū)動數(shù)據(jù),上升沿鎖存數(shù)據(jù)。
接著,遇到的問題是,讀出的數(shù)據(jù)最后一位數(shù)據(jù)總是為0,比如 AD7124_Channel_0 手冊上說讀出來應(yīng)該是0x8001,但我讀出來卻是0x8000,
又仔細(xì)研究了手冊,手冊上說,似乎在轉(zhuǎn)換完成后DOUT/RDY腳會切換為RDY功能且為0表示數(shù)據(jù)有效可以被讀取,而在讀取之后才被重新置為1。
所以,懷疑是我讀最后一位的時機(jī)不對(太晚了,以致于DOUT/RDY腳處于RDY功能且為0)
程序調(diào)整后(把從SDOUT讀取數(shù)據(jù)的操作放在了SET_SCL之前),讀取正確。
然后測試20mv標(biāo)準(zhǔn)信號,但始終得到的結(jié)果是18mv,嘗試了各種校準(zhǔn),但都么有卵用。在崩潰,好心網(wǎng)友提示說可以測下內(nèi)部2.5V,測量后竟然非常準(zhǔn)確。
驚喜之余,又直接測了氧量信號(用信號源模擬),結(jié)果也非常精確。
我暈!難道是我對20mv標(biāo)準(zhǔn)信號的理解不對!!!
總結(jié)
以上是生活随笔為你收集整理的AD7124踩过的坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react 项目 mock数据
- 下一篇: Linux下用mutt给QQ邮箱发匿名邮