bolizhicheng204 发表于 2020-7-31 09:10:15

[原创/开源]重写AD7124驱动,所有寄存器可直接单独配置

本帖最后由 bolizhicheng204 于 2020-7-31 09:14 编辑

最近又开始搞AD7124了,一直都很受不了ADI的底层驱动,感觉太繁琐,赋值、读取都很麻烦,也许是我水平问题吧,哈哈。反正我喜欢像STM32一样所有寄存器可以单独配置、读取。
花了一段时间改写了AD7124的底层驱动,大概测了一下,没啥问题,我用通道11,外部基准,测量外部基准轻松达到21位无噪声分辨率。

今日把整个工程文件上传,单片机型号是STM32F429IGT6,欢迎交流。

N_EMBED 发表于 2020-7-31 10:09:19

首先感谢楼主分享,想问一下,你的例程采样率能达到19.2K吗?要是到最高采样率,采集的数值是否稳定?

bolizhicheng204 发表于 2020-7-31 10:29:39

N_EMBED 发表于 2020-7-31 10:09
首先感谢楼主分享,想问一下,你的例程采样率能达到19.2K吗?要是到最高采样率,采集的数值是否稳定? ...

没仔细看,目测应该没有问题,ADI的手册数据非常可信,我按照全功率最大速度跑,测量外部2.5V基准,不做任何滤波轻松达到21位无噪声分辨率,ADI还是很厉害的

weiwei4 发表于 2020-7-31 16:27:50

谢谢分享

zhcj66 发表于 2020-7-31 21:41:41

这个芯片稳定性怎么样,lz出货了多少这种芯片?

bolizhicheng204 发表于 2020-8-3 08:44:13

zhcj66 发表于 2020-7-31 21:41
这个芯片稳定性怎么样,lz出货了多少这种芯片?

还没出货{:biggrin:} 之前用另一个型号,最近尝试一下准备替换,之前做过很多功课,这颗料稳定性应该不会差

reflecter 发表于 2020-8-3 20:32:38

目前使能了几个通道?数字滤波器怎么配的?用了通道序列器了的?

reflecter 发表于 2020-8-3 20:37:24

zhcj66 发表于 2020-7-31 21:41
这个芯片稳定性怎么样,lz出货了多少这种芯片?

稳定,我们东区已有客户100K级别出货~
若无需低功耗模式,还有个low cost特别型号AD74-014可以选用的(电脑关了,型号可能记错了,若错了,明天来修改)。

ersha4877 发表于 2020-8-3 21:18:32

有ADS1220的STM32F030的驱动,最近在搞,有点搞不定,谢谢

zhcj66 发表于 2020-8-4 08:02:48

bolizhicheng204 发表于 2020-7-31 10:29
没仔细看,目测应该没有问题,ADI的手册数据非常可信,我按照全功率最大速度跑,测量外部2.5V基准,不做 ...

增加遇到AD779x系列的都容易 芯片无数据输出,彻底放弃了AD779X系类

zhcj66 发表于 2020-8-4 08:04:38

ersha4877 发表于 2020-8-3 21:18
有ADS1220的STM32F030的驱动,最近在搞,有点搞不定,谢谢

在stm32f103上测试成功的

#include "includes.h"

#define ADS1x20_CS_GPIO                        GPIOD
#define ADS1x20_SCLK_GPIO                GPIOD
#define ADS1x20_DIN_GPIO                GPIOD
#define ADS1x20_DOUT_GPIO                GPIOD

#define ADS1x20_CS_Pin                        GPIO_Pin_12
#define ADS1x20_SCLK_Pin                GPIO_Pin_11
#define ADS1x20_DIN_Pin                        GPIO_Pin_13
#define ADS1x20_DOUT_Pin                GPIO_Pin_14

