# Representar binario usando displays BCD 7 segmentos



## solosito (Jul 25, 2011)

Hola buenas, lo primero es decir que trabajo con FPGA, en concreto con software de Xilinx, en él implemento un circuito lógico que luego cargo en la FPGA. Tuve que hacer un multiplicador de números en binario de 8 bits, el resultado es un número de 16 bits. Ahora me piden que exprese este resultado en decimal con displays BCD-7 segmentos, es decir que necesitaré 5 displays para representar el número ya que 2^16 = 65536, luego necesitaré un número por dígito.

Ahora bien, he pensado en hacer una tabla de verdad en la que dependiendo del valor binario que introduzca se activen o se desactiven los correspondientes segmentos de cada display e implementarla a base de puertas lógicas, pero esto supondría una tabla de verdad de 65536 filas, resultado muy grande, aunque después se pudiera simplificar mediante mapas de Karnaugh.

¿Alguna sugerencia? Se agradecerá eternamente. Un saludo!


----------



## Scooter (Jul 25, 2011)

Es cierto que hay una tabla de la verdad posible, pero de 64k posiciones y 7 columnas!!!

Yo siempre lo he convertido por soft; dividiendo y quedandome con el resto, tarda mas pero no es demasiado complejo.

Edito; perdón en realidad 35 columnas en la tabla de la verdad, casi nada.


----------



## solosito (Jul 25, 2011)

Tengo que construir el conversor de binario a BCD-7segmentos utilizando comparadores, puertas lógicas, contadores, multiplexores, etc...

A ver si consigo sacar algo, si se te ocurre cualquier cosa, avísame.


----------



## Scooter (Jul 25, 2011)

Ir dividiendo por 10, 5 veces concretamente.


----------



## solosito (Jul 25, 2011)

No te entiendo, puedo utilizar un registro de desplazamiento para dividir entre 10, pero ¿luego cómo paso las señales para que se enciendan los respectivos LED's de los correspondientes displays? Es decir, si tengo el 25 en decimal, que en binario con 16 bits es el: 0000 0000 0001 1001, ¿cómo hago para que los 3 primeros displays 7 segmentos muestren el 0, el cuarto muestre el 2 y el quinto el 5?

Edito: yo tengo un número en binario con 16 bits y lo tengo que mostrar en los displays, pero en decimal.


----------



## Gudino Roberto duberlin (Jul 25, 2011)

solosito dijo:


> No te entiendo, puedo utilizar un registro de desplazamiento para dividir entre 10, pero ¿luego cómo paso las señales para que se enciendan los respectivos LED's de los correspondientes displays? Es decir, si tengo el 25 en decimal, que en binario con 16 bits es el: 0000 0000 0001 1001, ¿cómo hago para que los 3 primeros displays 7 segmentos muestren el 0, el cuarto muestre el 2 y el quinto el 5?
> 
> Edito: yo tengo un número en binario con 16 bits y lo tengo que mostrar en los displays, pero en decimal.


Hola amigo, lo q tienes q hacer es un algoritmo que calcule el exceso "6" y genere todos los acarreos p q pueda mostrarte el valor en decimal q se necesita.
Necesitaras d un PIC p eso!!
Con tablas de verdad NI se t ocurra, acabaras desistiendo antes de empezar!!!


----------



## solosito (Jul 25, 2011)

Si la cosa es que la tengo que hacer con lógica digital para luego cargarlo en una FPGA, tengo que servirme de acumuladores, sumadores,registros de desplazamiento, contadores, multiplexores, etc. no puedo usar código, con código si sé hacerlo. Se me queda una cosa más o menos así (este es parte del multiplicador del que he hablado más arriba): 

http://imageshack.us/f/694/scrsht.jpg/

Lo que ves en la captura son multiplexores, contadores, puertas...


----------



## seba7_sin (Jul 25, 2011)

uhh nunca habia visto un programa asi! que construyas circuitos y te lo pase a codigo! debe estar muy bueno.

Bueno para hacer el circuito podes dividir unidades, decenas, centenas, etc con contadores que se reseteen al llegar a 10, conectados en cascada.
Despues si podes hacerte una tabla de verdad que pase el valor de cada uno de los contadores (4 bits binarios) a display de 7 segmentos. Y la simplificas con Karnaugh y la construis con compuertas.

Suerte!


----------



## Gudino Roberto duberlin (Jul 25, 2011)

solosito dijo:


> Si la cosa es que la tengo que hacer con lógica digital para luego cargarlo en una FPGA, tengo que servirme de acumuladores, sumadores,registros de desplazamiento, contadores, multiplexores, etc. no puedo usar código, con código si sé hacerlo. Se me queda una cosa más o menos así (este es parte del multiplicador del que he hablado más arriba):
> 
> http://imageshack.us/f/694/scrsht.jpg/
> 
> Lo que ves en la captura son multiplexores, contadores, puertas...



Ok, bueno una vez arme un pequeño controlador con pura logica secuencial y combinacional, mas d uno me dijo q estaba loco.... pero bueno me llevo 3 años armarlo cuenta con casi 100 integrados CMOS, puede hacer calculos matematicos (suma,resta,conversion de codigo binario a decimal), le di la aplicacion de domotica, y controla una alarma... pero aun asi tiene una memoria en donde almacena registros y demas!!! .-


----------



## MrCarlos (Jul 25, 2011)

Hola solosito

Según entiendo por tu mensaje original, Dices:
_Tuve que hacer un multiplicador de números en binario de 8 bits, el resultado es un número de 16 bits._

Supongo que son 8 BIT’s para el multiplicando y otros 8 BIT’s para el multiplicador.
Con esa cantidad de BIT’s puedes multiplicar hasta un máximo de: 255 x 255 = 65,025 = 11111111 x 11111111 = 1111111000000001, si nó me equiboco.
Y Si, se requieren 5 Display’s de 7-seg. para mostrar esa cantidad.

