Autor Tema: hs1101  (Leído 2086 veces)

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

Desconectado joseydoris

  • PIC12
  • **
  • Mensajes: 58
hs1101
« en: 17 de Mayo de 2018, 01:02:22 »
Un saludo a todos:Estoy dándole vueltas al sensor de humedad hs1101.No se que pasa pero cuando le doy mas humedad en vez de sumar resta.Si alguien a trabajado con este sensor le agraceria una ayuda.Gracias




DECIMOL
         clrf     tmr1l
         clrf         tmr1h
   btfss    0X07,0     ;ENTRADA PULSO DEL HS1101+555
         GOTO     $-1
         BTFSC    0X07,0
         GOTO     $-1
      bsf   t1con,0           ;inicia tmr1
      call        rotada        ;va al retardo
      bcf         t1con,0       ;apaga tmr1
   
         SWAPF    tmr1h,0     
         ANDLW    0X0F
         ADDLW    0XF0
         MOVWF    unimil
         ADDWF    unimil,1      ;tabla conversora 16 bit
         ADDLW    0XE2
         MOVWF    hcenv
         ADDLW    0X32
         MOVWF    huniv
         MOVF     tmr1h,0
         
         ANDLW    0X0F           
         ADDWF    hcenv,1
         ADDWF    hcenv,1
         ADDWF    huniv,1
         ADDLW    0XE9
         MOVWF    hdecv
         ADDWF    hdecv,1
         ADDWF    hdecv,1
         SWAPF    tmr1l,0
         ANDLW    0X0F
         ADDWF    hdecv,1
         ADDWF    huniv,1
         RLF      hdecv,1
         RLF      huniv,1
         COMF     huniv,1
         RLF      huniv,1
         MOVF     tmr1l,0
         ANDLW    0X0F
         ADDWF    huniv,1
         RLF      unimil,1
         MOVLW    0X07
         MOVWF    decemil
         MOVLW    0X0A
LB1a     ADDWF    huniv,1
         DECF     hdecv,1
         BTFSS    3,0
         GOTO     LB1a
LB2a     ADDWF    hdecv,1
         DECF     hcenv,1
         BTFSS    3,0
         GOTO     LB2a
LB3a     ADDWF    hcenv,1
         DECF     unimil,1
         BTFSS    3,0
         GOTO     LB3a
LB4a     ADDWF    unimil,1
         DECF     decemil,1
         BTFSS    3,0
         GOTO     LB4a
     goto   DECIMOL
             
;------------------------------------------------------------------------
rotada   movlw    .255
         movwf    reg6
qq       movlw    .211
         movwf    reg2
tt       movlw    .1
         movwf    reg3     
dd       decfsz   reg3,1 
         goto     dd
         decfsz   reg2,1
         goto     tt
         decfsz   reg6,1
         goto     qq
         return

   end
         

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:hs1101
« Respuesta #1 en: 17 de Mayo de 2018, 08:44:23 »
Que PIC estas usando ( por si tiene CCP )?

Porque usas 0x07 y no el nombre del registro?
Espero que no definas t1con, tmr1h cuando estan definidos en el .inc, seguramente como T1CON y TMR1H
Las dems imagino que son registros de proposito general y ubicadas en el mismo banco.

Desconectado joseydoris

  • PIC12
  • **
  • Mensajes: 58
Re:hs1101
« Respuesta #2 en: 17 de Mayo de 2018, 16:54:08 »
Hola killerjc,tan atento como siempre,gracias.Estoy con el 16f877.No puedo poner los .inc por que me tira error el ensamblador simupic 84 (viejito) pero le tengo cariño.Como siempre me he enredado con port c y tris c lo hago asi

                  bsf     3,5  ;status  rp0
                 movlw        b'00000001'  bit 0 como entrada
                 movwf         0x07          ;puerto c      banco 1
                  bcf      3,5   ;status  rp0

                tmr1l        equ     0x0e
                tmr1h        equ     0x0f     ;banco 0
                t1con         equ     0x10

