OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7702|回复: 25

STM32F103与F407驱动ADS1247问题

[复制链接]

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
发表于 2015-1-29 19:54:37 | 显示全部楼层 |阅读模式
5金钱

前段时间画了块F40的板子,使用到ADS147这款芯片,和MCU SPI通讯,接pt100可以用来测温。现在我改成F103,同样使用ADS1247,接法和软件配置都差不多,但是这次读ADS1247寄存器的值是乱码,找不到原因,麻烦给位帮看看,给点建议。

这个是原先F407的:

[mw_shl_code=c,true]

[mw_shl_code=c,true]#include "stm32f4xx.h" #include "ads1247.h" #include "delay.h" #include "stdio.h" char q; u8 ADH,ADM,ADL; u32 k1,k2,k3; /******************************************************************************* * Function Name : SPI_Configuration * Description : SPI接口设置 * Input : None * Output : None * Return : None *******************************************************************************/ void ADS1247_SPI_Configuration() { SPI_InitTypeDef SPI_InitStruct; GPIO_InitTypeDef GPIO_InitStructure,GPIO_InitStructure1,GPIO_InitStructure2; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD,ENABLE); //SPI的SCK、MISO、MOSI都是PB RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE); GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_SPI2); //SCK-PB10 GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2); //MISO-PB14 GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2); //MOSI-PB15 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; GPIO_Init(GPIOB,&GPIO_InitStructure); //配置PB10 PB14 PB15 GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_12; GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_IN; GPIO_InitStructure1.GPIO_Speed= GPIO_Speed_100MHz; GPIO_Init(GPIOB, &GPIO_InitStructure1); //PB12-DRDY GPIO_InitStructure2.GPIO_Pin= GPIO_Pin_5|GPIO_Pin_6; //PD5-RESET PD6-START GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure2.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_100MHz; GPIO_Init(GPIOD, &GPIO_InitStructure2); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_13; //PC13-CS GPIO_Init(GPIOC, &GPIO_InitStructure2); //SPI_I2S_DeInit(SPI2); SPI_Cmd(SPI2,DISABLE); SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStruct.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStruct); SPI_Cmd(SPI2, ENABLE); printf("SPI初始化OK\r\n"); } /******************************************************************************* * Function Name : SPI_ADS1247_SendByte * Description : SPI传输一个字符 * Input : * Output : *******************************************************************************/ u8 SPI_ADS1247_SendByte(u8 byte) { u8 retry=0; while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位 { retry++; printf("biea:%d\r\n",1); if(retry>200)return 0; } SPI_I2S_SendData(SPI2, byte); //通过外设SPIx发送一个数据 retry=0; while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位 { retry++; printf("ca:%d\r\n",1); if(retry>200)return 0; } //GPIO_SetBits(GPIOB,GPIO_Pin_15); //DIN拉高 return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据 //GPIO_SetBits(GPIOB,GPIO_Pin_15); //DIN拉高 } /******************************************************************************* * Function Name : SPI_ADS1247_SendByte * Description : 写ADS1247的寄存器 * Input : * Output : *******************************************************************************/ void ADS1247WREG(unsigned char regaddr,unsigned char databyte) { SPI_ADS1247_SendByte(ADS1247_CMD_WREG+(regaddr & 0xF)); SPI_ADS1247_SendByte(0); SPI_ADS1247_SendByte(databyte); } /******************************************************************************* * Function Name : SPI_ADS1247_SendByte * Description : 读ADS1247的寄存器 * Input : * Output : *******************************************************************************/ unsigned char ADS1247RREG(unsigned char regaddr) { unsigned char r=0; SPI_ADS1247_SendByte(ADS1247_CMD_RREG+(regaddr & 0xF)); SPI_ADS1247_SendByte(0); r=SPI_ADS1247_SendByte(ADS1247_CMD_NOP); return r; } /******************************************************************************* * Function Name : ADS1247_ReadData * Description : 读 ADS1247 转换值 * Input : addr:Regiter address * Output : None * Return : Register data *******************************************************************************/ u32 ADS1247_ReadData() { u32 value = 0; SPI_ADS1247_SendByte(ADS1247_CMD_RDATA); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) ==1); delay_ms(1); value = SPI_ADS1247_SendByte(0xff)<<16; value += SPI_ADS1247_SendByte(0xff)<<8; value += SPI_ADS1247_SendByte(0xff); return value; } /******************************************************************************* * Function Name : ADS1247_Init (通道和电流输出端口没选择) * Description : ADS1247 init * Input : None * Output : None * Return : None *******************************************************************************/ void ADS1247_Init(void) { ADS1247_SPI_Configuration(); ADS_CS_0; //CS=0 ADS_RESET_1; ADS_START_1; while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) ==1); SPI_ADS1247_SendByte(ADS1247_CMD_RESET); //RESET delay_ms(1); ADS1247WREG(ADS1247_REG_MUX1,0x38); // 00111000,bit7:启用内部晶振;bit6-5:内部参考电压一直打开;bit4-3:输入基准为片上基准,并且连接到REFP0;bit2-0:普通模式 (查看是否有1.5mA电流) //MUX1赋值0x38以后REFP0和PEFN0两端会出现1.5V电压????? delay_ms(1); //ADS1247WREG(ADS1247_REG_SYS0,0x06); //增益1,320sps ADS1247WREG(ADS1247_REG_SYS0,0x56); //增益32,320sps delay_ms(1); ADS1247WREG(ADS1247_REG_IDAC0,0x06); //DOUT/DRDY pin functions only as Data Out (default) 并且1mA delay_ms(1); ADS1247WREG(ADS1247_REG_VBIAS,0); //偏置电压关闭(默认) delay_ms(1); //量程和零点校正还没写 q=ADS1247RREG(ADS1247_REG_MUX1); printf("测试:%x\r\n",q); //printf("测试:%d\r\n",channelx); ADS_CS_1; } /******************************************************************************* * Function Name : void ADS1247_ReadData2(void) * Description : * Input : None * Output : None *******************************************************************************/ void ADS1247_ReadData2(void) { u8 i=0; u32 data1,data2; ADS_CS_0; // ADS1247WREG(ADS1247_REG_MUX0,0x13); //AIN2+ AIN3- // ADS1247WREG(ADS1247_REG_IDAC1,0x23); // 选择内部恒流源输出引脚 AIN2 AIN3 // SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 // data2=ADS1247_ReadData(); // printf("通道二:%x\r\n",data2); for(i=0;i<2;i++) { if(i==0) { ADS1247WREG(ADS1247_REG_MUX0,0x01); //AIN0+ AIN1- ADS1247WREG(ADS1247_REG_IDAC1,0x01); // 选择内部恒流源输出引脚 AIN0 AIN1 SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 data1=ADS1247_ReadData(); printf("通道一:%x\r\n",data1); } else { ADS1247WREG(ADS1247_REG_MUX0,0x13); //AIN2+ AIN3- ADS1247WREG(ADS1247_REG_IDAC1,0x23); // 选择内部恒流源输出引脚 AIN2 AIN3 SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 data2=ADS1247_ReadData(); printf("通道二:%x\r\n",data2); } } ADS_CS_1; } float ADS1247_Readchannel1() { u32 data11; float temp1; ADS_CS_0; ADS1247WREG(ADS1247_REG_MUX0,0x01); //AIN0+ AIN1- ADS1247WREG(ADS1247_REG_IDAC1,0x01); // 选择内部恒流源输出引脚 AIN0 AIN1 SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 data11=ADS1247_ReadData(); // printf("通道一:%x\r\n",data1); ADS_CS_1; if(data11<0x7fffff||data11==0x7fffff) { temp1=(2.018*data11/0x7fffff*1000/32+40)/0.37569; //外部参考电压为2V,0x7fffff=8366807,温度系数暂定为0.39,PGA=32,恒流源1mA printf("通道一温度%.2f\r\n", temp1); return temp1; } if(data11>0x7fffff) { temp1=(-2.018*(0xffffff-data11+1)/0x7fffff*1000/32+39)/0.39; //补码形式 printf("通道一温度%.2f\r\n", temp1); return temp1; } } float ADS1247_Readchannel2() { u32 data22; float temp2; ADS_CS_0; ADS1247WREG(ADS1247_REG_MUX0,0x13); //AIN2+ AIN3- ADS1247WREG(ADS1247_REG_IDAC1,0x23); // 选择内部恒流源输出引脚 AIN2 AIN3 SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 data22=ADS1247_ReadData(); //printf("通道二:%x\r\n",data2); ADS_CS_1; if(data22<0x7fffff||data22==0x7fffff) { temp2=(2.018*data22/0x7fffff*1000/32+40)/0.37569; //外部参考电压为2V,0x7fffff=8366807,温度系数暂定为0.39,PGA=32,恒流源1mA printf("通道二温度%.2f\r\n", temp2); return temp2; } if(data22>0x7fffff) { temp2=(-2.018*(0xffffff-data22+1)/0x7fffff*1000/32+39)/0.39; //补码形式 printf("通道二温度%.2f\r\n", temp2); return temp2; } } [/mw_shl_code]

