Arduino DRAM Ansteuerung

Gast #4650055
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.
Gast
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.
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)
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.
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.