¿Cómo es que la entrada NAND A (pin 2) alguna vez llega al máximo?

2

Aquí hay un circuito que te permite detener un Atari 2600: enlace

(Artículo completo en enlace )

Soy bastante bueno en la comprensión / diseño de circuitos lógicos, pero todavía soy un poco esquemático sobre todas las implicaciones de los condensadores y algunos otros efectos analógicos. Por lo general, si me quedo mirando el esquema del circuito lógico el tiempo suficiente, eventualmente lo resolveré, pero este me ha dejado perplejo.

Una consola no modificada tiene pines 2 & 3 del puente puenteado. Normalmente, un pin en el chip TIA detendrá brevemente la CPU de vez en cuando al poner el pin RDY bajo (para DMA o actualización de memoria, no 100% seguro). Dado que solo hay ciertas ventanas de tiempo en las que es válido volver a colocar el RDY, el circuito aprovecha la operación existente y espera a que el TIA retire la línea a un nivel bajo, y luego no deja que se eleve si el interruptor está cerrado. Abra el interruptor de nuevo, y las puertas C y D deberían comenzar a pasar la salida TIA a la CPU nuevamente.

Lo único que no puedo entender es cómo el pin 2 es jalado. Me parece que el diodo D4 permitirá que el interruptor tire del pin lo, pero debería bloquear el flujo de corriente en la dirección opuesta para que el R2 no pueda hacer su trabajo. Estoy dispuesto a aceptar que inicialmente podría ser alto en función de un comportamiento menos definido de las puertas lógicas cuando se aplica el poder, y el límite ayudaría a mantener un sesgo constante ... pero no me importaría escuchar comentarios sobre eso también.

Supuestamente, este circuito funciona, y muchos lo han implementado ... Pero la razón por la que lo estoy investigando es que un amigo acaba de construir el circuito como se muestra (dos veces) y no está funcionando para él. El Atari funciona bien cuando se enciende con el interruptor abierto, y se detiene cuando el interruptor está cerrado. Pero nunca sale de pausa cuando se abre el interruptor. Y eso es exactamente lo que esperaría de este circuito, así que me hace pensar que quizás no esté muy lejos.

¿O hay algo en el circuito que permite que el pasador se levante alto y solo me estoy perdiendo? ¿Se trata de un caso límite en el que puede o no funcionar dependiendo de los componentes específicos utilizados?

Un par de otros puntos pequeños que me gustaría comprobar mi comprensión de:

  • Función del menú desplegable R1 ... Los diodos D1 y D2 solo permiten que las salidas TIA y NAND B activen la entrada hi del pin 1, por lo que esto lo desvía
  • Propósito del pull-up R3 ... Tal vez la salida de TIA sea un colector abierto y el pin RDY se extraiga internamente ... así que esto es necesario para sesgar este nodo hola.
  • Propósito de C1 ... Probablemente debounce
  • Elección de valores para R1 / R3 ... ¿Alguna razón obvia para que R3 sea 1.5K y R1 sea 1K? Si la salida TIA es un colector abierto, estos forman un divisor de voltaje, estoy pensando que no es suficiente para mantener la entrada del pin 1 baja. Si el pin TIA siempre se activa, estos valores no deberían importar mucho. ¿Las resistencias quizás ayudan a establecer el estado inicial del circuito?

EDITAR:

  • es D4 incluso necesario? ¿No debería funcionar bien si D4 está puenteado?
pregunta Agent Friday

3 respuestas

1

Yo personalmente no he construido este circuito, pero entiendo la teoría detrás de él. La otra respuesta señala correctamente que se basa en el comportamiento de extracción por defecto de la lógica TTL; al usar otras familias lógicas, puede ser necesario agregar una resistencia de pull-up separada.

Debo mencionar además que, incluso con tales ajustes, el circuito aún puede tener un par de problemas: un hardware y un software. Con respecto al hardware, el 6507 solo permite que LISTO se confirme o se desestime en ventanas de tiempo particulares relacionadas con el reloj phi0. El circuito que se muestra retrasará la afirmación de RDY hasta un momento válido (el flanco descendente de RDY recibido desde el TIA), pero su desactivación ocurrirá en un borde de reloj phi0 aleatorio. Una vez que el 6507 vea que RDY está activo, lo muestreará una vez cada reloj para determinar si aún está activo. Si el nivel cambia justo cuando se está muestreando, es posible que partes de la lógica interna del 6507 decidan pasar al siguiente paso de procesamiento, mientras que otros no. Si el primer byte de un código de operación fue recuperado de, por ejemplo, En la dirección 0x17FF, la línea RDY controlará si el próximo ciclo debe volver a buscar 0x17FF o debe avanzar a 0x1800. Sería teóricamente posible que si RDY cambia solo en el momento "incorrecto", algunos bits de la siguiente dirección se comportarían como lo harían si RDY fuera bajo y algunos se comportaran como si fuera alto. Ups.

