5383|8

84

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

max6675的问题,急!~! [复制链接]

一个关于MAX6675的问题:我的情况是读取温度时温度值不随热电偶的温度变化而变化,要按下复位键才可重新读温度,温度还比较接近.

最新回复

各位大佬,有没有谁遇到过,max6675只读出最大值或者最小值的问题,过一段时间后,这种故障就消失了,但是还会出现。  详情 回复 发表于 2018-11-17 16:45
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
#include "reg52.h"
#include "absacc.h"
#include "math.h"
#define uchar unsigned char
#define uint  unsigned int
#define dm    XBYTE[0x8000]
#define wm    XBYTE[0x8100]
sbit S0=P3^1;
sbit CS=P3^2;
sbit SCK=P3^3;
sbit Work_Stop=P1^4;
uint Re_Convert (void); //redianou convert
void Disp_temp(void);
void Delay_50us (uint t);
uchar click=0,Time_h=0,Time_m=0,Time_l=0;
uint  disp;
uint  total,P_Temp1,P_Temp;
float S_Temp;
const uchar code tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
const uchar code tab2[]={0x01,0x80,0x10,0x04,0x08};    //tab1为数码管的段码,tab2为数码管的位码
/******************************************************************************************************/
void main(void)                              /*主程序*/
{
  Delay_50us (100);
  Work_Stop =0;
  S0 =0;
  while(1)
  {
    P_Temp =Re_Convert();
    P_Temp1 =0.25*P_Temp;           //P_Temp =(1024*P_Temp)/4096/10
    Disp_temp();
    disp=0;
    P_Temp=0;
    P_Temp1=0;
   }  
}
/******************************************************************************************************/
void Delay_50us(uint t)                      /*延时50us程序*/
{
  uchar j;  
  for(;t>0;t--)   
   for(j=19;j>0;j--);
}
/********************************************热电偶转换程序***********************************************/
uint Re_Convert (void)
{
  uchar i;
  uint P_Temp2 =0;
  SCK =0;
  S0 =0;
  CS =0;                             
  for(i=0;i<16;i++)                 
    {
      SCK =1;                        
      if(S0==1)                           
        {
          P_Temp2 =P_Temp2 | 0x01;            
         }
      Delay_50us(1);         
      SCK =0;
      Delay_50us(1);
      P_Temp2 <<=1;
     }                                 
  CS =1;
  if(P_Temp2 & 0x0004)  
    {
      Work_Stop =1;
     }
  P_Temp2 =(P_Temp2 & 0x7fff) >>3;
  return(P_Temp2);
  P_Temp2 =0;
  Delay_50us(1000);
}
/********************************************显示程序***********************************************/
void Disp_temp(void)
{
  Time_h=P_Temp1/100;     
  Time_m=P_Temp1/10%10;  
  Time_l=P_Temp1%10;
  dm=tab1[Time_h];   
  wm=tab2[2];
  Delay_50us(50);
  dm=tab1[Time_m];
  wm=tab2[3];
  Delay_50us(50);
  dm=tab1[Time_l];
  wm=tab2[4];
  Delay_50us(50);
}
/********************************************** END ***************************************************/
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
没整过,不过肯定不要复位才能读到正确的温度的,可以软复位吗?
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
1. 你怎么确定是读到温度值没变?有没有可能是数码管的显示程序有问题,结果读到的是正确的,但没有正确显示呢?

2. Work_Stop =1;//会不会第一次读到后, 一直处于Stop状态了?

3. 既然是51,那随便找个硬仿真器,跟踪调一下吧。简单理个调试思路:

4. 一般这种模拟->数字的转换芯片,都会要求一个“采样速率”,速度过快,读到的都是旧值。而在读的过程中,相应寄存器是无法被写入的,导致新值一直无法更新。这样就需要在每次读之后延时一定时间才可以再次读取。

5. 既然是51,那随便找个硬仿真器,跟踪调一下看看各个状态位吧。
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 
显示可以肯定是正确的,我估计是采样速率的问题,还在琢磨中。。。
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
问题解决了,是MAX6675转换时间的问题,其转换时间约为170ms,而我之前的为20MS不到,呵呵.
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

7
 
顶一下,说的太好了,果然是这个问题,谢谢了。
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

8
 
转换时间的问题
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

9
 
各位大佬,有没有谁遇到过,max6675只读出最大值或者最小值的问题,过一段时间后,这种故障就消失了,但是还会出现。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表