W800 Аномалия данных с датчиков тепловлажности на планшетах разработки

выпустить 2022-04-14 17: 38: 03

использова IIC Считывая данные с сенсоров температуры влажности, Это аномалия данных, Не совсем верное значение тепловлажности.
В соответствии с инструкцией по сенсорам, предоставленной вашей компанией:
image. png
Считывание данных, Логический анализатор показал это, IIC Передача в порядке.
в 0x00:
image. png

задержк 20ms:
image. png

чтен 0x00 Данные в регистре:
image. png

Код следующий:
image. png

Данные из регистра неверны. . . . . После трансформации вот такие данные, неправильн:
image. png

Проверь еще

Наблюдатель
0
Просмотри
2. 7k
3 Ответь
isme
isme Сертифицированный эксперт 2022-04-15
Ледяные арбузы

У меня новый водитель, У доски тоже есть проблемы с отоплением, Возможно, сама по себе точность оборудования не очень хорошая.

/***************************************************************************** 
* 
* 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
//Собственный пользователь task
}

image. png
image. png

Mrzhao
Mrzhao Сертифицированный эксперт 2022-04-15
Вставной любитель. CSDN страниц: https: //blog. csdn. net/qq_37280428? spm=1011. 2415. 3001. 5343

Мы пришли к выводу, что с оборудованием что-то не так.

Больш письм
Больш письм Сертифицированный эксперт 2022-04-15
Разработка оборудования, Разработка программного обеспечения, Разработка системы, Инженерная архитектура, Проект программы

Датчик температуры, Нужно открыть изолятор вокруг доски, И как можно дальше от процессора

Писать ответы

Пожалуйста, введите ответ после входа, Нажми на логин

опубликова
вопросы

подел
Приятель

телефон
просматрива

Просканируй телефон