请教,利用PIC做一个利用I2C通信读取温度传感器的数据。

[复制链接]
2908|22
手机看帖
扫描二维码
随时随地手机跟帖
蝙蝠侠|  楼主 | 2016-9-26 17:03 | 显示全部楼层 |阅读模式
目前我手上有PIC1824,想用这块单片机做一个检测温度的功能,利用I2C读取温度传感器的数据。
现在还是个单片机苦手,想请教大家有什么思路。
JY-DX-JY| | 2016-9-26 18:20 | 显示全部楼层
找个I2C接口的温度传感器,网上找驱动程序。

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-9-27 09:04 | 显示全部楼层
JY-DX-JY 发表于 2016-9-26 18:20
找个I2C接口的温度传感器,网上找驱动程序。

谢谢!
用的就是带I2C的温度传感器。
驱动是通用的吗? 驱动也是在单片机上做的吗?

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-9-27 09:07 | 显示全部楼层
JY-DX-JY 发表于 2016-9-26 18:20
找个I2C接口的温度传感器,网上找驱动程序。

好像有点头绪了  你说的驱动其实就是做那些I2C应答,等待信号等的函数对吧?

使用特权

评论回复
ningling_21| | 2016-9-27 09:39 | 显示全部楼层
蝙蝠侠 发表于 2016-9-27 09:07
好像有点头绪了  你说的驱动其实就是做那些I2C应答,等待信号等的函数对吧? ...

驱动包括 读写该传感器数据寄存器的所有函数

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-9-27 09:43 | 显示全部楼层
ningling_21 发表于 2016-9-27 09:39
驱动包括 读写该传感器数据寄存器的所有函数

谢谢!!
正在开始尝试!!

使用特权

评论回复
JY-DX-JY| | 2016-9-27 10:43 | 显示全部楼层
蝙蝠侠 发表于 2016-9-27 09:04
谢谢!
用的就是带I2C的温度传感器。
驱动是通用的吗? 驱动也是在单片机上做的吗? ...

不通用,是在单片机上做的。

使用特权

评论回复
JY-DX-JY| | 2016-9-27 10:43 | 显示全部楼层
蝙蝠侠 发表于 2016-9-27 09:07
好像有点头绪了  你说的驱动其实就是做那些I2C应答,等待信号等的函数对吧? ...

不光这些,还有读写

使用特权

评论回复
zhang546208401| | 2016-9-27 11:09 | 显示全部楼层
很好写,读取地址写对就行,别的都是I2C时序

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-9-27 11:37 | 显示全部楼层
zhang546208401 发表于 2016-9-27 11:09
很好写,读取地址写对就行,别的都是I2C时序

你好,I2C时序的部分已经有了,传感器的I2C驱动也写了个大概。
因为我用的是PIC16F1824这块芯片。
想请教你,现在想让单片机去读取温度传感器的数据,是不是首先要知道他们各自的从设备地址?

使用特权

评论回复
zhang546208401| | 2016-9-27 14:39 | 显示全部楼层
恩,是的,你用的温度IC Datasheet 里面都有描述。

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-9-28 11:16 | 显示全部楼层
zhang546208401 发表于 2016-9-27 14:39
恩,是的,你用的温度IC Datasheet 里面都有描述。

你好,我想问一下有什么方法可以测试我写的驱动是否可以工作,我现在写了一块时钟芯片i2c的驱动,用的是pic1824,编译通过了,但我不知道怎么确定它是否工作了。

现在在实验室,有示波器什么的,可以用这些配合代码测试吗?

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-9-28 11:19 | 显示全部楼层
这是我用的带I2C的 时钟芯片。

HYM8563-CN-I2C实时时钟、日历芯片钟.pdf

365.83 KB

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-9-28 11:26 | 显示全部楼层
uchar HYM8563_Write_OneByte1(uchar addr,uchar data)
{
        IIC_Start();                                //产生IIC起始信号
        IIC_Send_Byte(0XA2);                   //发送写命令    // 0xA2 写地址                  0xA3 读地址  
        if(IIC_Wait_Ack())return 1;        //等待应答信号到来
        IIC_Send_Byte(addr);                   //发送地址                //寻寄存器地址
        if(IIC_Wait_Ack())return 1;        //等待应答信号到来
        IIC_Send_Byte(data);            //发送字节                //配置寄存器
        if(IIC_Wait_Ack())return 1;        //等待应答信号到来
          IIC_Stop();                                        //产生一个停止条件
        return 0;
}


uchar HYM8563_Write_OneByte(uchar N, uchar addr,uchar data)
{
        uchar res = 1;
        CLI
        while(res&&(--N))
        {
                res = HYM8563_Write_OneByte1(addr, data);
        }
        SEI
        return (res);
}


这是配置成主控向被控器件写数据。

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-9-28 15:42 | 显示全部楼层
自顶:)

使用特权

评论回复
zhang546208401| | 2016-9-28 16:31 | 显示全部楼层
蝙蝠侠 发表于 2016-9-28 11:16
你好,我想问一下有什么方法可以测试我写的驱动是否可以工作,我现在写了一块时钟芯片i2c的驱动,用的是p ...

示波器也可以,最好是逻辑分析仪(设置好很方便,不用示波器一点点读),读SDA,SCL信号,和你想要的时序对上就行。

使用特权

评论回复
yqdeso| | 2016-10-5 12:43 | 显示全部楼层
精度要是要求不高,可以用1824的内部温度。要求高就做校准吧,要是再高就外部吧,哈哈!

使用特权

评论回复
蝙蝠侠|  楼主 | 2016-10-8 09:59 | 显示全部楼层
yqdeso 发表于 2016-10-5 12:43
精度要是要求不高,可以用1824的内部温度。要求高就做校准吧,要是再高就外部吧,哈哈! ...

请问有1824内部温度检测的例程吗?

使用特权

评论回复
michaellengleng| | 2016-10-8 18:08 | 显示全部楼层

使用特权

评论回复
子丑IVY| | 2017-8-24 22:30 | 显示全部楼层
蝙蝠侠 发表于 2016-9-28 11:26
这是配置成主控向被控器件写数据。

这是STM32 的程序吧 跟PIC的好像不一样诶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

51

帖子

0

粉丝