#define ADS1x20_CS_Out(x)                x?GPIO_SetBits(ADS1x20_CS_GPIO,ADS1x20_CS_Pin):GPIO_ResetBits(ADS1x20_CS_GPIO,ADS1x20_CS_Pin)
#define ADS1x20_SCLK_Out(x)                x?GPIO_SetBits(ADS1x20_SCLK_GPIO,ADS1x20_SCLK_Pin):GPIO_ResetBits(ADS1x20_SCLK_GPIO,ADS1x20_SCLK_Pin)
#define ADS1x20_DIN_Out(x)                x?GPIO_SetBits(ADS1x20_DIN_GPIO,ADS1x20_DIN_Pin):GPIO_ResetBits(ADS1x20_DIN_GPIO,ADS1x20_DIN_Pin)
#define ADS1x20_DOUT_Get                GPIO_ReadInputDataBit(ADS1x20_DOUT_GPIO, ADS1x20_DOUT_Pin)

void ADS1x20_Delay(unsigned short x)//单位1us
{
        Delay_us(x);
}

void ADS1x20_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE );
       
        //CS
        GPIO_InitStructure.GPIO_Pin = ADS1x20_CS_Pin;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(ADS1x20_CS_GPIO, &GPIO_InitStructure);
        //SCLK
        GPIO_InitStructure.GPIO_Pin = ADS1x20_SCLK_Pin;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(ADS1x20_SCLK_GPIO, &GPIO_InitStructure);
        //DIN
        GPIO_InitStructure.GPIO_Pin = ADS1x20_DIN_Pin;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(ADS1x20_DIN_GPIO, &GPIO_InitStructure);
        //DOUT
        GPIO_InitStructure.GPIO_Pin = ADS1x20_DOUT_Pin;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(ADS1x20_DOUT_GPIO, &GPIO_InitStructure);
}

//读写ADS1x20
//short:芯片配置
//Chip:芯片内的配置返回
//return:ReadData
unsigned char ADS1x20_ReadWirte(unsigned char Config)
{
unsigned char i;
unsigned short config=0,//配置
                           data=0;//读取ADC
//        ADS1x20_CS_Out(0);
        config = Config;
        for(i=0;i<8;i++)
        {
                //ADS1x20_Delay(1);
                ADS1x20_SCLK_Out(1);
                if(config&0x80)
                {
                        ADS1x20_DIN_Out(1);
                }
                else
                {
                        ADS1x20_DIN_Out(0);
                }
                //ADS1x20_Delay(1);
                ADS1x20_SCLK_Out(0);
                data = data<<1;
                if(ADS1x20_DOUT_Get)
                {
                        data++;
                }
               
                config = config<<1;
        }
//        ADS1x20_CS_Out(1);
        return data;
}

//ADS1x20读取AD数据
void ADS1x20_ReadData(unsigned char*Data)
{
        ADS1x20_CS_Out(0);
        ADS1x20_ReadWirte(ADS1x20_RDATA);
#ifdef ADS1120
        *Data++ = ADS1x20_ReadWirte(0xFF);
        *Data++ = ADS1x20_ReadWirte(0xFF);
#else //ADS1220
        *Data++ = ADS1x20_ReadWirte(0xFF);
        *Data++ = ADS1x20_ReadWirte(0xFF);
        *Data++ = ADS1x20_ReadWirte(0xFF);
        *Data++ = ADS1x20_ReadWirte(0xFF);
#endif
        ADS1x20_CS_Out(1);
}

//ADS1x20复位
void ADS1x20_Reset(void)
{
        ADS1x20_CS_Out(0);
        ADS1x20_ReadWirte(ADS1x20_RESET);
        ADS1x20_CS_Out(1);
}

//ADS1x20发送开始转换
void ADS1x20_StartConversion(void)
{
        ADS1x20_CS_Out(0);
        ADS1x20_ReadWirte(ADS1x20_START);
        ADS1x20_CS_Out(1);
}

