OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 29.03.2024, 00:06

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 
Autor Zpráva
 Předmět příspěvku: Arduino - DRAM 256k x4 tester
PříspěvekNapsal: 23.07.2016, 13:18 
Offline
Kecálek
Uživatelský avatar

Registrován: 27.08.2015, 09:12
Příspěvky: 227
Has thanked: 68 times
Been thanked: 79 times
Potřebuji poradit od někoho, kdo tomu rozumí :-)

Na internetu jsem našel pár zapojení jak využít Arduino k testování DRAM čipů. Mám jich pár doma, asi vadné, ale tester by se hodil. Z x programů jsem složil jeden který se zdá celkem použitelný. Jenže trochu tápu v tom, kdy jaké signály mají být na RAS,CAS,WE,OE, ... no spíš na to čučím už tak dlouho, že nevím co dělám :-)

Používám arduino nano a IO jsou třeba tyto, klasika 4256 tedy 256k x 4.

Příloha:
Poznámka: Zapojení 4256
Snímek obrazovky_2016-07-23_13-08-36.png
Snímek obrazovky_2016-07-23_13-08-36.png [ 50.7 KiB | Zobrazeno 5464 krát ]


Ukázka výstupu pro prvních 5 adres. Zapisuji na všech datových vstupech pro všechny adresy 1ku a pak je čtu analogově, kde H je max 1024, takže to by asi bylo ok (spíš náhoda). Pak zapisuji nuly a tam už se to rozchází. Myslím, že mám špatnou souslednost RAS,CAS,OE,WE.

No předem děkuji za rady a jestli se to dotáhne, snad to i někomu pomůže :-)

Kód:
RAM 256k x 4 tester.
Zapisuji 1111 na vsech adresach.
Ctu zapsana data.
Adresa 0 000000000 908  910  928  913 
Adresa 1 100000000 915  918  918  917 
Adresa 2 010000000 956  952  951  947 
Adresa 3 110000000 1021  1010  1002  986 
Adresa 4 001000000 1023  1023  1023  1002 
Zapisuji 0000 na vsech adresach.
Ctu zapsana data.
Adresa 0 000000000 0  0  0  888 
Adresa 1 100000000 0  0  0  888 
Adresa 2 010000000 0  0  0  889 
Adresa 3 110000000 0  0  0  889 
Adresa 4 001000000 0  0  0  887 


Samotný program
Kód:

//PIN usage
const int addressPins[9]={5,6,7,8,9,10,11,12,13};
const int ras = 3;
const int cas = 2;
const int readWrite = 4;
const int dataPins[4]= {A3,A4,A5,A6};
const int oe = A0;

int analogValue[4]; //used to store returned data

void setup()
{
Serial.begin(9600);
for(int n=0;n<9;n++)
 pinMode(addressPins[n],OUTPUT);
pinMode(ras,OUTPUT);
pinMode(cas,OUTPUT);
pinMode(readWrite,OUTPUT);
pinMode(oe,OUTPUT);

digitalWrite(ras,HIGH);
digitalWrite(cas,HIGH);
digitalWrite(readWrite,HIGH);

Serial.println("DRAM 256k x 4 tester.");
}

bool done = false;

void loop()
{
int address;
char buffer[30];
int n;

if(done)
 return;

Serial.println("Zapisuji 1111 na vsech adresach.");
for( address=0; address<512; address++)
  writeValue(address,1);
 
Serial.println("Ctu zapsana data.");
for( address=0; address<512; address++)
  {
  sprintf(buffer,"Adresa %d ",address);
  Serial.print(buffer);
  readValue(address);
  for(int n=0; n<4; n++)
    {
     Serial.print(analogValue[n]);
     Serial.print("  ");
    }
  Serial.println(""); //newline
  }
 

Serial.println("Zapisuji 0000 na vsech adresach.");
for( address=0; address<512; address++)
  writeValue( address, 0);
 
Serial.println("Ctu zapsana data.");
for( address=0; address<512; address++)
  {
  sprintf(buffer,"Adresa %d ",address);
  Serial.print(buffer);
  readValue(address);
  for(int n=0; n<4; n++)
    {
     Serial.print(analogValue[n]);
     Serial.print("  ");
    }
  Serial.println(""); //newline
  }

done=true;
};


void readValue(int address)
{
bool addressBit;
bool dataBit;
int n;

//prepare analog pins for analog reading
for(n=0;n<4;n++)
  {pinMode(dataPins[n],INPUT);
   digitalWrite(dataPins[n],LOW);
   delay(10);
   //make a reading and discard it
   analogRead(dataPins[n]);
   delay(10);
  }


//write out address to address bus
for(n=0;n<9;n++) 
  {addressBit = address & (1<<n);
   Serial.print(addressBit);
   digitalWrite(addressPins[n],addressBit);
  }
Serial.print(" "); //newline
delay(10);

//send enable LOW
digitalWrite(ras,LOW);
delay(10);

//enable output
digitalWrite(readWrite,HIGH);
delay(10);
//digitalWrite(oe, LOW); //tohle nevím kdy a kam
//delay(10);
digitalWrite(cas,LOW);
delay(10);

for(n=0;n<4;n++)
  analogValue[n]=analogRead(dataPins[n]);
delay(10);
//disable output
digitalWrite(cas,HIGH);
delay(10);
digitalWrite(ras,HIGH);
}


