nczywq 发表于 2016-7-10 18:46

关于温度采集芯片Max31856无法写数据

#include<thermocouple.h>
#include<stc15.h>
#include<stdio.h>
#include<intrins.h>
sbit Max31856_CS= P1^2;
sbit Max31856_SDO=P1^3;
sbit Max31856_SDI=P1^4;
sbit Max31856_CLK=P1^5;
long WenDu_Dat;
uint WenDu;
uchar WenDu_Time,Error;
void Max31856_Delay700ms()                //@24.000MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 183;
        j = 100;
        k = 225;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void Max31856_Delay()
{
        _nop_();
        _nop_();
        _nop_();
}
void Max31856_WriteByte(uchar Add,Dat)
{
        uchar i;
        Max31856_CLK=1;
        Max31856_CS=0;
        Max31856_Delay();
        for(i=0;i<8;i++)
        {
                Max31856_CLK=0;
                Max31856_Delay();
                Add<<=1;
                Max31856_SDO=CY;
                Max31856_Delay();
                Max31856_CLK=1;
                Max31856_Delay();
        }
        for(i=0;i<8;i++)
        {
                Max31856_CLK=0;
                Max31856_Delay();
                Dat<<=1;
                Max31856_SDO=CY;
                Max31856_Delay();
                Max31856_CLK=1;
                Max31856_Delay();
        }
        Max31856_CS=1;
}
uchar Max31856_ReadByte(uchar Add)
{
        uchar i,Dat;
        Max31856_CLK=1;
        Max31856_CS=0;
        Max31856_Delay();
        for(i=0;i<8;i++)
        {
                Max31856_CLK=0;
                Max31856_Delay();
                Add<<=1;
                Max31856_SDO=CY;
                Max31856_Delay();
                Max31856_CLK=1;
                Max31856_Delay();
        }
        for(i=0;i<8;i++)
        {
                Max31856_CLK=0;
                Max31856_Delay();
                Dat<<=1;
                Dat|=Max31856_SDI;
                Max31856_CLK=1;
                Max31856_Delay();
        }
        Max31856_CS=1;
        return Dat;
}
void Max31856_ReadTemp()
{
        uchar i,Add;
        Max31856_CLK=1;
        Max31856_CS=0;
        Max31856_Delay();
        Add=0x0c;
        for(i=0;i<8;i++)
        {       
                Max31856_CLK=0;
                Max31856_Delay();
                Add<<=1;
                Max31856_SDO=CY;
                Max31856_Delay();
                Max31856_CLK=1;
                Max31856_Delay();
        }
        for(i=0;i<24;i++)
        {
                Max31856_CLK=0;
                Max31856_Delay();
                WenDu_Dat<<=1;
                WenDu_Dat|=Max31856_SDI;
                Max31856_CLK=1;
                Max31856_Delay();
        }
        Max31856_CS=1;
        WenDu=WenDu_Dat*Hot+0.5;
}
void Max31856_Read_Error()
{
       Error=Max31856_ReadByte(SR_Read);
       if(CJ_Range)
       {
               printf("热电偶超出正常工作范围\n");
       }
       if(OVUV)
       {
               printf("热电偶过压或欠压\n");
       }
       while(CJ_Open)                                                                          //如果热电偶断开了,就一直等待热电偶连接
       {
               printf("热电偶已经断开\n");
                Max31856_Delay700ms();                                                                //等待温度转换完成
                Error=Max31856_ReadByte(SR_Read);                                        //读取故障寄存器
       }
}
void Max31856_Init()
{
        Max31856_WriteByte(CR1_Write,(AVGSEL&TC_Type_K));                        //CR1寄存器16位采样,K型热电偶
        Max31856_WriteByte(MASK_Write,MASK_Set);                                        //屏蔽所有故障输出
        Max31856_WriteByte(0x81,0x48);                                                //开启转换
        Max31856_Delay700ms();                                                                //等待温度转换完成
}
我用读寄存器数据完全正常,只要对哪个寄存器写数据,那个寄存器的数据就会变成0,就好像把数据给他写成0了一样,但是读数据的时候,先写地址,再读数据,也是正常的。哪位大神9命,难道是芯片有问题吗?写不了数据,

nczywq 发表于 2016-7-10 18:49

1楼是三个关键图

yuankecien 发表于 2018-10-13 22:53

楼主,请问您问题解决了吗,是什么原因呢?

ningling_21 发表于 2018-10-14 10:08

yuankecien 发表于 2018-10-13 22:53
楼主,请问您问题解决了吗,是什么原因呢?

遇到什么问题?

y1065403288 发表于 2018-10-18 20:57

请问您的问题解决了吗?能给我一份例程吗?我现在在调试这个芯片,但是看不懂这个芯片给的程序,拜托了。QQ1065403288

QQ877789857 发表于 2020-2-4 16:22

max31856调试的注意点有:
1、        SPI通信模式一定设置正确;
2、        发送和读取寄存器的指令不一样;
3、        max31856工作在连续模式和多点采样平均效果最佳。
4、        MAX31856,热电偶接口的RFI滤波电路最好不要省掉,否则测温结果容易受干扰。

QQ877789857 发表于 2020-2-5 17:37

yuankecien 发表于 2018-10-13 22:53
楼主,请问您问题解决了吗,是什么原因呢?

你遇到的问题是什么

qws爱客多 发表于 2022-10-5 19:46

我的max31865一直读到0xff
页: [1]
查看完整版本: 关于温度采集芯片Max31856无法写数据