3067|4

5310

帖子

453

TA的资源

五彩晶圆(高级)

楼主
 

[TI首届低功耗设计大赛]+环境温,湿度采集显示 [复制链接]

[TI首届低功耗设计大赛]+环境温,湿度采集显示

1、硬件

2、实物布局
  
3、程序
直接采用TI的EUSCI库函数
//*************************************************************
//slave_address:器件地址
//reg    :寄存器
//lenght :读数据长度
//*data  :读寄存器地址
//*************************************************************
void I2C(unsigned char slave_address,unsigned char reg,unsigned char lenght,unsigned char *data)
{
        unsigned char i=0;
        //Initialize Master
                                EUSCI_B_I2C_masterInit(EUSCI_B0_BASE,
                                                       EUSCI_B_I2C_CLOCKSOURCE_SMCLK,
                                                       CS_getSMCLK(__MSP430_BASEADDRESS_PMM_FRAM__),
                                                       EUSCI_B_I2C_SET_DATA_RATE_100KBPS,
                                                       1,
                                                       EUSCI_B_I2C_NO_AUTO_STOP
                                                       );

                                //Specify slave address
                                EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE,
                                                                                        slave_address
                                                            );

                                //Set in transmit mode
                                EUSCI_B_I2C_setMode(EUSCI_B0_BASE,
                                                    EUSCI_B_I2C_TRANSMIT_MODE
                                                    );

                                //Enable I2C Module to start operations
                                EUSCI_B_I2C_enable(EUSCI_B0_BASE);

                                //Send single byte data.
                                EUSCI_B_I2C_masterSendSingleByte(EUSCI_B0_BASE,reg);

                                 //Delay until transmission completes
                                 while (EUSCI_B_I2C_isBusBusy(EUSCI_B0_BASE)) ;
                                 __delay_cycles(70000);

                                  //Send single byte data.
                                 //EUSCI_B_I2C_masterSendSingleByte(EUSCI_B0_BASE,address);

                                //Delay until transmission completes
                               //while (EUSCI_B_I2C_isBusBusy(EUSCI_B0_BASE)) ;
                                // __delay_cycles(70000);

        //接收
        //如果lenght>0,有读模式
        if(lenght>0)
        {
        EUSCI_B_I2C_masterInit(EUSCI_B0_BASE,
                               EUSCI_B_I2C_CLOCKSOURCE_SMCLK,
                               CS_getSMCLK(__MSP430_BASEADDRESS_PMM_FRAM__),
                               EUSCI_B_I2C_SET_DATA_RATE_100KBPS,
                               1,
                               EUSCI_B_I2C_SEND_STOP_AUTOMATICALLY_ON_BYTECOUNT_THRESHOLD
                               );

        //Specify slave address
        EUSCI_B_I2C_setSlaveAddress(EUSCI_B0_BASE,
                                                                slave_address
                                    );

        //Set Master in receive mode
        EUSCI_B_I2C_setMode(EUSCI_B0_BASE,
                            EUSCI_B_I2C_RECEIVE_MODE
                            );

        //Enable I2C Module to start operations
        EUSCI_B_I2C_enable(EUSCI_B0_BASE);

        EUSCI_B_I2C_clearInterruptFlag(EUSCI_B0_BASE,
                                       EUSCI_B_I2C_RECEIVE_INTERRUPT0 +
                                       EUSCI_B_I2C_BYTE_COUNTER_INTERRUPT
                                       );

        //Enable master Receive interrupt
        EUSCI_B_I2C_enableInterrupt(EUSCI_B0_BASE,
                                    EUSCI_B_I2C_RECEIVE_INTERRUPT0 +
                                    EUSCI_B_I2C_BYTE_COUNTER_INTERRUPT
                                    );


        while(i         {
                // I2C start condition
                data = EUSCI_B_I2C_masterReceiveSingleByte(EUSCI_B0_BASE);
                i++;
                __delay_cycles(70000);

        }
        }
}


float read_temp(void)
{
        unsigned char  tempdata[3];
        unsigned int uitemp=0;
        float ftemp=0.0;

        I2C(HAL_SHT21_I2C_ADDRESS,SHT21_CMD_TEMP_T_NH,2,&tempdata[0]);
    uitemp=tempdata[0];
    uitemp=(uitemp<<8)+tempdata[1];
    uitemp= uitemp & 0xfffc;

    ftemp=  (float)uitemp* 0.002681-46.85;

    return ftemp;
}

float read_humi(void)
{
        unsigned char  tempdata[3];
        unsigned int uitemp=0;
        float ftemp=0.0;

        I2C(HAL_SHT21_I2C_ADDRESS,SHT21_CMD_HUMI_T_NH,2,&tempdata[0]);
    uitemp=tempdata[0];
    uitemp=(uitemp<<8)+tempdata[1];
    uitemp= uitemp & 0xfff0;

    ftemp=  (float)uitemp* 0.001907 -6;

    return ftemp;
}


4、SPI和I2C复用,要不断的初始化端口

5、操作效果


最新回复

是啊,看你的PCB板,很有艺术欣赏价值。  详情 回复 发表于 2015-1-4 14:17

赞赏

1

查看全部赞赏

 
点赞 关注(2)

回复
举报

1万

帖子

25

TA的资源

裸片初长成(高级)

沙发
 
楼主不仅是个科学家,还是一个大艺术家!

点评

“艺术家”??  详情 回复 发表于 2015-1-4 11:06
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

板凳
 
dontium 发表于 2015-1-4 10:52
楼主不仅是个科学家,还是一个大艺术家!
“艺术家”??

点评

是啊,看你的PCB板,很有艺术特点。  详情 回复 发表于 2015-1-4 14:17
 
 
 

回复

1万

帖子

25

TA的资源

裸片初长成(高级)

4
 

是啊,看你的PCB板,很有艺术欣赏价值。

点评

呵呵,谢谢支持!  详情 回复 发表于 2015-1-4 14:34
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

5
 
dontium 发表于 2015-1-4 14:17
是啊,看你的PCB板,很有艺术欣赏价值。

呵呵,谢谢支持!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表