# Proyecto calculadora



## sindrome (Ago 11, 2018)

Hola colegas!!!

Estoy diseñando una calculadora, y los requisitos son; utilizar puertas lógicas, sumadores tipo 7483, comparadores tipo 7485, multiplexores, desplazamiento de registros, y un ALU 74181 (Unidad lógica aritmética), ¿qué tiene que hacer la calculadora?, sumar restar, multiplicar y dividir, 4 bit binarios, y se tiene que visualizar en displays de 7 segmentos.
Aún no tengo un esquema, he estudiado el datasystem del ALU 74183, y parece ideal, suma y resta 4 bit, pero no veo cómo hacer la multiplicación y la división, creo recordar que desplazando a la derecha un número binario lo multiplico por 2, y sí lo desplazo a la izquierda lo divido por 2, pero sí lo tengo que multiplicar por 3, 5 7, 9, ¿cómo lo hago?.

Post-data: el signo (+/-), queda excluido de la calculadora.

	Mensaje automáticamente combinado: Ago 11, 2018

Tengo hecho algunos proyectos parciales del proyecto calculadora, pero sin la ALU 74181:

Son un sumador de 3 bits, otro de 4 bits y un restador de 3 bits

	Mensaje automáticamente combinado: Ago 11, 2018

Alguien sabe algún simulador de Pc que pueda utilizar el integrado 74181 (unidad lógica aritmética), yo tengo el aplicativo Crocodrile Technology y el Livewire, para hacer simulaciones y no tengo la librería que incluya este integrado.


----------



## DJ T3 (Ago 11, 2018)

sindrome dijo:


> Aún no tengo un esquema



Entonces elabora uno, y sobre eso trabajamos


----------



## sindrome (Ago 11, 2018)

Alguien sabe algún simulador de Pc que pueda utilizar el integrado 74181 (unidad lógica aritmética), yo tengo el aplicativo Crocodrile Technology y el Livewire, para hacer simulaciones y no tengo la librería que incluya este integrado


----------



## ricbevi (Ago 11, 2018)

Este de aquí verifique que figura entre los IC soportados.

Saludos.

Ric.


----------



## pandacba (Ago 11, 2018)

Bajate el multisim Blue es muy bueno
Leete lo que adjunte en pdf


----------



## sindrome (Ago 12, 2018)

Ya he instado el simulador Multisim, y estoy practicando con el 74181 ALU (unidad lógica aritmética), pero sigo sin tener una idea clara del proceso de multiplicación y división, el Pdf que me adjunta Pandacba está en portugués, y después de traducirlo, entiendo que utiliza desplazadores de registros, flip flop y EPROM, esto último no puedo utilizarlo por prohibición en las bases del proyecto, deduzco que hay dos programas en Visual Basic en una RAM que se ejecutan en un microprocesador AT 28C64, imposible en mi proyecto.
No he puesto ningún esquema, salvo los parciales de suma y resta, porqué no tengo claro el concepto de la operativa, no es por vagancia, ni quiero que alguien me pegue un esquema completo de una calculadora, sino que me de una idea del concepto de la multiplicación y división de dos números binarios, que no sea por dos, que entiendo que con un desplazador de registro en paralelo lo consigo. Sólo necesito una idea, después armaré el esquema y discutiremos si está bien hecho o es mejor utilizar otras puertas lógicas.

Gracias de antemano.


----------



## pandacba (Ago 12, 2018)

Aca tenes más ayuda http://arantxa.ii.uam.es/~ig/practicas/enunciados/prac3/multiplicacionbinaria.pdf
http://www.csbio.unc.edu/mcmillan/Media/L10Spring2013.pdf
Recorda que multiplicar A X B equivale a sumar A+A tantas veces como B
Busca la hoja de datos de los CI 74284 y 74285
Combinational Multiplier


----------



## sindrome (Ago 12, 2018)

He realizado un multiplicador de 4 bits binario que funciona bien, es por el método que Pandacba me comenta, utilizando sumadores en cascada, con puertas AND como multiplicador individual, ahora tengo que decodificar la salida binaria a un código BDC para visualizarlo en display de 7 segmentos (yo había realizado uno que codificaba hasta 30 decimal)
¿Qué os parece?  alguna sugerencia.


----------



## pandacba (Ago 12, 2018)

