TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Jorge_Loa en 29 de Mayo de 2007, 18:19:16

Título: No puedo leer la humedad relativa con SHT11
Publicado por: Jorge_Loa en 29 de Mayo de 2007, 18:19:16
Hola amigos de Todopic, de nuevo realizando trabajos con un PIC me he encontrado inconvenientes................Resulta que debo hacer una aplicacion que mida humedad relativa (entre otras cosas) y nada que puedo leer el sensor ... (escogi el sht11 porque me parecio idóneo aunque nunca lo haya usado, y pues como me daban una muestra gratis me parecio mas idóneo).

A continuacion anexo el programa con el cual estoy trabajando, a partir de uno que vi en Internet; el sensor lo he configurado para trabajar a 12 bits y resulta que siempre me muestra en la LCD:           Humedad: 255% (he deshabilitado la rutina de convertir datos HEXA a el valor de HR y por ahora la LCD debe mostrarme el valor con el cual queda cargado el registro de humedad). En un principio creí que el sensor estaba molestando y lo cambie pero ambos me da lo mismo; en conclusion el problema es el siguiente:

En mi ciudad la humedad relativa es aprox 80-85%, configure el sensor a 12 bits y por lo tanto (segun el datasheet y la curva caracteristica para 12 bits que ahí se muestra) los registros del sensor deben quedar cargados con datos entre 2500 y 2700 (00001010 y 00001011 en el primer byte del sensor) y realmente esto es lo que me muestra la LCD si le pido que me muestre el primer byte(MSB); pero si le digo que me muestre el byte menos significativo (LSB) me muestra siempre 255, lo cual me dice obviamente que el registro a quedado cargado con FF; hice la prueba mostrando ambos datos por separado y variando la humedad relativa generando aire frio y caliente cerca del sensor y unicamente varia lo correspondiente al byte MSB; no se que puede estar mal aunque una revision al programa me lleva a pensar que el problema radica en el momento de generar el ACK (setACK) para empezar a leer el segundo Byte; el programa junto con las rutinas es el siguiente (omito por no ser necesarias las rutinas de la LCD) y agradezco todo tipo de ayuda.
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: microman en 31 de Mayo de 2007, 16:32:45
He utilizado este sensor...pero lo he programado en C (CCS) y el código me funciona perfectamente. Si lo deseas t puedo facilitar.

Saludos
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: Jorge_Loa en 31 de Mayo de 2007, 17:42:13
Gracias por la respuesta MICROMAN, y te agradezco mucho la ayuda; si me puedes facilitar el codigo de seguro me servira mucho aunque me toca ponerme a entender y ver como paso a Assembler porque tengo todo el programa montado en ese lenguaje.

De nuevo te agradezco.
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: J1M en 31 de Mayo de 2007, 18:14:08
hola, en la página tengo un ejemplillo de aplicación de este sensor en CCS C, pegale un ojo, quizá te sirva para desatrancarte:

http://www.hobbypic.com/index.php?option=com_content&task=view&id=16&Itemid=27

saludos!
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: Jorge_Loa en 31 de Mayo de 2007, 18:37:14
Gracias JIM, de hecho ya habia leido tu ejemplo en esa pagina pero no entiendo muy bien; (Tengo bastantes prblemas con el C....jeje, tendre que superarlos algún dia y apenas termine este trabajo empezaré a estudiar ese programa)

Podrias explicarme mejor, como podria traducirse este pedazo:

byte sht11_leer_byte(byte ack)
// reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
{
   byte i,val=0;

   output_high(DATOS);             //release DATA-line
   for (i=128;i>0;i/=2)           //shift bit for masking 0x80
   {
      output_high(CLOCK);               //clk for SENSI-BUS
      if (input(DATOS))   val=(val | i);  //read bit
      output_low(CLOCK);
   }
   if (ack) output_low(DATOS);      //in case of "ack==1" pull down DATA-Line
   else output_float(DATOS);
   output_high(CLOCK);             //clk #9 for ack
   delay_us(5);                    //pulswith approx. 5 us
   output_low(CLOCK);
   output_high(DATOS);             //release DATA-line
   return val;
}

si no estoy mal, esa es la parte donde se lee los datos generados por el sensor; mi rutina en ASM es la siguiente:

setACK         
   bsf      STATUS,RP0   ;   banco 1 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
   bcf      TRISB,0      ;   pone DATA port,0 como salida
   ;bcf      TRISB,1
   bcf      STATUS,RP0   ;   banco 0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-

   bcf      PORTB,1      ;   SCK  falling edge   bcf
   bcf      PORTB,0      ;   DATA change nivel logico 0   bcf
   bsf      PORTB,1      ;   SCK rising edge
   nop
   ;bsf      PORTB,0      ;   DATA change nivel logico 1(reposo)
   bsf      STATUS,RP0   ;   banco 1 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
   bsf      TRISB,0      ;   pone DATA port,0 como entrada
   bcf      STATUS,RP0   ;   banco 0 _-_-_-_-_-_-_-_-_-_-_-_-_-_-
   return