void writeValue(int address,byte value)
{
bool addressBit;
bool dataBit;
int n;

//write out address to address bus
for(n=0;n<9;n++) 
  {addressBit = address & (1<<n);
   //Serial.print(addressBit);
   digitalWrite(addressPins[n],addressBit);
  }
  //Serial.print(" "); //newline

//put data on databus
for(n=0;n<4;n++) 
  {pinMode(dataPins[n],OUTPUT);
   dataBit = value;// & (1<<n);
   //Serial.print(dataBit);
   digitalWrite(dataPins[n],dataBit);
   delay(1);
  }
//Serial.println(""); //newline
digitalWrite(ras,LOW);
delay(10);
digitalWrite(readWrite, LOW);
delay(10);
//digitalWrite(oe, HIGH); //tohle nevím kdy a kam
//delay(10);
digitalWrite(cas,LOW);
delay(10);
digitalWrite(readWrite,HIGH);
delay(10);
digitalWrite(cas,HIGH);
delay(10);
digitalWrite(ras,HIGH);
}


_________________
Commodore C64 + 1541-II + datasette + EF3 / Amiga 500 KS 2.05 + gary RAM / Amiga 600 KS 3.1 + 4 MB RAM (slot+pcmcia) + CF / Amiga 1200 KS 3.1 + Blizzard 1230 + CF / Amiga 4000T (68060@50) KS 3.1 + Fastline Z3 + Picasso IV + 40 GB IDE / / 486DX2@66


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino - DRAM 256k x4 tester
PříspěvekNapsal: 23.07.2016, 14:39 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 28.01.2016, 23:57
Příspěvky: 3756
Has thanked: 213 times
Been thanked: 388 times
Co takhle si najit datasheet prislusne DRAM a podivat se na casove prubehy? Vetsinou tam byva nejaky obrazek, kde je presna souslednost signalu vcetne minimalnich casu mezi nima.
Mimochodem, ty "delay(10)" mi prijde jako strasne moc - to je 10ms, zatimco u DRAM se vetsinou bavime o nanosekundach. Samotny digitalWrite zabere nejaky cas, takze tyhle zpozdeni jsou celkem k nicemu, a dokonce mozna i muzou zpusobovat problemy.
EDIT: a proc ctes data pres analogRead???? Analogove piny se daji pouzit i jako digitalni, pokud si vzpominam.

_________________
Nikdy nediskutujte s blbcem. Stáhne vás na svoji úroveň a vyhraje zkušeností.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino - DRAM 256k x4 tester
PříspěvekNapsal: 23.07.2016, 15:43 
Offline
Kecálek
Uživatelský avatar

Registrován: 27.08.2015, 09:12
Příspěvky: 227
Has thanked: 68 times
Been thanked: 79 times
Tak jsem odstranil všechny delay a místo A3, ... použil A0,1,2,3 a místo analogread dal digitalread a už to vrací asi normální výsledky.
Ten analogread byl dobrý pokud tam byl nějaký mezistav nebo jsem to převáděl na napětí.

Tedy mám jen jeden dobrý IO a ten prošel, no uvidíme...

_________________
Commodore C64 + 1541-II + datasette + EF3 / Amiga 500 KS 2.05 + gary RAM / Amiga 600 KS 3.1 + 4 MB RAM (slot+pcmcia) + CF / Amiga 1200 KS 3.1 + Blizzard 1230 + CF / Amiga 4000T (68060@50) KS 3.1 + Fastline Z3 + Picasso IV + 40 GB IDE / / 486DX2@66


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino - DRAM 256k x4 tester
PříspěvekNapsal: 23.07.2016, 16:17 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 28.01.2016, 23:57
Příspěvky: 3756
Has thanked: 213 times
Been thanked: 388 times
Ale ber to jen orientacne, protoze netestujes dynamicke parametry. Mam par pameti, ktere projdou 'profi' testerem, ale stejne v pocitaci nefungujou.

_________________
Nikdy nediskutujte s blbcem. Stáhne vás na svoji úroveň a vyhraje zkušeností.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Arduino - DRAM 256k x4 tester
PříspěvekNapsal: 23.07.2016, 16:46 
Offline
Kecálek
Uživatelský avatar

Registrován: 27.08.2015, 09:12
Příspěvky: 227
Has thanked: 68 times
Been thanked: 79 times
Jo, to tak beru, je to jen orientační test.

_________________
Commodore C64 + 1541-II + datasette + EF3 / Amiga 500 KS 2.05 + gary RAM / Amiga 600 KS 3.1 + 4 MB RAM (slot+pcmcia) + CF / Amiga 1200 KS 3.1 + Blizzard 1230 + CF / Amiga 4000T (68060@50) KS 3.1 + Fastline Z3 + Picasso IV + 40 GB IDE / / 486DX2@66


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 6 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz