1.前言
最近做项目需要,设计的板子面积较小 所有找了一款贴片式的SOT23-6封装的温度传感器 就是TMP100,这个传感器温度精度一般,功耗很低
具体参数如下图:
2.IIC通讯指令
(1)通过硬件管脚选择从地址命令
(2)IIC命令时序分配
(3)IIC的写指令
(4)IIC读指令
3.温度计算方式
温度寄存器和温度计算方法
对应的温度值的计算方式如下: 温度值= T11×27 + T10×26 +T9×25 +T8×24+T7×23+T6×22+T5×21+ T4×20+T3×2-1+T2×2-2+T1×2-3+T0×2-4
根据不同的分辨率设置,对应的有效位不同: 1) 12 Bits 位精度时,有效位为T11~T0,最低位为T0,故分辨率为2-4=0.0625
2) 11 Bits RESOLUTION时,有效位为T11~T1,最低位为T1,故分辨率为2-3=0.125
3) 10 Bits RESOLUTION时,有效位为T11~T2,最低位为T2,故分辨率为2-2=0. 25
4) 9 Bits RESOLUTION时,有效位为T11~T3,最低位为T3,故分辨率为2-1=0.5
4.功耗
5.程序调试
void delay(unsigned char x) { unsigned int i; for(i=0;i<x;i++); _nop_(); } void IIC_init() { scl=1; nop(); sda=1; nop(); } void start() { sda=1; nop(); scl=1; nop(); sda=0; nop(); scl=0; nop(); } void stop() { sda=0; nop(); scl=1; nop(); sda=1; nop(); } void writex(unsigned char j) { unsigned char i,temp; temp=j; for (i=0;i<8;i++){ temp=temp<<1; scl=0; nop(); sda=CY; nop(); scl=1; nop(); } scl=0; nop(); sda=1; nop(); } void T_Ack() { scl=1; nop(); scl=0; nop(); } void S_Ack() { sda=0; nop(); scl=1; nop(); scl=0; nop(); } void N_Ack() { sda=1; nop(); scl=1; nop(); scl=0; nop(); } void IIC_read(unsigned char address) { unsigned char x,j; start(); writex(0x90); //器件地址,写入 T_Ack(); writex(address); //寄存器地址 T_Ack(); start(); writex(0x91); //器件地址,读出 T_Ack(); for(j=0;j<2;j++) { sda=1; nop(); for (x=0;x<8;x++) { scl=1; nop(); if (sda==1) tmp[j]=(tmp[j]<<1)+1; scl=0; nop(); } if(j==0) S_Ack(); else N_Ack(); } stop(); delay(10); } void IIC_write(unsigned char address,unsigned char info) { start(); writex(0x90); //器件地址 T_Ack(); writex(address); //寄存器地址 T_Ack(); writex(info); N_Ack(); stop(); delay(50); } void delay_ms(unsigned char n) { unsigned int i,j; for(i=n;i>0;i–) for(j=0;j<110;j++) ; } main () { unsigned char c=0; IIC_init(); IIC_write(0x01,0x00);//配置tmp100,精度为0.5,温度连续转换, while(1) { IIC_read(0x00); for(c=0;c<5;c++) { display(tmp[0]); } } }>
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:低功耗温度芯片TMP100调试记录 https://www.yhzz.com.cn/a/11737.html