I am trying to set a very simple arduino program to test just ONE address of a AM27ls01 or SN74S301.
As the data output is an open collector I have connected it to a 5v supply by a 300ohms resistor hoping for when data out put is low it gets shorted to ground and I get a LOW signal. Or when data is HIGH the collector is open and I get a HIGH signal. But no matter what data I store or read I am always getting a HIGH data output.
I am also trying to follow the write and read sequence provided by the datasheet.
So I am not sure where my code is wrong.
#include <SoftwareSerial.h>
#define CE1 14 // A0
#define CE2 15 // A1
#define CE3 16 // A2
#define WE 17 // A3
#define XA0 2 // D2
#define XA1 3 // D3
#define XA2 4 // D4
#define XA3 5 // D5
#define XA4 6 // D6
#define XA5 7 // D7
#define XA6 8 // D8
#define XA7 9 // D9
//#define XA8 10 // D10
#define DI 11 // D11
#define DO 18 // A4
int ret = 0;
void setBus(){
digitalWrite(XA0, HIGH);
digitalWrite(XA1, LOW);
digitalWrite(XA2, HIGH);
digitalWrite(XA3, HIGH);
digitalWrite(XA4, LOW);
digitalWrite(XA5, HIGH);
digitalWrite(XA6, LOW);
digitalWrite(XA7, LOW);
}
void clearBus(){
digitalWrite(XA0, LOW);
digitalWrite(XA1, LOW);
digitalWrite(XA2, LOW);
digitalWrite(XA3, LOW);
digitalWrite(XA4, LOW);
digitalWrite(XA5, LOW);
digitalWrite(XA6, LOW);
digitalWrite(XA7, LOW);
}
////////////////////////////////////////////////
//WRITE//////////////////////////////////////////
////////////////////////////////////////////////
void write(){
//WRITE
delay(500);
// BIT TO WRITE /////////////////////
Serial.println("Bit to write");
digitalWrite(DI, HIGH);
delay(500);
////////////////////////////////////
// ADDRESS
Serial.println("Set Address");
setBus();
digitalWrite(CE2, LOW);
delay(500);
//WRITE
digitalWrite(WE, LOW);
//RELEASE
delay(500);
digitalWrite(WE, HIGH);
delay(500);
digitalWrite(CE2, HIGH);
delay(500);
clearBus();
}
////////////////////////////////////////////////
//READ//////////////////////////////////////////
////////////////////////////////////////////////
void read(){
clearBus();
//ROW
Serial.println("Set address");
setBus();
digitalWrite(CE2, LOW);
delay(500);
//READ DATA
int sensorValue = analogRead(A4);
float voltage= sensorValue * (5.0 / 1023.0);
Serial.println("Read voltage");
Serial.println(voltage);
Serial.println("Read data");
ret = digitalRead(DO);
Serial.println(ret);
delay(500);
//RELEASE
digitalWrite(CE2, HIGH);
clearBus();
}
////////////////////////////////////////////////
//SETUP//////////////////////////////////////////
////////////////////////////////////////////////
void setup() {
Serial.begin(9600);
Serial.println("START");
pinMode(XA0, OUTPUT);
pinMode(XA1, OUTPUT);
pinMode(XA2, OUTPUT);
pinMode(XA3, OUTPUT);
pinMode(XA4, OUTPUT);
pinMode(XA5, OUTPUT);
pinMode(XA6, OUTPUT);
pinMode(XA7, OUTPUT);
pinMode(DI, OUTPUT);
pinMode(DO, INPUT);
pinMode(CE1, OUTPUT);
pinMode(CE2, OUTPUT);
pinMode(CE3, OUTPUT);
pinMode(WE, OUTPUT);
digitalWrite(WE, HIGH);
digitalWrite(CE1, HIGH);
digitalWrite(CE2, HIGH);
digitalWrite(CE3, HIGH);
clearBus();
write();
delay(500);
read();
delay(500);
}
void loop() {
}