shouchengcheng
just do it

SHT2x系列数字温湿度传感器

SHT2x系列数字温湿度传感器

SHT2x系列和SHT1x系列相比电压范围缩小了(2.1~3.6V),同时功率明显比之前的系列要小。其它参数基本差不多。最大的区别就是传输模式了。比之前的要完善很多,支持标准的I2C了,调试起来更加顺手了。

<此处有待补充>

本着能不动手就少动手的原则,我在调试的时候用的是一个现成的程序,它是用IO口模拟I2C的。 代码如下:

前一个是头文件,后一个是函数实现。

 

 1 #ifndef I2C_HAL_H
 2 #define I2C_HAL_H
 3 //==============================================================================
 4 //    S E N S I R I O N   AG,  Laubisruetistr. 50, CH-8712 Staefa, Switzerland
 5 //==============================================================================
 6 // Project   :  SHT2x Sample Code (V1.0)
 7 // File      :  I2C_HAL.h
 8 // Author    :  MST
 9 // Controller:  NEC V850/SG3 (uPD70F3740)
10 // Compiler  :  IAR compiler for V850 (3.50A)
11 // Brief     :  I2C Hardware abstraction layer
12 //==============================================================================
13 
14 //---------- Includes ----------------------------------------------------------
15 #include "system.h"
16 
17 //---------- Defines -----------------------------------------------------------
18 //I2C ports
19 //The communication on SDA and SCL is done by switching pad direction
20 //For a low level on SCL or SDA, direction is set to output. For a high level on
21 //SCL or SDA, direction is set to input. (pull up resistor active)
22 #define SDA      PM3H_bit.no0 //SDA on I/O P38 defines direction (input=1/output=0)
23 #define SDA_CONF P3H_bit.no0  //SDA level on output direction
24 #define SCL      PM3H_bit.no1 //SCL on I/O P39 defines direction (input=1/output=0)
25 #define SCL_CONF P3H_bit.no1  //SCL level on output direction
26 
27 //---------- Enumerations ------------------------------------------------------
28 //  I2C level
29 typedef enum{
30   LOW                      = 0,
31   HIGH                     = 1,
32 }etI2cLevel;
33 
34 // I2C acknowledge
35 typedef enum{
36   ACK                      = 0,
37   NO_ACK                   = 1,
38 }etI2cAck;
39 
40 //==============================================================================
41 void I2c_Init ();
42 //==============================================================================
43 //Initializes the ports for I2C interface
44 
45 //==============================================================================
46 void I2c_StartCondition ();
47 //==============================================================================
48 // writes a start condition on I2C-bus
49 // input : -
50 // output: -
51 // return: -
52 // note  : timings (delay) may have to be changed for different microcontroller
53 //       _____
54 // SDA:       |_____
55 //       _______
56 // SCL :        |___
57 
58 //==============================================================================
59 void I2c_StopCondition ();
60 //==============================================================================
61 // writes a stop condition on I2C-bus
62 // input : -
63 // output: -
64 // return: -
65 // note  : timings (delay) may have to be changed for different microcontroller
66 //              _____
67 // SDA:   _____|
68 //            _______
69 // SCL :  ___|
70 
71 //===========================================================================
72 u8t I2c_WriteByte (u8t txByte);
73 //===========================================================================
74 // writes a byte to I2C-bus and checks acknowledge
75 // input:  txByte  transmit byte
76 // output: -
77 // return: error
78 // note: timings (delay) may have to be changed for different microcontroller
79 
80 //===========================================================================
81 u8t I2c_ReadByte (etI2cAck ack);
82 //===========================================================================
83 // reads a byte on I2C-bus
84 // input:  rxByte  receive byte
85 // output: rxByte
86 // note: timings (delay) may have to be changed for different microcontroller
87 
88 #endif
 1 //==============================================================================
 2 //    S E N S I R I O N   AG,  Laubisruetistr. 50, CH-8712 Staefa, Switzerland
 3 //==============================================================================
 4 // Project   :  SHT2x Sample Code (V1.0)
 5 // File      :  I2C_HAL.c
 6 // Author    :  MST
 7 // Controller:  NEC V850/SG3 (uPD70F3740)
 8 // Compiler  :  IAR compiler for V850 (3.50A)
 9 // Brief     :  I2C Hardware abstraction layer