Es lo mismo; dicen lo mismo?........................ No se si ahí esta el error pero creo que si; porque como anteriormente dije el sensor me genera datos del primer y segundo byte, solo que del segundo me genera siempre "FF" y este dato no cambia cuando vario las condiciones de humedad; sin embargo el primer Byte si varia; la rutina donde se debe decodificar este dato para convertirlo a humedad ya la tengo lista asi que solo me falta que el dato varie.............

Un saludo a todos...........
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: Jorge_Loa en 31 de Mayo de 2007, 18:46:55
Se me olvido lo siguiente:

sht11_Humedad      ;LECTURA HUMEDAD 2 bytes
         call    SHT11_INICIO   ;   Inicio de transmision
         movlw   b'00000101'
         call   SHT11_COMANDO   ;   Envio: Lectura de humedad
         call   waitACK      ;   espera que llegue ACK desde el sensor
         call   adqtime      ;   espera que pase el tiempo de adquisicion
         call   LEEmsb      ;   lee el byte alto
         call   setACK
         call   LEElsb      ;   lee el byte bajo
         call   setNACK
         ;call   CalcRH      ;   Calcula %RH y ajusta linealidad                           return         
   
y la rutina de leer el byte es:

LEEmsb         
         clrf   RXmsb      ;   limpia registro
         bsf   RXmsb,0      ;   pone un 1 que indicara en carry el final
msb         bcf   PORTB,1      ;   
         bsf   PORTB,1      ;   
         btfss   PORTB,0      ;   lee data
         goto   ceromsb
unomsb                      rlf   RXmsb,f      ;   rota a la izquierda
         bsf   RXmsb,0      ;   pone un 1  en el bit 0
         btfss   STATUS,C                   ;   salio la marca por carry?
         goto   msb      ;   continua y captura el siguiente bit
         return
ceromsb                      rlf   RXmsb,f      ;   rota a la izquierda
         bcf   RXmsb,0      ;   pone un 0  en el bit 0
         btfss   STATUS,C                   ;   salio la marca por carry?
         goto   msb      ;   continua y captura el siguiente bit
         return   

para el LSB la rytina es la misma pero cambiando msb por lsb....
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: J1M en 31 de Mayo de 2007, 18:52:55
wow la verdad es que me has pillado, llevo muuucho tiempo sin tocar el ensamblador, siento no serte de mas ayuda... Respecto a que dice el código, si no recuerdo mal efectivamente esa es la parte en la que se lee un byte del sensor. Quizá si ojeas el datasheet del sensor la cosa te quede algo mas clara que si lo ves en C. Hoy estoy algo espeso... disculpa!
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: RedPic en 31 de Mayo de 2007, 19:01:10
Yo también me pedí este sample. Muchas gracias maestro J1M  :mrgreen:

Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: Jorge_Loa en 02 de Junio de 2007, 15:27:01
Hola de nuevo a todos; les cuento que por fin me he desenredado y he hecho funcionar el SHT11...........(Ya se que muchos de uds lo han hecho y quiza esto no signifique nada, pero es que yo llevaba tres dias tratando de hacerlo)..y en gran parte debo mucho a este foro. Gracias JIM por tu programa, que al fin de cuentas lo lei todo para hacer una "interpretacion" a ASM, y ahora si..........a seguir con este trabajo.

No sobra decir, que si alguien lo necesita...(En ASM, obvio porque la mayoria de info la encontre en C, y cada dia veo cuan importante y necesario será aprender C) pues sin duda podré ayudarlo.........que ya estoy ansioso por ayudar y no que siempre me ayuden.

saludos a todos. :-/ :-/
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: Veguepic en 02 de Junio de 2007, 16:37:57
Yo tengo el sample hace tiempo empolvandose pues ahora ultimo ando sin tiempo para nada.

Si lo pudieras publicar Jorge_Loa te lo agradeceria bastante, pues deseo integrarlo a la patalla LCD de un nokia que tengo por aqui.

Saludos
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: Jorge_Loa en 02 de Junio de 2007, 17:17:58
Pues a quien le sirva lo que he hecho es lo que adjunto; falta la rutina donde se hace un ajuste de linealidad ya que el dispositivo no lo es; no la he terminado aun, pero he probado lo demas de acuerdo a datos de humedad en mi ciudad y el datasheet del sensor y son consecuentes entre si.
Título: Re: No puedo leer la humedad relativa con SHT11
Publicado por: Veguepic en 02 de Junio de 2007, 19:57:04
Ok, gracias.   :wink:
Título: me podrias facilitar el codigo para el sensor sht11
Publicado por: delmar en 01 de Septiembre de 2011, 00:39:48
He utilizado este sensor...pero lo he programado en C (CCS) y el código me funciona perfectamente. Si lo deseas t puedo facilitar.

Saludos

hola estoy trabajando el sensor sht11 pero tengo problemas al leer la humedad y la temperatura si alguen tiene un cosigo en ccs porfavor rolamelo