TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: joseydoris 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
-
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.
-
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
-
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.
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.
-
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.
-
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
MOVF CUENTAL, W
SUBLW 0x00
MOVWF CUENTAL
MOVF CUENTAH, W
BTFSS STATUS, C
INCFSZ CUENTAH,W
SUBLW 0x04
MOVWF CUENTAH
Probé para algunos valores nomas, espero que funcione para todos.
-
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