ad7124-8芯片代码使用

#include "AD7124.h"
#include <stdio.h>
#include "THERMOCOUPLE.H"
#include "74HC138D.h"


u8 jieguo[10]={0};

//CS---GND   SCLK---PA5   MOSI/DIN---PA7      MISO/DOUT----PA6      模式3  第二个边沿收发
void AD7124_Init()    //硬件初始化
{
    GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);     //使能端口时钟
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //IO口速度为50MHz
    GPIO_Init(GPIOA, &GPIO_InitStructure);                     //根据设定参数初始化
    
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_8;    
    GPIO_Init(GPIOC, &GPIO_InitStructure);                     //根据设定参数初始化

    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                 //输入
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);        
    
    
    GPIO_SetBits(GPIOC, GPIO_Pin_9|GPIO_Pin_8);            //置1
        
    AD7124_SCLK = 1;        //空闲状态下
}
void AD7124_Rest()        //复位
{
    u8 i=0;
    AD7124_SCLK = 1;
    
    for(i=0;i<70;i++)
    {
        AD7124_SCLK = 1;
        AD7124_MOSI =1;
        AD7124_SCLK = 0;
        delay_us(1);
    }
}

void AD7124_Write(u8 data)        //写   用于写寄存器
{
    u8 i=0;
    AD7124_SCLK = 1;        //空闲状态下
    
    for(i=0;i<8;i++)
    {
        AD7124_SCLK = 0;
delay_us(1);        
        if(data & 0x80)
            AD7124_MOSI =1 ;
        else
            AD7124_MOSI =0 ;        
        AD7124_SCLK = 1;
        data<<=1;
delay_us(1);        
    }
    AD7124_SCLK = 1;
}
void AD7124_Write_xByte(u8 ADD ,u8 xByte,u32 data)        //写 地址,字节,数据  用于写寄存器
{
    AD7124_Write(ADD);
    if(xByte == 1)
        AD7124_Write(data);
    if(xByte == 2)
    {
        AD7124_Write(data>>8);
        AD7124_Write(data);
    }
    if(xByte == 3)
    {
        AD7124_Write(data>>16);
        AD7124_Write(data>>8);
        AD7124_Write(data);
    }
    if(xByte == 4)
    {
        AD7124_Write(data>>24);
        AD7124_Write(data>>16);
        AD7124_Write(data>>8);
        AD7124_Write(data);
    }
}

void AD7124_Write_RS_Read(u8 data)                    //写   用于读寄存器
{
    u8 com = 0x40;
    u8 i=0;
    com |= data;
    
    AD7124_SCLK = 1;        //空闲状态下
    for(i=0;i<8;i++)
    {
        AD7124_SCLK = 0;
        delay_us(1);        
        if(com & 0x80)
            AD7124_MOSI =1 ;
        else
            AD7124_MOSI =0 ;        
        AD7124_SCLK = 1;
        com<<=1;
        delay_us(1);        
    }
    AD7124_SCLK = 1;
}

u8 AD7124_Read(void)            //读8bit
{
    u8 i=0;
    u8 data=0;
    
    AD7124_SCLK = 1;        //空闲状态下
        for(i=0;i<8;i++)
        {
            data<<=1;
            AD7124_SCLK = 0;
        delay_us(1);
            AD7124_SCLK = 1;
        delay_us(1);
            data |= AD7124_MISO;
        }
        AD7124_SCLK = 1;
        return data;
}
u32 AD7124_Read_X(u8 add,u8 number)            
{
    u32 data=0;
    AD7124_Write_RS_Read(add);
    if(number == 1)
        data = AD7124_Read();
    if(number == 2)
    {
        data = AD7124_Read();
        data <<= 8;
        data |= AD7124_Read();
    }
    if(number == 3)
    {
        data = AD7124_Read();
        data <<= 8;
        data |= AD7124_Read();
        data <<= 8;
        data |= AD7124_Read();
    }
    if(number == 4)
    {
        data = AD7124_Read();
        data <<= 8;
        data |= AD7124_Read();
        data <<= 8;
        data |= AD7124_Read();
        data <<= 8;
        data |= AD7124_Read();
    }
    return data;
}

