Arduino DRAM Ansteuerung

Gast #4650055
Lesenswert?

Ich habe in einer Werkstatt ganz viele solcher KM4164A ICs von Samsung 
gefunden.Nun möchte ich gerne diesen Chip per arduino ansteuern.Leider 
habe ich das richtige Datenblatt nicht gefunden.Außerdem hab ich 
versucht mit Hilfe von dem  Datenblatt von dem KM4164B,den KM4164A an 
den Arduino anzuschließen und hab einen sketch geschrieben.Doch leider 
funktioniert das alles nicht.Den Zeitgraphen im Datenblatt habe ich dann 
umgesetzt.


Hier mein äußerst schlechter Arduino-Sketch:
int ras = 9;
int cas = 8;
int rw = 10;
int cue = 11;
int die = 12;
void setup() {
  pinMode(0,OUTPUT);//a0
  pinMode(1,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);//a7
  pinMode(8,OUTPUT);//cas
  pinMode(9,OUTPUT);//ras
  pinMode(10,OUTPUT);//w
  pinMode(11,INPUT);//Q
  pinMode(12,OUTPUT);//D
  Serial.begin(9600);
}

void loop() {
  int i = 0;
  int x = 0;
  for(x=0;x<=8;x++){       //Schreibvorgang..
  Serial.println("|");
  Serial.print(x);
  for(i=0;i<=8;i++){
    digitalWrite(die,LOW);//alle bits werden auf HIGH getzt
    digitalWrite(ras,HIGH);
    digitalWrite(cas,HIGH);
    PORTD=x;
    digitalWrite(ras,LOW);
    PORTD=0;
    digitalWrite(rw,LOW);

    PORTD=i;

    digitalWrite(cas,LOW);

    PORTD=0;


    digitalWrite(ras,HIGH);
    digitalWrite(cas,HIGH);
    digitalWrite(ras,LOW);
    digitalWrite(cas,LOW);
  }
  }
  for(x=0;x<=8;x++){//Lesevorgang...
  Serial.println("|");
  Serial.print(x);
  for(i=0;i<=8;i++){
    digitalWrite(ras,HIGH);
    digitalWrite(cas,HIGH);
    PORTD=x;
    digitalWrite(ras,LOW);
    PORTD=0;
    digitalWrite(rw,HIGH);
    PORTD=i;
    digitalWrite(cas,LOW);
    PORTD=0;

    if(HIGH==digitalRead(cue)){//alle bits werden auf ausgelesen
    Serial.print("1");//es kommt immer 1 raus!?
    }else{
    Serial.print("0");
    }
    digitalWrite(ras,HIGH);
    digitalWrite(cas,HIGH);
    digitalWrite(ras,LOW);
    digitalWrite(cas,LOW);
  }
  }
}
Zweck:
Der chip soll als Speicher dienen um Programme zu speichern, die Per 
interpreter im arduino ausgeführt werden sollen.
#4650179
Lesenswert?

Dr. Sommer schrieb:
> Also 8 KByte?!

Noch nicht mal. Ein 4164 ist ein 64Kx1 DRAM. Also nur 1 Bit breit. Um 
damit etwas anzufangen, muß man erst mal 8 Stück parallel schalten 
(außer den Datenleitungen natürlich).

Außerdem ist das kein CMOS, sondern NMOS - braucht also ordentlich 
Strom. Im Betrieb ca. 50mA pro Chip. Und die Refresh-Zeit ist lediglich 
2ms. In diesen zwei Milli(!)sekunden muß man alle 128 Zeilen des RAMs 
jeweils einmal aufgefrischt haben, sonst wird der RAM vergeßlich. Die 
GPIOs eines Arduino - noch dazu unter Verwendung der Arduino 
IO-Primitiven ist dafür denkbar ungeeignet - weil zu langsam.

@PlotFill (Gast): diese RAMs wurden in 8-Bit Heimcomputern verwendet. 
U.a. im ZX Spectrum und einigen Varianten des C64. Die sind auch heute 
noch gesuchte Ersatzteile.
(Firma: matzetronics) #4650279
Lesenswert?

PlotFill schrieb:
> Maximal braucht der ic 60mA bei einem Vorgang.

Sage ich ja. Das ist schon mehr, als dein ganzer Arduino benötigt.

> Kann man den refresh nicht auch im arduino programmieren?

Auch das habe ich geschrieben:
> Ausserdem müsstest du fürs Refresh mindestens einen Timer mit ISR
> opfern.

Da du, wie schon erwähnt, da nur einen 1-bit*64k Chip hast, musst du 
dann entweder 8 Stück nehmen oder die Daten seriell speichern und lesen 
und dann in den RAM der AVR laden - das möchtest du alles nicht und 
kommst damit vermutlich auch schnell an das Ende deiner 
Programmierkenntnisse.

Du kannst, wenn du ein Hardware Spezi bist, aus den Dinger mit 
geschickter Logik noch einen Framebuffer bauen - so wie Steve Wozniak 
das z.B. im Apple ][ gemacht hat. Damit hast du den Refresh und den 
Bildaufbau in einem Schwupps erledigt. Dazu musst du aber schon richtig 
Hardware basteln können und noch einen Schwung Mulitplexer und 
Schieberegister in die Menge werfen.
#4650285
Lesenswert?

Aus reiner Neugier kann man sowas schon bauen, praktisch sinnvoll ist es 
nicht. Wenn man mehr Speicher am AVR braucht, dann nimmt man SRAM oder 
beim ATXmega SDRAM. ODer gleich einen 32 Bitter mit deutlich mehr RAM, 
z.B Arduino Zero.

https://www.mikrocontroller.net/articles/Speicher#Mit_XMEM-Interface

Beitrag "Re: Viel RAM am kleinen Controller"

https://www.arduino.cc/en/Main/ArduinoBoardZero

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren