Lectura/escritura de un chip SRAM con un Arduino

El fondo

Quiero poder programar una EEPROM Atmel AT28C256 a través de un Arduino Uno. No tuve la suerte de poder escribir/leer en él, así que recurrí a usar un chip SRAM para simplificar las cosas (la EEPROM puede estar en modo de protección contra escritura, por ejemplo).

Desde el Arduino estoy manejando 3 registros de desplazamiento SN74HC95N que están conectados en serie, lo que me permite escribir direcciones de 16 bits y 8 bits de datos. Hasta ahora todo bien, está funcionando bien y lo he verificado con un analizador lógico.

El problema

Sin embargo, intentar leer/escribir en SRAM no me da nada en la lectura. La hoja de datos para el chip está aquí , y parece ser un asunto bastante simple (de usar) que funciona con una gama relativamente amplia de voltajes.

Según mi multímetro, hay alrededor de 4,5 V entre VCC y GND, y tengo un límite de 100 uF para ayudar a suavizar las cosas. Todo esto está construido en una placa de pan y el esquema es lo que (espero) esperarías, simplemente estoy conectando la dirección (aunque las 4 líneas de dirección superiores están conectadas a tierra ya que mi EEPROM tiene menos pines que la SRAM) y líneas de datos y luego manejando las otras entradas del Arduino.

El código intenta escribir 8 bytes, con los valores 1-8 en la dirección 0-7. La salida del analizador lógico está debajo (solo se muestran las dos primeras líneas de datos, pero aún deberían mostrar la salida en la fase de lectura), con escritura a la izquierda y lectura hacia la derecha.

Los dos registros de desplazamiento para la dirección siempre tienen salida habilitada, el de datos está deshabilitado para operaciones de lectura para evitar la contención.

Salida del analizador lógico que muestra A0-2, D0-1, OE CE y WE

¡Enviar ayuda!

Por lo que puedo entender, estoy enviando las señales correctas, y la sincronización de los pulsos también parece ser correcta (un mínimo de 50 ns en CE y WE y el mío son 100 us). Esperaría ver dos pulsos de salida en el área resaltada arriba, pero claramente me estoy perdiendo algo. ¿Estoy haciendo algo obviamente mal con las entradas de control aquí o es más probable que se deba a mis habilidades electrónicas muy amateur? Puedo incluir código, pero espero que el resultado hable por sí mismo.

¿Cambió las líneas de datos a la entrada en el arduiono después de escribir? No se parece a ti.
En el clavo, resulta que no lo estaba: ¡había puesto a tierra el equipo original del registro de cambios incorrecto!
por cierto, si quieres detalles de un ejemplo de cómo escribir un AT28Cxx desde un arduino, pongo mi código, notas y esquemas en github github.com/tardate/LittleArduinoProjects/tree/master/playground/…
Gracias @tardate! Creo que ese es uno que ya había marcado en realidad :)

Respuestas (1)

Creo que tal vez no esté deshabilitando los bits de datos de las salidas 74xx95, por lo que están luchando con las salidas de datos de RAM. Las salidas lógicas '0' tienden a ganar cuando un '0' y un '1' se transmiten simultáneamente a una línea de señal. Necesita un método en su circuito para flotar/deshabilitar/triestablecer sus salidas 74xx95 para que las salidas RAM puedan tomar el control.

Por el nivel de detalle que puedo ver en el trazo, se ve bastante limpio. Pero no hay suficiente resolución para ver lo que el CE y NOSOTROS estamos haciendo precisamente.

Oh, podría abrazarte. Estuve mirando esto durante horas y no pude resolverlo, pero después de que dijiste eso, comencé a depurar el control OE para el registro de desplazamiento de datos y bam... sin efecto. ¡Resulta que había puesto a tierra a OE para la dirección inferior y el registro de datos, no para los dos registros de dirección!