[/mw_shl_code]


下面这个是F103的,其实两个就是管脚配置不同:

[mw_shl_code=c,true]#include "ads1247.h" #include "delay.h" #include "stdio.h" #include "stm32f10x_spi.h" char q; u8 ADH,ADM,ADL; u32 k1,k2,k3; /******************ads1247管脚与MCU对应关系******************* SCK----------PB13 MISO---------PB14 MOSI---------PB15 (SPI) CS-----------PC6 RESET--------PC8 START--------PC7 DRDY---------PB12 ******************ads1247管脚与MCU对应关系*******************/ /******************************************************************************* * Function Name : SPI_Configuration * Description : SPI接口设置 * Input : None * Output : None * Return : None *******************************************************************************/ void ADS1247_SPI_Configuration() { SPI_InitTypeDef SPI_InitStruct; GPIO_InitTypeDef GPIO_InitStructure,GPIO_InitStructure1,GPIO_InitStructure2; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE); //SPI的SCK、MISO、MOSI都是PB RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); //配置PB13 PB14 PB15 GPIO_InitStructure1.GPIO_Pin=GPIO_Pin_12; GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStructure1.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure1); //PB12-DRDY GPIO_InitStructure2.GPIO_Pin= GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6; //PC8-RESET PC7-START PC6-CS GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure2); //SPI_I2S_DeInit(SPI2); SPI_Cmd(SPI2,DISABLE); SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex; SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b; SPI_InitStruct.SPI_Mode = SPI_Mode_Master; SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low; //// SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStruct.SPI_NSS = SPI_NSS_Soft; SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStruct.SPI_CRCPolynomial = 7; SPI_Init(SPI2, &SPI_InitStruct); SPI_Cmd(SPI2, ENABLE); printf("SPI初始化OK\r\n"); } /******************************************************************************* * Function Name : SPI_ADS1247_SendByte * Description : SPI传输一个字符 * Input : * Output : *******************************************************************************/ u8 SPI_ADS1247_SendByte(u8 byte) { u8 retry=0; while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位 { retry++; printf("biea:%d\r\n",1); if(retry>200)return 0; } SPI_I2S_SendData(SPI2, byte); //通过外设SPIx发送一个数据 retry=0; while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位 { retry++; printf("ca:%d\r\n",1); if(retry>200)return 0; } //GPIO_SetBits(GPIOB,GPIO_Pin_15); //DIN拉高 return SPI_I2S_ReceiveData(SPI2); //返回通过SPIx最近接收的数据 //GPIO_SetBits(GPIOB,GPIO_Pin_15); //DIN拉高 } /******************************************************************************* * Function Name : SPI_ADS1247_SendByte * Description : 写ADS1247的寄存器 * Input : * Output : *******************************************************************************/ void ADS1247WREG(unsigned char regaddr,unsigned char databyte) { SPI_ADS1247_SendByte(ADS1247_CMD_WREG+(regaddr & 0xF)); SPI_ADS1247_SendByte(0); SPI_ADS1247_SendByte(databyte); } /******************************************************************************* * Function Name : SPI_ADS1247_SendByte * Description : 读ADS1247的寄存器 * Input : * Output : *******************************************************************************/ unsigned char ADS1247RREG(unsigned char regaddr) { unsigned char r=0; SPI_ADS1247_SendByte(ADS1247_CMD_RREG+(regaddr & 0xF)); SPI_ADS1247_SendByte(0); r=SPI_ADS1247_SendByte(ADS1247_CMD_NOP); return r; } /******************************************************************************* * Function Name : ADS1247_ReadData * Description : 读 ADS1247 转换值 * Input : addr:Regiter address * Output : None * Return : Register data *******************************************************************************/ u32 ADS1247_ReadData() { u32 value = 0; SPI_ADS1247_SendByte(ADS1247_CMD_RDATA); while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) ==1); delay_ms(1); value = SPI_ADS1247_SendByte(0xff)<<16; value += SPI_ADS1247_SendByte(0xff)<<8; value += SPI_ADS1247_SendByte(0xff); return value; } /******************************************************************************* * Function Name : ADS1247_Init (通道和电流输出端口没选择) * Description : ADS1247 init * Input : None * Output : None * Return : None *******************************************************************************/ void ADS1247_Init(void) { ADS1247_SPI_Configuration(); ADS_CS_0; //CS=0 ADS_RESET_1; ADS_START_1; while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) ==1); SPI_ADS1247_SendByte(ADS1247_CMD_RESET); //RESET delay_ms(1); ADS1247WREG(ADS1247_REG_MUX1,0x38); // 00111000,bit7:启用内部晶振;bit6-5:内部参考电压一直打开;bit4-3:输入基准为片上基准,并且连接到REFP0;bit2-0:普通模式 (查看是否有1.5mA电流) //MUX1赋值0x38以后REFP0和PEFN0两端会出现1.5V电压????? delay_ms(1); //ADS1247WREG(ADS1247_REG_SYS0,0x06); //增益1,320sps ADS1247WREG(ADS1247_REG_SYS0,0x56); //增益32,320sps delay_ms(1); ADS1247WREG(ADS1247_REG_IDAC0,0x06); //DOUT/DRDY pin functions only as Data Out (default) 并且1mA delay_ms(1); ADS1247WREG(ADS1247_REG_VBIAS,0); //偏置电压关闭(默认) delay_ms(1); //量程和零点校正还没写 q=ADS1247RREG(ADS1247_REG_MUX1); printf("测试:%x\r\n",q); //printf("测试:%d\r\n",channelx); ADS_CS_1; } /******************************************************************************* * Function Name : void ADS1247_ReadData2(void) * Description : * Input : None * Output : None *******************************************************************************/ void ADS1247_ReadData2(void) { u8 i=0; u32 data1,data2; ADS_CS_0; // ADS1247WREG(ADS1247_REG_MUX0,0x13); //AIN2+ AIN3- // ADS1247WREG(ADS1247_REG_IDAC1,0x23); // 选择内部恒流源输出引脚 AIN2 AIN3 // SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 // data2=ADS1247_ReadData(); // printf("通道二:%x\r\n",data2); for(i=0;i<2;i++) { if(i==0) { ADS1247WREG(ADS1247_REG_MUX0,0x01); //AIN0+ AIN1- ADS1247WREG(ADS1247_REG_IDAC1,0x01); // 选择内部恒流源输出引脚 AIN0 AIN1 SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 data1=ADS1247_ReadData(); printf("通道一:%x\r\n",data1); } else { ADS1247WREG(ADS1247_REG_MUX0,0x13); //AIN2+ AIN3- ADS1247WREG(ADS1247_REG_IDAC1,0x23); // 选择内部恒流源输出引脚 AIN2 AIN3 SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 data2=ADS1247_ReadData(); printf("通道二:%x\r\n",data2); } } ADS_CS_1; } float ADS1247_Readchannel1() { u32 data11; float temp1; ADS_CS_0; ADS1247WREG(ADS1247_REG_MUX0,0x01); //AIN0+ AIN1- ADS1247WREG(ADS1247_REG_IDAC1,0x01); // 选择内部恒流源输出引脚 AIN0 AIN1 SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 data11=ADS1247_ReadData(); printf("通道一:%x\r\n",data11); ADS_CS_1; if(data11<0x7fffff||data11==0x7fffff) { temp1=(2.018*data11/0x7fffff*1000/32+40)/0.37569; //外部参考电压为2V,0x7fffff=8366807,温度系数暂定为0.39,PGA=32,恒流源1mA printf("通道一温度%.2f摄氏度\r\n", temp1); return temp1; } if(data11>0x7fffff) { temp1=(-2.018*(0xffffff-data11+1)/0x7fffff*1000/32+39)/0.39; //补码形式 printf("通道一温度%.2f摄氏度\r\n", temp1); return temp1; } } float ADS1247_Readchannel2() { u32 data22; float temp2; ADS_CS_0; ADS1247WREG(ADS1247_REG_MUX0,0x13); //AIN2+ AIN3- ADS1247WREG(ADS1247_REG_IDAC1,0x23); // 选择内部恒流源输出引脚 AIN2 AIN3 SPI_ADS1247_SendByte(ADS1247_CMD_SYNC); //同步AD转换 data22=ADS1247_ReadData(); printf("通道二:%x\r\n",data22); ADS_CS_1; if(data22<0x7fffff||data22==0x7fffff) { temp2=(2.018*data22/0x7fffff*1000/32+40)/0.37569; //外部参考电压为2V,0x7fffff=8366807,温度系数暂定为0.39,PGA=32,恒流源1mA printf("通道二温度%.2f摄氏度\r\n", temp2); return temp2; } if(data22>0x7fffff) { temp2=(-2.018*(0xffffff-data22+1)/0x7fffff*1000/32+39)/0.39; //补码形式 printf("通道二温度%.2f摄氏度\r\n", temp2); return temp2; } } [/mw_shl_code]



