刚下载程序后正常读取,复位了就不行(SPI读取ADXL345)
点下载程序后,可以正常收到ADXL345的数据,关掉电源再开就都是0了。屡试不爽,这可能是什么原因?手动复位偶尔也可以。
http://cache.amobbs.com/bbs_upload782111/files_53/ourdev_724218DDDN6Z.png
(原文件名:QQ截图20120305113740.png)
http://cache.amobbs.com/bbs_upload782111/files_53/ourdev_724219CK35GF.png
(原文件名:QQ截图20120305113756.png) void ACC_SPI_INIT(void)
{
DDRB=0B10110001;
//spi初始化
SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR0)|(1<<SPR1)|(1<<SPI2X);
SPSR = 0x00;
}
///////////////ACCELEROMETER //////////////
void ADXL345_INIT(void){
ACC_SPI_INIT();
delay10us(); delay10us(); delay10us(); delay10us();
writeRegister(0x31,0x04);
delay10us(); delay10us(); delay10us(); delay10us();
writeRegister(0x2d,0x08);
//writeRegister(0x2e,0x80);
}
//读取X轴加速度
void ADXL345_read_x(unsigned int *x)
{
unsigned char low, high;
low = readRegister(0x32);
high = readRegister(0x33);
* x = (((unsigned int)high)<<8)|low;
}
if(T10ms>9)
{
T10ms=0;
uchar SendArr;
volatile int temp;
ADXL345_read_x(&temp);
SendArr=temp;
SendArr=temp/255;
ADXL345_read_y(&temp);
SendArr=temp;
SendArr=temp/255;
put_c(0xaa);
put_c(0x01);
put_c(SendArr);
put_c(SendArr);
put_c(SendArr);
put_c(SendArr);
put_c(0xff);
} ./emotion/em004.gif貌似搞定了,延时后再初始化一下ADXL345就能用
但是不知道为什么两次初始化都要有,缺一不可
http://cache.amobbs.com/bbs_upload782111/files_53/ourdev_724227DHDVE8.png
两次都要有才行 (原文件名:QQ截图20120305115618.png) 使用I2C读写ADXL345的帮顶。 mark
我用spi遇到同样的问题!链接http://www.amobbs.com/thread-5519262-1-1.html
页:
[1]