Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal.h>
- const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
- int Address[] = {45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30}; // This is the array for the address.
- int delayValue = 1; // Delay Value (microseconds)
- int OE = 26; // Output Enable
- int WE = 27; // Write Enable
- int CE = 28; // Chip Enable
- int IO1 = 46; // Data Input/Output 1
- int IO2 = 47; // Data Input/Output 2
- int IO3 = 48; // Data Input/Output 3
- int IO4 = 49; // Data Input/Output 4
- int val1 = 0; // Readed data IO1
- int val2 = 0; // Readed data IO2
- int val3 = 0; // Readed data IO3
- int val4 = 0; // Readed data IO4
- int I1LOW = 0; // Write data IO1 for LOW
- int I2LOW = 0; // Write data IO2 for LOW
- int I3LOW = 0; // Write data IO3 for LOW
- int I4LOW = 0; // Write data IO4 for LOW
- int I1HIGH = 0; // Write data IO1 for HIGH
- int I2HIGH = 0; // Write data IO2 for HIGH
- int I3HIGH = 0; // Write data IO3 for HIGH
- int I4HIGH = 0; // Write data IO4 for HIGH
- int BAD = 0;
- int BADLED = 10; //Error LED at pin 10
- int GOODLED = 12; //Finnish LED at pin 12
- int LCDreg = A0;
- void setup() {
- lcd.begin(16, 2);
- lcd.print("SRAM Test");
- pinMode(LCDreg, OUTPUT);
- analogWrite(LCDreg, 100);
- I1LOW = LOW; // Assign LOW value to I1LOW
- I2LOW = LOW; // Assign LOW value to I2LOW
- I3LOW = LOW; // Assign LOW value to I3LOW
- I4LOW = LOW; // Assign LOW value to I4LOW
- I1HIGH = HIGH; //Assign HIGH value to I1LOW
- I2HIGH = HIGH; //Assign HIGH value to I2LOW
- I3HIGH = HIGH; //Assign HIGH value to I3LOW
- I4HIGH = HIGH; //Assign HIGH value to I4LOW
- BAD = LOW;
- Serial.begin(19200); //Starting the serial
- {
- int i = 0;
- for ( i = 0; i < 16; i++)
- pinMode(Address[i], OUTPUT);
- }
- pinMode (OE, OUTPUT); // Set OE as OUTPUT
- pinMode (WE, OUTPUT); // Set WE as OUTPUT
- pinMode (CE, OUTPUT); // Set CE as OUTPUT
- pinMode (BADLED, OUTPUT); // Set BADLED as OUTPUT
- pinMode (GOODLED, OUTPUT); // Set GOODLED as OUTPUT
- digitalWrite (BADLED, LOW); // Assign BADLED a LOW start status
- digitalWrite (GOODLED, LOW); // Assign GOODLED a LOW start status
- }
- void loop() {
- val1 = 0;
- val2 = 0;
- val3 = 0;
- val4 = 0;
- {
- digitalWrite(CE, HIGH); //FIRST we need to put the control pins to HIGH (they are inverted).
- digitalWrite(OE, HIGH);
- digitalWrite(WE, HIGH);
- int i = 0, j=0;
- for ( i = 0; i < 65535; i++)
- {
- for ( j = 0; j < 16; j++)
- {
- if ( ( (i >> j) & 1 ) == 1 )
- digitalWrite(Address[j], HIGH);
- else digitalWrite(Address[j], LOW);
- __asm__("nop\n\t");
- {
- Serial.println(F("Another loop")); // This is to know when the program makes a loop.
- }
- pinMode (IO1, OUTPUT); // First, we put the I/O data pins as OPUTPUT
- pinMode (IO2, OUTPUT);
- pinMode (IO3, OUTPUT);
- pinMode (IO4, OUTPUT);
- digitalWrite(IO1, I1LOW); // Filling the data output as LOW
- digitalWrite(IO2, I2LOW);
- digitalWrite(IO3, I3LOW);
- digitalWrite(IO4, I4LOW);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW); // Enabling the chip
- __asm__("nop\n\t");
- digitalWrite(WE, LOW); // Enabling the writting on the chip
- __asm__("nop\n\t"); // Wait for the writting
- digitalWrite(CE, HIGH); // Disable the chip
- __asm__("nop\n\t");
- digitalWrite(WE, HIGH); // Disable the writting on the chip
- __asm__("nop\n\t");
- digitalWrite(IO1, LOW); // This is for the previous tests. The arduino lefts the OUTPUT as HIGH.
- digitalWrite(IO2, LOW); // Because the chip is disabled, we can change the data output, because the data was saved.
- digitalWrite(IO3, LOW);
- digitalWrite(IO4, LOW);
- pinMode (IO1, INPUT); // Then, we set the I/O as input.
- pinMode (IO2, INPUT);
- pinMode (IO3, INPUT);
- pinMode (IO4, INPUT);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW); // Enabling the chip
- __asm__("nop\n\t");
- digitalWrite(OE, LOW); // Enabling the output
- __asm__("nop\n\t");
- val1 = digitalRead(IO1); // Now, we are reading the data of each out.
- val2 = digitalRead(IO2);
- val3 = digitalRead(IO3);
- val4 = digitalRead(IO4);
- digitalWrite(OE, HIGH); // Disabling the output
- digitalWrite(CE, HIGH); // Disabling the chip
- {
- if((val1 == I1LOW) && (val2 == I2LOW) && (val3 == I3LOW) && (val4 == I4LOW))
- Serial.println(F("Fill-0000 OK")); // (It cheks the input values and the read values are the same)
- else Serial.println(F("Fill-0000 FAIL")), BAD = HIGH; // (If they aren't, it shows a message in the serial monitor, and the BADLED turns on.
- }
- pinMode (IO1, OUTPUT); // Now, we are making the same thing again, but with other values.
- pinMode (IO2, OUTPUT);
- pinMode (IO3, OUTPUT);
- pinMode (IO4, OUTPUT);
- digitalWrite(IO1, I1HIGH);
- digitalWrite(IO2, I2HIGH);
- digitalWrite(IO3, I3HIGH);
- digitalWrite(IO4, I4HIGH);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(WE, LOW);
- __asm__("nop\n\t");
- digitalWrite(CE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(WE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(IO1, LOW);
- digitalWrite(IO2, LOW);
- digitalWrite(IO3, LOW);
- digitalWrite(IO4, LOW);
- pinMode (IO1, INPUT);
- pinMode (IO2, INPUT);
- pinMode (IO3, INPUT);
- pinMode (IO4, INPUT);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(OE, LOW);
- __asm__("nop\n\t");
- val1 = digitalRead(IO1);
- val2 = digitalRead(IO2);
- val3 = digitalRead(IO3);
- val4 = digitalRead(IO4);
- digitalWrite(OE, HIGH);
- digitalWrite(CE, HIGH);
- {
- if((val1 == I1HIGH) && (val2 == I2HIGH) && (val3 == I3HIGH) && (val4 == I4HIGH))
- Serial.println(F("Fill-1111 OK"));
- else Serial.println(F("Fill-1111 FAIL")), BAD = HIGH;
- }
- pinMode (IO1, OUTPUT);
- pinMode (IO2, OUTPUT);
- pinMode (IO3, OUTPUT);
- pinMode (IO4, OUTPUT);
- digitalWrite(IO1, I1HIGH);
- digitalWrite(IO2, I2LOW);
- digitalWrite(IO3, I3HIGH);
- digitalWrite(IO4, I4LOW);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(WE, LOW);
- __asm__("nop\n\t");
- digitalWrite(CE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(WE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(IO1, LOW);
- digitalWrite(IO2, LOW);
- digitalWrite(IO3, LOW);
- digitalWrite(IO4, LOW);
- pinMode (IO1, INPUT);
- pinMode (IO2, INPUT);
- pinMode (IO3, INPUT);
- pinMode (IO4, INPUT);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(OE, LOW);
- __asm__("nop\n\t");
- val1 = digitalRead(IO1);
- val2 = digitalRead(IO2);
- val3 = digitalRead(IO3);
- val4 = digitalRead(IO4);
- digitalWrite(OE, HIGH);
- digitalWrite(CE, HIGH);
- {
- if((val1 == I1HIGH) && (val2 == I2LOW) && (val3 == I3HIGH) && (val4 == I4LOW))
- Serial.println(F("Fill-1010 OK"));
- else Serial.println(F("Fill-1010 FAIL")), BAD = HIGH;
- }
- pinMode (IO1, OUTPUT);
- pinMode (IO2, OUTPUT);
- pinMode (IO3, OUTPUT);
- pinMode (IO4, OUTPUT);
- digitalWrite(IO1, I1LOW);
- digitalWrite(IO2, I2HIGH);
- digitalWrite(IO3, I3LOW);
- digitalWrite(IO4, I4HIGH);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(WE, LOW);
- __asm__("nop\n\t");
- digitalWrite(CE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(WE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(IO1, LOW);
- digitalWrite(IO2, LOW);
- digitalWrite(IO3, LOW);
- digitalWrite(IO4, LOW);
- pinMode (IO1, INPUT);
- pinMode (IO2, INPUT);
- pinMode (IO3, INPUT);
- pinMode (IO4, INPUT);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(OE, LOW);
- __asm__("nop\n\t");
- val1 = digitalRead(IO1);
- val2 = digitalRead(IO2);
- val3 = digitalRead(IO3);
- val4 = digitalRead(IO4);
- digitalWrite(OE, HIGH);
- digitalWrite(CE, HIGH);
- {
- if((val1 == I1LOW) && (val2 == I2HIGH) && (val3 == I3LOW) && (val4 == I4HIGH))
- Serial.println(F("Fill-0101 OK"));
- else Serial.println(F("Fill-0101 FAIL")), BAD = HIGH;
- }
- pinMode (IO1, OUTPUT);
- pinMode (IO2, OUTPUT);
- pinMode (IO3, OUTPUT);
- pinMode (IO4, OUTPUT);
- digitalWrite(IO1, I1HIGH);
- digitalWrite(IO2, I2HIGH);
- digitalWrite(IO3, I3LOW);
- digitalWrite(IO4, I4LOW);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(WE, LOW);
- __asm__("nop\n\t");
- digitalWrite(CE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(WE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(IO1, LOW);
- digitalWrite(IO2, LOW);
- digitalWrite(IO3, LOW);
- digitalWrite(IO4, LOW);
- pinMode (IO1, INPUT);
- pinMode (IO2, INPUT);
- pinMode (IO3, INPUT);
- pinMode (IO4, INPUT);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(OE, LOW);
- __asm__("nop\n\t");
- val1 = digitalRead(IO1);
- val2 = digitalRead(IO2);
- val3 = digitalRead(IO3);
- val4 = digitalRead(IO4);
- digitalWrite(OE, HIGH);
- digitalWrite(CE, HIGH);
- {
- if((val1 == I1HIGH) && (val2 == I2HIGH) && (val3 == I3LOW) && (val4 == I4LOW))
- Serial.println(F("Fill-1100 OK"));
- else Serial.println(F("Fill-1100 FAIL")), BAD = HIGH;
- }
- pinMode (IO1, OUTPUT);
- pinMode (IO2, OUTPUT);
- pinMode (IO3, OUTPUT);
- pinMode (IO4, OUTPUT);
- digitalWrite(IO1, I1LOW);
- digitalWrite(IO2, I2LOW);
- digitalWrite(IO3, I3HIGH);
- digitalWrite(IO4, I4HIGH);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(WE, LOW);
- __asm__("nop\n\t");
- digitalWrite(CE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(WE, HIGH);
- __asm__("nop\n\t");
- digitalWrite(IO1, LOW);
- digitalWrite(IO2, LOW);
- digitalWrite(IO3, LOW);
- digitalWrite(IO4, LOW);
- pinMode (IO1, INPUT);
- pinMode (IO2, INPUT);
- pinMode (IO3, INPUT);
- pinMode (IO4, INPUT);
- __asm__("nop\n\t");
- digitalWrite(CE, LOW);
- __asm__("nop\n\t");
- digitalWrite(OE, LOW);
- __asm__("nop\n\t");
- val1 = digitalRead(IO1);
- val2 = digitalRead(IO2);
- val3 = digitalRead(IO3);
- val4 = digitalRead(IO4);
- digitalWrite(OE, HIGH);
- digitalWrite(CE, HIGH);
- {
- if((val1 == I1LOW) && (val2 == I2LOW) && (val3 == I3HIGH) && (val4 == I4HIGH))
- Serial.println(F("Fill-0011 OK"));
- else Serial.println(F("Fill-0011 FAIL")), BAD = HIGH;
- }
- Serial.println(i); // Prints on serial console the number of test.
- lcd.setCursor(0, 1);
- lcd.print(i); // Print on LCD the number of test.
- lcd.setCursor(9, 1);
- if(BAD == HIGH){
- lcd.print("Bad ");
- }
- else {
- lcd.print("Good");
- }
- if(BAD == HIGH){
- digitalWrite(BADLED, HIGH);
- }
- else {
- digitalWrite(BADLED, LOW);
- }
- if(i == 65535){ // If the test goes to 65535 (1111111111111111, or 2^16 - 1), the test is finnished.
- digitalWrite(GOODLED, HIGH), lcd.setCursor(10, 0), lcd.print("End"); // And the finnish LED turns on.
- }
- else {
- delayMicroseconds(delayValue);
- }
- // Ikastolero SN
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement