ADS1118遇到的问题点说明(上一博客有调试代码)

1,单通道采集时:期初硬件上与单片机连接的四个引脚(时钟,片选,输入,输出)是按照数据手册上推荐的,分别添加了50Ω的限流电阻。在单通道无间断采集时,刚开始数据能够正常采集,但是连续采集时间超过半个小时后,会出现数据无法采集现象,整改点就是将ADS1118上的OUT引脚限流电阻调成1K,然后测试了一晚(十小时),数据采集OK。(多谢某位大佬的博客提醒)
2,在多通道采集时:我代码用的是16位采集模式,需要将片选信号太高。一个时钟周期读写同时进行的,所以每次采集到的数据都是上一次配置条件下进行的采集,在多通道的情况下,需要连续读写至少两次,第二次读到的数据才是你此次通道配置后的数据(目前不了解芯片设计的思路)。
3,在多通道采集时:接2的问题,如果在数据连续调用两次的情况下,采集的第二次数据为想要的数据,但是这样比较麻烦,所以我是在代码里直接遍历五遍,舍去第一次读取的数据,然后将余下四次的数据求取的平均值,今天调试时依然出现数据漂移了,然后在每一次遍历时添加了15ms延时,问题能够解决,时间缩短了会偶尔漂移。问题点是芯片采集频率设置为128SPS每秒,约为8ms采集一次,数据采集时间间隔需要延时,将芯片采集频率调整到860SPS每秒,延时时间可以缩短至1ms。
4,感觉每个通道直接采集一次,虽然数据会顺移一个通道,但是处理起来会很方便。同事说他改天写一下对应通道的。到时候再更

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个基本的ADS1118芯片驱动代码,使用SPI总线进行通信: ```c #include <SPI.h> #define CS_PIN 10 // Chip select pin #define DRDY_PIN 6 // Data ready pin // ADS1118 register addresses #define REG_CONVERSION 0x00 #define REG_CONFIG 0x01 // Configuration register bit fields #define CFG_OS_BIT 15 #define CFG_MUX_BIT 12 #define CFG_PGA_BIT 9 #define CFG_MODE_BIT 8 #define CFG_DR_BIT 5 #define CFG_COMP_MODE_BIT 4 #define CFG_COMP_POL_BIT 3 #define CFG_COMP_LAT_BIT 2 #define CFG_COMP_QUE_BIT1 1 #define CFG_COMP_QUE_BIT0 0 // Configuration register values #define CFG_OS_SINGLE_CONV 0x8000 // Start single conversion #define CFG_MUX_AIN0_AIN1 0x0000 // Differential inputs AIN0 and AIN1 #define CFG_PGA_6_144V 0x0000 // Full scale range +/-6.144V #define CFG_MODE_SINGLE_CONV 0x0100 // Single conversion mode #define CFG_DR_128SPS 0x0000 // Data rate 128 samples per second #define CFG_COMP_MODE_TRADITIONAL 0x0000 // Traditional window comparator mode #define CFG_COMP_POL_ACTIVE_LOW 0x0000 // Active low comparator polarity #define CFG_COMP_LAT_NON_LATCHING 0x0000 // Non-latching comparator #define CFG_COMP_QUE_ASSERT_AFTER_1_CONV 0x0000 // Assert after one conversion void setup() { // Initialize SPI communication SPI.begin(); SPI.setDataMode(SPI_MODE1); SPI.setClockDivider(SPI_CLOCK_DIV16); pinMode(CS_PIN, OUTPUT); digitalWrite(CS_PIN, HIGH); // Set chip select pin to high pinMode(DRDY_PIN, INPUT_PULLUP); // Data ready pin // Configure ADS1118 writeRegister(REG_CONFIG, CFG_OS_SINGLE_CONV | CFG_MUX_AIN0_AIN1 | CFG_PGA_6_144V | CFG_MODE_SINGLE_CONV | CFG_DR_128SPS | CFG_COMP_MODE_TRADITIONAL | CFG_COMP_POL_ACTIVE_LOW | CFG_COMP_LAT_NON_LATCHING | CFG_COMP_QUE_ASSERT_AFTER_1_CONV); } void loop() { // Wait for data ready pin to go low while(digitalRead(DRDY_PIN)); // Read conversion value int16_t value = readRegister(REG_CONVERSION); // Do something with the conversion value } void writeRegister(uint8_t address, uint16_t value) { // Send command byte digitalWrite(CS_PIN, LOW); SPI.transfer(address); // Write register value SPI.transfer16(value); digitalWrite(CS_PIN, HIGH); } int16_t readRegister(uint8_t address) { // Send command byte digitalWrite(CS_PIN, LOW); SPI.transfer(address); // Read register value int16_t value = SPI.transfer16(0); digitalWrite(CS_PIN, HIGH); return value; } ``` 注意,这只是一个基本的示例代码,实际应用中还需要进行更多的配置和错误处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值