打印

ltc6802-2

[复制链接]
2731|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yinchuanfeng|  楼主 | 2010-10-26 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
yinchuanfeng|  楼主 | 2010-10-26 17:12 | 只看该作者
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */

//#define  STCVAD    0X1E    /*启动电压A/D采集自检,所有CV=0X555*/
//#define  STTMPAD   0X3F    /*启动温度A/D采集自检,所有TMP=0xAAA*/
//#define  RDTMP     0X08    /*读取温度命令*/
//#define  RDCV      0X04    /*读取电压命令

//配置寄存器组定义
//#define CFGR0 0x03         /*设定测量电压周期,UV/OV比较周期*/  
//#define CFGR1 0x00         /*turn off shorting switch for cell x */
//#define CFGR2 0x00
//#define CFGR3 0x00                                                   
//#define CFGR4 0x5e         /*设定UV*/
//#define CFGR5 0x98         /*设定OV*/

#define SCK    PTBD_PTBD1   
#define MOSI   PTCD_PTCD1   
#define MISO   PTAD_PTAD0   
#define CSBI   PTCD_PTCD2   
#define WRCFG 0x01
#define RDCFG 0x02
#define RDCV 0x04
#define RD** 0x06
#define STCVAD 0X1E
//#define  STCVAD_USE 1


unsigned char DataBuffer;
unsigned char CVR[19];
unsigned char wrcfg[6]={0x0,0x00,0x00,0x00,0x5e,0x98};
///////////////////////////////////////////////////////
void IO_init()
{
   PTBDD_PTBDD1=1;
   PTCDD_PTCDD2=1;//cs
   PTADD_PTADD0=0;
   PTCDD_PTCDD1=1;
   
   SCK = 0;
   MOSI = 0;
   CSBI = 1;
}                                                  
//////////////////////////////////////////////////////
void Delay(unsigned char Value)
{
  for(;Value>0;Value--)
     ;
}

/////////////////////////////////////////////////////////

void SpiWrite(unsigned char data)
{
   unsigned char i;
   for(i=0;i<8;i++)
   {
      Delay(10);
      SCK = 0;
      
      if(0x80&data)
        MOSI = 1;
      else
        MOSI = 0;
      
      Delay(10);
       SCK = 1;
      data<<=1;
   }
}
/////////////////////////////////////////////////////////////
void TLC6802_init()
{
  unsigned char i;
  CSBI = 0;
  
  SpiWrite(WRCFG);
  for(i=0;i<6;i++)
  {
     SpiWrite(wrcfg[i]);
  }
  CSBI = 1;
  Delay(10);
}
///////////////////////////////////////////////////////////////
void SPIRead()
{
  unsigned char i;
  DataBuffer=0;
  for(i=0;i<8;i++)
  {
     SCK = 0;
     Delay(9);
     SCK = 1;
     Delay(1);
     if(MISO)
       DataBuffer|=0x01;
     Delay(10);
     DataBuffer<<=1;
      
  }
  
}
///////////////////////////////////////////////////////////////
void main(void)
{
  unsigned char i;
  IO_init();
  TLC6802_init();
  Delay(3);
  

  EnableInterrupts;



  for(;;)
  {
      CSBI = 0;
      SpiWrite(0x80);
      SpiWrite(RDCFG);
      SpiWrite(RDCV);
      //SpiWrite(STCVAD);
      Delay(30);
      for(i=0;i<7;i++)
      {
        SPIRead();
        CVR[i]=DataBuffer;
        Delay(10);
      }
      CSBI = 1;
      Delay(50);
   #ifdef STCVAD_USE
      CSBI = 1;
      Delay(10);
      CSBI = 0;
      SpiWrite(STCVAD);
      Delay(30);
      CSBI = 1;
   #endif
      
    __RESET_WATCHDOG();
  }
  
}
可以通讯,但是得不到正确值,拜求大虾指导,感激不尽!!!!!!!!!!!!!!!!!!!!

使用特权

评论回复
板凳
Sarah2011| | 2011-7-13 15:55 | 只看该作者
是个老帖子了,不过楼主还在继续研究吗?现在凌特推出的LTC6803,希望和您交流一下

使用特权

评论回复
地板
yinchuanfeng|  楼主 | 2012-12-3 09:51 | 只看该作者
呵呵这是多年前的帖子了

使用特权

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

本版积分规则

1

主题

16

帖子

1

粉丝