Desde la perspectiva del software, hay dos formas en que el software puede juzgar el paso del tiempo: la posición horizontal del TIA y el temporizador RIOT. Unos cuantos juegos hacen uso simultáneo de ambos (establecen RIOT en la parte superior del marco mostrado; incluso si esperan saber dónde están durante el marco, usar RIOT para medir el tiempo en que el rayo alcanza la parte inferior permitirá un seguimiento constante). tasa de cuadros que se mantendrá incluso si el código "se desliza" por una línea). Si un juego busca el tiempo de fin de cuadro con algo como:

EndOfFrame:
    lda INTIM
    bne EndOfFrame

y si la rama cruza un límite de página, es posible que el código se cuelgue allí porque una vez que RIOT haya contado a cero en el modo dividir por 64 o dividir por 1024, cambiará a dividir por un modo Si eso hubiera ocurrido y RIOT alcanzó el código cuando la LDA leería, por ejemplo. 21, luego la siguiente lectura se produciría 8 ciclos más tarde, así que leería 13, luego 5, luego 253, 245, 237, 229, ..., 21, 13, 5, 253, etc.

No dudo que haya muchos juegos con los que el circuito funcionará bien la mayor parte del tiempo, aunque espero que el problema de hardware surja de vez en cuando. Sin embargo, es posible que no sea la mejor idea intentar utilizar el circuito para pausar el juego para que pueda obtener su cámara y fotografiar su rendimiento sin precedentes.

    
respondido por el supercat
0

Este circuito aparentemente depende del hecho de que las entradas lógicas TTL aparecerán altas si no se controlan a baja. Si está utilizando piezas CMOS (74HC00) en lugar de la 74LS00 especificada, esto no funcionará sin una resistencia de extracción en el pin 2, ya que las entradas CMOS no aparecen como altas cuando no están conectadas.

    
respondido por el Peter Bennett
0

Mi opinión es que la corriente de fuga inversa de D4 es mayor que la de C1, por lo tanto, el pin 2 normalmente se "elevará" con el tiempo. Hay muchos problemas con esta idea, uno de los cuales es que la entrada de la serie 7400 no será una resistencia infinita. Otro es el tipo de tapa utilizada (las cerámicas NP0 tendrán menos fugas que la mayoría de los otros tipos). Línea inferior, ate un tirón de 10k al pin 2 y pruébelo.

Desplegable R1: esto es correcto. No hay nada capaz de reducir esa sección, por lo que se usa un menú desplegable.

Pull-up R3: ¿el TIA es un colector abierto? Si es así, entonces R3 es necesario. Si TIA no es una salida de colector abierto, entonces R3 puede ser una buena idea, ya que la mayoría de las salidas digitales no pueden generar tanta corriente como pueden hundirse. La hoja de datos de 74LS00 indica \ $ I_ {OH} \ $ (estado actual, estado alto) es -0.4mA (400uA), que no es mucho en absoluto. Así que quizás R3 se coloca allí para jalar la línea hacia arriba en un estado lógico alto para la entrada del pin 10. Sin R3, la ruta a través de D1 y R1 intentaría hundir 1 mA, que está más allá de lo que algunas salidas pueden generar, por lo que el estado lógico nunca alcanzaría el nivel "alto".

C1 es para rebotar, debería funcionar, pero una mejor solución podría ser utilizar un filtro RC . Una adición aún mejor sería alimentar esta salida RC en una entrada de activación de schmitt, tal vez un inversor, búfer, nand gate, etc. La ventaja es que una activación de schmitt tiene histéresis , y la salida cambia muy rápidamente. A la mayoría de los circuitos digitales no les gusta que sus entradas se encuentren en cualquier lugar, excepto bajo o alto (algunos incluso pueden destruirse).

D4 puede ser superfluo. Intenta eliminarlo.

    
respondido por el rdtsc

Lea otras preguntas en las etiquetas