完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
AD7190和MSP430F249通信,使用的是模拟SPI,可以配置AD7190的GPIO,万用表测量有正确的值,读出GPIO寄存器值,
可以读取ID,读取配置寄存器值,但是就是不能读出AD值,全是0。求解 /******************AD7190协议********************************* 名 称:AD7190.H 实现功能:SPI测量AD7190的数据,测量电压值 说 明:系统校准,测量电压 ***************************************************/ #ifndef _AD7190_H #define _AD7190_H #define SYNC_1 P6OUT |= BIT6 #define SYNC_0 P6OUT &= ~BIT6 #define A5SD_1 P4OUT |= BIT2 #define A5SD_0 P4OUT &= ~BIT2 #define SHUT_1 P4OUT |= BIT1 #define SHUT_0 P4OUT &= ~BIT1 #define ADCS_1 P6OUT |= BIT5 #define ADCS_0 P6OUT &= ~BIT5 #define SCLK_1 P5OUT |= BIT3 #define SCLK_0 P5OUT &= ~BIT3 #define DOUT_1 P5OUT |= BIT1 #define DOUT_0 P5OUT &= ~BIT1 #define DIN_val P5IN&BIT2 //接AD7190数据输出引脚 /******************************************* 名称:Write_AD7190 向AD7190写1个数据 参数: len 要发送的数据长度 ; buf要发送的缓冲区 说明:CS低电平,使能AD7190,发送数据 ********************************************/ void Write_AD7190(unsigned char len, unsigned char *buf) { unsigned char i,j; unsigned char TX_dat; SCLK_1 ; delay_us(10); //CLK高电平 //SYNC_1; ADCS_1 ; delay_us(10); //使能AD7190 //SYNC_0; ADCS_0 ; delay_us(10); for(i=len;i>0;i--) { TX_dat=*(buf + i - 1); for(j=0; j<8; j++) { SCLK_0; if((TX_dat&0x80)==0x80) { DOUT_1;} //Send one to SDO pin else { DOUT_0;} delay_us(10); SCLK_1; delay_us(10); TX_dat <<= 1; //Rotate d } } //SYNC_1; ADCS_1 ; //不使能 } /******************************************* 名称:Read_AD7190 读出AD7190的数据 参数: len 要发送的数据长度 ; buf要发送的缓冲区 说明:CS低电平,使能AD7190,接受数据,关闭CS ********************************************/ void Read_AD7190(unsigned char len, unsigned char *buf) { unsigned char i,j; unsigned char RX_dat=0; SCLK_1 ; delay_us(10); //CLK高电平 //SYNC_1; ADCS_1 ; delay_us(10); //使能AD7190 //SYNC_0; ADCS_0 ; delay_us(10); //while(DIN_val==1); //等待AD7190输出低电平 for(j=len; j>0; j--) { RX_dat=0; for(i=0; i<8; i++) { SCLK_0; RX_dat <<= 1; //Rotate data delay_us(10); if(DIN_val){ RX_dat |=0x01;} SCLK_1; delay_us(10); } *(buf+j-1)= RX_dat; } //SYNC_1; ADCS_1 ; } /******************************************* 名称:AD7190_Init 读出AD7190的数据 说明:配置AD7190的增益,极性,时钟,输出频率, ********************************************/ void AD7190_Init(void) { unsigned char buf[4]={0,0,0,0}; SYNC_0; SCLK_1; ADCS_1; //CS高电平 DOUT_1; //DOUT输出高电平 buf[2]=0xff;buf[1]=0xff;buf[0]=0xff; Write_AD7190(3,buf); Write_AD7190(2,buf); delay_us(800); buf[0]=0x10; Write_AD7190(1,buf); //写通信寄存器0x10,配置配置寄存器 buf[2]=0x00; //Vrl- vrl+是基准电压源 buf[1]=0x08; //配置通道 通道AIN2+ _AIN2- //08 buf[0]=0x00; //禁止激励电流,禁止基准电压检测,禁止buf缓冲区,极性,增益=1 //00 Write_AD7190(3,buf); buf[0]=0x08; Write_AD7190(1,buf); //写通信寄存器0x08,配置模式寄存器 buf[2]=0x08; //工作模式,连续工作模式,内部E4.92M晶振 08 buf[1]=0x03; //sinc4 滤波器,不校验,单周期转换 03 buf[0]=0x00; // 输出频率4.7HZ ff Write_AD7190(3,buf); //写模式寄存器, buf[0]=0x28; //GPIO设计 Write_AD7190(1,buf); //写通信寄存器0x28,配置写GPI0寄存器 buf[0]=0x3f; //使能P0,P1,P2,P3;都是高电平 0x3f Write_AD7190(1,buf); } //AD转换函数 float AD7190_Convert(void) { unsigned char buf[4]={0,0,0,0}; long Temp,T1,T2; float AD_Value=0; buf[0]=0x58; //0x58 读数据寄存器 //0x5c是连续读 Write_AD7190(1,buf); //写通信寄存器0x58,读出数据存储器 //while(DIN_val==1); Read_AD7190(3,buf); Uart0_TX_byte(buf[2]); Uart0_TX_byte(buf[1]); Uart0_TX_byte(buf[0]); T1=(long)buf[2]<<16 ; T2=(long)buf[1]<<8 ; Temp = T1+T2+buf[0]; AD_Value = (float)Temp*2.98E-4; //MV return AD_Value; } //读GPI0寄存器状态 返回结果正确 void AD7190_Read_GPIO(void) { unsigned char buf[4]={0,0,0,0}; buf[0]=0x68; //读GPIO寄存器 Write_AD7190(1,buf); Read_AD7190(1,buf); Uart0_TX_byte(buf[0]); } //读ID 返回数据是0x80 void AD7190_Read_ID(void) { unsigned char buf[4]={0,0,0,0}; buf[0]=0x60; //读设备ID Write_AD7190(1,buf); Read_AD7190(1,buf); Uart0_TX_byte(buf[0]); } //读出配置寄存器数据,用来测试,返回数据正常 void AD7190_Read_Status(void) { unsigned char buf[4]={0,0,0,0}; buf[0]=0x50; //读配置寄存器 Write_AD7190(1,buf); //write communication register 0x50 to control the progress to read configuration register Read_AD7190(3,buf); //read configuration register Uart0_TX_byte(buf[2]); Uart0_TX_byte(buf[1]); Uart0_TX_byte(buf[0]); } #endif |
|
相关推荐
2个回答
|
|
您好,您的问题已经提交给ADI相关专家,将邀请专家尽快回答您的问题。谢谢!
|
|
|
|
您好。请检查读取转换结果是否是在RDY变低后读取的。AD7190要使用RDY作为标志,读取转换结果
|
|
|
|
只有小组成员才能发言,加入小组>>
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1716 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4101 浏览 2 评论
8810 浏览 1 评论
3026 浏览 1 评论
6949 浏览 2 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1164浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1458浏览 2评论
1385浏览 2评论
1135浏览 1评论
1003浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-19 23:33 , Processed in 0.874801 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号