Esta bien, captaste la idea y la llevaste a la práctica


----------



## sindrome (Ago 13, 2018)

Siguiendo con el proyecto calculadora, ya tengo la opción de multiplicación en paralelo, para ello utilizo dos integrados IC 74284 y IC 74285, lo he probado con el aplicativo ISIS (mi primera vez), reduce mucho la opción anterior de la multiplicación por sumadores parciales.
Mi siguiente objetivo parcial es hacer un divisor de 4 bits, ¿alguna sugerencia?


----------



## pandacba (Ago 13, 2018)

Lee un poco por aquí división binaria


----------



## sindrome (Ago 14, 2018)

Hola colegas.

La operativa a una división binaria es bastante complicada, no sigue una pauta definida. Qué yo sepa no hay un IC circuito integrada que haga esta operación, para la suma sí hay varios, y para la multiplicación también, aunque con sumadores en cascada se puede realizar la multiplicación, ya que multiplicar es una suma sucesiva. Sobre la resta, el truco está en sumar el minuendo con el inverso de sustraendo, y sumarle un uno (A-B = A+(invertir B)+1), con un sumador tipo IC 7483 invierte las entradas del número B y le sumas el acarreo de entrada, y ya está, pero dividir no es una sucesión de restas, ni conozco ningún truco, bueno, sí tuviera que dividir por 2 desplazaría a la derecha los bits, pero no es el caso, la división a de ser por cualquier número binario de 4 bits (0000 a 1111).
Sí analizo la resta, es una comparación de números que multiplico por el divisor para ver si caben en el dividendo, y el coeficiente es el resultado de la división. Si me olvido de las calculadoras y de mis conocimientos en matemáticas, y me posiciono a la antigua usanza a realizar una división de dos números, la metodología es multiplicar el divisor por 1, y comparar si es igual al dividendo, sino repetir la multiplicación por 2, y comparar, sino por 3 y así sucesivamente hasta que coincida, o sea el que más se aproxime sin pasarse al valor del dividendo.
De esto deduzco que voy a necesitar un comparador tipo IC 7485, registros de desplazamiento y algún contador binario.

Cualquier ayuda es bienvenida.


----------



## pandacba (Ago 14, 2018)

Así como el producto es una suma sucecisa, la división es una resta sucesiva.
Dividir un número A por otro B, es restar B a A hasta que el resto sea 0 o meor que b, la cantidad de restas será el cociente


----------



## sindrome (Ago 14, 2018)

Demuéstrame esta teoría Pandacba


----------



## pandacba (Ago 14, 2018)

Así como la resta es lo contrario a la suma, la divsión es lo contrario al producto.
A*B=C e implica sumar B tantas veces como lo indica A
Entonces C/B=A 
Si A=4 y B=3 =>12 (3+3+3+3)
C/B=A implica que 12/3=4 (12-*3*=9-*3*=6-*3*=3-*3*=0) la cantidad de veces que se resto 3 es el cociente cuando el resto es 0 o menor que B


----------



## sindrome (Ago 14, 2018)

Tienes razón, esa formula también es valida, pero inviable en un circuito lógico, habría que restar tantas veces el divisor del dividendo (15-1=14-1=13... hasta que 1-1=0), que tendría que poner 15 sumadoras en cascadas y entre medio un circuito comparador, además un contador que cuente cuántas veces se puede restar para que salgo el coeficiente, o sea el resultado.


----------



## sindrome (Ago 14, 2018)

No se me ocurre nada, estoy bloqueado, no logro encontrar una idea lógica para desarrollar un divisor de 4 bits binario.

Si alguien sabe algo, aunque sea una pista o una idea.
Gracias de antemano.


----------



## Gudino Roberto duberlin (Ago 14, 2018)

Hola, otra manera de dividir sin cociente fraccionario, consiste en dividir a lo tradicional cómo se haría con papel y lápiz.
Por ejem. si quieres dividir 10 entre 3.
Multiplica 3 por un número alto, digamos 15, que es el máximo número en binario a 4 bits.
Luego, cómo generará desborde por ser mayor que diez, reduces el factor, hasta que el producto sea igual o menor a 10.


----------



## sindrome (Ago 15, 2018)

Hola colegas.