//低功耗
void ADS1x20_PowerDown(void)
{
    ADS1x20_CS_Out(0);
        ADS1x20_ReadWirte(ADS1x20_POWERDOWN);
        ADS1x20_CS_Out(1);
}

//ADS1x20_ReadRegister:读取寄存器配置
//pData:一次读取ADS1x20的4个寄存器配置
//注:pData返回的数据空间需要4bit
//这里是为了方便一次读出了所有寄存器的值,也可以像写寄存器那样单独读出单个寄存器的值
void ADS1x20_ReadRegister(unsigned char *pData)
{
unsigned char i;
    ADS1x20_CS_Out(0);
    ADS1x20_ReadWirte(ADS1x20_RREG|0x03);
        for (i=0; i< 4; i++)// get the register content
        {
                *pData++ = ADS1x20_ReadWirte(0xFF);
        }
        ADS1x20_CS_Out(1);
}

//ADS1x20_WriteRegister:写入寄存器配置
//StartAddress:写入寄存器的地址(如:00寄存器则配置为0;03寄存器则配置为3)
//NumRegs:写入n个寄存器数据,从第StartAddress寄存器开始写
//pData:写入寄存器的数据
//如:把01寄存器写0x58 02寄存器写入0x49
//   unsigned char Temp;
//   Temp = 0x58;
//   Temp = 0x49;
//   ADS1x20_WriteRegister(1,2,Temp);
void ADS1x20_WriteRegister(unsigned char StartAddress, unsigned char NumRegs, unsigned char * pData)
{
unsigned char i;
        ADS1x20_CS_Out(0);
        ADS1x20_ReadWirte(ADS1x20_WREG | (((StartAddress<<2) & 0x0c) |((NumRegs-1)&0x03)));// send the command byte
        for (i=0; i< NumRegs; i++)// send the data bytes
        {
                ADS1x20_ReadWirte(*pData);
                pData++;
        }
        ADS1x20_CS_Out(1);
}

void ADS1x20_ReadChannel(unsigned char Channel,unsigned char*Data)
{
unsigned char Register;
        Register = Channel|ADS1x20_00_GAIN6|ADS1x20_00_PGA_BYPASS_E;//通道|放大倍数|PGA旁路
        Register = ADS1x20_01_DR2|ADS1x20_01_MODE0|ADS1x20_01_CM0|ADS1x20_01_TS0|ADS1x20_01_BCS0;//转换速率|速率模式|转换模式|温度还是ADC|电流源开关
        Register = ADS1x20_02_VREF0|ADS1x20_02_FIR1|ADS1x20_02_IDAC0;//参考电压|滤波|恒流源大小
        Register = ADS1x20_03_I1MUX0|ADS1x20_03_I2MUX0|ADS1x20_03_DRDYM1;//恒流源1连接|恒流源2连接|转换结束RDRY和DOUT管脚拉低
        ADS1x20_WriteRegister(0,4,Register);//设置寄存器
        ADS1x20_StartConversion();//转换开始
        while(ADS1x20_DOUT_Get);//等待数据转换结束
        ADS1x20_ReadData(Data);//读取数据
//        ADS1x20_ReadRegister(Register);
        ADS1x20_PowerDown();//低功耗
}

//读取芯片温度
unsigned short ADS1x20_ReadChip(void)
{
unsigned charRegister;
unsigned short temp;
        Register = ADS1x20_01_DR2|ADS1x20_01_MODE0|ADS1x20_01_CM0|ADS1x20_01_TS1|ADS1x20_01_BCS0;//转换速率|速率模式|转换模式|温度还是ADC|电流源开关
        ADS1x20_WriteRegister(1,1,&Register);//设置寄存器
        ADS1x20_StartConversion();//转换开始
        while(ADS1x20_DOUT_Get);//等待数据转换结束
        ADS1x20_CS_Out(0);
        ADS1x20_ReadWirte(ADS1x20_RDATA);//发送读命令
        temp = ADS1x20_ReadWirte(0xFF);//读芯片温度高字节
        temp = temp<<8;
        temp = temp+ADS1x20_ReadWirte(0xFF);//读芯片温度低字节
        ADS1x20_CS_Out(1);
//        ADS1x20_ReadRegister(Register);
        ADS1x20_PowerDown();//低功耗
       
        return temp;
}

