Disparo por flanco en lógica simple

1

Estoy creando un módulo donde un microcontrolador puede controlar la RAM con solo 10 pines GPIO (8 son datos D0 a D7 y 2 son control).

Una cosa que quiero hacer es que en el momento en que se levanta una línea de control, quiero que se produzca un reinicio en un registro de desplazamiento 74HC164 si se establece el pin de datos más alto (D7).

Al principio estaba pensando en usar D7 y la línea de control como nand entradas de compuerta y el restablecimiento como salida, pero el problema es que ambas líneas deben permanecer altas, pero no puedo hacer eso con la línea GPIO porque utilice cada estado para un propósito diferente. Por ejemplo, bajo = aceptar datos, alto = desplazar el contenido del registro, transición de bajo a alto = restablecer, etc.

¿Hay algo así como una simple puerta lógica donde un evento solo puede ocurrir cuando una entrada está en su flanco ascendente o descendente?

Al principio pensaba en utilizar un multivibrador monoestable, pero eso implica tiempos adicionales que podrían hacer que mi proyecto funcione más lento. ¿Hay otras alternativas?

    
pregunta

2 respuestas

1

AND8408 de OnSemi describe cómo se puede construir un detector de bordes desde una puerta lógica del 97 ( Schmitt-trigger (N) AND gate con una entrada invertida). El ancho del pulso se puede ajustar con los valores de R / C:

    
respondido por el CL.
0

Dice que sabe que puede obtener una entrada de reloj activada por flanco en un flip flop, pero desea una en una puerta lógica de todo tipo. Un flip flop es una simple puerta lógica. Un FF IC es probablemente más barato que el multivibrador monoestable que mencionaste.

Su descripción de la funcionalidad deseada: "Por ejemplo, bajo = aceptar datos, alto = desplazar el contenido del registro, transición de bajo a alto = restablecer, etc."

Quizás no entiendo bien, pero con este esquema, se restablecería cada vez que cambiara el contenido. Por lo tanto, en cualquier momento en que estuviera "aceptando datos" y luego decidiera "cambiar el contenido del registro", borraría inmediatamente el contenido original del registro de desplazamiento.

Pero si desea evitar un flip flop o un pestillo, también puede crear un pulso de restablecimiento desde el flanco ascendente y usar este pulso para restablecer el registro de desplazamiento, similar a esta imagen a continuación:

Dado que la temporización del impulso es breve, el restablecimiento del registro de desplazamiento debe ser asíncrono. Además, deberá verificar que el ancho de pulso sea lo suficientemente largo para restablecer el registro de desplazamiento (ancho de pulso mínimo en la hoja de datos, o simplemente probar y agregar pares de inversores dos a la vez hasta que funcione; o poner límite en cada nodo intermedio para ralentizar la cadena de retardo y extender el impulso de salida).

Dado que solo desea restablecer si D7 es alto, también querría bloquear la entrada a este circuito con D7 (la compuerta AND con D7 y CLK como entradas, y la salida debe ingresar al circuito que se muestra a continuación).

Además, si necesita el pulso en los bordes ascendente y descendente de una línea de control, puede usar dos detectores de pulso (reemplace la compuerta AND final en el generador de impulsos con una compuerta NOR para convertirla en un pulso de flanco descendente generador), seguido de una compuerta OR de 2 entradas (otra entrada es el generador de impulsos de flanco ascendente) antes del restablecimiento en el registro de desplazamiento.

    
respondido por el jbord39

Lea otras preguntas en las etiquetas