由于还没有设计电路板,就把芯片焊在转接板上,用面包板搭的电路试试写的程序。我照着手册上的图26电路连接,不把FEF5040的GND与7883的GND连接在一起能读出数据,但是读出的数据明显偏小,并且VIN电压低于1.5V时读出的全是0。连接上不论VIN电压是多少以后读出的数据也全为0。测试得到在VIN在1.6-3.5V之间的偏小,3.5-4v读出的全是4095,0-1.5读出的是0。请问这是什么原因?是面包板引起的误差吗?
代码如下:
#include <msp430x26x.h>
#include "stdio.h"
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define DIN (P2IN & 0x01) /*端口定义*/
#define SCLK_H P2OUT |= BIT1
#define SCLK_L P2OUT &= ~BIT1
#define CS_H P2OUT |= BIT2
#define CS_L P2OUT &= ~BIT2
signed int AD_Conv();
void InitClock(void)
{
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 &= ~XT2OFF;
do
{
IFG1 &= ~OFIFG;
for (int i=0; i<255; i++);
}while(IFG1 & OFIFG);
BCSCTL2 |= SELM_2 + DIVM_0 + SELS + DIVS_3; //MCLK 8MHz SMCLK 1MHz
}
void main( void )
{
InitClock();
P2DIR = 0x06; while(1)
{
printf("%d\n",AD_Conv());
}
}
signed int AD_Conv()
{ signed int AD_Value=0;
CS_H;
delay_us(1);
CS_L;
SCLK_L;delay_us(1);
SCLK_H;delay_us(1);
SCLK_L;delay_us(1);
SCLK_H;delay_us(1);
for(unsigned int i=0;i<12;i++)
{
AD_Value = AD_Value << 1;
if(DIN)
{
AD_Value = AD_Value | 0x001;
}
SCLK_L;
delay_us(1);
SCLK_H;
delay_us(1);
}
CS_H;
delay_us(1);
return AD_Value;
}
user151383853:
地线连接引起数据不同, 那就需要再特别注意一下这个地线. 我觉得问题应该在这个地方 (或者有关)
huajian chen:
回复 user151383853:
现在发现一个原因了,是1uf电容坏了,换一个就能正常用了照图25接的。只是测量低于1v电压时偏低0.3v。我再找找原因。