Controle las líneas WR y OE de SRAM paralelas con solo 2 cables mientras carga datos con 8

-1

Este es mi circuito en relación con mi pregunta:

Pido disculpas por el desordenado cableado, pero lo hice de esa manera para hacer que la producción de mi PCB sea sustancialmente más fácil.

Mi problema es que solo tengo 10 cables disponibles para escribir y leer desde la RAM. De esos 10, 8 están conectados directamente a los pines P1 de un AT89C2051 para la comunicación directa de datos con el microcontrolador. He agotado todos mis pines GPIO restantes para otras tareas y solo me quedan dos. Uno para reloj y otro para datos.

Puedo seleccionar fácilmente una dirección de ram con este circuito, pero lo que quiero hacer es poder elegir si leer o escribir a ram sin usar más líneas GPIO del microcontrolador.

Una fuente en línea dice que no puedo conectar WR y OE con un inversor por razones de contención de bus.

Pensé en usar el chip decodificador 74HC138, pero luego creo que hay una forma más eficiente en la que los datos cargados en serie no activarán un pin WR u OE innecesariamente, pero no estoy seguro. ¿Quizás el 74HC138 sea el camino equivocado?

¿Cómo resuelvo esto?

P.S. Tengo unos cuantos chips de RAM paralelos y no quiero que se me sugiera reemplazar mi circuito con un RAM de serie porque quiero usar la memoria RAM que tengo.

    
pregunta Michel Keijzers

3 respuestas

1

Ese enfoque simplemente no funcionará. Cada vez que transmita 2 unidades seguidas de un cero, obtendrá una escritura en la RAM, y esto ocurrirá para cualquier número de direcciones. Su problema es que su "código de activación", 110, no está excluido de sus direcciones de datos. Debido a que sus direcciones pueden ser de 13 bits, su código de activación debe ser de 14 bits o más, lo que será engorroso. Por ejemplo, si rellena su dirección con dos ceros iniciales y utiliza un código de 15 bits (14 unos y otro bit para determinar OE o WR, puede hacer lo que quiera).

Y le daré un pase en su asignación de QA, QB y QC a A6, A4 y A2. Asumiré que tienes una razón realmente extraña y creativa para hacerlo, pero me estremezco al pensar en tratar de mantener la codificación correcta.

    
respondido por el WhatRoughBeast
0

Realmente necesita una señal de latch de salida para poder usar 74HC595 y no cambiar las salidas hasta que la señal de latch de salida pase de baja a alta. Tal vez pueda utilizar una forma inteligente de usar un registro de desplazamiento, o un par, que se apague y luego suba cuando el reloj del cambio 16 se apaga.

    
respondido por el CrossRoads
0

Debería leer sobre el uso de las líneas ALE (Address Latch Enable) en la arquitectura 8085 y sus descendientes. Era una forma barata de multiplexar las líneas de bus entre la dirección y los datos, reduciendo el número de pines IC en 7. Su aplicación es similar, incluso si ha reducido aún más el bus.

Con 2 líneas GPIO, un mux y un par de pestillos de 8 bits puede representar 4 estados:

  1. inactivo
  2. Carga el byte de la dirección alto
  3. Carga el byte de dirección bajo (y lectura / escritura)
  4. Ejecutar lectura / escritura

Asegurarse de representar estos estados en código Gray (para eliminar las transiciones no deseadas) proporcionará toda la funcionalidad deseada más rápido y más seguro que su implementación actual.

    
respondido por el Edgar Brown

Lea otras preguntas en las etiquetas