Autor Tema: ADC como cambiar la lectura de LCD a Display 7 segmentos  (Leído 6553 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
ADC como cambiar la lectura de LCD a Display 7 segmentos
« en: 25 de Octubre de 2013, 08:25:12 »
Hola, que tal, estoy muy aturdido con el tema de las conversiones del ADC, pude llegar a hacer la prueba con el termostato de pablin, y LCD, y anda perfecto.

Lo que no puedo hacer es mostrar el numero en 3 digitos 7 segmentos, con ningula libreria BIN_BCD u otras, no me funciona nada.

Solo me salio con 1 digito ( unidades ) probando y probando, cuenta de 0 a 9 pero cuando pasa a ( decena ) incrementa a 1 , la unidad a 0,

pero la unidad sigue contando en binario fuera de la tabla del 0 al 9

Osea escribe cualquier cosa ..Les muestro el pedazo que uso ...

Código: [Seleccionar]
CICLO
bsf ADGO ;Inicia la conversión A/D
btfsc ADGO ;Espera que termine de convertir
goto $ -1

bsf MP0 ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
movf adres, 0 ;Resultado de conversión -> W
bcf MP0 ;Pasa a página 1

movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal
bcf CARRY ;Limpia el CARRY
btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit 8)
bsf CARRY ;Si está en 1 pone en uno el carry
rrf buffer, 1 ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL
               
movf buffer, 0 ;Dato digitalizado -> W
               
                ACA UTILIZO EL DATO QUE HAY EN W Y LO PASO A LA UNIDAD

                MOVWF     UNIDAD
                MOVF        UNIDAD,W
                SUBLW      D'10'
                BTFSC       STATUS,2
                CALL         INCREMENTAR DECENAS Y PONER A CERO
                CALL         MUESTRO LOS 3 DISPLAYS
                GOTO        CICLO

INCREMENTAR DECENAS Y PONER A CERO
                CLRF         UNIDAD
                MOVF        BUFFER,W
                MOVWF     DECENA
                MOVF        DECENA,W
                SUBLW      D'10'

                ...................................... ETC .........
                RETURN

MUESTRO LOS 3 DISPLAY
                MOVF        UNIDAD,W
                CALL         TABLA 0 A 9
                MOVWF      PORTB
                BSF           ENCIENDO UNIDAD
                CALL         TIEMPO
                BCF           APAGO DISPLAY

                MOVWF     DECENA,W
                ................................. ETC

                RETURN
               

Gracias y espero me ayuden que me estoy volviendo loco !!!!
Vangeluz

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #1 en: 25 de Octubre de 2013, 11:17:11 »
Las dos rutinas de conversión funcionan bien tanto la de 8 como la de 16 bits, comprobado, y luego veo el digito en un display de 4 digitos, todo perfecto.

Que tipo de display ?, estan todos los digitos polarizados ?

un saludo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #2 en: 25 de Octubre de 2013, 13:49:01 »
Hola,

veo un par de errores en el código.

Hacé paso a paso lo que sucede cuando la lectura es mayor a 9. Cuando lo es, la resta da >=0, y se ejecuta:
CALL         INCREMENTAR DECENAS Y PONER A CERO
pero sólo una vez e inmediatamente continúa a mostrar el dato en el display, y luego a volver a leer el ADC. Esto hace que no se terminen de contar las decenas correctamente. Además, veo que restas 10 unidades al valor obtenido, pero no vas guardando el resultado. Si el valor a mostrar fuese 70, entonces debería pasar 7 veces por INCREMENTAR DECENAS Y PONER A CERO antes de mostrar el valor.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #3 en: 26 de Octubre de 2013, 09:44:27 »
Hola,

veo un par de errores en el código.

Hacé paso a paso lo que sucede cuando la lectura es mayor a 9. Cuando lo es, la resta da >=0, y se ejecuta:
CALL         INCREMENTAR DECENAS Y PONER A CERO
pero sólo una vez e inmediatamente continúa a mostrar el dato en el display, y luego a volver a leer el ADC. Esto hace que no se terminen de contar las decenas correctamente. Además, veo que restas 10 unidades al valor obtenido, pero no vas guardando el resultado. Si el valor a mostrar fuese 70, entonces debería pasar 7 veces por INCREMENTAR DECENAS Y PONER A CERO antes de mostrar el valor.

Saludos.

Gracias Bruno, tienes razon, es verdad cuenta solo hasta 10. ahora intente a ver que pasa por el codigo original y peor.

Código: [Seleccionar]
CICLO
bsf ADGO ;Inicia la conversión A/D
btfsc ADGO ;Espera que termine de convertir
goto $ -1

