PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie kan externes RAM bei PIC verwendet werden?



JayCool
22.01.2006, 10:50
Hi Leute,

ich würde gerne bei PIC-Projekten etwas mehr RAM als die etwa 1500 Speicherzellen bei einem PIC 18F452 zur Verfügung haben.
Hat von Euch jemand einen Tipp für mich, ob und wie man mittels eines externen Bausteins mehr RAM zur Verfügung stellen kann?
Ich denke hier so in einem Bereich von mehreren -zig KiloByte.
(Ist für die temporäre Vorhaltung von MIDI-Daten gedacht!!!).
Falls es so einen Baustein gibt, wird der über I²C angeschlossen oder Adress- und Datenbus?!?!?

Gruß, Jan

ruediw
22.01.2006, 12:23
Der Pic hat keinen Adress und Datenbus soweit ich weiss.
Da müsstest Du eine anderen uC verwenden wie den 8051 oder einer seiner Derivate.

Fur PIC gibt es Projekte für MP3 player.
Schau mal da ob du was findest.

Folgende Seite kann ich Dir empfehlen (speziell für PIC):
http://www.fernando-heitor.de

oder schau mal hier nach:
http://www.mikrokontroller.net

kalledom
22.01.2006, 13:31
Hallo Jan,
es gibt Speicher für I2C, welche seriell gelesen und beschrieben werden, was nicht besonders schnell ist.
Ansonsten gibt es statische RAM's, für die ein Daten- und Adress-Bus vorhanden sein muß. Für Daten brauchst Du am PIC ein 8 Bit bidirektionales Port (lesen und schreiben) und für die Adressen so viele, wie Du möchtest. 8 Adress-Leitungen wären 256 Speicherplätze, 16 sind 65536. Dann noch 2 Pins für Schreib- und Lese-Signale.
Du kannst den Daten- und Adress-Bus auch multiplexen, um Port-Pins zu sparen. Dazu wird erst die Adresse auf den Adress-/Daten-Bus gelegt und mit einem Latch-Signal in einem 8...16 Bit D-Latch gespeichert. Die Ausgänge der D-Latchs führen zum Speicher-Baustein. Dann werden Daten auf den Adress-/Daten-Bus gelegt und ein Schreib-Signal ausgegeben oder ein Lese-Signal ausgegeben und die dann anliegenden Speicher-Daten eingelesen.

stegr
22.01.2006, 15:03
Die meisten etwas größeres PICs (so auch deiner) haben einen sogenannten Parallel Slave Port. Der besteht meistens aus PORTD und PORTE, also 8 Bit + 3 Bit.
Wenn du dir die Bezeichnungen anschaust, stellste schnell fest, dass der schon genau dafür ausgelegt ist (RD,WR, Chip-Select).

Du kannst entweder die Ansteuerung von Hand machen und nur die Pins nutzen - oder du verwendest die Hardwareeinheiten des PICs dafür.
Vorteil der Hardwarefunktionen: Automatische Umschaltung der Tristate-Register, je nachdem ob du schreibst oder liest.
Nachteil: eigentlich ist er nur als Slave aufgebaut, d.h. er geht davon aus, dass ihn jemand anders mit Daten füttert und er nicht selber dafür zuständig ist - sollte aber trotzdem funktionieren.

Im Datenblatt findest du auf Seite 102 etwas dazu.

MfG
Stefan

kalledom
22.01.2006, 17:11
Hallo Stefan,
ich habe das laut Datenblatt für den PIC 16F877 so verstanden, daß RD, WR und CS Eingänge sind und im PSPMODE extern gesteuert werden können, was dann bedeutet, bei einem RD sind Port D Ausgänge und bei WR Eingänge. Folglich ist der PSP-Mode für ein externes RAM anzusprechen unbrauchbar; alles muß manuell gemacht werden.

JayCool
22.01.2006, 17:57
Hi Leute,

kann mir mal jemand 'ne Reichelt- oder Conrad-Bestellnummer für ein paar unterschiedliche RAM-ICs nennen? Ich kann ja wohl nicht diese Speichermodule verwenden, die üblicherweise für PCs angeboten werden.
Und ein paar Links zu den Beispielprojekten auf www.fernando-heitor.de wären auch nicht schlecht. Ich glaub' ich blick heute den Google nicht ?!?!? ](*,)

Vielen Dank im Voraus!!!

Gruß, Jan

