TI论坛
直播中

李雅文

7年用户 132经验值
私信 关注
[问答]

ADS1118不能驱动

最大的问题是当CS被拉低的时候,DOUT直接被拉高。导致读出来的数全部都为1.一直不理解这个是什么原因,求解答

回帖(20)

宁兴琴

2019-5-10 11:00:58
初始化配置有问题吗?读寄存器有问题吗,还是只有转换过程有问题呢
举报

李雅文

2019-5-10 11:07:19
引用: cdiwqjelidqd 发表于 2019-5-10 11:00
初始化配置有问题吗?读寄存器有问题吗,还是只有转换过程有问题呢

 我是参考网上的例子写的。读不到寄存器,都回来的值要不都为0,要不很奇怪。我把代码贴在下面


ADS1118的驱动
#include "ADS1118.h"
void ADS1118_Init(void)//端口初始化,GPIOCLK
[
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(ADS1118_CLOCK, ENABLE);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_CS;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIO_ADS1118_CS, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_SCLK;
GPIO_Init(GPIO_ADS1118_SCLK, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_DIN;
GPIO_Init(GPIO_ADS1118_DIN, &GPIO_InitStructure);


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = Pin_ADS1118_DOUT;
GPIO_Init(GPIO_ADS1118_DOUT, &GPIO_InitStructure);

ADS1118_CS_1();
ADS1118_SCLK_1();
ADS1118_DIN_1();
]
u8 SPI_SendByte(u8 byte)
[
u8 i = 8;
u8 temp;
ADS1118_SCLK_1();
ADS1118_DIN_1();
while(i--)
[
if(byte&0x80)
ADS1118_DIN_1();
else
ADS1118_DIN_0();
ADS1118_SCLK_0();
byte<<=1;
delay_us(1);
ADS1118_SCLK_1();
delay_us(1);
if(DOUT_Set)
temp |= 1;
temp<<=1;
]
return temp;
]
u32 SPI_RW_Reg(u16 CofigReg)
[
u8 readdata1;
u8 readdata2;
u8 readdata3;
u8 readdata4;
u32 data;
readdata1=SPI_SendByte((uint8_t)(CofigReg>>8));
readdata2=SPI_SendByte((uint8_t)CofigReg);
readdata3=SPI_SendByte((uint8_t)(CofigReg>>8));
readdata4=SPI_SendByte((uint8_t)CofigReg);
data= ((uint32_t)readdata1<<8)|((uint32_t)readdata2);
//ads_cs_1();
return data;
]


主函数
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "ads1118.h"
#include "delay.h"
u32 AdValue=0;
uint16_t count=0xC583;

int main(void)
[

delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init();
ADS1118_Init();
while(1)
[
LED1 =!LED1 ;
AdValue=SPI_RW_Reg(count);
printf ("%drn",AdValue);
delay_ms(100);

]
]
举报

李雅文

2019-5-10 11:23:40
有一句代码忘了附了,那个SPI发送一个bit是有一句把CS拉低
举报

宁兴琴

2019-5-10 11:34:52
你这代码,并没有初始化配置寄存器的部分啊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分