//读取芯片温度
float ADS1x20_ReadChipTemp(void)
{
unsigned short temp;
float                    Temp;
        temp = ADS1x20_ReadChip();
        Temp = (float)(temp*0.00625);//温度=转换数据*0.03125/5(0.03125/5=0.00625)
        return Temp;
}

#ifdef ADS1120

#else //ADS1220

#endif


#ifndef __ADS1X20_H
#define __ADS1X20_H

#defineADS1120//如果定义了就是ADS1120如果没定义就是ADS1220

#ifdef ADS1120

#else //ADS1220

#endif

#define ADS1x20_RESET                        0x06//Reset the device
#define ADS1x20_START                      0x08//Start or restart conversions
#define ADS1x20_POWERDOWN                0x02//Enter power-down mode
#define ADS1x20_RDATA                   0x10//Read data by command
#define ADS1x20_RREG                      0x20//Read nn registers starting at address rr
#define ADS1x20_WREG                       0x40//Write nn registers starting at address rr

//寄存器00
#define ADS1x20_00_MUX0                        0x00//AINP = AIN0, AINN = AIN1 (default)
#define ADS1x20_00_MUX1                        0x10//AINP = AIN0, AINN = AIN2
#define ADS1x20_00_MUX2                        0x20//AINP = AIN0, AINN = AIN3
#define ADS1x20_00_MUX3                        0x30//AINP = AIN1, AINN = AIN2
#define ADS1x20_00_MUX4                        0x40//AINP = AIN1, AINN = AIN3
#define ADS1x20_00_MUX5                        0x50//AINP = AIN2, AINN = AIN3
#define ADS1x20_00_MUX6                        0x60//AINP = AIN1, AINN = AIN0
#define ADS1x20_00_MUX7                        0x70//AINP = AIN3, AINN = AIN2
#define ADS1x20_00_MUX8                        0x80//AINP = AIN0, AINN = AVSS
#define ADS1x20_00_MUX9                        0x90//AINP = AIN1, AINN = AVSS
#define ADS1x20_00_MUXA                        0xA0//AINP = AIN2, AINN = AVSS
#define ADS1x20_00_MUXB                        0xB0//AINP = AIN3, AINN = AVSS
#define ADS1x20_00_MUXC                        0xC0//(VREFPx ?VREFNx) / 4 monitor (PGA bypassed)
#define ADS1x20_00_MUXD                        0xD0//(AVDD ?AVSS) / 4 monitor (PGA bypassed)
#define ADS1x20_00_MUXE                        0xE0//AINP and AINN shorted to (AVDD + AVSS) / 2
#define ADS1x20_00_MUXF                        0xF0//Not used
#define ADS1x20_00_GAIN0                0x00//Gain = 1 (default)
#define ADS1x20_00_GAIN1                0x02//Gain = 2
#define ADS1x20_00_GAIN2                0x04//Gain = 4
#define ADS1x20_00_GAIN3                0x06//Gain = 8
#define ADS1x20_00_GAIN4                0x08//Gain = 16
#define ADS1x20_00_GAIN5                0x0A//Gain = 32
#define ADS1x20_00_GAIN6                0x0C//Gain = 64
#define ADS1x20_00_GAIN7                0x0E//Gain = 128
#define ADS1x20_00_PGA_BYPASS_E        0x00//PGA enabled (default) The PGA is always enabled for gain settings 8 to 128, regardless of the PGA_BYPASS setting.
#define ADS1x20_00_PGA_BYPASS_D        0x01//PGA disabled and bypassed
//寄存器01
//------------------------------------Normal mod------Duty-cycle mode--Turbo mode
#define ADS1x20_01_DR0                        0x00//20 SPS (default)-5 SPS-----------40 SPS
#define ADS1x20_01_DR1                        0x20//45 SPS-----------11.25 SPS-------90 SPS
#define ADS1x20_01_DR2                        0x40//90 SPS-----------22.5 SPS--------180 SPS
#define ADS1x20_01_DR3                        0x60//175 SPS----------44 SPS----------350 SPS
#define ADS1x20_01_DR4                        0x80//330 SPS----------82.5 SPS--------660 SPS
#define ADS1x20_01_DR5                        0xA0//600 SPS----------150 SPS---------1200 SPS
#define ADS1x20_01_DR6                        0xC0//1000 SPS---------250 SPS---------2000 SPS
#define ADS1x20_01_DR7                        0xE0//Not used---------Not used--------Not used
#define ADS1x20_01_MODE0                0x00//Normal mode (256-kHz modulator clock, default)
#define ADS1x20_01_MODE1                0x08//Duty-cycle mode (internal duty cycle of 1:4)
#define ADS1x20_01_MODE2                0x10//Turbo mode (512-kHz modulator clock)
#define ADS1x20_01_MODE3                0x18//Not used
#define ADS1x20_01_CM0                        0x00//Single-shot mode (default)
#define ADS1x20_01_CM1                        0x04//Continuous conversion mode
#define ADS1x20_01_TS0                        0x00//Disables temperature sensor (default)
#define ADS1x20_01_TS1                        0x02//Enables temperature sensor
#define ADS1x20_01_BCS0                        0x00//Current sources off (default)
#define ADS1x20_01_BCS1                        0x01//Current sources on
//寄存器02
#define ADS1x20_02_VREF0                0x00//Internal 2.048-V reference selected (default)
#define ADS1x20_02_VREF1                0x40//External reference selected using dedicated REFP0 and REFN0 inputs
#define ADS1x20_02_VREF2                0x80//External reference selected using AIN0/REFP1 and AIN3/REFN1 inputs
#define ADS1x20_02_VREF3                0xC0//Analog supply AVDD used as reference
#define ADS1x20_02_FIR0                        0x00//No 50-Hz or 60-Hz rejection (default)
#define ADS1x20_02_FIR1                        0x10//Simultaneous 50-Hz and 60-Hz rejection
#define ADS1x20_02_FIR2                        0x20//50-Hz rejection only
#define ADS1x20_02_FIR3                        0x30//60-Hz rejection only
#define ADS1x20_02_PSW0                        0x00//Switch is always open (default)
#define ADS1x20_02_PSW1                        0x08//Switch automatically closes when the START/SYNC command is sent and opens when the POWERDOWN commandis issued
#define ADS1x20_02_IDAC0                0x00//Off (default)
#define ADS1x20_02_IDAC1                0x01//Not used
#define ADS1x20_02_IDAC2                0x02//50 uA
#define ADS1x20_02_IDAC3                0x03//100 uA
#define ADS1x20_02_IDAC4                0x04//250 uA
#define ADS1x20_02_IDAC5                0x05//500 uA
#define ADS1x20_02_IDAC6                0x06//1000 uA
#define ADS1x20_02_IDAC7                0x07//1500 uA
//寄存器03
#define ADS1x20_03_I1MUX0                0x00//IDAC1 disabled (default)
#define ADS1x20_03_I1MUX1                0x20//IDAC1 connected to AIN0/REFP1
#define ADS1x20_03_I1MUX2                0x40//IDAC1 connected to AIN1
#define ADS1x20_03_I1MUX3                0x60//IDAC1 connected to AIN2
#define ADS1x20_03_I1MUX4                0x80//IDAC1 connected to AIN3/REFN1
#define ADS1x20_03_I1MUX5                0xA0//IDAC1 connected to REFP0
#define ADS1x20_03_I1MUX6                0xC0//IDAC1 connected to REFN0
#define ADS1x20_03_I1MUX7                0xE0//Not used
#define ADS1x20_03_I2MUX0                0x00//IDAC2 disabled (default)
#define ADS1x20_03_I2MUX1                0x04//IDAC2 connected to AIN0/REFP1
#define ADS1x20_03_I2MUX2                0x08//IDAC2 connected to AIN1
#define ADS1x20_03_I2MUX3                0x0C//IDAC2 connected to AIN2
#define ADS1x20_03_I2MUX4                0x10//IDAC2 connected to AIN3/REFN1
#define ADS1x20_03_I2MUX5                0x14//IDAC2 connected to REFP0
#define ADS1x20_03_I2MUX6                0x18//IDAC2 connected to REFN0
#define ADS1x20_03_I2MUX7                0x1C//Not used
#define ADS1x20_03_DRDYM0                0x00//Only the dedicated DRDY pin is used to indicate when data are ready (default)
#define ADS1x20_03_DRDYM1                0x02//Data ready is indicated simultaneously on DOUT/DRDY and DRDY