kalledom
22.01.2006, 23:11
Du brauchst ein statisches RAM xxxK x 8 (xxxK = KiloBits, x 8 = 8 Bit parallel). Die Zugriffszeit spielt bei Deiner Anwendung keine Rolle.
Reichelt Bestell-Nr. z.B. 6116-100 oder 6264-70 oder 62256-80 ....

JayCool
23.01.2006, 09:22
Hallihallo,

ich hab' da noch eine absolute Anfängerfrage: Was kann man sich unter einem STATISCHEN RAM vorstellen? Bleibt da der Speicherinhalt nach dem Ausschalten erhalten, und wo wäre dann der Unterschied zu einem EEPROM? Gibt es im Gegensatz dazu auch dynamische RAMs???

Gruß, Jan

ruediw
23.01.2006, 09:31
http://www.fernando-heitor.de
http://de.wikipedia.org/wiki/Random_Access_Memory
http://de.wikipedia.org/wiki/Statisches_RAM
http://de.wikipedia.org/wiki/Dynamisches_RAM

kalledom
23.01.2006, 13:46
Für ein dynamisches RAM wird zusätzliche Hardware benötigt, die den Inhalt jeder SpeicherZelle zyklisch auffrischt.
Das brauchst Du beim statischen RAM nicht. Hier kannst Du auch mit einer kleinen Batterie 3,6...5 V den Speicherinhalt nach dem Abschalten erhalten. Der Stromverbrauch für ein 62256-70 liegt unter 1 MikroAmpere.
Bei einem Eeprom bleiben die Daten ohne Batterie erhalten. Nach jedem SchreibZyklus braucht das Eeprom jedoch einige MilliSekunden WarteZeit, bis der Speichervorgang fertig ist.

stegr
23.01.2006, 17:22
Hallo Stefan,
ich habe das laut Datenblatt für den PIC 16F877 so verstanden, daß RD, WR und CS Eingänge sind und im PSPMODE extern gesteuert werden können, was dann bedeutet, bei einem RD sind Port D Ausgänge und bei WR Eingänge. Folglich ist der PSP-Mode für ein externes RAM anzusprechen unbrauchbar; alles muß manuell gemacht werden.

Das ist ja genau das, was ich oben geschrieben habe - im PSPMODE ist der PIC ein Slave. Aber es gibt einen Trick: du verwendest zusätzlich noch normale Portpins und verdrahtest die auf RD, WR, sowie umgekehrt an den RAM.
D.h. du legst RD an nen Portpin und an WR vom RAM, genau das gleiche machst du mit WR: Portpin und RD vom RAM. Wenn du dann eine Leitung schaltest, initiirst du damit automatisch das Umschalten der Trisregister und das setzen des entsprechenden Pins am RAM. Spart ein bissle Zeit ;)

Problem bei der Kombi: die Setup-Zeit muss entsprechend kurz sein, so dass es keine Timing-Konflikte gibt (also dass er nicht liest, während die Daten noch nicht anliegen).

Aber selbst wenn du das nicht an den RAM verdrahtest, ist das noch etwas schneller, da fürs TRIS-Umschalten ein Wechsel der Bank (bei den 16FXXX) nötig wäre, für Setzen von nem Pin nicht.
Das ganze ist sicher nicht die typische Nutzung der Funktion sondern zeigt eher, wie man mit etwas verquert denken noch ein bissle mehr ausm PIC rausholen kann.

MfG
Stefan

kalledom
24.01.2006, 11:16
@Stefan
Der Trick, mit Ausgängen die eigenen Eingänge zu steuern, ist gut. Was ist mit CS ? Kann / darf / muß der an GND liegen ? Hast Du das schon mal so realisiert ?
Ein kleines Timing-Problem sehe ich: wenn Daten vom RAM in den PIC rüber sollen, muß ein PIC-Ausgang für PIC-Eingang WR und RAM-Eingang RD auf Low gesetzt werden. Laut Diagramm müssen die Daten am PIC jedoch schon bei der fallenden Flanke von WR gültig sein. Das würde bedeuten, daß ich zum Auslesen des RAM zwei PIC-Ausgänge brauche: einer für den RAM-Eingang RD, damit die Daten schon mal anliegen, und einen weiteren Augang für den PIC-Eingang WR zur Übernahme der Daten.
In die umgekehrte Richtung sehe ich das auch so.
Ich muß mich also entscheiden, ob ich:
a) insgesamt 6 Pins vergeude und damit das Umschalten eines Ports einspare oder
b) nur 2 Ausgänge benutze, aber zusätzlich die TRIS-Register setzen muß.