u8 One_Convert()    //单次转换配置
{
    u8 cnt=0;
    u8 temp=0;
    AD7124_Write(0x01);
    AD7124_Write(0x04);
    while(AD7124_MOSI ==1)
    {
        delay_us(1);
        cnt++;
        if(cnt>50)
            return 0;
    }
    AD7124_Write(0x42);
    temp = AD7124_Read();
    
    return temp;
}

u8 Contin_Convert()    //连续转换配置
{
    u8 cnt=0;
    u8 temp=0;
    AD7124_Write(0x42);
    temp = AD7124_Read();
    AD7124_Write(0x42);
    temp = AD7124_Read();
    
    return temp;
}
u8 Contin_Read()    //连续读取配置
{
    u8 cnt=0;
    u8 temp=0;
    AD7124_Write(0x01);
    AD7124_Write(0x08);
    AD7124_Write(0x00);
    
    while(AD7124_MISO ==1)
    {
        delay_us(1);
        cnt++;
        if(cnt>50)
            return 0;
    }
    temp = AD7124_Read();
    temp = AD7124_Read();
    return temp;
}
void AD7124_Check_ID(void)            //检查模块时序、复位
{
    u8 temp=0;
    AD7124_Write(0x45);
    temp = AD7124_Read();
    if(temp != 0x14  &&  temp != 0x15)
        AD7124_Rest();        //复位
}
void Choose_Channel()        //通道0初始化
{
    AD7124_Check_ID();        //检查模块时序、复位
    //1.控制寄存器
     AD7124_Write_xByte(AD7124_ADC_CTRL_REG,2,AD7124_ADC_CTRL_REG_DATA_STATUS | AD7124_ADC_CTRL_REG_REF_EN | AD7124_ADC_CTRL_REG_POWER_MODE(3) | AD7124_ADC_CTRL_REG_MODE(0) | AD7124_ADC_CTRL_REG_CLK_SEL(0));
    //2.写AD7124 通道0寄存器
    AD7124_Write_xByte(AD7124_CH5_MAP_REG,2,AD7124_CH_MAP_REG_CH_ENABLE | AD7124_CH_MAP_REG_SETUP(0) | AD7124_CH_MAP_REG_AINP(10) | AD7124_CH_MAP_REG_AINM(11));
    //3.写AD7124 配置0寄存器
    AD7124_Write_xByte(AD7124_CFG0_REG,2,AD7124_CFG_REG_BIPOLAR | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AINN_BUFM | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_REF_SEL(0) | AD7124_CFG_REG_PGA(5) | Samprate_2Hz);
    //4.滤波器打开
    AD7124_Write_xByte(AD7124_FILT0_REG,3,AD7124_FILT_REG_FILTER(0) | AD7124_FILT_REG_REJ60 | AD7124_FILT_REG_POST_FILTER(0) | AD7124_FILT_REG_FS(384));
          
}

