- Interessanter Beitrag
Ein RAM Tester für 2114 RAMs auf Basis eines Arduino Nano:
Bitte melde dich an, um diesen Anhang zu sehen.
Belegung Adapter:
Bitte melde dich an, um diesen Anhang zu sehen.
Arduino Sketch:
C: RAM2114Tester.ino
#define RAM_CS 2
#define RAM_A2 3
#define RAM_A1 4
#define RAM_A0 5
#define RAM_A3 6
#define RAM_A4 7
#define RAM_A5 8
#define RAM_A6 9
#define RAM_WE 12
#define RAM_D4 11
#define RAM_D3 A5
#define RAM_D2 A4
#define RAM_D1 A3
#define RAM_A9 A2
#define RAM_A8 A1
#define RAM_A7 A0
#define LED 13
void setAddr(short addr)
{
char abit = 0;
for (int i=0; i<10; i++)
{
abit = (addr & (1<<i)) ? 1 : 0;
switch(i)
{
case 0: digitalWrite(RAM_A0, abit); break;
case 1: digitalWrite(RAM_A1, abit); break;
case 2: digitalWrite(RAM_A2, abit); break;
case 3: digitalWrite(RAM_A3, abit); break;
case 4: digitalWrite(RAM_A4, abit); break;
case 5: digitalWrite(RAM_A5, abit); break;
case 6: digitalWrite(RAM_A6, abit); break;
case 7: digitalWrite(RAM_A7, abit); break;
case 8: digitalWrite(RAM_A8, abit); break;
case 9: digitalWrite(RAM_A9, abit); break;
default: break;
}
}
}
void setData(short data)
{
char dbit = 0;
for (int i=0; i<4; i++)
{
dbit = (data & (1<<i)) ? 1 : 0;
switch(i)
{
case 0: digitalWrite(RAM_D1, dbit); break;
case 1: digitalWrite(RAM_D2, dbit); break;
case 2: digitalWrite(RAM_D3, dbit); break;
case 3: digitalWrite(RAM_D4, dbit); break;
default: break;
}
}
}
char getData(void)
{
char dbit = 0;
char data = 0;
for (int i=0; i<4; i++)
{
dbit = 0;
switch(i)
{
case 0: dbit = digitalRead(RAM_D1); break;
case 1: dbit = digitalRead(RAM_D2); break;
case 2: dbit = digitalRead(RAM_D3); break;
case 3: dbit = digitalRead(RAM_D4); break;
default: break;
}
data |= dbit ? (1<<i) : 0;
}
return data;
}
void prepareWrite(void)
{
digitalWrite(RAM_CS, HIGH);
digitalWrite(RAM_WE, LOW);
pinMode(RAM_D1, OUTPUT);
pinMode(RAM_D2, OUTPUT);
pinMode(RAM_D3, OUTPUT);
pinMode(RAM_D4, OUTPUT);
}
void prepareRead(void)
{
digitalWrite(RAM_CS, HIGH);
digitalWrite(RAM_WE, HIGH);
pinMode(RAM_D1, INPUT);
pinMode(RAM_D2, INPUT);
pinMode(RAM_D3, INPUT);
pinMode(RAM_D4, INPUT);
}
void writeRam(short addr, char value)
{
prepareWrite();
setAddr(addr);
setData(value);
digitalWrite(RAM_CS, LOW);
delay(1);
digitalWrite(RAM_CS, HIGH);
prepareRead();
}
char readRam(short addr)
{
char value = 0;
prepareRead();
setAddr(addr);
digitalWrite(RAM_CS, LOW);
delay(1);
value = getData();
digitalWrite(RAM_CS, HIGH);
return value;
}
void blinkFail(void)
{
while(1)
{
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(300);
digitalWrite(LED, HIGH);
delay(200);
digitalWrite(LED, LOW);
delay(1300);
}
}
void blinkPass(void)
{
while(1)
{
digitalWrite(LED, HIGH);
delay(800);
digitalWrite(LED, LOW);
delay(200);
}
}
void setup() {
pinMode(RAM_CS, OUTPUT); digitalWrite(RAM_CS, HIGH);
pinMode(RAM_WE, OUTPUT); digitalWrite(RAM_WE, HIGH);
pinMode(RAM_A0, OUTPUT);
pinMode(RAM_A1, OUTPUT);
pinMode(RAM_A2, OUTPUT);
pinMode(RAM_A3, OUTPUT);
pinMode(RAM_A4, OUTPUT);
pinMode(RAM_A5, OUTPUT);
pinMode(RAM_A6, OUTPUT);
pinMode(RAM_A7, OUTPUT);
pinMode(RAM_A8, OUTPUT);
pinMode(RAM_A9, OUTPUT);
pinMode(RAM_D1, INPUT);
pinMode(RAM_D2, INPUT);
pinMode(RAM_D3, INPUT);
pinMode(RAM_D4, INPUT);
pinMode(LED, OUTPUT); digitalWrite(LED, LOW);
Serial.begin(115200);
Serial.println(F("*** 2114 RAM Tester starting Test ***"));
int errors = 0;
for (int pass=0; pass < 16; pass++)
{
Serial.print(F("Pass "));
Serial.println(pass+1);
// write values to RAM
digitalWrite(LED, LOW);
Serial.println(F("Writing 1024 values..."));
for (short addr=1023; addr>=0; addr--)
{
writeRam(addr, (addr+pass) & 15);
}
// read values back
digitalWrite(LED, HIGH);
Serial.println(F("Reading 1024 values..."));
for (short addr=0; addr<1024; addr++)
{
char value = 0;
value = readRam(addr);
if (value != ((addr+pass) & 15))
{
digitalWrite(LED, LOW);
Serial.print(F("Error reading address "));
Serial.println(addr, HEX);
errors++;
}
}
}
if (errors > 0)
{
Serial.print(F("Test FAILED with "));
Serial.print(errors);
Serial.println(F(" errors!"));
blinkFail();
}
else
{
Serial.print(F("Test PASSED!!!"));
blinkPass();
}
}
void loop() {
}
Alles anzeigen
Viel Spass beim nachbasteln! ![]()