Ya he realizado un esquema del divisor, pero no me ha gustado mucho porqué lo veo muy inexacto, cumple con el enunciado del proyecto (sin comas y sin signos +/-), sin embargo tomaré este esquema como un previo al definitivo divisor.
Dentro del proyecto calculadora, el divisor es sin duda el más complicado de realizar. La idea de hacer una sucesión de restas, no es viable por su complejidad y tamaño, mi primera aproximación fue la de pillar el divisor y con un registro de desplazamiento moverlo hacía la derecha, después compararlo, sí daba igual o menos que el dividendo, restar (sumar el inverso más el complemento), sino desplazar el divisor una posición a la izquierda, y volver a comparar, además había que realizar el coeficiente (el resultado), de forma simultanea, y de mayor valor a menor, dependiendo sí el divisor podía restar o no, (un 1 si resta y un 0 sino resta), cuándo intenté plasmar esto con circuito integrados convencionales, sin EPROM me pareció imposible.
La idea de Roberto es la que he pillado, la de calcular cuál es el número del coeficiente que multiplicado por el divisor es igual o se aproxima más, sin sobrepasar el dividendo, aprovechando el esquema de la multiplicación donde A x B = C, he puesto un contador binario en la posición de A y lo he puesto ha contar del 15 al 0 (1111 hasta 0000), todos los números de ese contador se multiplican con B, el divisor, mientras 2 comparadores de 4 bits analizan el resultado C con el valor del dividendo, cuándo sale que son iguales, o es la primera vez que cambia a por debajo del valor de dividendo, mando una señal al contador para que pare ENABLE, el valor que dar lo visualizo y es el coeficiente, o sea el resultado de A/B.

Post data: necesito más ayuda sobre divisores binarios.


----------



## pandacba (Ago 15, 2018)

Otra forma es sustraer el número de esta forma  A -B=C luego compara  C con B si es igual o mayor hacer A=C y cada vez que haces esto se aumenta un contador hasta que da 0 o menor que B
Te comento que las primeras calculadoras digitales basada en circuitos TTL tenian varias decenas de CI's


----------



## Gudino Roberto duberlin (Ago 15, 2018)

Hola, otra manera más eficiente, pero también más complejo, es hacer un divisor cómo el que plantee, pero de aproximación sucesiva.
Es decir volvemos al ejem. inicial.
Queremos dividir 10 entre 3
Entonces, habilitamos el bit más ponderante del divisor 1000.
Multiplicamos 1000*0011=desborde.
Ahora multiplicamos 0100*0011=desborde.
Luego multiplicamos 0010*0011=menor que diez.
Aquí mantenemos el bit en alto porque la comprobación es menor  y por último probamos con el bit menor.
0011*0011= menor que diez.
En conclusión, el sistema va, probando del bit de mayor peso hacia el menor. Es decir en cuatro pasos se alcanza el valor más próximo.
Si, luego de que se comprueba que el resultado es menor, entonces ese bit se mantiene en alto y se continúa la selección bit a bit hacia el menor peso.
Aclarando aún más
(A) sería ntro. divisor.
(B) Ntro. dividendo.
(X) valor 0 o 1 según comprobación.
1er. Paso 1000*(A)  < B
2do. Paso X100*(A)     "      "    "
3er. Paso XX10*(A)      "     "      "
4to. Paso XXX1*(A)      "     "     "

Cómo generar la lógica?
Puede hacerse con un latch D de cuatro bits con el agregado de compuertas OR en su entrada y  a su salida. Luego con un secuenciador tipo 4017, generar el barrido de bits del mayor al menor.
Ésto lo implemente una vez en un ADC de 16 bits para digitalizar audio.


----------



## pandacba (Ago 15, 2018)

Fijate en esto....


----------



## sindrome (Ago 16, 2018)

No pillo el concepto de la división binaria, he estado hablando con un matemático, y dice que debería ser como una multiplicación inversa, he montado una cuadricula de restadoras similar al multiplicador, con su acarreo de entrada y su acarreo de salida, pero no me sale nada lógico. ¿wué estoy hacienda mal?.


----------



## pandacba (Ago 16, 2018)

Dado A/B=C encontrar C tal que C*B=A


----------



## sindrome (Ago 16, 2018)

Pandacba, eso que comentas ya lo hice ayer, y lo colgué en la respuesta 19, pero sí lees mi comentario, verás que no es muy exacta, veo la solución muy aleatoria, poner un contador binario que busque el número que multiplicado por el divisor sea igual o se aproxime más sin pasarse del dividendo, no me parece una solución lógica, seguro que tiene que haber otra idea que desarrolle el divisor de una manera más lógica.

Un saludo, y sigo buscando.


----------



## Gudino Roberto duberlin (Ago 16, 2018)

sindrome dijo:


> Pandacba, eso que comentas ya lo hice ayer, y lo colgué en la respuesta 19, pero sí lees mi comentario, verás que no es muy exacta, veo la solución muy aleatoria, poner un contador binario que busque el número que multiplicado por el divisor sea igual o se aproxime más sin pasarse del dividendo, no me parece una solución lógica, seguro que tiene que haber otra idea que desarrolle el divisor de una manera más lógica.
> 
> Un saludo, y sigo buscando.


Hola, has leído el post #21?
Dame hasta mañana y subo algún esquema orientativo.


----------



## pandacba (Ago 16, 2018)

Es la forma como nos enseñaro a dividir en la escuela.....
El sistema de resta que te comente es lo más aproximado.
Una calculador Fate de aquellos años tenía tres tableros uno encima del otro lleno de circuitos lógicos, en total eran algo más de cien.
y se basan como te dije más arriba en la resta, el resultado es el contador





También busca 74LS382


----------



## sindrome (Ago 16, 2018)

Si, lo he leído esta mañana, hablas de utilizar un Flip Flop tipo D, y un contador decimal, pero no veo la utilidad real, en sí sería un circuito muy parecido al realizado anteriormente.
Ah... el último párrafo no lo entiendo "Ésto lo implemente una vez en un ADC de 16 bits para digitalizar audio".

	Mensaje automáticamente combinado: Ago 16, 2018

Pandacba, ¿has visto el esquema del matemático que me ha sugerido, pero que no me ha salido nada? o ¿bien lo he hecho mal?
Toda la mañana he estado dándole vueltas , y tengo muchos conceptos, pero no me sale nada positivo.


----------



## pandacba (Ago 16, 2018)

ya tienes el restador que funciona solo debea añadir  que haga lo siguiente
Tomado como base estoa
A-B=C si C =0 fin si C es mayor que B  +1 to counter hacer A=C y de nuevo A+B=C si C=0 fin si C>B +1 al contador cuando llegua a C= 0 o menor que B tu contdor es el resultado
para ello echa mano a todo los complementos por ejemplo la comparación haces con los CI's comparadores


----------



## Gudino Roberto duberlin (Ago 17, 2018)

Hola, aquí puedes ver un ejemplo de división por aproximación sucesiva en 4 pasos.


----------



## sindrome (Ago 17, 2018)

Hola colegas!!
Ya he realizado el esquema de una división de 4 bits, sin duda es el más difícil de las 4 reglas de las matemáticas. Partiendo porqué nadie hace una división a mano, y los que se acuerdan, lo hacen por aproximación, o sea buscan un valor que multiplicado por del divisor sea el dividendo o se aproxime más sin pasarse, pero a la vieja usanza, cómo yo lo he hecho, restando el divisor del dividendo hasta que sea cero o sea menos que el valor del divisor.
Cuándo no se tiene el concepto claro de lo que quieres, no te sale nada bueno, eso me pasó a mí, después de hacer la suma, la resta y la multiplicación binaria de 4 bits, ataqué el divisor sin una idea clara, y todos los proyectos que iniciaba fracasaban; divisor en cascada, divisor en paralelo, registros de desplazamientos... y un sin fin de ideas se me pasaron por la cabeza, pero fue cuándo decidí hacer restas con papel y lápiz, y no pensar en el resultado, sino como los tontos, cuando descubrí el diagrama del esquema. Yo comparaba los números, y sí el divisor era menor o igual restaba, y eso lo hacía tantas veces podía, y después contaba las veces que había realizado la resta. Y esa era la idea, por eso he puesto un comparador de 4 bits, y una sumadora, que con el truco de A+B = A + el invertido de B más el complemento, para que sólo pille el dividendo la primera vez, he puesto un selector de datos, que por medio del contador binario, cuándo ha hecho la primera resta, y marca 1, le cambia al selector de datos para que pille la resta, y no el dividendo original. Para que los datos de la restas vuelvan al principio he utilizado unos Flip Flop FIFO, o sea básculas tipo D que dejan pasar los datos en paralelo, con cada pulso que registra el contador binario, lo que quiere decir que por cada Clock, se resta y se vuelve a subir el resultado arriba, para que vuelva a comparar, cuándo el comparador dice A<B, quiere decir que el divisor es más pequeño que el parcial de restas que queda, y es ahí que el contador recibe un ENABLE, se paraliza. El resultado es el valor del contador que ha contado las restas, y lo que queda del dividendo es el resto.

Muchas gracias a todos por vuestra ayuda e ideas.

Post data: aún queda pulirlo un poco, sí pongo un 0 en el divisor, el sistema no para, ya que intenta restarlo, siempre sale el mismo resultado y es un ciclo cerrado, pero con unas puertas lógicas haré que se resetee y marque 0.


----------



## pandacba (Ago 17, 2018)

Me alegro que captaras la idea de los complementos y del sumador.
Ahora tenes que hacer una comparación adicional que el dividendo sea >0


----------



## sindrome (Ago 17, 2018)

Gracias Pandacba, no sé que quieres decir con "que el dividendo sea >0", la calculadora no tiene que tener números negativos, ni comas, sí el dividendo es cera, y pones cualquier número en el divisor, el circuito se para, porque en la primera comparación de los 4 bits, saldría A<B, y el contador marcaría cero, ya que inhabilitaría el contador.


----------



## pandacba (Ago 17, 2018)

Perdón me exprese mal me refería al divisor


----------



## sindrome (Ago 17, 2018)

Que el divisor sea 0 es un pequeño fleco, que lo ajustaré con algunas puertas AND sobre el Reset o ENABLE del contador, no me preocupa mucho ese detalle. Me gusta cómo ha quedado, porque poniendo el clock muy lento, puedes ver como va restando cada vez que el comparador a dejado pasar el número, y como se queda el resto paralizado cuando el comparador le dice al contador que pare, porque ya es más bajo que el divisor.
Los estudiantes de hoy deberían saber hacer restas a la vieja usanza, y saber que es un resto de un dividendo, hoy todo es con decímales, cómo si todo se pudiera trocear, por ejemplo: tengo 10 autos y se lo quiero dejar a mis 3 hijos, cuanto autos se quedarán cada uno, en la calculadora sale que 3,33 autos le correspondería a mis 3 hijos, pero un auto no se puede dividir, y la verdad sería, que 3 autos tendrían cada hijo, y un auto quedaría de resto.


----------



## pandacba (Ago 17, 2018)

Lo que has aprendido haciendo las operaciones básicas te da la dimensión de lo que se podía lograr con los CI lógicos, te da una perspectiva distinta y un manejo de información que solo así se logra.
Cuando tengas todo depurado sería bueno que publiques tu trabajo y te armes un tutorial si te animas


----------



## sindrome (Ago 21, 2018)

Hola colega!!!

Llevo mucho tiempo utilizando el aplicativo Crocodile Technology, pero se me está haciendo pequeño para los diseños de circuitos digitales, tengo también el aplicativo Livewire, sin embargo es muy complicado de utilizar, tardas mucho en formar un circuito digital, estoy mirando los simuladores de circuitos digitales que hay en el mercado, incluso los online, pero no me decido por ninguno, mis proyectos suelen ser digitales; puertas lógicas, contadores, sumadoras, decodificadores, multiplexores, flip-flop, comparadores, ALU... etcétera. ¿algún consejo?, ¿algún aplicativo especifico?

Gracias de antemano.


----------



## Gudino Roberto duberlin (Ago 21, 2018)

Hola, un simulador muy completo es MultiSim, en mi caso no tan práctico de utilizar respecto a Proteus, pero éste no es tan completo en librearías cómo el anterior.


----------



## sindrome (Ago 21, 2018)

Gracias Roberto, tengo los dos que me comentas, y sí el MultiSim es más complicado de utilizar, mientras que el Proteus parece más sencillo, pero con menos librerías, la verdad es que cuándo te acostumbras a un simulador, pillas una rutina, que dificulta pasarte a otro... bueno tendré que adaptarme a lo nuevo, sí quiero progresar, y el Proteus parece que es el más extendido por el foro.

