完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
ADS1110的使用 ADS1110 是ti推出的16位AD器件,是为了将低功耗与空间作为首要考虑因素的高精度测量系统设计的 ADS1110采用I2C方式与MCU相连,与MCU的连接图如下 ADS1110的读写时序如下 ADS1110的驱动程序如下 # include# define uch unsigned char# define unint unsigned int# define SDA RD1# define SCL RD0uch ACK;unint j;void delay() //延时{for(j=5535;--j;) continue;}void start (void) //开始{ TRISD0=0; TRISD1=0; SDA=1; asm("nop"); SCL=1; asm("nop"); asm("nop"); asm("nop"); SDA=0; asm("nop"); asm("nop"); asm("nop"); SCL=0; asm("nop"); asm("nop");}void stop(void) //结束 { TRISD0=0; TRISD1=0; SDA=0; asm("nop"); SCL=1; asm("nop"); asm("nop"); asm("nop"); SDA=1; asm("nop"); asm("nop"); asm("nop"); SCL=0; asm("nop"); asm("nop"); } uch check(void) // 检查应答信号 { TRISD1=1; SCL=0; SCL=1; if (SDA ) { ACK = 1; } else { ACK = 0; } SCL=0; return(ACK); } void sendBYTE(uch data) // 发送一个字节{ uch bitcount=8; //发送8位 do { TRISD0=0; TRISD1=0; //置输出 if((data&0x80)==0x80) { SDA=1; //写 1 } else { SDA=0; //写 0 } SCL=0; //在时钟大于4u秒期间写数据 SCL=1; asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); SCL=0; data=data<<1; bitcount--; } while(bitcount); TRISD1=1 ; //释放总线等待应答 asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); } uch reciveBYTE(void) //接受一个字节 { uch temp1=0; uch bitcount1=8; TRISD0=0; TRISD1=1; //置输入 do { SCL=0; //在时钟大于4u秒期间读数据 SCL=1; asm("nop"); asm("nop"); if(SDA) //读 1 { temp1=temp1|0x01; } else //读 0 { temp1=temp1&0xfe; } SCL=0; if(bitcount1-1) { temp1=temp1<<1; } bitcount1--; }while(bitcount1); return(temp1); } void ack(void) // 发送连续读信号{ TRISD0=0; TRISD1=0; SDA=0; SCL=0; SCL=1; asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); SCL=0;} void nack(void) // 发送不连续读信号 { TRISD0=0; TRISD1=0; SDA=1; SCL=0; SCL=1; asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); SCL=0; } void wrtoIIC(uch data) //写器件地址和配置字 { start(); //开始写 sendBYTE(0x90); //写器件地址(写) do{ ; }while(check()); //等待应答 sendBYTE(data); //写配置字 do{; }while(check()); stop(); //结束写 } void rdfromIIC(void) //从ADS1100中读出数据{ start(); //开始读 sendBYTE(0x91); //写器件地址(读) do{ ; }while(check()); //等待应答 TMR1H=reciveBYTE(); // 读高8位 ack(); //连续读 TMR1L=reciveBYTE(); //读低8位 ack(); //连续读 TMR2=reciveBYTE(); //读配置字 nack(); stop(); //结束读 // delay(); } main(){ while(1) { di(); wrtoIIC( 0x8c); rdfromIIC(); }} |
|
相关推荐
2个回答
|
|
|
使用中要注意,ADS1110的满量程为2.048V,超过就输出0xff了
|
|
|
|
|
|
看起来您正在分享关于ADS1110的代码和信息,但是您的信息不完整。ADS1110是一款16位模数转换器(ADC),广泛用于需要高精度测量的系统中。它通过I2C接口与微控制器(MCU)通信。以下是一些基本的步骤和代码示例,用于初始化和读取ADS1110的数据:
1. **定义宏和变量**: ```c #include #define uchar unsigned char #define uint unsigned int #define SDA RD1 // 定义数据线 #define SCL RD0 // 定义时钟线 uchar ACK; uint j; ``` 2. **延时函数**: ```c void delay() { for(j=5535; --j;) continue; } ``` 3. **启动I2C通信**: ```c void start(void) { TRISD0 = 0; // 设置SCL为输出 TRISD1 = 0; // 设置SDA为输出 SDA = 1; SCL = 1; delay(); SDA = 0; // 启动信号 delay(); SCL = 0; // 保持时钟线低 } ``` 4. **停止I2C通信**: ```c void stop(void) { SDA = 0; SCL = 1; delay(); SDA = 1; delay(); } ``` 5. **发送一个字节**: ```c void send_byte(uchar dat) { uchar i; for(i = 0; i < 8; i++) { SDA = (dat & 0x80) >> 7; dat <<= 1; SCL = 1; delay(); SCL = 0; delay(); } SDA = 1; // 释放数据线,准备接收应答位 SCL = 1; delay(); SCL = 0; ACK = SDA; // 读取应答位 } ``` 6. **读取一个字节**: ```c uchar read_byte() { uchar i, dat = 0; for(i = 0; i < 8; i++) { SCL = 1; delay(); dat = (dat << 1) | SDA; SCL = 0; delay(); } SDA = 0; // 发送应答位 SCL = 1; delay(); SCL = 0; return dat; } ``` 7. **读取ADS1110的数据**: ```c uint read_ads1110() { uchar config, low, high; uint result; start(); // 发送开始信号 send_byte(0x48 << 1); // 发送设备地址和写命令 send_byte(0x01); // 配置寄存器地址 send_byte(0x85); // 配置寄存器值(单次转换,增益1,12位分辨率) stop(); // 发送停止信号 start(); // 再次发送开始信号 send_byte(0x48 << 1 | 1); // 发送设备地址和读命令 send_byte(0x00); // 读取数据寄存器地址 low = read_byte(); // 读取低字节 high = read_byte(); // 读取高字节 stop(); // 发送停止信号 result = (high << 8) | low; // 组合高低字节 return result; } ``` 请注意,这些代码示例需要根据您的具体硬件配置和编译器进行调整。如果您有更具体的问题或需要进一步的帮助,请提供更多的信息。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
607 浏览 0 评论
1660 浏览 0 评论
2102 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1550 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1398 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1800浏览 29评论
2827浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1753浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1671浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1686浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-18 01:57 , Processed in 0.844087 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5276