bsf MP0 ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
movf adres, 0 ;Resultado de conversión -> W
bcf MP0 ;Pasa a página 1

movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal
bcf CARRY ;Limpia el CARRY
btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit 8)
bsf CARRY ;Si está en 1 pone en uno el carry
rrf buffer, 1 ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL

movf buffer, 0 ;Dato digitalizado -> W

;//////////////////////////////////////////////////////

call DECIMAL


display
movf uni,0 ;Carga W con el valor de unidad UNIDAD
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;manda el digito al puerto B
bsf ptoc,2 ;enciende el bit 2 del puerto A
call Retardo_100ms ;Espera para que se persiva el digito
bcf ptoc,2 ;apaga el bit 2 del puerto A

movf dec,0 ;Carga W con el valor de decena DECENA
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;Mando el digito al puerto B
bsf ptoc,1 ;Enciende el bit 1 del puerto A
call Retardo_100ms ;Espera para que se persiva el digito
bcf ptoc,1 ;apaga el bit 1 del puerto A

movf cen,0 ;Carga W con el valor de centena CENTENA
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;Manda el digito al puerto B
bsf ptoc,0 ;Enciende el bit 0 del puerto A
call Retardo_100ms ;Espera para que se persiva el digito
bcf ptoc,0 ;apaga el bit 0 del puerto A
; return ;vuelve a CICLO
goto CICLO

DECIMAL movwf uni ;Convierte el dato presente en W en UNI, DEC y CEN
clrf dec
clrf cen
movlw d'100' ;Determina la cant. de centenas
CENTENA subwf uni, 1
btfss CARRY
goto CIEN
incf cen, 1
goto CENTENA
CIEN addwf uni, 1
movlw d'10' ;Determina la cant. de decenas
DECENA subwf uni, 1
btfss CARRY
goto DIEZ
incf dec, 1
goto DECENA
DIEZ addwf uni, 1 ;Uni queda con la cant. de unidades (sin decenas ni centenas)

movlw 0x30 ;Le suma 30h a los valores de UNI, DEC y CEN para que queden en ASCII
addwf uni, 1
addwf dec, 1
addwf cen, 1
return
Vangeluz

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #4 en: 26 de Octubre de 2013, 10:14:52 »
Las dos rutinas de conversión funcionan bien tanto la de 8 como la de 16 bits, comprobado, y luego veo el digito en un display de 4 digitos, todo perfecto.

Que tipo de display ?, estan todos los digitos polarizados ?

un saludo

Gracias JoseLuis por reunirte a ayudarme en mis fracazos.
Si a rutina te refieres a la de la libreria BIN_BCD, a mi tambien me funciona bien en LCD, pero en los 7 segmentos hasta ahora no me funciono, logicamente es por un error mio, no por la rutina. Ahora deje de usar la rutina, trato de hacerlo con lo original del proyecto que estaba.
Los Displays son Catodo Comun son 3 y los polarizo de a 1 encendiendo y apagando Unidad, Decena y Centena.
Aca nuevamente lo que estoy usando ahora, y no pasa nada:
Código: [Seleccionar]
CICLO
bsf ADGO ;Inicia la conversión A/D
btfsc ADGO ;Espera que termine de convertir
goto $ -1

bsf MP0 ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
movf adres, 0 ;Resultado de conversión -> W
bcf MP0 ;Pasa a página 1

movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal
bcf CARRY ;Limpia el CARRY
btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit 8)
bsf CARRY ;Si está en 1 pone en uno el carry
rrf buffer, 1 ;Hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por el 7 de ADRESL

movf buffer, 0 ;Dato digitalizado -> W

;//////////////////////////////////////////////////////

call DECIMAL


display
movf uni,0 ;Carga W con el valor de unidad UNIDAD
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;manda el digito al puerto B
bsf ptoc,2 ;enciende el bit 2 del puerto A
call Retardo_100ms ;Espera para que se persiva el digito
bcf ptoc,2 ;apaga el bit 2 del puerto A

movf dec,0 ;Carga W con el valor de decena DECENA
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;Mando el digito al puerto B
bsf ptoc,1 ;Enciende el bit 1 del puerto A
call Retardo_100ms ;Espera para que se persiva el digito
bcf ptoc,1 ;apaga el bit 1 del puerto A

movf cen,0 ;Carga W con el valor de centena CENTENA
call tabla ;Vuelve W con los bits para formar el digito
movwf ptob ;Manda el digito al puerto B
bsf ptoc,0 ;Enciende el bit 0 del puerto A
call Retardo_100ms ;Espera para que se persiva el digito
bcf ptoc,0 ;apaga el bit 0 del puerto A
; return ;vuelve a CICLO
goto CICLO