Gracias.


----------



## pandacba (Ago 21, 2018)

Es el más extendido por el foro y el que más dolor de cabeza trae, el Multisim no es díficil de manejar, tiene opciones muy poderosas y herramientas únicas de desarrollo, Multisim es una parte de muchas herramientas muy poderosas como labview y otros que te permitiran llegar más lejos

	Mensaje automáticamente combinado: Ago 21, 2018

Logisim es un producto interesante, multimedia logic.14
Atanua es otro buen producto


----------



## sindrome (May 19, 2022)

Este proyecto está orientado a realizar una calculadora con circuitos lógicos, como el integrado 74LS284 y 74LS285 han dejado de fabricarse, que son multiplicadores binarios de 4 bits, he diseñado este circuitos con sumadores en cascada, flip-flop tipo D síncrono, y un contador binario,
El truco está en programar el contador en descendente cargando el inicio con el numero binario multiplicador, cuando llega a cero queda paralizado el contador a través de una NOR cuádruple, que conecta con el ENABLE del contador. De esta manera los sumadores se recargarán tantas veces como el contador permita el Clock, que dispara a los flip-flop D, o sea permite que los sumadores vayan sumando tantas veces como el número binario multiplicador prefijado. Hay que tener en cuenta que cuando el primer sumador se desborde, activará el carry de salida, que corresponderá al número decimal 16, esto será el número más bajo del segundo sumador, y como el primer sumador también se realimenta a través de los flip-flop D síncrono, sus salidas serán=16, 32, 64 y 128, mientras evidentemente el CI flip flop D que realimenta el primer contador, su salida serán=1, 2, 4 y 8. La puerta AND que figura está para desactiva el Clock sobre los flip flop cuando la cuenta del contador está a cero, ya ha acabado de calcular la multiplicación.
Si alguien la quiere probar aquí la adjunto en fichero Proteus 8


----------



## sindrome (May 22, 2022)

El divisor de 4 bits secuencial es sin duda el más complicado de mi proyecto de calculadora básica, ya que no existe un circuito integrado divisor específico, sin utilizar un software sobre un chip aritmético reprogramable. En los libros de electrónica de circuitos lógicos la división no sale esquemas electrónicos, sólo un diagrama del concepto teórico de la división, por eso y porque la división que se estudia es por aproximación de un número que multiplicado por el divisor, sin pasarse del dividendo, y restando el resultado, pero hay que tener en cuenta que la verdadera división es una sucesión de resta, tomando el dividendo como principio, y que muchas veces el resultado no es exacto, quedando un resto, por lo que mi proyecto de divisor tiene que figurar dos marcadores finales; uno con el coeficiente o resultado final, y dos con el resto, si lo hubiera.

Mi divisor parte de un circuito integrado selector o multiplexor de dos números de 4 bits y una salida, el control lo realiza un flip flop R/S tipo cerrojo, que después del primer pulso de clock cambia la entrada, y permanece en esa entrada que es recargada por el restador, que es un circuito integrado sumador, con la entrada de divisor invertida y la activación positiva del carry de entrada, para que el circuito sea secuencial ha puesto un circuito integrado flip flip d tipo latch, que a cada pulso de clock recarga con el nuevo número al restador. Todo este proceso es controlado por un comparador de 4 bits que según sea su resultado; si el divisor es menos o igual al dividendo continúa los pulsos de clock, pero sí es mayor bloquea los pulsos de clock, eso que queda a la salida de los flip flop es el resto. Paralelamente he montado un simple contado binario que cuenta estos pulsos del clock, y que también se bloquea cuando el divisor es menor que el dividendo, la salida de ese contador es el resultado final o coeficiente de la división. He tenido que utilizar unas puertas lógicas, como una cuádruple NOR, para eliminar el error de una división con el divisor a cero, ya que este circuito secuencial quedaría en un ciclo infinito buscando que las restas secuenciales dieran un resultado (X-0=X), con algunas puerta AND y OR, bloqueo el contado binario y el circuito integrado flip flop tipo latch, para que de cero en los dos marcadores (resto y coeficiente), evidentemente antes de cada operación de división hay que pulsar el reset para borrar los contadores y dejar listo el selector para que tome el número dividendo como principio de las restas.


----------

