Autor Tema: Reemplazar DHT22 por sht35 librería?  (Leído 1842 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Cesareus01

  • PIC10
  • *
  • Mensajes: 8
Reemplazar DHT22 por sht35 librería?
« en: 19 de Junio de 2021, 20:07:37 »
Hola, mi primera vez con i2c y la verdad se me quemaron los papeles, no solo no encuentro librerías para el sht35 para ccs sino que tengo problemas al emular mi código en proteus con un sht11 o 15 con un par de librerías que encontré (http://robotypic.blogspot.com/2013/09/Libreria-C-para-SHT11.html) y necesito tener un aparatejo que ya tengo listo con un 16f886. Alguien me puede dar una mano? :(. uso el PIC-C y proteus 8. arranque de mi programa:

#include <main.h>
#include <lcd.c>
#include <SHTxx_RyP.c>

#define INTRAC PIN_C6
#define LUZ PIN_C7
#define CALOR PIN_C5
#define FRIO PIN_C1
#define HUMEDAD PIN_C0
#define BLIGHT PIN_A1 //PORTA RA1
#define SET PIN_A2 //PORTA RA2
#define MAS PIN_A3 //PORTA RA3
#define MENOS PIN_A4 //PORTA RA4
#define BLLCD PIN_C2 //luz backlight
#use i2c(master, sda=PIN_C4, scl=PIN_C3, slow)
#use STANDARD_IO(C)
#use STANDARD_IO(A)
#use FIXED_IO( B_outputs=PIN_B3 )

#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Reemplazar DHT22 por sht35 librería?
« Respuesta #1 en: 21 de Junio de 2021, 06:12:57 »
Esa libreria no hace uso del I2C ....

El tema del Arduino y que la mayoria quiere hacer librerias para todos, es que no usan los modulos que les provee el micro..

Citar
mi primera vez con i2c y la verdad se me quemaron los papeles,

Correctamente cual es tu problema? Porque hasta ahora decis que no encontraste libreria... Pero no trataste de ver como funciona el I2C?


Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 112
Re:Reemplazar DHT22 por sht35 librería?
« Respuesta #2 en: 21 de Junio de 2021, 06:51:07 »
Hola, si no tienes tiempo o puedes hacer librerias puedes usar el sensor de humedad y temperatura
dht22 humidity +-2%RH(Max +-5%RH); temperature <+-0.5Celsius
sht35 accuracy of  1.5 % RH and  0.2 °C
con un poco menos preciso pero con la ventaja de haber libreria para ccs y poder simular en proteus   :)
"La curiosidad mato al gato, pero murio sabiendo"

Desconectado Cesareus01

  • PIC10
  • *
  • Mensajes: 8
Re:Reemplazar DHT22 por sht35 librería?
« Respuesta #3 en: 21 de Junio de 2021, 10:25:51 »
Hola, ya tengo implementado el DHT22 en el circuito , pero satura arriba de 90% de humedad y tarda bastante en bajar, no solo es una cuestión de resolución :?, el sht35 tiene una curva a la temperatura que trabajo más suave, ya lo probe en arduino y funciona 100 veces mejor. Sería interesante hacer un par de librerías entre todos para la nueva linea de Sensirion para ccs, seguramente sería de mucha ayuda para todos los que seguimos programando en este lenguaje. Ya me voy a poner a ver algo más de I2C y un poco más a fondo el funcionamiento de este sensor. Por el momento seguire con el DHT22, empezare un proyecto nuevo con el sht35 en arduino y empezaré a ver la forma de implementar el sensor en ccs en una protoboard.

Desconectado jonathanPIC888

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 326
Re:Reemplazar DHT22 por sht35 librería?
« Respuesta #4 en: 21 de Junio de 2021, 19:56:40 »
Hola Cesareus01, como estás.

El problema de que alguien del foro te ayude, es que es necesario tener el sensor, para ayudarte a ver algo del código. Caso contrario, programar en el aire no sirve.

Yo lo que te recomiendo es que veas la librería para Arduino, que tiene directivas de I2C similares a CCS y portes el código.

Por ejemplo:

Teniendo en cuenta la siguiente librería: https://github.com/Seeed-Studio/Seeed_SHT35/blob/master/Seeed_SHT35.cpp

Código: [Seleccionar]

typedef int            s32;
typedef long unsigned int   u32;
typedef short          s16;
typedef unsigned short u16;
typedef char           s8;
typedef unsigned char  u8;

typedef enum {
    NO_ERROR = 0,
    ERROR_PARAM = -1,
    ERROR_COMM = -2,
    ERROR_OTHERS = -128,
} err_t;

err_t SHT_IIC_OPRTS::send_command(u16 cmd) {

    s32 ret = 0;
    Wire.beginTransmission(_IIC_ADDR);
    Wire.write((cmd >> 8) & 0xFF);
    Wire.write(cmd & 0xFF);
    ret = Wire.endTransmission();
    if (!ret) {
        return NO_ERROR;
    } else {
        return ERROR_COMM;
    }
}


Esa sería la primer función que analizaría.

Primero en la declaración de variables y el arreglo de respuestas, hay que ver de manera preliminar, el tipo de datos de Arduino.

Donde..

Código: [Seleccionar]

typedef int            s32;
typedef long unsigned int   u32;
typedef short          s16;
typedef unsigned short u16;
typedef char           s8;
typedef unsigned char  u8;


Podría quedar para CCS, como...

Código: [Seleccionar]

typedef signed     int32    s32;
typedef unsigned int32    u32;
typedef signed     int16    s16;
typedef unsigned int16    u16;
typedef signed     int8      s8;
typedef unsigned int8      u8;


Luego para el arreglo de respuestas quedaría igual.

En la etapa de la función, hay que tener en cuenta que está declarada como método de una clase, pero se resuelve de la siguiente manera.

Código: [Seleccionar]

err_t SHT_IIC_OPRTS_send_command(u16 cmd) {

    s32 ret = 0;                        // Indica que la respuesta tiene signo y es de 32 bits, esto me parece erróneo, pero lo podrías probar.
    i2c_start();                                  // Inicializa la comunicación.
    i2c_write(_IIC_ADDR);                 // Envía la dirección I2C del dispositivo.
    i2c_write((cmd >> 8) & 0xFF);     // MSB del comando.
    i2c_write(cmd & 0xFF);                // LSB del comando.
    ret = i2c_read(0);                        // Lee la respuesta del dispositivo.
    i2c_stop();                                  // Para la comunicación I2C.

    if (!ret) {
        return NO_ERROR;
    } else {
        return ERROR_COMM;
    }
}


Tené en cuenta que lo que te expuse es por mi experiencia, tendrías que probarlo y empezar a portar el código. No es algo que te va a llevar un montón de tiempo. A lo sumo en un fin de semana lo sacas andando.

Saludos !