Contador de programas informáticos de 8 bits (IC de contador de 4 bits) que cuenta cuando está desactivado

Hace un tiempo, construí una versión de la computadora Ben Eaters de 8 bits , en mi compilación, cambié solo las puertas AND, NOT y OR a todas las NAND. De lo contrario, el diseño era exacto. Lo probé antes de tocarlo y descubrí que todavía funciona. Hice una modificación en la RAM agregando un Arduino nano y 2 595 registros de desplazamiento para poder programar la computadora con solo presionar un botón. Todo eso funciona. El programa se carga con éxito en la RAM desde el Arduino. Sin embargo, la computadora en sí parece tener un problema ahora, ya que el mismo código que funcionó antes, no funcionará. He notado 2 problemas:

  1. El contador de programa, a pesar de estar deshabilitado (como se muestra en el multímetro a continuación), seguirá contando en ocasiones cuando no debería hacerlo. Sin embargo, es consistente, en mi programa de prueba, aproximadamente el 90% del tiempo contará en el primer ciclo de reloj (que no debería), luego nuevamente en el segundo ciclo de reloj, que debería y lo hace.
  2. Las pantallas de 7 segmentos de salida mostrarán un número aleatorio de vez en cuando, aparentemente justo antes de que cambie a un número diferente, sin embargo, no siempre. El número aleatorio tampoco aparece en ningún otro lugar, ya sea en el bus, en la memoria o en cualquiera de los registros.

El problema en el que me centro aquí es el contador, pero no estoy seguro de si los dos problemas pueden derivarse de un problema común.

El contador IC es un 74ls161

Lo que he probado:

  1. El más obvio es verificar si el chip está habilitado en el momento correcto para verificar si se trata de un problema de lógica de control. Según el multímetro, solo se habilita cuando debe estarlo.
  2. El chip no se está cargando, la única vez que debería cargarse es cuando ocurre una instrucción de salto de la cual no hay ninguna en mi programa de prueba, esto también se verifica dos veces con un multímetro.
  3. Intentando arreglar cables sueltos y cortocircuitos, si hay uno que lo esté causando, aún no lo he encontrado.
  4. Retiré el contador de la computadora y lo probé solo, y parece funcionar bien
  5. Intenté cambiar una EEPROM que pensé que era dudosa, ya que parecería "apagarse" al tacto, sin embargo, creo que esto fue algo corto, ya que no tiene ese problema ahora. Sin embargo, no puedo estar 100% seguro de que ese fuera el caso.
  6. Por último, he buscado patrones en el código de prueba de ensamblaje, pero los problemas ocurren un par de veces durante la ejecución de la prueba y ninguna instrucción se usa más de una vez. Pero normalmente ocurre durante la primera instrucción de microcódigo, que es consistente para cada instrucción de ensamblaje (enviar el contador al bus y el registro de dirección de memoria lo recibe).

Volveré a consultar con frecuencia y trataré de ser lo más activo posible aquí en el trabajo, ¡avíseme si necesita más información!

Descripción de las fotos, ya que no veo que aparezcan los subtítulos

  1. Paso 0, la computadora tiene el programa cargado y solo se reinicia (menos la RAM, por supuesto) ** Observe que el LED de control CE (habilitación de conteo) (abajo a la derecha) no está encendido (es difícil saberlo en la foto, pero es 't), lo que significa que no debe contar con el próximo reloj. Confirmado por multímetro
  2. El contador (arriba a la derecha, LED verdes, contados, a pesar de estar deshabilitado. AHORA está habilitado, ambos confirmados por la luz CE y el multímetro)
  3. Nuevamente se incrementó el contador, esta vez debería haberlo hecho, pero ahora perderemos una dirección de memoria completa

Paso 0, la computadora tiene el programa cargado y solo se reinicia (menos la RAM, por supuesto) ** Observe que el LED de control CE (habilitación de conteo) (abajo a la derecha) no está encendido (es difícil saberlo en la foto, pero es 't), lo que significa que no debe contar con el próximo reloj.  Confirmado por multímetro El contador (arriba a la derecha, LED verdes, contados, a pesar de estar deshabilitado. AHORA está habilitado, ambos confirmados por la luz CE y el multímetro) Nuevamente se incriminó el contador, esta vez debería haberlo hecho, pero ahora perderemos toda una dirección de memoria

Veo muy pocos condensadores de desacoplamiento en su configuración, tal vez uno o dos por tira de alimentación. Si usa principalmente LSTTL, eso no es suficiente. En el pasado, incluso cuando usamos una PCB adecuada, normalmente tendríamos cerca de un condensador por chip . Además, si está manejando LED con señales que también van a otra lógica, está comprometiendo seriamente sus márgenes de ruido en esas señales.
Sí, eso es muy cierto. Mi próximo proyecto utilizará placas de prueba en mucha menor medida. Lo tendré en cuenta para la próxima. Sin embargo, esta computadora funcionó antes, saqué el arduino para ver si tal vez el arduino estaba dibujando demasiado, pero no hizo la diferencia.

Respuestas (1)

Obtenga tapas con plomo de 0.1 uF, extienda los cables e insértelos desde el pin 7 (GND) al pin 14 (VDD) sobre la parte superior de cada IC.

Ha realizado cambios físicos y las inductancias que eran SUFICIENTEMENTE BAJAS antes de los cambios, pueden no ser lo suficientemente bajas ahora.

Otro riesgo es la falta de GROUND GRID.

============================================

De regreso en la universidad, implementé una máquina de tres en raya 70-TTL-IC.

Como sabía poco de EMI y aún no me preocupaba V = L * dI/dT, había visto la implementación profesional de grandes sistemas de circuitos integrados que usaban tableros de envoltura de alambre (Augat) que proporcionaban planos GND y VDD sólidos (perforados por miles de pines de envoltura de alambre). ).

Como no tenía presupuesto para tales sutilezas, simplemente incluí cables de tierra X+Y (y cables VDD solo X), soldados en cada X+Y en cada cruce.

Estos cables paralelos X+Y (5 para la dirección X y 18 para la dirección Y), soldados en cada oportunidad (4 * 17 = 68 nodos) eran una REJILLA DE TIERRA fina y aseguraban que los bordes TTL de 5 nanosegundos estuvieran siempre dentro de 0,1 pulgadas de un cable de tierra de retorno.

Con límites de derivación de 0,1 uF en cada uno de los 70 circuitos integrados (por lo general, el pin 14 a la red GND), no hubo problemas de depuración.

¿Qué es una rejilla de tierra?
@dka13 Una red por tierra que funciona en todas partes. Si es una lámina sólida de cobre, es un plano de tierra. Si es una malla de alambre, es una rejilla de tierra.
Para cualquiera que vea esto más adelante, acepto esto como una solución, ya que parece ser mi problema. Si encuentro algo más que arruiné y que está causando el problema, regresaré y cambiaré la respuesta.