完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
[list]
[*]为什么采集不到数据,请大家帮我看看我的寄存器配置对不对,我想排除一下程序问题,我是模拟spi配置寄存器, LMP90080.c #ifndef LMP90080_H_#define LMP90080_H_#define uint unsigned int#define uchar unsigned char //Power and Reset Registers address#define RESTCN 0x00 //Register and Conversion Reset 0xC3#define SPI_RESET 0x02 //0x1: SPI Reset Enabled #define PWRCN 0x08 //0x00: Active Mode 0x01: Power-down Mode 0x03: Stand-by Mode//ADC Registers address#define ADC_RESTART 0x0B //0x01: Restart conversion#define ADC_AUXCN 0x12 //0x70: Selects internal clock#define ADC_DONE 0x18 //0x00: Data Available#define ADC_DOUTH 0x1A //ADC Conversion Data [15:8]#define ADC_DOUTL 0x1B //ADC Conversion Data [7:0]//Channel Configuration Registers address#define CH_STS 0x1E //0x00:通道有效#define CH_SCAN 0x1F //0x98:多通道持续转换,从CH0~CH3#define CH0_INPUTCN 0x20 //0x01:Disable Sensor Diagnostics,Select VREFP1 and VREFN1, // Positive input select:VIN0,Negative input select:VIN1#define CH1_INPUTCN 0x22 //0x13:Disable Sensor Diagnostics,Select VREFP1 and VREFN1, // Positive input select:VIN2,Negative input select:VIN3#define CH2_INPUTCN 0x24 //0x25:Disable Sensor Diagnostics,Select VREFP1 and VREFN1, // Positive input select:VIN4,Negative input select:VIN5#define CH3_INPUTCN 0x26 //0x37:Disable Sensor Diagnostics,Select VREFP1 and VREFN1, // Positive input select:VIN6,Negative input select:VIN7#define CH0_CONFIG 0X21 //0X7e:增益128,有buf#define CH1_CONFIG 0X23 //0X7e:增益128,有buf#define CH2_CONFIG 0X25 //0X7e:增益128,有buf#define CH3_CONFIG 0X27 //0X7e:增益128,有buf//Calibration Registers addressBackground Calibration OFF#define BGCALCN 0x10 //0x00: BgcalMode0: Background Calibration OFF#define SCALCN 0x17 //0x00: Normal Mode //SPI Registers address#define SPI_HANDSHAKECN 0x01 //0x04:CSB拉低之后,SDO is driving#define SPI_STREAMCN 0x03 //0x00:Normal Streaming mode#define DATA_ONLY_1 0x09 //0x1a:Start address for the Data Only Read Transaction#define DATA_ONLY_2 0x0a //0x01:都2个bytes#define SPI_DRDYBCN 0x11 //0x93:D6 = DRDYB signa, Enable CRC reset on DRDYB deassertion // Correct FGA gain error#define SPI_CRC_CN 0x13 //0x14:Enable CRC,DRDYB is active high after ADC_DOUTL is read.#define SPI_CRC_DAT 0x1D //0x00:Reset CRC#define W_ADDRESS 0x10 //开始写的标志 #define CSB1_0 PORTC &=~(1<>4; LRA=(reg&0x0f)|0xA0; SCLK_1; Drdyb1_1; CSB1_0;//拉低CSB Drdyb1_0; SCLK_0; LMP90080_WR(W_ADDRESS); //写地址开始 LMP90080_WR(URA);//写地址高位 LMP90080_WR(LRA);//写地址低位,写1个字节 status=LMP90080_RD(); //status_h=LMP90080_RD(); // status_l=LMP90080_RD(); SCLK_0; CSB1_1; //status = (status_h<<8)|(status_l>>8); return status;}uchar LMP_read_data2(void){ uchar status;//status_h,status_l; uint URA,LRA; uint reg = 0x1A; URA=(reg&0xf0)>>4; LRA=(reg&0x0f)|0xA0; SCLK_1; Drdyb2_1; CSB2_0;//拉低CSB Drdyb2_0; SCLK_0; LMP90080_WR(W_ADDRESS); //写地址开始 LMP90080_WR(URA);//写地址高位 LMP90080_WR(LRA);//写地址低位,写1个字节 status=LMP90080_RD(); //status_h=LMP90080_RD(); //status_l=LMP90080_RD(); SCLK_0; CSB2_1; //status = (status_h<<8)|(status_l>>8); return status;}//SPI写8位数据void LMP90080_WR(uint data){ uint i; for(i=0;i<8;i++) { SCLK_1; if(0x80&data) MOSI_1; else MOSI_0; SCLK_0; data<<=1; }}//SPI读16位数据uchar LMP90080_RD(void){ uchar data_16=0x0000; uint i; data_16<<=1;//读出16位数据 for(i=0;i<16;i++) { SCLK_1; if(LMP_MISO==1) data_16 |= 0x01; SCLK_0; data_16<<=1; } return data_16;}void LMP90080_WR_Reg(uint reg,uint value){ uint URA,LRA; URA=(reg&0xf0)>>4; LRA=reg&0x0f; SCLK_1; Drdyb1_1; Drdyb2_1; CSB1_0;//拉低CSB CSB2_0;//拉低CSB Drdyb1_0; Drdyb2_0; SCLK_0; LMP90080_WR(W_ADDRESS); //写地址开始 LMP90080_WR(URA);//写地址高位 LMP90080_WR(LRA);//写地址低位,写1个字节 LMP90080_WR(value); SCLK_0; CSB1_1; CSB2_1;}//LMP90080初始化子程序void LMP90080_Config(void){ LMP90080_WR_Reg(RESTCN,0xC3);//发送复位命令 LMP90080_WR_Reg(SPI_RESET,0x1);//SPI Reset Enabled LMP90080_WR_Reg(PWRCN,0x00);//Active Mode LMP90080_WR_Reg(ADC_AUXCN,0x70); //Selects internal clock LMP90080_WR_Reg(ADC_DONE,0x00); //Data Available LMP90080_WR_Reg(CH_STS,0x00);//通道有效 LMP90080_WR_Reg(CH_SCAN,0x98);//多通道持续转换,从CH0~CH3 LMP90080_WR_Reg(CH0_INPUTCN,0x01);//Disable Sensor Diagnostics,Select VREFP1 and VREFN1, //Positive input select:VIN0,Negative input select:VIN1 LMP90080_WR_Reg(CH1_INPUTCN,0x13);//Disable Sensor Diagnostics,Select VREFP1 and VREFN1, //Positive input select:VIN2,Negative input select:VIN3 LMP90080_WR_Reg(CH2_INPUTCN,0x25);//Disable Sensor Diagnostics,Select VREFP1 and VREFN1, //Positive input select:VIN4,Negative input select:VIN5 LMP90080_WR_Reg(CH3_INPUTCN,0x37);//Disable Sensor Diagnostics,Select VREFP1 and VREFN1, //Positive input select:VIN6,Negative input select:VIN7 LMP90080_WR_Reg(CH0_CONFIG,0X7e);//增益128,有buf LMP90080_WR_Reg(CH1_CONFIG,0X7e);//增益128,有buf LMP90080_WR_Reg(CH2_CONFIG,0X7e);//增益128,有buf LMP90080_WR_Reg(CH3_CONFIG,0X7e);//增益128,有buf LMP90080_WR_Reg(BGCALCN,0x00);//Background Calibration OFF LMP90080_WR_Reg(SCALCN,0x00);//Normal Mode LMP90080_WR_Reg(SPI_HANDSHAKECN,0x00);//CSB拉低之后,SDO is driving LMP90080_WR_Reg(SPI_STREAMCN,0x00);//Normal Streaming mode LMP90080_WR_Reg(SPI_DRDYBCN,0xa3);//D6 = DRDYB signa, Enable CRC reset on DRDYB deassertion //correct FGA gain error //LMP90080_WR_Reg(SPI_CRC_CN,0x14);//Enable CRC,DRDYB is active high after ADC_DOUTL is read. //LMP90080_WR_Reg(SPI_CRC_DAT,0x00);//Reset CRC}void LMP_port_init(void){ //SDO:PC4,SDI:PC3,SCLK:PC2,CSB1:PC0,CSB2:PC1,DRDYB1:PD2,DRDYB2:PC5 DDRC |= (1 |
|
相关推荐
1个回答
|
|
|
从您提供的代码片段来看,您正在使用LMP90080芯片,并且尝试通过模拟SPI来配置寄存器。为了帮助您排除程序问题,我将按照以下步骤进行检查:
1. 检查寄存器地址和值是否正确。 2. 检查模拟SPI配置是否正确。 3. 检查硬件连接是否正确。 步骤1:检查寄存器地址和值是否正确 从您提供的代码片段来看,寄存器地址和值如下: - RESTCN: 0x00 - SPI_RESET: 0x02 - PWRCN: 0x08 这些寄存器地址和值看起来是正确的。但是,您需要确保其他寄存器的配置也是正确的。请检查您的代码中是否还有其他寄存器配置,并确保它们的地址和值都是正确的。 步骤2:检查模拟SPI配置是否正确 模拟SPI配置需要确保以下条件满足: - 正确的时钟频率 - 正确的时钟极性和相位 - 正确的片选信号 请检查您的代码中是否正确配置了这些参数。如果您不确定如何配置,可以参考LMP90080的数据手册。 步骤3:检查硬件连接是否正确 请检查您的硬件连接是否正确,包括: - LMP90080芯片是否正确焊接在电路板上 - 电源和地线是否正确连接 - SPI接口的数据线、时钟线和片选线是否正确连接 如果以上步骤都无法解决问题,您可以尝试以下方法: 1. 使用示波器检查SPI接口的信号,确保数据和时钟信号正常。 2. 尝试使用硬件SPI接口,以排除模拟SPI配置问题。 3. 检查LMP90080芯片是否损坏,可以尝试更换芯片进行测试。 希望以上步骤能帮助您解决问题。如果您需要更多帮助,请提供更多代码和硬件连接信息。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1757浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1724浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 08:25 , Processed in 0.604787 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2165