//#define ADS1x20_SADC0_1                        ADS1x20_OS|ADS1x20_MUX0|ADS1x20_PGA5|ADS1x20_MODE1|ADS1x20_SPS4|ADS1x20_TEMP0|ADS1x20_PULL1//单次使能|AIN0-AIN1|PGA16|单次|128SPS|ADC|弱上拉
//#define ADS1x20_ADC0_1                        ADS1x20_MUX0|ADS1x20_PGA5|ADS1x20_MODE0|ADS1x20_SPS4|ADS1x20_TEMP0|ADS1x20_PULL1//AIN0-AIN1|PGA16|连续|128SPS|ADC|弱上拉
//#define ADS1x20_STEMP                        ADS1x20_OS|ADS1x20_MODE1|ADS1x20_SPS4|ADS1x20_TEMP1|ADS1x20_PULL1//单次使能|单次|128SPS|温度|弱上拉
//#define ADS1x20_TEMP                        ADS1x20_MODE0|ADS1x20_SPS4|ADS1x20_TEMP1|ADS1x20_PULL1//连续|128SPS|温度|弱上拉

void ADS1x20_Init(void);
void ADS1x20_ReadRegister(unsigned char *pData);
void ADS1x20_WriteRegister(unsigned char StartAddress, unsigned char NumRegs, unsigned char * pData);
void ADS1x20_ReadChannel(unsigned char Channel,unsigned char*Data);
unsigned short ADS1x20_ReadChip(void);
float ADS1x20_ReadChipTemp(void);