同样,我在ADS1247_Init()函数中读取寄存器值时,发现前者可以,后者读出来是乱码。麻烦帮看看,下面是原理图:

最佳答案

查看完整内容[请看2#楼]

回复【5楼】liyafeng888888: --------------------------------- 不好意思,回答晚了,以前解决了忘记回答了,我是把SPI_ADS1247_SendByte()函数中的printf函数去掉就可以了,估计占用时间太长了,而在f407中可以应该是407频率高,占用时间短,希望能帮到你!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-1-29 19:54:38 | 显示全部楼层
回复【5楼】liyafeng888888:
---------------------------------
不好意思,回答晚了,以前解决了忘记回答了,我是把SPI_ADS1247_SendByte()函数中的printf函数去掉就可以了,估计占用时间太长了,而在f407中可以应该是407频率高,占用时间短,希望能帮到你!
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11544
金钱
11544
注册时间
2014-4-1
在线时间
1315 小时
发表于 2015-1-29 20:04:55 | 显示全部楼层
示波器,查波形。
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-2-2 10:18:15 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
波形我查看了,SPI_SCK和MOSI都没问题,但是MISO是三角波,有点奇怪。
回复

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2015-3-30
在线时间
17 小时
发表于 2015-4-20 09:13:54 | 显示全部楼层
 楼主这是测的2路PT100的温度吗?


我看楼主的电路和ADS1247的datasheet有些出入呢。
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-27
在线时间
31 小时
发表于 2015-8-31 13:59:54 | 显示全部楼层
回复【3楼】善良的二哥:
---------------------------------
亲,今天我也遇到F103读ADS1247寄存器值乱码的现象,SPI_SCK和MOSI也都没问题,请问楼主此问题解决了没?
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-27
在线时间
31 小时
发表于 2015-9-14 21:30:21 | 显示全部楼层
回复【6楼】善良的二哥:
---------------------------------
已成功解决了,不过还是要谢谢楼主
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-9-15 11:26:11 | 显示全部楼层
回复【7楼】liyafeng888888:
---------------------------------
亲,那是什么问题呢?
回复

使用道具 举报

3

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-27
在线时间
31 小时
发表于 2015-9-16 12:05:05 | 显示全部楼层
回复【8楼】善良的二哥:
---------------------------------
呵呵,一个很低级错误,我是把别人的头文件命令直接拷过来的,他把读寄存器命令0x20弄成了0x02
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2015-9-17 09:08:23 | 显示全部楼层
回复【9楼】liyafeng888888:
---------------------------------
好吧,解决了就行!
回复

使用道具 举报

7

主题

47

帖子

0

精华

高级会员

Rank: 4

积分
655
金钱
655
注册时间
2015-1-25
在线时间
139 小时
发表于 2016-1-10 21:47:55 | 显示全部楼层
你好,我现在也在用RCT6控制ADS1247采样,用你的这个程序,只是DRDY这个引脚没有使用,发现通过串口读过来的数值是8388608,很大的一个数字,对照时序表也不知道错在哪儿了,我硬件上REF用的2.5V。pt100三线制,所以想请教一下。万分感激!
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-5-10
在线时间
2 小时
发表于 2016-5-30 20:01:41 | 显示全部楼层
你好能给我发份你的源码吗?搞了一周了,没弄出来我的邮箱1559383084@qq.com
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2014-12-23
在线时间
6 小时
发表于 2016-8-27 16:48:29 | 显示全部楼层
楼主你好,我想问你一下,你的转化成温度的公式中的1000和40是代表什么啊
1111111.png
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2016-11-14 22:05:15 | 显示全部楼层
不好意思,回答晚了,应该是407时序比103快的问题。
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2016-12-2 15:47:54 | 显示全部楼层
善良的二哥 发表于 2015-1-29 19:54
回复【5楼】liyafeng888888:
---------------------------------
不好意思,回答晚了,以前解决了忘记回答 ...

楼主,代码可不可以发一份出来?让菜鸟参考学习下
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2016-12-6 14:38:52 | 显示全部楼层
楼主,请教个问题,写寄存器时,发完地址,为什么写一个0x00,之后才去写寄存器值?
回复

使用道具 举报

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2015-6-2
在线时间
22 小时
发表于 2017-1-13 16:43:48 | 显示全部楼层
main 函数是怎么写的,真的调通了???
我还需努力,因为我还没做到持之以恒
回复

使用道具 举报

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2015-6-2
在线时间
22 小时
发表于 2017-1-13 16:45:36 | 显示全部楼层
无帝老三 发表于 2016-12-6 14:38
楼主,请教个问题,写寄存器时,发完地址,为什么写一个0x00,之后才去写寄存器值?

Second Command Byte: 0000 nnnn, where nnnn is the number of bytes to be written – 1.
我还需努力,因为我还没做到持之以恒
回复

使用道具 举报

20

主题

143

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-8-28
在线时间
108 小时
发表于 2017-1-14 12:22:56 | 显示全部楼层
宋小六 发表于 2017-1-13 16:45
Second Command Byte: 0000 nnnn, where nnnn is the number of bytes to be written – 1.

0x00 就是二进制的 0000  0000

Second Command Byte: 0000 nnnn

那nnnn也是0000  就是要写一个字节 1 - 1  = 0000,
这样理解对吗?
回复

使用道具 举报

10

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2015-6-2
在线时间
22 小时
发表于 2017-1-14 17:51:51 | 显示全部楼层
无帝老三 发表于 2017-1-14 12:22
0x00 就是二进制的 0000  0000

Second Command Byte: 0000 nnnn

是的,不过我还没有调通这个,感觉好难调
我还需努力,因为我还没做到持之以恒
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2017-2-3 11:21:23 | 显示全部楼层
宋小六 发表于 2017-1-14 17:51
是的,不过我还没有调通这个,感觉好难调

1407感觉有点问题,我做的板子有些1407老是有问题,现在不用这个了。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-5-14
在线时间
0 小时
发表于 2019-5-14 14:10:03 | 显示全部楼层
你好,不知道您内部基准输出1.5V后来是怎么解决的
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-5-14
在线时间
0 小时
发表于 2019-5-14 14:12:21 | 显示全部楼层
[img][/img]
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2019-5-14
在线时间
0 小时
发表于 2019-5-14 14:16:27 | 显示全部楼层
ADS1247WREG(ADS1247_REG_MUX1,0x38);&#160;&#160;&#160;&#160;&#160; // 00111000,bit7:启用内部晶振;bit6-5:内部参考电压一直打开;bit4-3:输入基准为片上基准,并且连接到REFP0;bit2-0:普通模式&#160;&#160;&#160; (查看是否有1.5mA电流) //MUX1赋值0x38以后REFP0和PEFN0两端会出现1.5V电压?????
想请教一下您,这个问题是怎么解决的,我刚刚遇到了也,之前是2.047正常的,然后换了一片AD后,内部基准输出就不正常了
回复

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
 楼主| 发表于 2019-5-20 15:51:20 | 显示全部楼层
上单若水 发表于 2019-5-14 14:16
ADS1247WREG(ADS1247_REG_MUX1,0x38);&#160;&#160;&#160;&#160;&#160; // 00111000,bit7:启用内部晶振;b ...

不好意思额,ADS1247这款芯片后面被我们淘汰了,当时测试老是会有一些有问题,后面直接用电桥+AD620方式了。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-7-12
在线时间
4 小时
发表于 2019-8-6 21:27:33 | 显示全部楼层
希望各位大神们在解决了问题后把怎么解决的写到后面,便于后面的同学学习!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-6 21:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表