void Yx_Channel(u8 number)  //number  0~7
{
    uint8_t PGA =5;
    u8 i=0;
    u32 REGtemp=0,tempp=0;
    u32 temp=0;
    float adcx=0;

    Set_High_Voltage(number);        //第几位接通
    

    
    //1.复位ADC
    AD7124_Rest();        //复位
    
     AD7124_Write_xByte(AD7124_ADC_CTRL_REG,2,/*AD7124_ADC_CTRL_REG_REF_EN | */AD7124_ADC_CTRL_REG_POWER_MODE(3) | AD7124_ADC_CTRL_REG_MODE(0) | AD7124_ADC_CTRL_REG_CLK_SEL(0));
//     AD7124_Write_xByte(AD7124_CH0_MAP_REG,2,AD7124_CH_MAP_REG_CH_ENABLE | AD7124_CH_MAP_REG_SETUP(0) | AD7124_CH_MAP_REG_AINP(11) | AD7124_CH_MAP_REG_AINM(10));    
//     AD7124_Write_xByte(AD7124_CFG0_REG,2,AD7124_CFG_REG_BIPOLAR | AD7124_CFG_REG_AIN_BUFP | AD7124_CFG_REG_AINN_BUFM | AD7124_CFG_REG_REF_BUFP | AD7124_CFG_REG_REF_BUFM | AD7124_CFG_REG_REF_SEL(0) | AD7124_CFG_REG_PGA(5));
//   AD7124_Write_xByte(AD7124_FILT0_REG,3,AD7124_FILT_REG_FILTER(0) | AD7124_FILT_REG_REJ60 | AD7124_FILT_REG_POST_FILTER(0) | AD7124_FILT_REG_FS(384));

    //3.配置寄存器0  双极性  开路检测电流源关闭  REFINx(+)上的缓冲器使能。  REFINx(-)上的缓冲器使能。 AINP上的缓冲器使能 //AINM上的缓冲器使能  基准电压选择REFIN2(+)/REFIN2(-)。增益32
    AD7124_Write_xByte(AD7124_CFG0_REG,2,AD7124_CFG_REG_BIPOLAR|AD7124_CFG_REG_BURNOUT(0)|AD7124_CFG_REG_REF_BUFP|AD7124_CFG_REG_REF_BUFM    | AD7124_CFG_REG_AIN_BUFP|AD7124_CFG_REG_AINN_BUFM|AD7124_CFG_REG_REF_SEL(0)|AD7124_CFG_REG_PGA(5));
    //4.滤波器配置  000 = sinc4滤波器(默认)。 
    AD7124_Write_xByte(AD7124_FILT0_REG,3,AD7124_FILT_REG_FILTER(0)|AD7124_FILT_REG_REJ60|AD7124_FILT_REG_POST_FILTER(0)|AD7124_FILT_REG_SINGLE_CYCLE|AD7124_FILT_REG_FS(384));
    //5.失调寄存器
        //2.通道寄存器  通道0配置  通道使能1  模拟配置 AIN10正模拟   AIN11负模拟 
    AD7124_Write_xByte(AD7124_CH0_MAP_REG,2,AD7124_CH_MAP_REG_CH_ENABLE|AD7124_CH_MAP_REG_SETUP(0)|AD7124_CH_MAP_REG_AINP(11)|AD7124_CH_MAP_REG_AINM(10));

        while(AD7124_MISO ==1){}
        AD7124_Write_RS_Read(0x42);
        for(i=0;i<3;i++)
        {
            jieguo[i] = AD7124_Read();
        }
        temp = jieguo[0];
        temp <<=8;
        temp |= jieguo[1];
        temp <<=8;
        temp |= jieguo[2];
        adcx = temp;

        adcx = (adcx-8388608)*78.125/8388608;

        printf("temp =  %f\r\n",adcx);                //(temp-8388608)*78.125/8388608

            adcx = K_VtoT(adcx);
        printf("temp =  %f\r\n",adcx);
}

void Test_AD7124()
{
        Yx_Channel(1);    
        
}


 

使用AD7124-8芯片,您需要了解一些基本的步骤和使用的软件。以下是一般的使用流程: 1. 硬件连接:首先,您需要将AD7124-8芯片正确连接到您的目标系统中。这涉及到将芯片引脚连接到适当的电源、地线和其他外围设备。 2. 软件编程:针对AD7124-8芯片的软件编程通常使用C或C++编程语言。您可以使用任何支持这些编程语言的集成开发环境(IDE)或文本编辑器。 3. 寄存器配置:AD7124-8芯片具有许多配置寄存器,用于设置其功能和操作模式。您需要在编程中使用适当的寄存器配置命令来设置芯片的工作模式、增益、输入通道等。 4. 通信接口:AD7124-8芯片支持多种通信接口,包括SPI和I2C。您需要根据您的系统需求选择适当的接口,并在编程中使用相应的通信协议来与芯片进行通信。 5. 数据采集和处理:一旦AD7124-8芯片正确配置和连接,您可以使用相应的编程命令读取传感器数据,并进行必要的数据处理和分析。 总结起来,要使用AD7124-8芯片,您需要了解其硬件连接和寄存器配置,并使用适当的编程语言和通信接口进行编程。具体的软件编程细节和工具可能会根据您的系统需求和平台而有所不同。您可以参考AD7124-8的数据手册和其他相关文档,以获取更详细的信息和示例代码。 请注意,我是一个AI助手,对于特定的软件编程问题,建议您参考AD7124-8的官方文档和技术支持资源,以获取更准确和详细的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值