Autor Tema: Control de humedad y que lo muestre por la lcd  (Leído 2711 veces)

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

Desconectado juansanchezruiz05

  • PIC10
  • *
  • Mensajes: 30
Control de humedad y que lo muestre por la lcd
« en: 10 de Octubre de 2016, 07:13:32 »
Hola

Estoy haciendo una incubadora como proyecto de clase. Solo he hecho que el programa controle la humedad y que muestre por pantalla la humedad fijada y la real que mide el sensor sht11. Pero la pantalla no muestra ningún numero, sino caracteres desconocidos y siempre los mismo. Por lo que debo de tener algún fallo en la subrutina de conversión de binario a ascii (en el archivo adjunto se encuentra al final del programa, encima de los retardos).

el problema puede que este en la subrutina de conversion de binario a ascii:

LCDCONVERSOR    clrf    uni
                     clrf    dec 
                       clrf    cen
                movwf    temp       ; muevo mi Dato a convertir a Temp
                 goto    Uni 

    BCD2    decfsz    temp,F       ; decremento Temp....
       goto    Uni
       goto   ascii
    
   Uni   incf     uni,F       ; mientras "Temp" decrementa, "uni" crece uno a uno
      movf    uni,W
       sublw    d'10'
       btfss    STATUS,Z    ; Pregunto si "uni" llego a 10
       goto    BCD2       ; no sigo la misma secuencia
       clrf    uni         ; si entonces uni=0, luego debo i++ a dec
 
   Dec   incf     dec,F
       movf    dec,W
       sublw    d'10'
       btfss    STATUS,Z    ; Pregunto si "dec" llego a 10
       goto    BCD2       ; no sigo la misma secuencia
       clrf    dec        ; si entonces dec=0, luego debo i++ a dec

   Cen   incf     cen,F       ; no hace falta verificar si desborda 10
       goto    BCD2   


;Conversion bcd a ASCII
   
   ascii   movlw   0x30
         addlw   dec
   
         movlw   0x30
         addwf   uni,1
   
         movlw   0x30
         addwf   cen,1   

        RETURN



Si me podríais ayudar a encontrar el fallo, os lo agradecería mucho, por mas vueltas que le doy no lo encuentro.

« Última modificación: 10 de Octubre de 2016, 14:31:30 por juansanchezruiz05 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Control de humedad y que lo muestre por la lcd
« Respuesta #1 en: 10 de Octubre de 2016, 12:16:48 »
Citar
Por lo que debo de tener algún fallo en la subrutina de conversión de binario a ascii

Creaste un programa simple con la rutina?

Y que en el loop principal sea:

Código: ASM
  1. CLRF valor,F
  2. Loop:
  3.     INCF valor,F
  4.     MOVF valor,W
  5.     CALL LCDCONVERSOR
  6.     GOTO Loop

Pone un breakpoint en el GOTO Loop y fijate los estados de los 3 registros, cada ves que pones Run, deberia aumentar en 1 y comenzar desde 0, sino es un error.

Algunos otros consejos:

Por que incrementar y decrementar de a 1, cuando podes hacerlo de a 10. Mirando el flag de carry para saber si el numero a restar es menor a 10, y eso va para las unidades directamente.
El hacerlo de a 10 implica menos tiempo en eso, si tuvieras 255 como entrada tendrias 255 vueltas de tu codigo. En cambio de a 10 en 10 solo 26 vueltas

Mejor usar F y W , veo que estas mesclando y por ahi pones un 1 en ves de la F, la cual esta ultima es mas clara.

Para el 0 (cero) podes usar '0' en ves de 0x30, es mas simple de recordar :P.

Errores veo uno solo ( o 2 si es correcta mi duda), tengo una duda en que de el valor correcto. Ya que el decfsz primero decrementa y luego pregunta. Si pones 0 en W, pasaria a 255 y no daria el valor correcto. Si pones 1 imagino que tendrias como resultado 0. Una solucion rapida seria incrementar en 1 a W antes de comenzar con el decfsz. con un ADDLW 0x1

Tu error seria este:
Código: ASM
  1. ascii   movlw   0x30
  2.          addlw   dec
  3.    
  4.          movlw   0x30
  5.          addwf   uni,1
  6.    
  7.          movlw   0x30
  8.          addwf   cen,1

Tenes un ADDLW DEC ... mal instruccion

Código: ASM
  1. ascii   movlw   '0'
  2.          addwf   dec, F
  3.          addwf   uni, F
  4.          addwf   cen, F

Asi estaria solucionado..


-------------

Como lo tenes un CALL podes aplicar el codigo que pase al principio y probar cada porcion de codigo en un programa aparte, esto te permite simularlo sin ningun problema y ver que funcion correctamente.

Desconectado juansanchezruiz05

  • PIC10
  • *
  • Mensajes: 30
Re:Control de humedad y que lo muestre por la lcd
« Respuesta #2 en: 10 de Octubre de 2016, 14:48:10 »
muchas gracias, con tu ayuda he solucionado un par de problemas. Pero aun no me muestra los valores por la LCD. Si no te importa volver a revisarme el código de la subrutina de conversión de binario a digital que adjunto. para estar seguro de que ahí no esta el problema.

Quiero mostrar un número binario de 8bits por la LCD, para eso utilizo una rutina de conversión de binario a ascii. Por lo que, el problema lo tengo que tener en esa rutina o al enviar el numero a la LCD, aunque esto último no creo porque el resto de texto lo escribe.

siempre me muestra donde debería ir un número un acento y una Y
« Última modificación: 10 de Octubre de 2016, 16:07:34 por juansanchezruiz05 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Control de humedad y que lo muestre por la lcd
« Respuesta #3 en: 10 de Octubre de 2016, 16:04:53 »
Código: ASM
  1. MOVLW   dec             ;ESCRIBE LA HUMEDAD RELATIVA RH
  2.                 CALL    LETRA
  3.                 MOVLW   uni
  4.                 CALL    LETRA

Al hacer eso en el primer MOVLW estas poniendo el valor 0x60 en W, por esto:

Código: ASM
  1. dec             EQU     0x60

Lo mismo ocurre con la unidad y es por eso que ves caracteres raros, si queres pasar el valor de un registro a W tenes que usar MOVF   xxxx, W

Código: ASM
  1. MOVF    dec, W          ;ESCRIBE LA HUMEDAD RELATIVA RH
  2.                 CALL    LETRA
  3.                 MOVF    uni, W
  4.                 CALL    LETRA

Espero que se entienda la diferencia y donde esta el error.

Desconectado juansanchezruiz05

  • PIC10
  • *
  • Mensajes: 30
Re:Control de humedad y que lo muestre por la lcd
« Respuesta #4 en: 10 de Octubre de 2016, 17:59:39 »
Muchas gracias. Cada vez estoy más cerca de que funciona.
 Ya escribe la pantalla el número
Adjunto una librería en ensamblador que pasa de binario a ascii y que funciona en principio


OTRA COSA QUE SIGNIFICA ESTO:             movlw   .0

Ahora tengo que solucionar el problema de que el sensor sht11 no me mide la humedad bien. El problema esta en alguna surutina

Para tranformar la humedad en un dato que se entienda hay que aplicar la seguiente formula al dato proporcionado por el sensor:

     HR=(a*Lectura del sensor+b)/256

pero no se el valor de a ni de b. Bueno en realidad no se si es esa la formula


 
« Última modificación: 11 de Octubre de 2016, 07:07:36 por juansanchezruiz05 »


 

anything