Entiendo, tambien por toda la mensajería que se ha generado que ya tienes el multiplicador por lo tanto solo té falta un decodificador de binario natural a BCD para poder mostrar en los Display’s el resultado de la multiplicación en DECIMAL.

Hay 3 o cuatro métodos para convertir de binario natural a BCD. El que a mí me parece más sencillo es el que utiliza una memoria EEPROM en la cual las direcciones son el número binario y el contenido de esas direcciones en el número en BCD.
Se requiere una EEPROM de 16 BIT’s de direcciones (Address BUS) y 20 En la salida de datos (Data BUS).
Como no creo que exista ese tipo de EEPROM se pueden hacer arreglos con varias EEPROM para lograr esa cantidad de BIT’s en el Address BUS y DATA BUS.

Asómate por acá; en este enlace hay varios circuitos que te pueden ayudar a continuar con tu proyecto.
_https://www.forosdeelectronica.com/f25/convertir-valores-binarios-bcd-3757/index4.html#post502432_

saludos
a sus ordenes


----------



## solosito (Jul 26, 2011)

Hola, lo primero es agradeceros a todos el interés.

MrCarlos la cosa es que yo tengo 2^16 = 65536 posiciones, si fueran menos sería más fácil hacerlo, pero ponerme a escribir tantas posiciones es una locura, te adjunto un ejemplo de una memoria ROM de 256 posiciones ya hecha para que le eches un ojo y me digas algo, la tengo que editar con el bloc de notas, pero he copiado el contenido a un .doc para que me deje subirlo. Necesito ayuda, pero psiquiátrica, porque me estoy volviendo loco...

Gracias ante todo.


----------



## Scooter (Jul 26, 2011)

¿No puedes hacer un divisor por 10?


----------



## solosito (Jul 26, 2011)

Scooter dijo:


> ¿No puedes hacer un divisor por 10?



No, trabajo con electrónica a nivel MSI. De todas maneras no entiendo para qué sería el divisor por 10.


----------



## MrCarlos (Jul 26, 2011)

Hola solosito

Cierto son demasiados números.
Pero en tu sistema o programa no hay un *For y Next* ?? ó un *While y Do* ??.
Se existen algunas instrucciones como esas ya no tendrías que escribir tantos números. El propio programita lo haría.

Habría que declarar las variables Correctamente.

For BinarioX 0 To 65536
For DecimalX 0 to ???
Aquí:
Almacenar en Dirección BinarioX El DecimalX.
Next DecimalX
Next BinarioX
EndIF
EndIF

saludos
a sus ordenes


----------



## solosito (Jul 27, 2011)

No puedo programar nada, esa es la cosa. Ya lo tengo casi terminado, cuando lo acabe os subiré  el esquemático por si queréis echarle un ojo. Muchas gracias por todo.


----------



## MrCarlos (Jul 28, 2011)

Hola solosito

Bueno, no olvides subir tu esquemático.

Por otra parte, en el enlace que te adjunté hay un convertidor de binario natural a BCD hecho con contadores y compuertas lógicas. Crees que te serviría ??.
Es el de capitanp.
En el mensaje #15 (15/Nov/2006)
_https://www.forosdeelectronica.com/f25/convertir-valores-binarios-bcd-3757/index4.html#post502432_
Fue desarrollado con el simulador CircuitMaker.

saludos
a sus ordenes


----------



## Chico3001 (Jul 29, 2011)

solosito dijo:


> Hola, lo primero es agradeceros a todos el interés.
> 
> MrCarlos la cosa es que yo tengo 2^16 = 65536 posiciones, si fueran menos sería más fácil hacerlo, pero ponerme a escribir tantas posiciones es una locura, te adjunto un ejemplo de una memoria ROM de 256 posiciones ya hecha para que le eches un ojo y me digas algo, la tengo que editar con el bloc de notas, pero he copiado el contenido a un .doc para que me deje subirlo. Necesito ayuda, pero psiquiátrica, porque me estoy volviendo loco...
> 
> Gracias ante todo.



Un truco... realiza la numeracion en excel, luego solo copia y pega al notepad...


----------



## Scooter (Jul 29, 2011)

Pensando en binario en realidad son 15 bits ya que el bit menos significativo es el mismo en BCD que en binario. Ya hemos ganado un poco.


----------



## Gudino Roberto duberlin (Jul 29, 2011)

Scooter dijo:


> Pensando en binario en realidad son 15 bits ya que el bit menos significativo es el mismo en BCD que en binario. Ya hemos ganado un poco.



¿? Como dices amigo q el bit menos significativo... es igual?


----------



## Scooter (Jul 29, 2011)

Si, haz la prueba: 255 en binario es 11111111 y en bcd es 0010 0101 0101 ves probando y verás que el bit menos significativo (el de la derecha del todo) es siempre el mismo.


----------



## Gudino Roberto duberlin (Jul 29, 2011)

Scooter dijo:


> Si, haz la prueba: 255 en binario es 11111111 y en bcd es 0010 0101 0101 ves probando y verás que el bit menos significativo (el de la derecha del todo) es siempre el mismo.



 Ah, tu te referias al valor numerico!! bien, ese bit toma el valor alto si el numero es impar! Bien.-


----------



## Scooter (Jul 29, 2011)

Yo haría la conversión de binario a bcd y después pondría cinco módulos de bcd a 7 segmentos.


----------



## solosito (Ago 2, 2011)

Ya está hecho y tengo preparado el mensaje para postearlo, estoy esperando a que se cierren las actas para que no haya ningún problema publicándolo.

Un saludo.


----------

