2016-07-13 105 views
0

我是新來的,拼命尋找解決方案來解決我的問題。我目前正在試圖使我的Raspberry Pi與使用Python的AD7705 16位ADC進行通信。但不幸的是,正如預期的東西都不會...... 電路看起來是這樣的:AD7705 CircuitAD7705 - 在Python中通過bitbanged SPI設置和與Raspberry Pi進行通信的問題

我做了很多的研究和仔細研究的數據表來選擇配件,以滿足所有的AD7705的要求。所有東西都焊接在一個條板上。
爲了保持我的PCB儘可能簡單,我不能使用硬件SPI,所以我必須進行bitbanging。由於CS連接到GND,所以通信減少到MOSI,MISO和CLK。我想我在爲AD7705實現SPI方面犯了一個錯誤。在使用bitbanged SPI之前,我已經使用了MPC3008,並使其正常工作,所以我認爲在AD7705的實現中存在巨大的邏輯思維錯誤。

此刻,我的程序是這樣的:

send 0010 0000 -> request write access to clock register 
send 0000 0100 -> configure clock register for 2.4576MHz operation 
send 0001 0000 -> request write access to setup register 
send 0100 0010 -> set gain = 1, buffered mode and perform self-calibration 
send 0000 1000 -> request read access to communiation register 
read 1 byte 

這是非常相似的「流程設置和從AD7705讀」從數據表中,在寫入數據的微小差異時鐘寄存器(我正在使用另一個頻率的諧振器)。

問題是我只收到一種隨機的,不可重現的字節。而且我甚至沒有試圖讀取實際數據。你能發現任何錯誤嗎?

我試圖提供關於我的方法的所有信息,但我無法解釋整個數據表。不過,這個問題不應該是硬件問題。

def send(sendcmd): 
    for i in range(8): 
     GPIO.output(CLK, 0) 
     time.sleep(0.0001) 
     if (sendcmd & 0x80): 
      GPIO.output(MOSI, 1) 
     else: 
      GPIO.output(MOSI, 0) 
     GPIO.output(CLK, 1) 
     time.sleep(0.0001) 
     sendcmd <<= 1 

def read(): 
    readbyte=0 
    for i in range(8): 
     GPIO.output(CLK, 0) 
     time.sleep(0.0001) 
     GPIO.output(CLK, 1) 
     time.sleep(0.0001) 
     readbit = GPIO.input(MISO) 
     readbyte |= readbit 
     readbyte <<= 1 
    return readbyte >> 1 

回答

0

我從朋友那裏借來的數字示波器(偉大的工具!),並想通了,CLK信號被轉換太快,所以我增加了切換至0.001S CLK HI/LO之間的等待時間。
之後,我發現我沒有從ADC的DOUT引腳收到任何適當的信號,即使我的字節在哪裏發送正確,所以我更換了芯片。

現在一切都按預期工作,所以我對每個人的建議是:記得在bitbanging SPI時慷慨尊重時間標準! =)

0

「送0000 0100 - >爲2.4576MHz操作配置時鐘寄存器」 相當具有4.9152MHz的(由2位devide)送0000 1100

+0

你說的意思是什麼 「而送」 – ElectroBit

+0

拉特·ER 副詞 用於表示某人在某件事情中的偏好。寧可發送b00001100比「更換芯片」 –