-
就是把这个芯片拆下来后,发现电流是快速下降的,单独测这个芯片的电流也是一点点下降的,所以就怀疑是这个芯片导致的问题。 但不清楚为什么
[ 本帖最后由 黑加仑 于 2011-7-12 15:39 编辑 ]
-
是我外围电路74LVC14这个芯片的原因,我只是用他当成反相器,放大接收管得电流。 还没想到解决方法
-
等我新板子回来,测试看看再说吧。 我实在不知道怎么回事了
-
现在也不清楚,感觉上是外围电路引起的,电容就是一些滤波用的贴片电容,影响应该不大吧
-
包括, 外部器件我拿掉后,也是逐渐下降的。 外围只有一个驱动芯片,一个D触发器,一个18B20,其他都是电容电阻 。 是因为外部功耗大引起的吗?
-
串口配置? 我刚跳过单独的串口和DS18B20
-
MSP430F149,正常模式下10毫安左右(不进入LPM4),进入后,从7毫安下降到几十微安。 大概2-3分钟,外部电路有个耗电大的,我把它拿掉后也是一样慢慢下降, 然后我控制这个外部电路让他不工作时候无效,他的电流就小了
-
重新修改了程序,已经OK
-
我接在P4.0口了,他不是没中断功能吗。 我用示波器侧过我的延时,当DelayNus(50);就是500US, 现在是我读的时序有问题吗?
在读数据时候,如果我只拉低后不释放,就一直读入的是0000,那是说明我的端口影响数据的输入吗?
[ 本帖最后由 黑加仑 于 2011-6-18 10:25 编辑 ]
-
我刚才并上一个4.7K的电阻。结果读出来的数值还是FFFF
-
三线制,上拉电阻4.7K,电压都是3.3V,目前直接用仿真器供电
-
现在初始化OK,但读出来的数据仍然是FFFF.
我是外接的8M晶振,上拉电阻为4.7K,你的意思我的上拉电阻太大了吗?
下面是我的程序
#include"msp430x14x.h"
/*****************DS18B20**************************/
/***************P4.0-DS18B20**********************/
#define OUT_0 P4OUT&=~BIT0 //BIT0=0X01 P4.0=0
#define OUT_1 P4OUT|=BIT0 //BIT0=0X01 P4.0=1
unsigned char Err_Flag=1;
int temperature;
float Temper;
void Init_IO(void);
void Reset_18B20(void);
void Write_cmd(unsigned char cmd);
unsigned char Read_data(void);
void GetTemp(void);
void ReadTemp(void);
void DelayNus(unsigned int n);
/************************************************************/
void main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P3SEL|=BIT4; //SET P3.4 UTXD0
P4DIR|=BIT0 ; //BIT0=0X01 P4.0=output
while(1)
{
GetTemp();
}
}
/***************DS18B20 Reset&Init*********************/
void Reset_18B20(void)
{
while( Err_Flag==1)
{
P4DIR|=0x01 ;
OUT_0;//Set output 0 主机首先发出一个480-960微秒的低电平脉冲
DelayNus(50); //500us
OUT_1; //释放数据线(将数据线拉高)
DelayNus(6); //60us
P4DIR&=~BIT0; //BIT0=0X01 P4.0=input
if((P4IN&BIT0)==BIT0)
{ Err_Flag=1; } //失败,一直都是高电平说明总线上无器件应答
else
{
Err_Flag=0; // 有低电平出现说明总线上有器件已做出应答
OUT_1;
}
}
P4DIR|=BIT0 ; //BIT0=0X01 P4.0=output
}
/******************Get Temperature*******************/
void GetTemp(void)
{
Reset_18B20();
Write_cmd(0xcc); //跳过ROM
Write_cmd(0x44); //温度变换,结果存入内部9字节RAM中去
DelayNus(60000);
DelayNus(60000);
DelayNus(60000);//延时1S以上
Reset_18B20();
Write_cmd(0xcc);
Write_cmd(0xBE); //读暂存器,内部9字节RAM
ReadTemp();
}
/*****************Read Temperature*******************/
void ReadTemp(void)
{
char temp_low,temp_high; // 温度值
int sign;
temp_low=Read_data();//读低位
temp_high=Read_data();//读高位
if((temp_high&0xf8)==0xf8) //判断符号位
{
char temp_mid=0xff; // 前五位为1,温度为负,需取反+1
sign=1;
temp_mid&=~temp_high; //高八位取反
temperature=(temp_mid&0x0f);
temp_mid=0xff;
temp_mid&=~temp_low;//低八位取反
temperature
-
:) 多谢
-
谢谢了
-
芯币不多了,也得下
-
谢谢,学习中
-
:) 学习了
-
学习下,谢谢分享