打印

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

[复制链接]
3161|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nczywq|  楼主 | 2016-7-10 18:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#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楼是三个关键图

Ma31856原理图.png (125.25 KB )

Ma31856原理图.png

max31856时序时间要求.png (368.83 KB )

max31856时序时间要求.png

Max31856时序图.png (38.95 KB )

Max31856时序图.png

使用特权

评论回复
板凳
yuankecien| | 2018-10-13 22:53 | 只看该作者
楼主,请问您问题解决了吗,是什么原因呢?

使用特权

评论回复
地板
ningling_21| | 2018-10-14 10:08 | 只看该作者
yuankecien 发表于 2018-10-13 22:53
楼主,请问您问题解决了吗,是什么原因呢?

遇到什么问题?

使用特权

评论回复
5
y1065403288| | 2018-10-18 20:57 | 只看该作者
请问您的问题解决了吗?能给我一份例程吗?我现在在调试这个芯片,但是看不懂这个芯片给的程序,拜托了。QQ1065403288

使用特权

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

使用特权

评论回复
7
QQ877789857| | 2020-2-5 17:37 | 只看该作者
yuankecien 发表于 2018-10-13 22:53
楼主,请问您问题解决了吗,是什么原因呢?

你遇到的问题是什么

使用特权

评论回复
8
qws爱客多| | 2022-10-5 19:46 | 只看该作者
我的max31865一直读到0xff

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

60

帖子

2

粉丝