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.

[参考译文] ADS7066:Arduino Uno 与 ADS7066之间的 SPI 通信

Guru**** 1997895 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1337314/ads7066-spi-communication-between-arduino-uno-and-ads7066

器件型号:ADS7066

您好、我正在尝试进行 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 的电压、但我不读回任何内容。 我在下面指定的代码中使用了读取命令:  

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    出于某种原因、我的 SDI 会在每8位时钟周期后变为高电平? 这是否正常?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sachin:

    请参阅第7.4.2节"手动模式"。 图7-13总结了将 MUX 切换到另一个通道和接收数据所需的操作。 如果您在帧 N 中发送命令来切换 MUX 通道、那么来自该通道的数据在帧 N + 2中将可用。

    此致、

    瑞安