完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们公司用ADS1242芯片,现在做了一个实验板,ADS1242芯片5V供电,参考电压是2.5V,遇到一个问题,AD输出值一直是65535,不会变,不知道是怎么回事,请大家帮忙指导一下!!!
|
|
相关推荐
6 个讨论
|
|
你好! Van Yang 我试验了,可以正确的读写寄存器,我用的51单片机,AIN0接的可调电阻,最大电压5V,MUX设置为0x08,按我的理解这样是单通道通道0,我调试了一周了,一直没出来,希望能帮帮我,下面是我的程序。 ADS1242.h #ifndef __ADS1242_H__ #define __ADS1242_H__ #include #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define _Nop() _nop_() //定义空指令 /*定义ADS1242的寄存器地址 */ #define ADS1242_SETUP 0x00 #define ADS1242_MUX 0x01 #define ADS1242_ACR 0x02 #define ADS1242_ODAC 0x03 #define ADS1242_DIO 0x04 #define ADS1242_DIR 0x05 #define ADS1242_IOCON 0x06 #define ADS1242_OCR0 0x07 #define ADS1242_OCR1 0x08 #define ADS1242_OCR2 0x09 #define ADS1242_FSR0 0x0a #define ADS1242_FSR1 0x0b #define ADS1242_FSR2 0x0c #define ADS1242_DOR2 0x0d #define ADS1242_DOR1 0x0e #define ADS1242_DOR0 0x0f /*定义ADS1242的寄存器地址 */ #define ADS1242_CMD_RDATA 0x01 #define ADS1242_CMD_RDATAC 0x03 #define ADS1242_CMD_STOPC 0x0f #define ADS1242_CMD_RREG 0x10 #define ADS1242_CMD_WREG 0x50 #define ADS1242_CMD_SELFCAL 0xf0 #define ADS1242_CMD_SELFOCAL 0xf1 #define ADS1242_CMD_SELFGCAL 0xf2 #define ADS1242_CMD_SYSOCAL 0xf3 #define ADS1242_CMD_SYSGCAL 0xf4 #define ADS1242_CMD_WAKEUP 0xfb #define ADS1242_CMD_DSYNC 0xfc #define ADS1242_CMD_SLEEP 0xfd #define ADS1242_CMD_RESET 0xfe /*配置寄存器位*/ #define BUFFER_ON (1<<4) /*ACR寄存器BUFFER启用*/ #define BUFFER_OFF (0<<4) /*ACR寄存器BUFFER不用*/ #define RANGE_0 (0<<2) /*配置ACR寄存器的RANGE位为0*/ #define RANGE_1 (1<<2) /*配置ACR寄存器的RANGE位为1*/ #define SPEED_0 (0<<5) /**/ #define SPEED_1 (1<<5) #define DATARATE_3_75 (0x02) /*配置ACR寄存器的Data Rate为3.75HZ*/ #define DATARATE_7_5 (0x01) /*配置ACR寄存器的Data Rate为7.5HZ*/ #define DATARATE_15 (0x00) /*配置ACR寄存器的Data Rate为15HZ*/ #define PGA_1 (0x00) /*配置SETUP寄存器的PGA为1 */ #define PGA_2 (0x01) /*配置SETUP寄存器的PGA为2 */ #define PGA_4 (0x02) /*配置SETUP寄存器的PGA为4 */ #define PGA_8 (0x03) /*配置SETUP寄存器的PGA为8 */ #define PGA_16 (0x04) /*配置SETUP寄存器的PGA为16 */ #define PGA_32 (0x05) /*配置SETUP寄存器的PGA为32 */ #define PGA_64 (0x06) /*配置SETUP寄存器的PGA为64 */ #define PGA_128 (0x07) /*配置SETUP寄存器的PGA为128 */ /*定义IO口*/ ***it IO_PDWN= P1^0; ***it IO_DRDY= P1^1; ***it IO_SCLK= P1^2; ***it IO_DOUT= P1^3; ***it IO_DIN= P1^4; ***it IO_CS= P1^5; void ADS1242Init(); /*写一个字节的数据 */ void WriteByte(uchar Dat); /*读一个字节的数据 */ uchar ReadByte(); /*写寄存器 */ void WriteReg(uchar RegAdd,uchar RegDat); /*读寄存器 */ uchar ReadReg(uchar RegAdd); /*选择AD通道 */ void SelectChannel(uchar PosChannel,uchar NegChannel); /*等待AD转换完成 */ void WaitADConComplete(); /*从DOR寄存器读取转换结果 */ ulong ReadDataFromDOR(uchar PosChannel,uchar NegChannel); /*上电自校正*/ void SelfCalibrate(); /*供主程序调用*/ ulong ADS1242Convert(uchar PosChannel,uchar NegChannel); #endif ADS1242.C #include "ads1242.h" #include "delay.h" void ADS1242Init() [ IO_PDWN = 1; IO_DOUT = 0; ] /*写一个字节的数据 */ void WriteByte(uchar Dat) [ uchar i; IO_CS = 0; IO_SCLK = 0; _nop_(); for(i=0;i<8;i++) [ Dat = Dat<<1; IO_DIN = CY; IO_SCLK = 1; _nop_(); _nop_(); IO_SCLK = 0; _nop_(); ] IO_CS = 1; ] /*读一个字节的数据 */ uchar ReadByte() [ uchar i,RDat; RDat = 0; IO_CS = 0; IO_SCLK = 0; _nop_(); for(i=0;i<8;i++) [ IO_SCLK = 1; _nop_(); RDat = (RDat<<1)|IO_DOUT; IO_SCLK = 0; _nop_(); _nop_(); // DelayUs2x(2); ] IO_CS = 1; return RDat; ] /*写寄存器 */ void WriteReg(uchar RegAdd,uchar RegDat) /*寄存器地址,写入数据*/ [ WriteByte(ADS1242_CMD_WREG + RegAdd); /*写寄存器命令+寄存器地址*/ WriteByte(0x00); WriteByte(RegDat); ] /*读寄存器 */ uchar ReadReg(uchar RegAdd) /*寄存器地址 */ [ WriteByte(ADS1242_CMD_RREG + RegAdd); /*读寄存器命令+寄存器地址*/ WriteByte(0x00); return (ReadByte()); ] /*选择AD通道 */ void SelectChannel(uchar PosChannel,uchar NegChannel) /*正向通道,负向通道*/ [ WriteReg(ADS1242_MUX,((PosChannel<<4)+NegChannel)); ] /*等待AD转换完成 */ void WaitADConComplete() [ IO_CS = 0; while(!IO_DRDY); /*DRDY为0表示转换完成*/ while(IO_DRDY); IO_CS = 1; ] /*从DOR寄存器读取转换结果 */ ulong ReadDataFromDOR(uchar PosChannel,uchar NegChannel) /*正负通道号*/ [ ulong temp; uchar i; IO_CS = 0; SelectChannel(PosChannel,NegChannel); /*选择通道*/ WriteByte(0x01); /*发送读数据命令*/ IO_CS = 0; DelayMs(1); /*发送读数据命令*/ temp = ReadByte(); temp = (temp << 8) | ReadByte(); temp = (temp << 8) | ReadByte(); IO_CS = 1; return temp; ] /*上电自校正*/ void SelfCalibrate() [ IO_PDWN = 1; WriteByte(ADS1242_CMD_RESET); WriteReg(ADS1242_SETUP,PGA_1); WriteReg(ADS1242_ACR,BUFFER_OFF + RANGE_0 + DATARATE_3_75); /*配置ACR寄存器*/ WriteReg(ADS1242_SETUP,PGA_1); WriteReg(ADS1242_ODAC,0x00); /*上电自校正*/ IO_CS = 0; while(IO_DRDY); /*等待校正完成*/ IO_CS = 1; WriteReg(ADS1242_ACR,BUFFER_ON + RANGE_0 + DATARATE_3_75); /*配置ACR寄存器*/ ] /*供主程序调用*/ ulong ADS1242Convert(uchar PosChannel,uchar NegChannel) [ ulong temp; ADS1242Init(); SelfCalibrate(); temp = ReadDataFromDOR(PosChannel,NegChannel); temp = ReadDataFromDOR(PosChannel,NegChannel); /*取第二个数据*/ return temp; ] |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
313 浏览 1 评论
517 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
757 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
643 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1114 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
226浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
181浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
46浏览 13评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
149浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
160浏览 12评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 01:06 , Processed in 0.888273 second(s), Total 54, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号