DSP28035 ADS1248数据采集,怎么把ADS1248采集到的数据发送出去?

该代码段描述了一个读取ADS1248ADC芯片数据的过程,包括数据的读取、处理、存储以及通过特定协议发送电流和电压值。在读取完成后,数据会被转换为实际的电流和电压值,并通过串口发送。遇到的问题是接收到的电流值固定,可能需要检查数据转换和发送环节。
摘要由CSDN通过智能技术生成

//读取ADS1248型号的ADC芯片采集到的数据,并将其进行处理和储存
int32 ADCResult;
void ADS1248_ReadResult(ADC_ADS1248_CON *Var)
{
    int32 Temp32;
    Uint16 i;
    Uint8    Status;
    if((Var->ADS1248_CON1.Status == ADS1248_STATUS_READ_BUSY) || (Var->ADS1248_CON2.Status == ADS1248_STATUS_READ_BUSY))
    {
        Status = ADS1248ReadResult(&Temp32);
        if(Status == TRUE)
        {
            ADCResult = Temp32;
            if(Var->ADS1248_CON1.Status == ADS1248_STATUS_READ_BUSY)
            {
                ADS1248CS1HIGH();

                AdcBufferLoad(&Var->ADS1248_CON1.Buffer[Var->ADS1248_CON1.CurChannel],Temp32,AdcBufLen_);
                Temp32 = (int32)MaxValue_mV_1000_;
                Var->ADS1248_CON1.Result[Var->ADS1248_CON1.CurChannel] = GetAverageValue(&(Var->ADS1248_CON1.Buffer[Var->ADS1248_CON1.CurChannel][0]),AdcBufLen_) + Temp32;

               
                Var->ADS1248_CON1.Status = ADS1248_STATUS_IDLE;  //表示读取完成

                Var->ADS1248_CON1.Pointer++;
                if(Var->ADS1248_CON1.Pointer > 3)
                {
                    Var->ADS1248_CON1.Pointer = 0;
                }
                Var->ADS1248_CON1.NextChannel = Var->ADS1248_CON1.Pointer;
                usartSendData(calculatedianliu(Var->ADS1248_CON1.Result[0]), calculatedianya(Var->ADS1248_CON1.Result[3]));

发送协议程序如下

const unsigned char header[2]  = {0x55, 0xaa};
const unsigned char ender[2]   = {0x0d, 0x0a};

//发送数据共用体
void usartSendData(unsigned int current, unsigned int voltage)
{
    // 协议数据缓存数组
    unsigned char buf[10] = {0};
    int i, length = 0;


    // 设置消息头
    for(i = 0; i < 2; i++)
        buf[i] = header[i];                      // buf[0] buf[1]

    // 设置采集数据长度与采集值
    length = 4;
    buf[2] = length;     // buf[2]

    // 将result[0]的电流值存储到buf数组的第4、5位
    buf[3] = (current >> 8) & 0xFF;  // 高位
    buf[4] = current & 0xFF;         // 低位


    // 将result[3]的电压值存储到buf数组的第6、7位

    buf[5] = (voltage >> 8) & 0xFF;  // 高位
    buf[6] = voltage & 0xFF;         // 低位


    // 设置校验值、消息尾
    buf[3 + length] = getDataSum(buf, 7);  // buf[7]
    buf[3+ length + 1] = ender[0];              // buf[8]
    buf[3+ length + 2] = ender[1];              // buf[9]

    //发送字符串数据
    USART_Send_String(buf,sizeof(buf));

}


void USART_Send_String(unsigned char *p, int sendSize)
{
    static int length =0;
    while(length<sendSize)
    {
        while(SciaRegs.SCICTL2.bit.TXEMPTY != 1);//发送缓冲区为空
                   SciaRegs. SCITXBUF =   *p;
        p++;
        length++;
    }
    length =0;
}

unsigned char getDataSum(unsigned char *ptr, unsigned int len)
{
    unsigned char sum = 0;
    while (len--)
    {
        sum += *ptr++;
    }
    return sum;
}

将采集到的值换算再发送
unsigned int calculatedianliu(unsigned int huansuanzhi1)
   {
    unsigned int x = (huansuanzhi1 + 5886025.5) / 837680.5 * 1000;

    return x;
}
unsigned int calculatedianya(unsigned int huansuanzhi2)
   {
    unsigned int x = (huansuanzhi2 + 5881672) /  2221741 * 1000;
    return x;
}

接收到的电流一直是一个固定的值,该怎么把采集到的数据(图中4027258那个值)发送出去?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值