I'm trying to interact with SRAM (MB8416A-15) with my Arduino.
This is my schematic:
And my code:
#define WRITE 14 #define RAM_G 15 #define ENABLE 16 void write(uint8_t address, uint8_t data) { DDRD = B11111111; PORTB = address; digitalWrite(WRITE, LOW); digitalWrite(ENABLE, LOW); PORTD = data; delayMicroseconds(1); digitalWrite(ENABLE, HIGH); digitalWrite(WRITE, HIGH); } uint8_t read(uint8_t address) { uint8_t data; DDRD = B00000000; PORTB = address; digitalWrite(WRITE, HIGH); digitalWrite(ENABLE, LOW); delayMicroseconds(1); data = PORTD; digitalWrite(ENABLE, HIGH); digitalWrite(WRITE, HIGH); return data; } void setup() { // init Serial.begin(9600); // control pinMode(WRITE, OUTPUT); pinMode(RAM_G, OUTPUT); pinMode(ENABLE, OUTPUT); digitalWrite(WRITE, HIGH); digitalWrite(RAM_G, LOW); digitalWrite(ENABLE, HIGH); // address DDRB = DDRB | B00111111; PORTB = B00000000; // data DDRD = B00000000; // test write(B00000000, 10); Serial.println(read(B00000000)); write(B00000001, 20); Serial.println(read(B00000000)); Serial.println(read(B00000001)); write(B00000010, 30); Serial.println(read(B00000000)); Serial.println(read(B00000001)); Serial.println(read(B00000010)); write(B00000010, 40); Serial.println(read(B00000000)); Serial.println(read(B00000001)); Serial.println(read(B00000010)); Serial.println(read(B00000011)); }
I'd expect an output of
10 10 20 10 20 30 10 20 30 40
but I get
10 20 20 30 30 30 40 40 40 40