DECIMAL movwf uni ;Convierte el dato presente en W en UNI, DEC y CEN
clrf dec
clrf cen
movlw d'100' ;Determina la cant. de centenas
CENTENA subwf uni, 1
btfss CARRY
goto CIEN
incf cen, 1
goto CENTENA
CIEN addwf uni, 1
movlw d'10' ;Determina la cant. de decenas
DECENA subwf uni, 1
btfss CARRY
goto DIEZ
incf dec, 1
goto DECENA
DIEZ addwf uni, 1 ;Uni queda con la cant. de unidades (sin decenas ni centenas)

movlw 0x30 ;Le suma 30h a los valores de UNI, DEC y CEN para que queden en ASCII
addwf uni, 1
addwf dec, 1
addwf cen, 1
return

tabla ; retlw b'gfedcba'  para display catodo comun
addwf PCL,1 ; Se incrementa el contador del programa.-
DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F

El programa Original esta esta hecho para el 16F870, pero le cambie el list y el include por el 16F876A y con LCD funciona perfecto.
ACA el Programa Original TERMOSTATO ELECTRONICO
Vangeluz

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #5 en: 28 de Octubre de 2013, 18:02:27 »
yo postee un termometro en asm, con display de 7 segmentos fijate si la rutina te sirve para adaptarla

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #6 en: 29 de Octubre de 2013, 00:27:30 »
Sería bueno ver las definiciones de adres,buffer,dec,cen,ptob,ptoc,etc...

Igualmente, deberías remover las siguientes líneas si no estás usando el LCD. Es importante aprender qué hace cada instrucción, sino por más código ajeno que consigas, no vas a poder salirte de lo que han hecho otros.

   movlw   0x30      ;Le suma 30h a los valores de UNI, DEC y CEN para que queden en ASCII
   addwf   uni, 1
   addwf   dec, 1
   addwf   cen, 1

Saludos.
« Última modificación: 29 de Octubre de 2013, 11:30:27 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #7 en: 29 de Octubre de 2013, 01:10:37 »
yo postee un termometro en asm, con display de 7 segmentos fijate si la rutina te sirve para adaptarla
Gracias por tu respuesta SOYMOE, pero no encuentro tu post del termometro ..
Vangeluz

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #8 en: 29 de Octubre de 2013, 01:54:10 »
Sería bueno ver las definiciones de adres,buffer,dec,cen,ptob,ptoc,etc...

Igualmente, deberías remover las siguientes líneas si no estás usando el LCD. Es importante aprender qué hace cada instrucción, sino por más código ageno que consigas, no vas a poder salirte de lo que han hecho otros.

   movlw   0x30      ;Le suma 30h a los valores de UNI, DEC y CEN para que queden en ASCII
   addwf   uni, 1
   addwf   dec, 1
   addwf   cen, 1

Saludos.

QUE GRANDE BRUNOF !!! , quite esas 4 lineas y ahora por lo menos el primer digito de unidades va del 0 al 9 y repite lo mismo, las decenas y centenas no encienden, varié el tiempo a 10 ms y tampoco, pero si quito el terminal base del transistor de unidad enciende la decena, asi mismo si quito el terminal de base del transistor, enciende la centena, Osea, siempre tiene prioridad el primer digito en verse, lo que se me ocurreque sea problema de consumo quiza, porque alimento catodos comun a transistores NPN y los anodos de segmentos ( directos sin resistencias ) ahora estoy probando con R de 220 ohms a cada uno de los 7 anodos,enciende la decena muy tenue cuando la unidad es 1 o 7, probando con 680ohms y va mejorando pero aun las decenas y centenas no se ven con los numeros 0, 6, 8 y 9 de la unidad....La cosa que moviendo un potenciometro alimentado de 0 a 5v va de 0 a 255 en la mitad, luego sigo girando y vuelve a llegar a 255 al final del potenciometro ....  Estoy trabajando en eso !!! Gracias por todo !!!!
Vangeluz

Desconectado Vangeluz

  • PIC12
  • **
  • Mensajes: 74
    • Vangeluzweb
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #9 en: 29 de Octubre de 2013, 02:37:34 »
Perfecto con 1K en cada salida quedo perfecta la visualizacion !!!! Gracias BrunoF y gracias  a todos !!!
Vangeluz

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: ADC como cambiar la lectura de LCD a Display 7 segmentos
« Respuesta #10 en: 29 de Octubre de 2013, 11:10:32 »
yo postee un termometro en asm, con display de 7 segmentos fijate si la rutina te sirve para adaptarla
Gracias por tu respuesta SOYMOE, pero no encuentro tu post del termometro ..
ACA esta
http://www.todopic.com.ar/foros/index.php?topic=33426.0