#endif

zhcj66 发表于 2020-8-4 08:06:01

reflecter 发表于 2020-8-3 20:37
稳定,我们东区已有客户100K级别出货~
若无需低功耗模式,还有个low cost特别型号AD74-014可以选用的(电 ...

100k 能到什么价位,还有有效数据能稳定到多少位

bolizhicheng204 发表于 2020-8-4 08:56:06

reflecter 发表于 2020-8-3 20:32
目前使能了几个通道?数字滤波器怎么配的?用了通道序列器了的?

这么好的帖子,就知道你会来{:biggrin:} {:biggrin:}
1个通道,无滤波,都是最基本的功能,我偏向于硬件和方案设计,程序有别人在做,我只是业余时间测试一下。

ersha4877 发表于 2020-8-4 09:16:59

zhcj66 发表于 2020-8-4 08:04
在stm32f103上测试成功的

谢谢了,断断续续搞了个把星期时间了,都没有搞定,感谢了

N_EMBED 发表于 2020-8-4 09:41:09

reflecter 发表于 2020-8-3 20:37
稳定,我们东区已有客户100K级别出货~
若无需低功耗模式,还有个low cost特别型号AD74-014可以选用的(电 ...

搜了一下,没有你说的AD74-014这个型号,AD74开头的大多是12位和16位的,
如果只是没有低功耗,其它功能和AD7124一样,那岂不是物美价廉的好东西

bolizhicheng204 发表于 2020-8-4 10:28:19

ersha4877 发表于 2020-8-3 21:18
有ADS1220的STM32F030的驱动,最近在搞,有点搞不定,谢谢

我之前写过ADS1220相关的帖子,不知道是不是我水平问题,这个片子我觉得精度不好,没有ADI的片子好伺候

ersha4877 发表于 2020-8-4 10:36:15

bolizhicheng204 发表于 2020-8-4 10:28
我之前写过ADS1220相关的帖子,不知道是不是我水平问题,这个片子我觉得精度不好,没有ADI的片子好伺候 ...

没有用过,坛里的高手说还行,也就试试看

reflecter 发表于 2020-8-4 12:36:46

bolizhicheng204 发表于 2020-8-4 08:56
这么好的帖子,就知道你会来
1个通道,无滤波,都是最基本的功能,我偏向于硬件 ...

哈哈~{:handshake:}

reflecter 发表于 2020-8-4 12:39:09

N_EMBED 发表于 2020-8-4 09:41
搜了一下,没有你说的AD74-014这个型号,AD74开头的大多是12位和16位的,
如果只是没有低功耗,其它功能 ...

果然记错了,是AD70/046:内部型号了的,应是低功耗那块未做测试验证,挤了点成本出来。

zhcj66 发表于 2020-8-4 13:30:16

bolizhicheng204 发表于 2020-8-4 10:28
我之前写过ADS1220相关的帖子,不知道是不是我水平问题,这个片子我觉得精度不好,没有ADI的片子好伺候 ...

TI得就是各种寄存器 搞得很晕,我当时参照谁的忘记了,但是我那个驱动是调通了

N_EMBED 发表于 2020-8-4 15:05:35

reflecter 发表于 2020-8-4 12:39
果然记错了,是AD70/046:内部型号了的,应是低功耗那块未做测试验证,挤了点成本出来。

...

这个也搜不到,只是内部测试用的?价格是AD7124-4的60%?哪里可以搞点样品测试一下

ZhangJingYuan 发表于 2020-9-6 16:07:01

请问程序里面读写寄存器时候,应该是要先写通讯寄存器,然后再写相应的寄存器,但是你程序在写寄存器的时候,没有先写通讯寄存器,读寄存器的时候,先写了通讯寄存器,这个没有看明白,能解析一下吗

shhludb 发表于 2020-9-6 23:03:45

全速19.2K下,建立时间最短,有效分辨率最多16位多,除非你软件滤波

windyxin872 发表于 2021-3-3 11:22:47

zhcj66 发表于 2020-8-4 13:30
TI得就是各种寄存器 搞得很晕,我当时参照谁的忘记了,但是我那个驱动是调通了 ...

大哥,我用AD7124-4 采集2个3线PT100怎么画图

20231030 发表于 2023-10-31 21:32:12

有遇到通道间串扰的问题吗?如何解决

albert_w 发表于 2023-11-3 10:02:23

windyxin872 发表于 2021-3-3 11:22
大哥,我用AD7124-4 采集2个3线PT100怎么画图
(引用自24楼)

电流源要切换输出通道吧

cmosbicmos 发表于 2024-4-2 03:36:31

国产完全替代,核芯互联cl2434,最近在推广,插拔替换,寄存器spi及工作模式完全兼容

ibmx311 发表于 2024-4-2 07:40:23

真较劲的话这些东西用好了事情很多,所以没有人用这些东西做万用表。当然万用表还有其他的瓶颈,但ad转换就没有瓶颈吗,其实每个人都清楚,假装看不见就是了
页: [1]
查看完整版本: [原创/开源]重写AD7124驱动,所有寄存器可直接单独配置