Recientemente he realizado un prototipo de calculadora electrónica equilibrada ternaria (TBEC) basada en tres niveles locgicos -1, 0, 1 (trit). Consiste en una memoria ternaria de 8 trit hecha con Flip-Flop D-latch ternario, 3 Full-Adder ternarios y un Half-Adder ternario, y finalmente por un decodificador ternario que permite ver los addenda de la operación (4 trit + 4 trit) y el resultado (5 trit) en LEDs. La gestión del teclado (1 dígito ternario), la habilitación de la memoria y el decodificador se gestionan a través de un microcontrolador PIC. El dispositivo se esquematiza en la siguiente figura:
Más tarde mejoré el proyecto interconectando el TBEC con un PC común. Como se ha dicho anteriormente, cada sumando está formado por 4 trit, por lo que la Calculadora puede procesar números que van desde -1-1-1-1 hasta 1111 (-40 a 40 decimales) y dar un resultado desde -10001 hasta 1000-1 (-80 a 80 decimales). A partir de ahora, por comodidad, denotaremos -1 como 2.
Por ello, el PC transmite a la unidad TBEC para cada sumando dos números, el primero de los cuales constituye la cantidad de cuarentenas en que se descompone el sumando y el segundo el resto de la diferencia entre el valor del sumando y la cantidad de cuarentenas en que se descompone este último
ADD1 = n40 * 40 + R1
ADD2 = n40 * 40 + R2
Donde R 1= ADD1 - n40 * 40
R 2= ADD2 - n40 * 40
Una vez recibidos los cuatro números que constituyen la adenda, la unidad ternaria realiza la suma, respectivamente, de las cantidades de cuarentena y los restos y la devuelve al PC. Por ejemplo, si se quiere sumar 85 + 41, se transmitirá 0012, 0122 para sumarlo a 0001, 0001, obteniendo 00010, 00120 en recepción.
La memoria formada por ocho flip-flops ternarios D latch almacena las dos sumas que se presentarán al sumador.
Como decíamos al principio, el PC se comunica con la unidad TBEC a través de un protocolo serie UART, por lo que la información viaja en paquetes de bytes. De ahí la necesidad de codificar el número ternario del 2222 al 1111 a través de los ocho bits de cada paquete individual, por lo que se requieren dos bits para cada trit de la siguiente manera: 0 <=> 00, 1 <=> 01, 2 <= > 10
En el ejemplo anterior, 0012 se codifica en un byte como 00.00.01.10. 0122 se codifica en un byte como 00.01.10.10
El resultado a la salida del sumador está en cinco trit por lo que necesita una codificación en dos bytes: 00010 se transmite como 00.00.00.00 00.00.00.10 00122 se transmite como 00.00.00.00 00.01.10.10
VIDEO DE YOUTUBE https://youtu.be/PmED4PfKZgc