10 //==============================================================================
11 
12 //---------- Includes ----------------------------------------------------------
13 #include "I2C_HAL.h"
14 
15 //==============================================================================
16 void I2c_Init ()
17 //==============================================================================
18 {
19   SDA=LOW;                // Set port as output for configuration
20   SCL=LOW;                // Set port as output for configuration
21 
22   SDA_CONF=LOW;           // Set SDA level as low for output mode
23   SCL_CONF=LOW;           // Set SCL level as low for output mode
24 
25   SDA=HIGH;               // I2C-bus idle mode SDA released (input)
26   SCL=HIGH;               // I2C-bus idle mode SCL released (input)
27 }
28 
29 //==============================================================================
30 void I2c_StartCondition ()
31 //==============================================================================
32 {
33   SDA=HIGH;
34   SCL=HIGH;
35 
36   SDA=LOW;
37   DelayMicroSeconds(10);  // hold time start condition (t_HD;STA)
38   SCL=LOW;
39   DelayMicroSeconds(10);
40 }
41 
42 //==============================================================================
43 void I2c_StopCondition ()
44 //==============================================================================
45 {
46   SDA=LOW;
47   SCL=LOW;
48   SCL=HIGH;
49   DelayMicroSeconds(10);  // set-up time stop condition (t_SU;STO)
50   SDA=HIGH;
51   DelayMicroSeconds(10);
52 }
53 
54 //==============================================================================
55 u8t I2c_WriteByte (u8t txByte)
56 //==============================================================================
57 {
58   u8t mask,error=0;
59   for (mask=0x80; mask>0; mask>>=1)   //shift bit for masking (8 times)
60   { if ((mask & txByte) == 0) SDA=LOW;//masking txByte, write bit to SDA-Line
61     else SDA=HIGH;
62     DelayMicroSeconds(1);             //data set-up time (t_SU;DAT)
63     SCL=HIGH;                         //generate clock pulse on SCL
64     DelayMicroSeconds(5);             //SCL high time (t_HIGH)
65     SCL=LOW;
66     DelayMicroSeconds(1);             //data hold time(t_HD;DAT)
67   }
68   SDA=HIGH;                           //release SDA-line
69   SCL=HIGH;                           //clk #9 for ack
70   DelayMicroSeconds(1);               //data set-up time (t_SU;DAT)
71   if(SDA_CONF==HIGH) error=ACK_ERROR; //check ack from i2c slave
72   SCL=LOW;
73   DelayMicroSeconds(20);              //wait time to see byte package on scope
74   return error;                       //return error code
75 }
76 
77 //==============================================================================
78 u8t I2c_ReadByte (etI2cAck ack)
79 //==============================================================================
80 {
81   u8t mask,rxByte=0;
82   SDA=HIGH;                           //release SDA-line
83   for (mask=0x80; mask>0; mask>>=1)   //shift bit for masking (8 times)
84   { SCL=HIGH;                         //start clock on SCL-line
85     DelayMicroSeconds(1);             //data set-up time (t_SU;DAT)
86     DelayMicroSeconds(3);             //SCL high time (t_HIGH)
87     if (SDA_CONF==1) rxByte=(rxByte | mask); //read bit
88     SCL=LOW;
89     DelayMicroSeconds(1);             //data hold time(t_HD;DAT)
90   }
91   SDA=ack;                            //send acknowledge if necessary
92   DelayMicroSeconds(1);               //data set-up time (t_SU;DAT)
93   SCL=HIGH;                           //clk #9 for ack
94   DelayMicroSeconds(5);               //SCL high time (t_HIGH)
95   SCL=LOW;
96   SDA=HIGH;                           //release SDA-line
97   DelayMicroSeconds(20);              //wait time to see byte package on scope
98   return rxByte;                      //return error code
99 }

 

posted on 2014-01-02 17:03  shouchengcheng  阅读(1602)  评论(0编辑  收藏  举报