This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、我正在尝试进行 SPI 通信。 ADC7066和 Arduino Uno 之间。 我将从外部电源为 CH1 (AIN1)提供2V 电压、但 获得有关 SDO 的一些随机数据。 我使用手动模式和 SPI 模式0。
连接:
ADC7066 | 乌诺 |
CS | 数字引脚10 |
sdi | 莫西(D11) |
SDO | MISO (D12) |
CLK | CLK (D13) |
5V | 5V |
AVDD | 3.3V |
错误1 | 2伏 |
Arduino 代码:
#包含
const int CS = 10;
uint32_t ADC_get (int CS);
#define DelayTime 2 //延迟,以秒为单位
空 setup(){
引脚模式(13、输出);//SPI SCK
引脚模式(11、输出);//SPI MOSI
引脚模式(12、输入);//SPI MISO
引脚模式(CS、输出);
digitalWrite (CS、HIGH);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPI.setClockDivider(SPI_CLOCK_DIV2);
Serial.begin(9600);
}
void loop(){
uint8_t RD_REG = 0b00010000;
uint8_t Add = 0x11;
uint8_t 数据= 0x00;
digitalWrite (CS、LOW);
SPI.TRANSMIT (WR_REG);
spi.transfer (0b00010001);
SPI.Transfer (数据);
digitalWrite (CS、HIGH);
uint32_t data =(RD_REG)+(ADD)+(Data);//组合字节、32位至24位缩放
返回数据;
延迟(5000);
}
Sachin、您好!
感谢您的发帖。
上面示波器图像中的寄存器写入帧看起来正确: 01h 11h 00h (将00h 写入 地址11h)。 如果您要将通道更改为 AIN1、则需要发送01h 11h 01h。
此致、
瑞安
您好、Ryan、感谢您的回复。 快速问一个问题、从 CH1读取数据需要做什么? 我为 CH1提供2V 电压、但在 SDO 线路上什么也得不到。
字节 RD_REG = 0x10;
字节 ADD = 0x11;
字节虚拟= 0x00;
digitalWrite (CS、LOW);
SPI.TRANSMIT (RD_REG);
SPI.transfer (ADD);
SPI.TRANSMIT (虚拟);
digitalWrite (CS、HIGH);
digitalWrite (CS、LOW);
字节值= SPI.TRANSMIT (虚拟);
SPI.TRANSMIT (虚拟);
SPI.TRANSMIT (虚拟);
digitalWrite (CS、HIGH);
serial.println (value、bin);
这是示波器图像、我为 CH1提供了2V 的电压、但我不读回任何内容。 我在下面指定的代码中使用了读取命令:
byte RD_REG = 0x10; byte Add = 0x11; byte Dummy = 0x00; digitalWrite(CS, LOW); SPI.transfer(RD_REG); SPI.transfer(Add); SPI.transfer(Dummy); digitalWrite(CS, HIGH); digitalWrite(CS, LOW); byte value = SPI.transfer(Dummy); SPI.transfer(Dummy); SPI.transfer(Dummy); digitalWrite(CS, HIGH); serial.println(value, BIN);
出于某种原因、我的 SDI 会在每8位时钟周期后变为高电平? 这是否正常?
尊敬的 Sachin:
请参阅第7.4.2节"手动模式"。 图7-13总结了将 MUX 切换到另一个通道和接收数据所需的操作。 如果您在帧 N 中发送命令来切换 MUX 通道、那么来自该通道的数据在帧 N + 2中将可用。
此致、
瑞安