Autor Tema: Representar un numero en BCD  (Leído 5961 veces)

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

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
Representar un numero en BCD
« en: 16 de Diciembre de 2005, 07:26:00 »
Buenas foro.
Mi pregunta es la siguiente, ¿como puedo representar el valor de un bite en BCD para representar el mismo en tres displays de 7 segmentos?.
Utilizo un 16F84 con un decoder BCD 7 Segmentos multiplexado.
Saludos.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Representar un numero en BCD
« Respuesta #1 en: 16 de Diciembre de 2005, 07:41:00 »
Buenas!!!haber el codigo BCD es un codigo byte, es decir necesita 8bits para su representacion y va desde el 0 hasta el 9
Codigo:

      x3x2x1x0 | BCD
       0  0  0  0 |    0
       0  0  0  1 |    1
       0  0  1  0 |    2
       0  0  1  1 |    3
       0  1  0  0 |    4
       0  1  0  1 |    5
       0  1  1  0 |    6
       0  1  1  1 |    7
       1  0  0  0 |    8
       1  0  0  1 |    9



Para tu proyecto como dices que tienes un descodificador BCD-7Seg simplemente tendras que conectar 4 pines(corresponden a x3x2x1x0) a la entrada del descodificador, y para representar por ejemplo en 5, tendras que sacar el valor 5 por los pines declarados del pin. Por ejemplo, si tenemos declarados en puerto B como salidas de nuestro numero en BCD, conectamos el puerto B al descodificador
Codigo:

      PIN_B0 -> A del deco
      PIN_B1 -> B del deco
      PIN_B2 -> C del deco
      PIN_B3 -> D del deco


Si queremos representar el numero 5 haremos esto:
Codigo:

      movlw   d"5"        ;cargamos el digito a representar d"5"=0b0101
      movwf   portB     ;portb tiene que ser declarado -> aqui mostramos el digoto 5



Suerte!!!Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: Representar un numero en BCD
« Respuesta #2 en: 16 de Diciembre de 2005, 16:07:00 »
Saludos Vszener.
Lo que me dices lo entiendo perfectamente y mi prototipo funciona correctamente con un solo digito.
Pero no se como mostrar por ejemplo el nº 75 o el 257 en el display, utilizando para ello un solo decodificador BCD a 7 segmentos y tres displays multiplexados por el propio PIC.
Saludos.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Representar un numero en BCD
« Respuesta #3 en: 16 de Diciembre de 2005, 17:06:00 »
Ke tal!haber como bien has dicho los display"s de 7seg deben estar multiplexados para la representacion de datos en los mismos, eso quiere decir que debes hacer un barrido de los display"s el cual entre display y display haya una pausa de 10 a 20 ms que es el tiempo donde el ojo humano no aprecia el parpadeo. Entonces para mostrar por ejemplo en numero 175 en los tres display"s de 7seg lo que debes hacer es lo siguiente:
Codigo:

ve  movlw d"5"                              ;se carga el dato a iluminar
      movwf portb                           ;se ilumina 1º 7seg
      pausa entre 10 a 20 ms         ;pausa para poder ser apreciada
      movlw d"7"                              ;se carga el dato a iluminar
      movwf portb                           ;se ilumina 2º 7seg
      pausa entre 10 a 20 ms         ;pausa para poder ser apreciada
      movlw d"1"                              ;se carga el dato a iluminar
      movwf portb                           ;se ilumina 3º 7seg
      pausa entre 10 a 20 ms         ;pausa para poder ser apreciada
      goto    ve                                ;bucle infinito



Tienes que tener en cuenta que tipo de 7seg estas utilizando si es anodo comun o catodo comun, para el caso de anodo comun el display correspondiente se ilumina con un valor de salida del pin del pic a cero y de forma contraria para el caso del catodo comun, esto es importante para el barrido de los display"s.

Suerte!!!Giño
     
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: Representar un numero en BCD
« Respuesta #4 en: 17 de Diciembre de 2005, 13:07:00 »
Hasta ahora perfecto, pero la cuestion es la siguiente:
si tengo en un registro el bite con el valor "11111111" que en decimal serian 256 y quiero visualizarlo en los displays para ello tendre que pasar este valor a BCD y esto es precisamente lo que no se hacer.
Tengo que descomponer este bite en tres registros o valores que me muestren en BCD el Nº 2,  5 y  6 por separado para poder pasarlos a su correspondiente display del modo que me indicas anteriormente.
Saludos.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
RE: Representar un numero en BCD
« Respuesta #5 en: 17 de Diciembre de 2005, 19:00:00 »
Ahí te pongo un par de ejemplos de rutinas que convierten un Byte en su correspondiente BCD para los 7 segmentos:

Ejemplo 1 (Generado por CCS PICC desde su correspondiente fuente en C)


 
Codigo:

 cblock 0x20     ;RAM en el Bank0                      
     l_digit
     h_digit
     valor
  endc


B2BCD
  CLRF   h_digit
  MOVF   valor,W
  SUBLW  09
  BTFSC  03.0
  GOTO   B2BCD2
B2BCD1
  MOVLW  0A
  SUBWF  valor,F
  INCF   h_digit,F
  MOVF   valor,W
  SUBLW  09
  BTFSS  03.0
  GOTO   B2BCD1
B2BCD2
  MOVF   valor,W
  MOVWF  l_digit
  RETLW  00



Esto mismo en CCS PICC

Codigo:

void bin2bcd(int valor){               // Funcion que convierte de Binario a BCD

   h_digit=0;

   if (valor>=10)
      {  do
         {  valor-=10;
            h_digit++; }
       while (valor>=10);   }

   l_digit=valor;
}


Ejemplo 2 Rutina desarrollada directamente en MPASM:

Codigo:

;SUBRUTINA DE BINARIO A BCD
BINBCD
  CLRF CENT       ;CENTENAS
  clrf MSD        ;DECENAS
  movwf LSD       ;UNIDADES
  gtenth movlw .10
  subwf LSD,W
  BTFSS STATUS,C
  goto OVERHAUL
  movwf LSD
  incf MSD, F
  goto gtenth
OVERHAUL
  MOVLW .10
  SUBWF MSD,W
  BTFSS STATUS,C
  GOTO OVER
  MOVWF MSD
  INCF CENT,F
  GOTO OVERHAUL
OVER
  RETLW 0
 


Pruebalas y me cuentas.  (La primera es la que yo uso)
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado mmonterei

  • PIC10
  • *
  • Mensajes: 49
RE: Representar un numero en BCD
« Respuesta #6 en: 18 de Diciembre de 2005, 04:20:00 »
Gracias Redpic.
He probado en el MPLAB la segunda opcion y ahora comprendo el modo de poder visualizar los digitos. Entre tu ayuda y la de vszener podre llevar a termino mi pequeño proyecto.

Un saludo a todos.Giño

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
RE: Representar un numero en BCD
« Respuesta #7 en: 18 de Diciembre de 2005, 05:19:00 »
Me encanta que te sirva.

A mandar que para eso estamos. Navidad

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania


 

anything