ads1248 的send data to the device. Data on DIN are shifted into the device on the falling edge of SCLK.。但是
Data are clocked out at
rising edge of SCLK, MSB first 。 输入数据是上升沿有效,输出数据确实下降沿有效。我对SPI进行配置是,应该怎样啊。求大神,好人一生平安。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
ads1248 的send data to the device. Data on DIN are shifted into the device on the falling edge of SCLK.。但是
Data are clocked out at
rising edge of SCLK, MSB first 。 输入数据是上升沿有效,输出数据确实下降沿有效。我对SPI进行配置是,应该怎样啊。求大神,好人一生平安。
这2句话的理解没什么问题,主要是我要是想通过SPI的写的话,
这个CPOL和CPHA是你的MCU的SPI模块的参数吧,不如你别使用这个模块了,使用软件模拟SPI就简单了,否则写入的时候要初始化SPI寄存器,读数据的时候要重新初始化SPI寄存器
若要使用MCU的SPI模块,时钟极性设置为0,即时钟空闲idle时候的电平是低电平,当CPHA为0时,时钟周期的前一边缘采集数据就是上升沿从ADS1248采集数据,这样就符合了ADS1248的数据输出规则
嗯嗯,这个问题我们清楚了,,还有一个问题 这个ads1248 当我AVDD和ASSS分别给5V和0V时,如果在给DVDD电压,这个芯片就工作不正常了,如果此时把DVDD悬空,数据就正常了。(ps 我3号脚CLK直接接地了)
那你得DGND接着地的吗?跟AVSS是同一个地吗?不正常工作是输出不正常的值还是就没有输出呢
还有一个问题,我AVDD接的5V,AVSS接的地,,REFP0接的2.048V,REFN0接地,我采负电压怎么出现问题了
你好,如果电源电压没有负电压,那么你的采集电压的范围是负电压的话就超出范围了吧?那是会出问题的
Hi Carter,
我用9B92的SPI模块配置ADS1248一直读不出数据,麻烦您看一下。
void
Ads1248Init(void)
{
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6);//配置C4,C5,C6为输出
GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_6|GPIO_PIN_5,0x00);//对ADS1248复位
SysCtlDelay(4);//延时
GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_6,GPIO_PIN_6);
while(SSIDataGetNonBlocking(SSI0_BASE, &UART_RX[0]))
{
}//如果SSI0正在接收数据等待
//对ADS1248进行配置
GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_5,GPIO_PIN_5); //START置1
SysCtlDelay(4);//延时
for(ulindex = 0; ulindex < 3; ulindex++)
{
//
// 通过串口1显示打印发送的数据
//
//while(UARTBusy(UART1_BASE));
//UARTCharPut(UART1_BASE,SSI_TX02[ulindex]);
//while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
SSIDataPut(SSI0_BASE, SSI_TX02[ulindex]);//spi配置ADS1248 02寄存器 选择REF0脚输入的外部参考电压
}
while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
for(ulindex = 0; ulindex < 3; ulindex++)
{
//
// 通过串口1显示打印发送的数据
//
//while(UARTBusy(UART1_BASE));
//UARTCharPut(UART1_BASE,SSI_TX03[ulindex]);
//while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
SSIDataPut(SSI0_BASE, SSI_TX03[ulindex]);//spi配置ADS1248 03寄存器 PGA放大倍数为128 AD采样率为20HZ
}
while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
for(ulindex = 0; ulindex < 3; ulindex++)
{
//
// 通过串口1显示打印发送的数据
//
//while(UARTBusy(UART1_BASE));
//UARTCharPut(UART1_BASE,SSI_TX0A[ulindex]);
//while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
SSIDataPut(SSI0_BASE, SSI_TX0A[ulindex]);//spi配置ADS1248 0A寄存器 电流源选择100UA
}
while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
for(ulindex = 0; ulindex < 3; ulindex++)
{
//
// 通过串口1显示打印发送的数据
//
//while(UARTBusy(UART1_BASE));
//UARTCharPut(UART1_BASE,SSI_TX0B[ulindex]);
//while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
SSIDataPut(SSI0_BASE, SSI_TX0B[ulindex]);//spi配置ADS1248 0B寄存器 电流源1流过AIN0 ,电流源2流过AIN1
}
while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
}
//读取环境温度
double
PV_H(void)
{
double PVT1,PVT2,PVT3,PVT4,PVT5;
double PVTD;
int PVTC;
while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
for(ulindex = 0; ulindex < 3; ulindex++)
{
//
// 通过串口1显示打印发送的数据
//
//while(UARTBusy(UART1_BASE));
//UARTCharPut(UART1_BASE,SSI_TX000[ulindex]);
//while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
SSIDataPut(SSI0_BASE, SSI_TX000[ulindex]);//spi配置ADS1248 00寄存器 正端选择AIN4 负端选择AIN5
}
while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
for(ulindex = 0; ulindex < 3; ulindex++)
{
//
// 通过串口1显示打印发送的数据
//
while(UARTBusy(UART1_BASE));
//UARTCharPut(UART1_BASE,SSI_TX00B[ulindex]);
// while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
SSIDataPut(SSI0_BASE, SSI_TX00B[ulindex]);//spi配置ADS1248 0B寄存器 电流源1流过AIN4 ,电流源2流过AIN5
}
while(SSIBusy(SSI0_BASE));//SSI0发送忙,等待
SSIDataPut(SSI0_BASE,RDATA);//spi读数据指令,每发送一个读一组数据
for(ulindex = 0; ulindex <3; ulindex++)
{
//
// Receive the data using the "blocking" Get function. This function
// will wait until there is data in the receive FIFO before returning.
//
SSIDataGet(SSI0_BASE, &UART_RX[ulindex]);
//
// Since we are using 8-bit data, mask off the MSB.
//
UART_RX[ulindex] &= 0x00FF;
//
// 通过串口显示SSI0接收到的数据
//
while(UARTBusy(UART1_BASE));
UARTCharPut(UART1_BASE,UART_RX[ulindex]);
}