Vi una instruccion en c que se podia contar de 0 a 1024 o de 1024 a 0,no se si  en asembler se podra.El codigo funciona,solo que resta en vez de sumar.Es que tengo un dht22 en una incubadora y siempre se daña la humedad 99.9 y se queda ahi.Por eso queria probar el hs 1101 que en realidad es un condensador variable.Un saludo

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:hs1101
« Respuesta #3 en: 18 de Mayo de 2018, 00:06:32 »
Perdon, no logro seguir tu logica o lo que intentas realizar. Me podes indicar que es exactamente lo que intentas realizar en tu codigo?
Ademas como es que tenes configurado el Timer?

Yo usaria el modulo CCP en modo Capture, asi poder obtener el periodo, y luego de eso tratar de crear una tabla o algo parecido para que me entregue el valor de humedad respecto al periodo ( no la frecuencia ).
Esto necesita que configures correctamente el CCP, que esperes un ratito para detectar los disparos, apenas detectado restas los valores obtenidos en las ultimas 2 pasadas, eso te da el valor del periodo. De alli es tratar de conseguir una especie de formula que aproxime con poca complejidad el comportamiento del sensor.

Citar
Vi una instruccion en c que se podia contar de 0 a 1024 o de 1024 a 0,

A que te referis con "contar", a incrementar/decrementar una variable? o que un timer cuente hasta esa cantidad ?.

Creo que te referis a un bucle for() el cual se puede realizar en ASM tranquilamente, aunque en ASM es mas simple hacer de 1024 a 0, tambien se puede hacer de 0 a 1024, en ves de incrementar 1 registro nomas, lo haces de a 2.

Desconectado joseydoris

  • PIC12
  • **
  • Mensajes: 58
Re:hs1101
« Respuesta #4 en: 18 de Mayo de 2018, 10:25:10 »
Saludos killerjc:Cuando le subo la humedad decrementa y cuando la bajo, aumenta el porcentaje de humedad.Creo que el asunto es de contar  de 1024 a 0 o al reves.No se como hacerlo en asembler.Gracias por tu tiempo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:hs1101
« Respuesta #5 en: 18 de Mayo de 2018, 11:47:03 »
Yo veo que estas usando el Timer, imagino que para contar. Y es a eso que te referis que contas de 0 a 1024.
Segun vos el problema esta en que necesitas que cuente alreves el Timer, entonces no voy a darte la contra o decirte como lo tenes que hacer, sino que te voy a dar lo que pedís aunque tal ves esto no es lo que vos queres.

El problema que veo es que el Timer tiene 16 bits , así que cuenta de 0 a 65535, y no veo tus 0 a 1024. ya que tu código le hace AND a lo que obtiene del Timer, el cual esta cambiando constantemente.

Para contar de 0 a 1024 necesitas 10bits, lo que si o si vas a necesitar 16bits para eso (2 registros).
Si tenes el valor de 0 a 1024 y lo queres representar en 1024 a 0, entonces lo que necesitas saber es cuanto le falta para 1024, esto lo haces restando 1024 a lo que obtengas.

Es decir, si vos tenes 1024 queres tener 0.  (1024 - 1024 = 0)
Si tenes 0 queres tener 1024  ( 1024 - 0 = 1024)
Si tenes 768 queres tener 256 (1024 - 768 = 256)
Si tenes 500 queres tener 524 (1024 - 500 = 524)

Entonces debemos realizar una resta, es decir tomas tu numero de 0 a 1024, y lo transformas de 1024 a 0..

Voy a llamar a los registros CUENTAH y CUENTAL, donde se encuentra un valor de 0 a 1024, luego de este código va a quedar como 1024 a 0

Código: ASM
  1. MOVF    CUENTAL, W
  2.     SUBLW   0x00
  3.     MOVWF   CUENTAL
  4.     MOVF    CUENTAH, W
  5.     BTFSS   STATUS, C
  6.     INCFSZ  CUENTAH,W
  7.     SUBLW   0x04
  8.     MOVWF   CUENTAH

Probé para algunos valores nomas, espero que funcione para todos.
   
   

Desconectado joseydoris

  • PIC12
  • **
  • Mensajes: 58
Re:hs1101
« Respuesta #6 en: 21 de Mayo de 2018, 01:09:33 »
Un saludo killerjc:Puse el codigo que enviaste antes de la tabla conversora y ya suma hacia adelante cuando subes la humedad y resta cuando la bajas.Se desfasa con un higrómetro digital,pero en este caso (incubadora) no es muy importante.inmensamente agradecido att. jose antonio