需要确认注册邮箱后才能开通博客,立即确认我的邮箱
文章 搜索 高级搜索 ?3? ?3?
  • 滤波器new!
  • LED驱动 new!
  • 新能源 new!
  • PLL
  • PCIE协议
  • 可穿戴
  • LSI
  • FCI
文章 论坛 博客 小组 研讨会
EDN China>EDN论坛>Linear 技术论坛专区>關於LTC-6803-1使用
楼主 问题:

關於LTC-6803-1使用

发布时间:2015-10-31 下午4:08

作者: jackywu

等级: 初学者

积分: 105分

发帖数: 1次

网站总积分: 105分

109分

发送消息

加为好友

查看用户的所有发言

查看用户的个人主页

需要确认注册邮箱后才能下载,立即确认我的邮箱
回复后可下载附件
我使用單顆LTC-6803-1與我在用的dsp做spi串列傳輸
量測4串電池一顆約3.6v
可是接上去的時候  LTC6803-1的VREF=4.8V ? 不像DATASHEET上面講的3.05V
而且暫存器讀回的值也不對
這樣是IC壞了  還是程式有問題
?
以下附上我的程式跟電路圖
?
#include "p33FJ16GS502.h"
//#include "initial_LTC6803.h"
?
extern void Initialize_OSC();
?
extern void Initialize_Timer1();
?
extern void Initialize_SPI();
?
//---------------
unsigned int cfg[7]={0x61,0x00,0x00,0x02,0xA8,0XCD,0X30}; //CFG設定 上限電壓4.2V 下限電壓3.3V 最後一碼0XE6為前面的PEC碼
unsigned int cfg_read[16]; ? //要讀電壓值的陣列
unsigned int receivedata;
?
unsigned int h,i;
?
?
?
?
void SPI_send(unsigned int senddata)
{
while(SPI1STATbits.SPITBF==0) ? ?//判斷buffer裡是空的可以放值
? ? SPI1BUF=senddata; ??
while(SPI1STATbits.SPITBF!=1) ? ? ? ? ? ? ? //將要傳的值送到buffer裡
? ?// while(IFS0bits.SPI1IF!=1); ? ? ? ? //判斷spi中斷旗標有沒有立起來表示接受值完成
? // while(SPI1STATbits.SPITBF==0);?
IFS0bits.SPI1IF=0; ? ? ? ? ? ? ? ? //判斷傳值完成清除中斷旗標 ? ?
?
}
?
?
?
unsigned int SPI_Receive(void)
{ while(SPI1STATbits.SPIRBF==1) ? //判斷Buffer裡是滿的可以讀值
? ? receivedata=SPI1BUF; ? ? ? ? ? //將buffer裡的值接收
// ?while(IFS0bits.SPI1IF!=1); ? ? //判斷spi中斷旗標有沒有立起來表示接受值完成
? while(SPI1STATbits.SPIRBF!=0);?
IFS0bits.SPI1IF=0; ? ? ? ? ? ? //判斷接收值完成清除中斷旗標
? ? return(receivedata);
}
?
?
?
?
?
?
?
?
void LTC6803_1_Init(void) ? //進入LTC6803寫入初始設定
{
//Step1:將CSBI給他LOW準位
? ? SPI_CS=0; //先將CSBI設成0 ? ?SPI_CS在.H檔裡已定義成LATB7
SPI_send(0x01); //寫入write 指令0x01
SPI_send(0xc7); //0x01的PEC碼
for(h=0;h<7;h++) ? //將cfg0-cfg5 以及他的PEC碼傳出去
{SPI_send(cfg[h]);
}
? ? SPI_CS=1; //將CSBI設成1 ? ?表示寫入動作完成 ??
}
?
?
//--------------
int main (void)?
{ ?
Initialize_OSC( );
Initialize_SPI( );
Initialize_Timer1();
TRISBbits.TRISB7=0; //將RB7(PIN18)設為輸出 ? 當作SS腳
T1CONbits.TON=1; ? //TIMER1中斷開始計數
SPI1STATbits.SPIEN=1;
LTC6803_1_Init();
?
while(1)
;
? ? ?//將要向外傳的值送到BUF裡 ? ? ? ? ?
?
}?
?
?
void __attribute__( ( interrupt , auto_psv ) ) _OscillatorFail( void ) // 定義Default中斷服務函式,並指定為auto_psv。
{ while( 1 ); }
?
void __attribute__( ( interrupt , auto_psv ) ) _AddressError( void ) // 定義Default中斷服務函式,並指定為auto_psv。
{ while( 1 ); }
?
void __attribute__( ( interrupt , auto_psv ) ) _StackError( void ) // 定義Stack Error Trap Service Routine,並指定為auto_psv。
{ while( 1 ); }
?
void __attribute__( ( interrupt , auto_psv ) ) _MathError(void) ? ? ?// 定義Default中斷服務函式,並指定為auto_psv。
{ while( 1 ); }
?
/*void __attribute__( (interrupt , auto_psv) ) _SPI1Interrupt(void)
{
?//RX_DATA=SPI1BUF; ? ? ? ? ? ? ? ?;//讀取SPI進來的值
?//IFS0bits.SPI1IF=0; ? ? ? ? ? ? ?;//將SPI立起來的中斷旗標給清除
?
?
}*/
?
void __attribute__( (interrupt , auto_psv) ) _T1Interrupt(void)
{ ? ?
? ? //進入LTC6803讀取電池電壓
? ?SPI_CS=0; //先將CSBI設成0 ? ?SPI_CS在.H檔裡已定義成LATB7
? ?SPI_send(0x02); ?//讀取指令0x02
? ?SPI_send(0xce); ?//0x02的PEC碼
? ?for(i=0;i<15;i++)
? ?{cfg_read[i]=SPI_Receive(); ? //依序讀取CVR00(電池1)-CVR06(電池5)的電壓
? ? ? ? ? }?
? SPI_CS=1;
?
?
?
}
?
?

附件
分享到:? 新浪微博 ?? 微信 ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
qq空间 ?? 腾讯微博 ?? 人人网 ?? 百度搜藏 ??
?
???标签: it 资料下载 ti te c 0
引用 回复 收藏 推荐到小组 ( 0) ( 0) 关注

快速回复 高级回复
用户名:?
美国的游客?????? (您将以游客身份发表,请登陆 | 注册) ?
标题: * 标题还可以输入80
评论: * 你还可以输入30000
验证码: ?*?
分享: 新浪微博?? qq空间?? qq微博?? 人人网?? 百度搜藏??
维护专业、整洁的论坛环境需要您的参与,请及时举报违规帖子,如果举报属实,我们将给予相应的积分奖励。
谢谢您的热心参与!
返回Linear 技术论坛 | 返回IC厂商技术交流区
本论坛仅陈述专家或个人观点,并不代表EDN China 电子技术设计互动社区网站立场。
有问题请反馈