給你參考看看!!!
這是我測過 確定可以運行的程式 :
我採用1000sps的速度 讀取電壓與電流 溫度 , 但是因為速度太快, 抓到的資料要做平均喔!!!
void MODULE_ADS1220_INIT(void)
{
// 復位ADS1220
uint8_t resetCommand = 0x06;
SPI_WriteBlock_ADS1220(&resetCommand, 1);
delay_ms(5); // 等待復位完成
uint8_t config[2];
// 配置寄存器0:增益、MUX等
config[0] = 0x40; // (寄存器0)
config[1] = 0x00; // 增益置1,MUX置AINP = AIN0, AINN = AIN1
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(config, 2);
SPI_CS_SetVal_ADS1220;
delay_ms(1); // 等待配置生效
// 配置寄存器1:1000 SPS
config[0] = 0x44; //(寄存器1)
config[1] = 0xc4; // 據速率置1000 SPS 1/1000=1ms x4=4ms,每個通道1ms速度
//config[1] = 0xa4; // 據速率置600 SPS 1/600=1.6ms x4=6.4ms
//config[1] = 0x4c; // 據速率置20 SPS 1/200=50msx4=200ms穩定但慢,如果不追求速度可以使用
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(config, 2);
SPI_CS_SetVal_ADS1220;
delay_ms(1); // 等待配置生效
// 配置寄存器2:
config[0] = 0x48; //寄存器2)
config[1] = 0x50;
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(config, 2);
SPI_CS_SetVal_ADS1220;
delay_ms(1); // 等待配置生效
// 配置寄存器3:
config[0] = 0x4C; //寄存器3)
config[1] = 0x00;
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(config, 2);
SPI_CS_SetVal_ADS1220;
delay_ms(1); // 等待配置生效
uint8_t startConversionCommand = 0x08;
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(&startConversionCommand, 1);
SPI_CS_SetVal_ADS1220;
delay_ms(1);
}
///////////////////////////////////////////////////////////////////////////////
//ad1220 have 4 channel ch1 ch2 ch3 ch4
我解釋一下,我在每個通道會先下設定,再用spi模塊讀取回來的資料
我的spi是自己用底層,參考正點原子早期的做法!!
///////////////////////////////////////////////////////////////////////////////
void MODULE_ADS1220_1_1(void)
{
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(SPI_WriteData_ch1_a, 2);
SPI_CS_SetVal_ADS1220;
delay_us(4);
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(SPI_WriteData_ch1_b, 1);
delay_us(4);
SPI_CS_SetVal_ADS1220;
}
void MODULE_ADS1220_1_2(void)
{
SPI_CS_ClrVal_ADS1220;
SPI_MOSI_SetVal_ADS1220;
SPI_ReadBlock_ADS1220(SPI_ReadData_ch1, 3);
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch1_1 = SPI_ReadData_ch1[0];
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch1_2 = SPI_ReadData_ch1[1];
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch1_3 = SPI_ReadData_ch1[2];
SPI_CS_SetVal_ADS1220;
ADS1220_CH1_CALlCUATION();
}
void MODULE_ADS1220_2_1(void)
{
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(SPI_WriteData_ch2_a, 2);
SPI_CS_SetVal_ADS1220;
delay_us(4);
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(SPI_WriteData_ch2_b, 1);
delay_us(4);
SPI_CS_SetVal_ADS1220;
}
void MODULE_ADS1220_2_2(void)
{
SPI_CS_ClrVal_ADS1220;
SPI_MOSI_SetVal_ADS1220;
SPI_ReadBlock_ADS1220(SPI_ReadData_ch2, 3);
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch2_1 = SPI_ReadData_ch2[0];
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch2_2 = SPI_ReadData_ch2[1];
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch2_3 = SPI_ReadData_ch2[2];
SPI_CS_SetVal_ADS1220;
ADS1220_CH2_CALlCUATION();
}
void MODULE_ADS1220_3_1(void)
{
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(SPI_WriteData_ch3_a, 2);
SPI_CS_SetVal_ADS1220;
delay_us(4);
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(SPI_WriteData_ch3_b, 1);
delay_us(4);
SPI_CS_SetVal_ADS1220;
}
void MODULE_ADS1220_3_2(void)
{
SPI_CS_ClrVal_ADS1220;
SPI_MOSI_SetVal_ADS1220;
SPI_ReadBlock_ADS1220(SPI_ReadData_ch3, 3);
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch3_1 = SPI_ReadData_ch3[0];
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch3_2 = SPI_ReadData_ch3[1];
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch3_3 = SPI_ReadData_ch3[2];
SPI_CS_SetVal_ADS1220;
ADS1220_CH3_CALlCUATION();
}
void MODULE_ADS1220_4_1(void)
{
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(SPI_WriteData_ch4_a, 2);
SPI_CS_SetVal_ADS1220;
delay_us(4);
SPI_CS_ClrVal_ADS1220;
SPI_WriteBlock_ADS1220(SPI_WriteData_ch4_b, 1);
delay_us(4);
SPI_CS_SetVal_ADS1220;
}
void MODULE_ADS1220_4_2(void)
{
SPI_CS_ClrVal_ADS1220;
SPI_MOSI_SetVal_ADS1220;
SPI_ReadBlock_ADS1220(SPI_ReadData_ch4, 3);
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch4_1 = SPI_ReadData_ch4[0];
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch4_2 = SPI_ReadData_ch4[1];
bmu.MCU_ads1220_CH.ads1220_3VAL.ads1220_ch4_3 = SPI_ReadData_ch4[2];
SPI_CS_SetVal_ADS1220;
ADS1220_CH4_CALlCUATION();
}
///////////////////////////////////////////////////////////////////////////////////////
//MODULE_ADS1220_1TO4 is ch1 ch2 ch3 ch4 spi command
///////////////////////////////////////////////////////////////////////////////////////
void MODULE_ADS1220_1TO4(void)
{
if(ch1to4_setup==0x00)
{
//ch1//////////////////////////////////////////////////////////////////////////////
SPI_WriteData_ch1_a[0]=0x40;SPI_WriteData_ch1_a[1]=0x80;SPI_WriteData_ch1_b[0]=0x08;
if(ch1_setup1to4==0)
{
MODULE_ADS1220_1_1();
ch1_setup1to4=1;
}
if(ch1_setup1to4==1)
{
if(DRDY_PIN_IS_LOW)
{
MODULE_ADS1220_1_2();
ch1_setup1to4=0;
ch1to4_setup=0x01;
}
}
}
if(ch1to4_setup==0x01)
{
//ch2////////////////////////////////////////////////////////////////////////////
SPI_WriteData_ch2_a[0]=0x40;SPI_WriteData_ch2_a[1]=0x90;SPI_WriteData_ch2_b[0]=0x08;
if(ch2_setup1to4==0)
{
MODULE_ADS1220_2_1();
ch2_setup1to4=1;
}
if(ch2_setup1to4==1)
{
if(DRDY_PIN_IS_LOW)
{
MODULE_ADS1220_2_2();
ch2_setup1to4=0;
ch1to4_setup=0x02;
}
}
}
if(ch1to4_setup==0x02)
{
//ch3//////////////////////////////////////////////////////////////////////////////
SPI_WriteData_ch3_a[0]=0x40;SPI_WriteData_ch3_a[1]=0xa0;SPI_WriteData_ch3_b[0]=0x08;
if(ch3_setup1to4==0)
{
MODULE_ADS1220_3_1();
ch3_setup1to4=1;
}
if(ch3_setup1to4==1)
{
if(DRDY_PIN_IS_LOW)
{
MODULE_ADS1220_3_2();
ch3_setup1to4=0;
ch1to4_setup=0x03;
}
}
}
if(ch1to4_setup==0x03)
{
//ch4//////////////////////////////////////////////////////////////////////////////
SPI_WriteData_ch4_a[0]=0x40;SPI_WriteData_ch4_a[1]=0xb0;SPI_WriteData_ch4_b[0]=0x08;
if(ch4_setup1to4==0)
{
MODULE_ADS1220_4_1();
ch4_setup1to4=1;
}
if(ch4_setup1to4==1)
{
if(DRDY_PIN_IS_LOW)
{
MODULE_ADS1220_4_2();
ch4_setup1to4=0;
ch1to4_setup=0x00;
}
}
}
} |