- 具体请参考datasheet第35-38页
一。首先是SPI的格式:
1.高位在前 低位在后;
2.上升沿置位,下降沿采样,SCK闲置时为0;
3.配置寄存器时sclk最高为1MHz,无信号为低电平;
二。SPI的数据
//唤醒:0x0200
//睡眠:0x0400
//重启:0x0600
//开始:0x0800(高电平芯片工作)
//暂停:0x0A00
//offsetcal:0x1A00
//开始自动读取数据:0x1000
发送数据包格式
8 bit :0x10
8 bit :0x00
//关闭自动读取数据:0x1100
//用命令读取数据: 0x1200
发送数据包格式
8 bit :0x12
8 bit :0x00
接收数据包格式
216 bit :寄存器状态+8通道数据
//发送寄存器指令: 010* **** 000$ $$$$
*位5bit的数据
$为5bit的地址
数据包格式:
8 bit :0x40 | the starting register address
8 bit :0x00 | the number of registers to write – 1
8 bit :数据data1
8 bit :数据data2
//读取寄存器数据: 001* **** 000$ $$$$
*位5bit的数据
$为5bit的地址
发送数据包格式
8 bit :0x20 | the starting register address
8 bit :0x00 | the number of registers to read – 1
接收数据包格式
8 bit :数据data1
8 bit :数据data2
///////////////////////////华丽的分隔符/////////////////////////////////////
我使用的是ARDUINO进行简单的测试
code如下:
#include
unsigned int dry = 2;
unsigned int rt = 3;
unsigned int start = 4;
unsigned int mclk = 5;
unsigned int clksel = 6;
unsigned int led = 7;
unsigned int ss = 10;
unsigned int mosi = 11;
unsigned int miso = 12;
unsigned int sclk = 13;
unsigned char data[30] = {0};
void SPI_INIT()
{
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV16);
SPI.setDataMode(SPI_MODE1);
digitalWrite(ss,HIGH);
Serial.println("SPI_INIT() is OK!");
}
unsigned int ADS1292R_RegisterWrite(unsigned char reg,unsigned char data)
{
unsigned char package;
ADS1292R_StopDataReadContinuous();
digitalWrite(ss,LOW);
package = 0x40 | reg;
SPI.transfer(package);
package = 0x00;
SPI.transfer(package);
package = data;
SPI.transfer(package);
digitalWrite(ss,HIGH);
}
unsigned char ADS1292R_RegisterRead(unsigned int reg)
{
unsigned char package;
unsigned char data = 0x00;
digitalWrite(ss,LOW);
package = 0x20 | reg;
SPI.transfer(package);
package = 0x01;
SPI.transfer(package);
data = SPI.transfer(0);
digitalWrite(ss,HIGH);
return data;
}
void ADS1292R_WakeUp()
{
digitalWrite(ss,LOW);
SPI.transfer(0x02);
digitalWrite(ss,HIGH);
}
void ADS1292R_StartConversions()
{
digitalWrite(ss,LOW);
SPI.transfer(0x08);
digitalWrite(ss,HIGH);
}
void ADS1292R_StartDataReadContinuous()
{
digitalWrite(ss,LOW);
SPI.transfer(0x10);
digitalWrite(ss,HIGH);
}
void ADS1292R_StopDataReadContinuous()
{
digitalWrite(ss,LOW);
SPI.transfer(0x11);
digitalWrite(ss,HIGH);
}
void ADS1292R_Register_INIT()
{
pinMode(dry,INPUT_PULLUP);
pinMode(start,OUTPUT);
pinMode(rt,OUTPUT);
digitalWrite(start,HIGH);
digitalWrite(rt,HIGH);
ADS1292R_WakeUp();
ADS1292R_StartConversions();
ADS1292R_StopDataReadContinuous();
while(ADS1292R_RegisterRead(0x01) != 0x02)
{ADS1292R_RegisterWrite(0x01,0x02);}
while(ADS1292R_RegisterRead(0x02) != 0x83)
{ADS1292R_RegisterWrite(0x02,0x83);}
while(ADS1292R_RegisterRead(0x03) != 0x10)
{ADS1292R_RegisterWrite(0x03,0x10);}
while(ADS1292R_RegisterRead(0x04) != 0x05)
{ADS1292R_RegisterWrite(0x04,0x05);}
while(ADS1292R_RegisterRead(0x05) != 0x05)
{ADS1292R_RegisterWrite(0x05,0x05);}
while(ADS1292R_RegisterRead(0x06) != 0x00)
{ADS1292R_RegisterWrite(0x06,0x00);}
while(ADS1292R_RegisterRead(0x07) != 0x00)
{ADS1292R_RegisterWrite(0x07,0x00);}
while(ADS1292R_RegisterRead(0x08) != 0x40)
{ADS1292R_RegisterWrite(0x08,0x40);}
while(ADS1292R_RegisterRead(0x09) != 0xC3)
{ADS1292R_RegisterWrite(0x09,0xC3);}
while(ADS1292R_RegisterRead(0x0A) != 0x00)
{ADS1292R_RegisterWrite(0x0A,0x00);}
while(ADS1292R_RegisterRead(0x0B) != 0x03)
{ADS1292R_RegisterWrite(0x0B,0x03);}
Serial.println("ADS1292R_DataReadContinuous_Register_INIT() is OK!");
}
void setup()
{
pinMode(ss,OUTPUT);
pinMode(dry,INPUT);
digitalWrite(ss,HIGH);
Serial.begin(115200);
SPI.begin();
SPI_INIT();
ADS1292R_Register_INIT();
unsigned char kk;
kk = ADS1292R_RegisterRead(0x00);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x01);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x02);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x03);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x04);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x05);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x06);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x07);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x08);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x09);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x0A);
Serial.println(kk,HEX);
kk = ADS1292R_RegisterRead(0x0B);
Serial.println(kk,HEX);
Serial.println("-------------------------------------");
delay(5000);
ADS1292R_StartDataReadContinuous();
digitalWrite(ss,LOW);
}
int flag=1;
void loop()
{
while(flag)
{
if((digitalRead(dry) == 1) && (digitalRead(dry) == 0))
{
Serial.println("------>");
flag=0;
}
}
Serial.print(SPI.transfer(0));
Serial.print("n");
}
//////////////////////////////至此已经能完成读写寄存器了////////////////////////////
0
|
|
1个回答
|
|
|
|