Forum: Mikrocontroller und Digitale Elektronik Arduino DRAM Ansteuerung


von PlotFill (Gast)


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.

von H.Joachim S. (crazyhorse)


Lesenswert?

Vergiss es.
Wenn überhaupt: nimm SRAM.

von PlotFill (Gast)


Lesenswert?

Schade das waren Nämlich mehr als nur einer.
Nämlich über 20!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

PlotFill schrieb:
> Schade das waren Nämlich mehr als nur einer.
> Nämlich über 20!

Schau im Datenblatt mal nach dem Stromverbrauch. Mit ein wenig Glück 
verbraucht ein solch Chip schon mehr als dein Arduino, nämlich 45-60mA.
Ausserdem müsstest du fürs Refresh mindestens einen Timer mit ISR 
opfern.

von PlotFill (Gast)


Lesenswert?

Matthias S. schrieb:
> Schau im Datenblatt mal nach dem Stromverbrauch.

Maximal braucht der ic 60mA bei einem Vorgang.

Kann man den refresh nicht auch im arduino programmieren?

von Michael U. (amiga)


Lesenswert?

Hallo,

vielleicht gibt Dir das Anregungen:
http://hackaday.com/2014/04/09/using-simms-to-add-some-extra-ram-on-your-arduino-uno/
https://www.mikrocontroller.net/articles/AVR_CP/M

Auch wenn es wenig Sinn macht...

Gruß aus Berlin
Michael

von Dr. Sommer (Gast)


Lesenswert?

Also 8 KByte?! Das lohnt sich absolut überhaupt nicht. Wenn du einen 
Arduino Zero nimmst, hast du schon 32 KB SRAM auf dem Mikrocontroller. 
Das ist viel schneller und trivial zu nutzen.

von Axel S. (a-za-z0-9)


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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


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.

von Falk B. (falk)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.