W800 The T/H sensor on the development board is abnormal

Publish in 2022-04-14 17: 38: 03

Use IIC Reading data from the temperature and humidity sensor, The read data is abnormal, The temperature and humidity value is not correct.
Follow the sensor manual provided by your company:
image. png
Read data, Logic analyzer display, IIC The transmission is fine.
Write in 0x00:
image. png

delay 20ms:
image. png

read 0x00 Register data:
image. png

The code is as follows:
image. png

The data read from the register is all wrong. . . . . After the conversion, this is the data, wrong:
image. png

See more

follower
0
Be viewed
2. 7k
3 Multiple replies
isme
isme Certified specialist 2022-04-15
Chilled big watermelon

I got a new drive, The board itself is heating up, Perhaps the hardware accuracy itself is not very good.

/***************************************************************************** 
* 
* File Name :  main. c
* 
* Description:  main 
* 
* Copyright  (c)  2014 Winner Micro Electronic Design Co. ,  Ltd.  
* All rights reserved.  
* 
* Author :  dave
* 
* Date :  2014-6-14
*****************************************************************************/ 
#include "wm_include. h"
#include "wm_i2c. h"
#include "stdio. h"
#include "wm_gpio_afsel. h"

#define I2C_FREQ         (5000) 
#define I2C_ADDR         (0x80) 

u8 buf[4]; 

void cht8305_iic_init (void) 
{
    wm_i2c_scl_config (WM_IO_PA_01) ; 
    wm_i2c_sda_config (WM_IO_PA_04) ; 
    
    tls_i2c_init (I2C_FREQ) ; 
}
 
void cht8305_read_reg (u8 reg_addr, u8 len) 
{
    tls_i2c_write_byte (I2C_ADDR,  1) ;  
    tls_i2c_wait_ack () ;     
    tls_i2c_write_byte (reg_addr,  0) ; 
    tls_i2c_wait_ack () ;     
    if  (reg_addr == 0x00 || reg_addr == 0x01) 
    {
        tls_os_time_delay (5) ;  // 10ms delay
    }
    tls_i2c_write_byte (I2C_ADDR|0x01, 1) ;    

    for  (int i = 0;  i  " len-1;  i++)  {
        buf[i] = tls_i2c_read_byte (1, 0) ; 
    }

    buf[len - 1] = tls_i2c_read_byte (0,  1) ;  //Give NACK
}
void cht8305_get_temp_humi (float *t,  float *h) 
{
    cht8305_read_reg (0x00,  4) ; 
    unsigned int th,  tl,  hh,  hl; 
    th = buf[0]; 
    tl = buf[1]; 
    hh = buf[2]; 
    hl = buf[3]; 
     (*t)  =  (th  " " 8 | tl)  * 165. 0 / 65535. 0 - 40. 0; 
     (*h)  =  (hh  " " 8 | hl)  * 100. 0 / 65535. 0; 
}

void UserMain (void) 
{
    printf ("\n user task \n") ; 
    cht8305_iic_init () ; 
    float  ct8305_temp ; 
    float  ct8305_humi; 
    while (1) 
    {
        cht8305_get_temp_humi (&ct8305_temp, &ct8305_humi) ; 
        printf ("upload_hygrotherm ct8305_temp %f, ct8305_humi %f\r\n", ct8305_temp, ct8305_humi) ; 
        tls_os_time_delay (100) ;  // delay 200ms
    }

#if DEMO_CONSOLE
    CreateDemoTask () ; 
#endif
//user-owned task
}

image. png
image. png

Mrzhao
Mrzhao Certified specialist 2022-04-15
An embedded enthusiast. CSDN Home page: https: //blog. csdn. net/qq_37280428? spm=1011. 2415. 3001. 5343

It has been concluded that there is a hardware problem.

Dashin
Dashin Certified specialist 2022-04-15
Hardware development, Software development, System development, Engineering framework, Scheme design

This temperature sensor, We need an isolation slot around the board, And try to stay away from the processor

Write an answer

Please login to post your answer, Click to log in

publish
problem

Share
Friend

Cell phone
browse

Scan code mobile browsing