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