搜索
bottom↓
回复: 1

MAX6675程序问题

[复制链接]

出0入0汤圆

发表于 2013-8-31 10:51:18 | 显示全部楼层 |阅读模式
以下是网上的一个程序,感觉最低位D0没有读到,因为MAX6675是在下降沿读取数据的,不知道我说的对不对?
void delay_us(uchar m)
{
  while(m--);
}

uint Read_6675()
{
  uchar i=0;
  uint temp=0;
  uint dat6675=0;
//-------------
  //接口初始化
  CS=1;  
  SCK=0;
  delay_us(10);
//--------------  

  CS=0;
  delay_us(10);
  //获取16位数据
  for(i=0;i<16;i++)
  {         
   SCK=1;  
   temp=temp<<1;
   if(SO==1)
    temp=temp|0x01;
   SCK=0;
   delay_us(10);
  }
  CS=1;
//---------------
//取出其中12位温度数据  
  temp=temp<<1;
  temp=temp>>4;
  dat6675=temp;
//---------------
  return dat6675;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-8-31 11:23:50 | 显示全部楼层
楼主试试这个:我也准备做MAX6675的东西,只是元件要过几天才能回来。这是我根据网上自己写的程序,楼主先试试。

#define MAX_SCK_1   (PORTB |= _BV(5))
#define MAX_SCK_0   (PORTB &= ~_BV(5))
#define MAX_CS_1    (PORTB |= _BV(3))
#define MAX_CS_0    (PORTB &= ~_BV(3))
#define MAX_SO          (PINB & _BV(4))
#defien NOP         delay_us(1)

void MAX6675_init()
{
        DDRB |= (_BV(3) | _BV(5));
    MAX_SCK_0;
        MAX_CS_1;
       
        PORTB |= _BV(4);
        DDRB &= ~_BV(4);
}
////////////////////////////////////////////////////////////////////////////////
//        MAX6675 Functions
//  ADC Conversion Time : 0.17s ~ 0.22 s
//                                                     CS low stops any conversion process
//                                                  Initiate a new conversion process by forcing CS high
//  Serial Clock Frequency : 4.3MHz/0.232us
//                                                      rising edge & falling edge build time:100ns
//  ADC value : SPI 16bits Data format
//data:
//  ---------------------------------------------------------------------------
//  |Bit |       15       |  14-3  |          X         |    0      |Threestate|
//  ---------------------------------------------------------------------------
unsigned int ReadMax6675()
{
        unsigned int data = 0;
        char i = 0;
        MAX_CS_0; //CS=0 to stop ADC conversion process
        MAX_SCK_0;//SCK 空闲状态为0,为1读data
        NOP;
        for(i=0; i<16; i++)
        {
                data = data << 1;
``````       
                MAX_SCK_1;
                NOP;
                if(MAX_SO) data++;
               
                MAX_SCK_0;
                NOP;
        }
        MAX_CS_1;
        data = ((data & 0x7fff)  >> 3);
       
        data = (data * 1023.75)/4096;
        return data;
       
}

代码部分楼主自己改一下吧,MAX6675应该是上升沿后读数据,SCK闲时为低电平。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-27 05:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表