我在控制AD5270 10位數字電位計時遇到了麻煩。看來無論我寫入寄存器,端子A和雨刮器之間的實際電阻值都不會改變。我假設我正在與「下降同步信號」具體問題,從data sheet第10頁:用Arduino控制AD5270 10位電位計
SYNC:下降沿同步信號。這是輸入數據的幀同步信號。當SYNC變爲低電平時,它使能移位寄存器,並在後續時鐘的下降沿傳輸數據。所選寄存器在第16個時鐘週期後的SYNC上升沿更新。如果SYNC在第16個時鐘週期之前變爲高電平,則SYNC的上升沿充當中斷,寫入序列將被RDAC忽略。
我一直在對待這個引腳很像一個SS引腳。到目前爲止,這是我必須儘可能的代碼有云:
#include <SPI.h>
const int csPinCWF = 10;
const byte enableUpdateMSB = 0x1C; //B00011100
const byte enableUpdateLSB = 0x02; //B00000010
const byte command = 0x04; //B00000100
void setup() {
Serial.begin(9600);
Serial.println("Ready");
SPI.begin();
Serial.println("SPI Begin");
SPI.setBitOrder(MSBFIRST); //We know this from the Data Sheet
SPI.setDataMode(SPI_MODE1); //Pg.7:Fig.3 states CPOL=0, CPHA=1 --> MODE1
pinMode(csPinCWF,OUTPUT);
Serial.println("Output Set");
digitalWrite(csPinCWF, HIGH);
Serial.println("Set pin to HIGH");
}
void loop() {
for(int i=0; i<1023; i++) {
Serial.println(i);
enablePotWrite(csPinCWF);
digitalPotWrite(csPinCWF, i);
delay(5000);
}
}
void digitalPotWrite(int csPin, int value) {
Serial.println("In digitalPotWrite Now");
digitalWrite(csPin, LOW); //select slave
Serial.println("Set csPin to LOW");
Serial.print("Command Byte is: ");
Serial.println(command, BIN);
byte shfitedValue = (value >> 8);
Serial.print("Shifted bit value is: ");
Serial.println(shfitedValue, BIN);
byte byte1 = (command | shfitedValue);
Serial.print("Byte1 is: ");
Serial.println(byte1, BIN);
byte byte0 = (value & 0xFF); //0xFF = B11111111 trunicates value to 8 bits
Serial.print("Byte0 is: ");
Serial.println(byte0, BIN);
//Write to the RDAC Register to move the wiper
SPI.transfer(byte1);
SPI.transfer(byte0);
Serial.print("Transfered: ");
Serial.print(byte1, BIN);
Serial.print(" ");
Serial.println(byte0, BIN);
digitalWrite(csPin, HIGH); //de-select slave
Serial.println("Set csPin back to HIGH, end of digitalPotWrite");
}
void enablePotWrite(int csPin) { //Enable Update of the Wiper position through the digital interface
digitalWrite(csPin, LOW); //select slave
Serial.print("Enable byte is: ");
Serial.print(enableUpdateMSB, BIN);
Serial.print(" ");
Serial.println(enableUpdateLSB, BIN);
SPI.transfer(enableUpdateMSB);
SPI.transfer(enableUpdateLSB);
digitalWrite(csPin, HIGH); //de-select slave
}
我已經過了很多次,好像數學是正確的,它傳遞了正確的字節,但是我沒有變端子A和雨刮器之間的任何變化。頁面19:data sheet的表11顯示了我應該傳送的16位字的格式。任何人都可以點亮我在這裏可能會缺少的東西嗎?任何幫助將不勝感激,謝謝!
編輯:更改了我的代碼以反映mpflaga的建議,但仍然沒有骰子不幸。
編輯2:SPI模式的確是SPI_MODE1。 PG。 7:數據手冊的圖3狀態CPOL = 0,CPHA = 1。編輯上面的代碼以反映更改。再次感謝@mpflaga。
啊......我現在明白了。我們需要發送0x1C02 00 0111 0000000010. 雖然我仍然沒有得到迴應。發送每個單詞後,是否需要將SS引腳拉高? – swbooking
每頁18 ...當SYNC返回高電平時,串行數據字根據表11中的說明解碼 – mpflaga
謝謝!我更新了上面的代碼以反映您的建議和一些更改,但遺憾的是阻力仍然沒有變化。 – swbooking