主题中讨论的其他器件: ADS8688
工具与软件:
希望大家都做得好
我想问一些帮助、我需要 使用 ADS8698进行数据采集、并且由于我对 SPI 非常陌生、我不明白我到底在做什么 
请提供帮助。 
我具有采用 ADS8698的以下电路板 
https://www.aliexpress.com/item/1005006570383341.html 
ADS8698产品说明书 
https://www.ti.com/lit/ds/symlink/ads8698.pdf?ts = 1730097926835&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FADS8698 
我将 SPI 引脚和电位计连接到 Raspi 5V 的 V 和 Raspi GND 的 GND、中间 PINT 连接到 AIN0 
电路板 VIN => 5V raspi 
电路板 GND => GND raspi 
下面是我的代码、如果我是否将输入连接到 AIN0、我将从 ADC 获得相同的值、并且即使我只是在 RST 命令之后读取响应、当我打印 adc_val = 255时、我仍然会获得相同的值 
将 ADC 值转换为如下电压也是否正确? 
# config.py --------------------------------------------------------------- import time import RPi.GPIO as GPIO import spidev RST_PIN = 25 CS_PIN = 8 SPI = spidev.SpiDev() SPI.open(0, 0) def digital_write(pin, value): GPIO.output(pin, value) def delay_ns(ns): time.sleep(ns * 1e-9) def spi_writebyte(data): SPI.writebytes(data) def spi_readbytes(reg): return SPI.readbytes(reg) def module_init(): GPIO.setmode(GPIO.BCM) print(1) GPIO.setwarnings(False) print(2) GPIO.setup(RST_PIN, GPIO.OUT) print(3) GPIO.setup(CS_PIN, GPIO.OUT) SPI.max_speed_hz = 18_000_000 #18MHz SPI.mode = 1 return 0 # End Config
# ads.py ---------------------------------------------------------------
import config
import RPi.GPIO as GPIO
CMD_REG = {
    'NO_OP'    : 0x0000, # Continue operation in previous mode
    'STDBY'    : 0x8200, # Device is placed into standby mode
    'PWR_DN'   : 0x8300, # Device is powered down
    'RST'      : 0x8500, # Program register is reset to default
    'AUTO_RST' : 0xA000, # Auto mode enabled following a reset
    'MAN_Ch_0' : 0xC000, # Channel 0 input is selected
    'MAN_Ch_1' : 0xC400, # Channel 1 input is selected
    'MAN_Ch_2' : 0xC800, # Channel 2 input is selected
    'MAN_Ch_3' : 0xCC00, # Channel 3 input is selected
    'MAN_Ch_4' : 0xD000, # Channel 4 input is selected
    'MAN_Ch_5' : 0xD400, # Channel 5 input is selected
    'MAN_Ch_6' : 0xD800, # Channel 6 input is selected
    'MAN_Ch_7' : 0xDC00, # Channel 7 input is selected
    'MAN_AUX'  : 0xE000 # AUX channel input is selected
}
rest = [ 0x85, 0x00]
class ADS:
    def __init__(self):
        self.rst_pin = config.RST_PIN
        self.cs_pin = config.CS_PIN
   
    def ADS_reset(self):
        config.digital_write(self.rst_pin, GPIO.HIGH)
        config.delay_ns(100)    
        config.digital_write(self.rst_pin, GPIO.LOW)
        config.delay_ns(100)    
        # config.spi_writebyte(rest)
        config.spi_writebyte([CMD_REG['RST']] )
        config.digital_write(self.rst_pin, GPIO.HIGH)
        # config.delay_ns(100)    
    def ADS_Write_Cmd(self, cmd_reg):
        config.digital_write(self.cs_pin, GPIO.LOW)
        config.spi_writebyte([cmd_reg] )
        config.digital_write(self.cs_pin, GPIO.HIGH)
    def ADS_Read_ADC_Data(self):
        config.digital_write(self.cs_pin, GPIO.LOW)
        config.spi_writebyte([CMD_REG['NO_OP']])
        buf = config.spi_readbytes(3)
        config.digital_write(self.cs_pin, GPIO.HIGH)
        read = (buf[0]<<16) & 0xff0000
        read |= (buf[1]<<8) & 0xff00
        read |= (buf[2]) & 0xff
        return read
   
    def ADS_init(self):
        if (config.module_init() != 0):
            return -1
       
        self.ADS_reset()
        return
   
# End ADS# main.py ---------------------------------------------------------------
import ADS
import RPi.GPIO as GPIO
try:
    ADC = ADS.ADS()
    ADC.ADS_init()
    # ADC.ADS_Write_Cmd(ADS.CMD_REG['MAN_Ch_0'])
    # result = []
    while(1):
        adc_val = ADC.ADS_Read_ADC_Data()
        print("ADC = %lf        "%(adc_val * 10.24 / (2 ** 18)))
        print(adc_val )
except :
    GPIO.cleanup()
    print ("\r\nProgram end     ")
    exit()
# End Main 
				 
		 
					 
				
