PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 32K ram an avr 90S8535



malte
18.04.2004, 18:29
hallo zusammen!

ich habe mir ein kleines avr-board mit einem 90S8535 aufgebaut, den ich mit bascom progrmmiere. ich fange zwar gerade erst an mich in die materie reinzufummeln, komme aber bisher ganz gut klar. jetzt habe ich 'ne frage bei der googeln nicht so recht zum erfolg führte: ich möchte mindestens 32K (besser 64K) ram an den controller anschließen. hat das schonmal jemand gemacht und könnte mir einen schaltplan und vielleicht auch bascom beipeilprogramme zukommen lassen? würde mich sehr freuen!
ich überlege, ob man nicht auch über i2c einen ram-chip in der o.g. grössenordnung anschließen kann. hat da auch jemand konkrete hinweise oder tips? hat i2c nachteile (zugriffszeiten o.ä.)?

vielen dank schonmal an alle, viele grüsse,
malte

Michael
19.04.2004, 12:21
Hallo malte,
Mit dem 8535 wirst du vernünftig keinen Ram drankriegen, da brauchst du den 8515 (oder andere mit Interface). Der geht dann bis 64k, ich hatte es selbst schon mit 32k aufgebaut.
Gruss, Michael

Kjion
19.04.2004, 16:13
Gehen tut es schon, allerdings eignet es sich höchstens zu Datenaufzeichung, da der Zugriff "per Hand" geschehen muss und deshalb relativ langsam ist. Das gleich gilt übrigens noch viel extremer für eine Anbindung über I2C.

Es gibt ein paar AVRs mit einem Interface für externes RAM. Da ists dann ganz einfach, bei denen kann man das externe RAM fast genauso wie internes ansprechen, braucht sich also nicht mehr darum zu kümmern.
Dafür kann ich dir auch mal einen Schaltplan raussuchen wenn Interesse besteht...

Wofür brauchst du eigentlich das ganze RAM ?

MfG Kjion

bewild
19.04.2004, 17:26
Hallo Kijon,

wie erkenne ich den die AVRs mit dem externen RAM Interface?

Bernd

Kjion
19.04.2004, 18:13
Im Datenblatt schauen ;-)
Du erkennst sie daran, das sie folgende Pins haben:
AD0 bis AD7, A8 bis A15, /WR, /RD und ALE...

Soweit ich weiß haben das aber nur die Typen AT90S8515, ATMega161, ATMega162, ATMega128, ATMega8515 ( Ich hoffe das waren jetzt alle )
Ich werd sie demnächst mal in die Übersichtsliste auf http://www.kreatives-chaos.com/index.php?seite=avruebersicht eintragen.

MfG Kjion

20.04.2004, 13:54
hallo kjion!

danke für die info! das viele ram brauche ich nicht für eine roboter-anwendung (zumindest vorerst nicht), ich wollte mir einen mehrkanaligen pulsgenerator bauen, der lange programme abarbeiten soll.

danke nochmal, mfg,
malte

roboter
17.04.2005, 19:10
Ich habe auch noch mal ein paar fragen zum externen RAM
Ich möchte gerne 32K externen RAM benutzen, aber ich versteh das im Moment gar nicht.
Ich habe auch schon in allen möglichen Foren und bei google gesucht, finde aber nicht das ware.


Dafür kann ich dir auch mal einen Schaltplan raussuchen wenn Interesse besteht...
Das wäre schonmal wunderbar. Mit dem aus der BASCOM-Hilfe komme ich irgendwie nicht klar.


Wenn ihr noch Code-Beispiele hättet, wäre das auch wunderbar. Die würde ich mir nämlich auch gerne anschauen.

MFG!

roboter
19.04.2005, 21:18
Keiner der mir helfen kann??

Ich habe nochmal ein bißchen weitergesucht und versucht einen Schaltplan zu machen. Könnte da einer drüberherschauen ob das so funktioniert?

MFG

Kjion
20.04.2005, 17:37
Ich habe nochmal ein bißchen weitergesucht und versucht einen Schaltplan zu machen. Könnte da einer drüberherschauen ob das so funktioniert?

Der sieht schonmal richtig aus so.

Ich weiß nicht wie das in Bascom ist, aber theoretisch sollte man das externe RAM wenn man es aktiviert fast wie das normale interne ansprechen können.
( ich meine gelesen zu haben das man die Variablen über irgendeinen Befehl wie XRAM oder so ins externe RAM legen kann ).

MfG Kjion

roboter
20.04.2005, 23:35
@Kjion:
Hättest du vieleicht noch einen Code zum ansteuern, den du posten könntest? Kann auch ruhig in C sein, muß nicht unbedingt Bascom sein. Das würde mir dann auch schonmal weiterhelfen.

Die Hardware habe ich jetzt auch verstanden, jetzt fehlt mir noch son bißchen die Übersicht über den Softwareteil.

bhm
21.04.2005, 09:05
Ich habe nochmal ein bißchen weitergesucht und versucht einen Schaltplan zu machen. Könnte da einer drüberherschauen ob das so funktioniert?
Der sieht schonmal richtig aus so.
Das Datenblatt sagt, dass jenseits 8MHz die 74HC.. Address Latches evtl zu langsam sind. Vielleicht wäre da was schnelleres angesagt (74ALS.. ?).

'Ne andere Frage: Bei Reichelt finde ich max 32kB Speicher, 64k kann man aber anschließen. Wie schlte ich denn 2 32er parallel? Muss ich dann aus den Adress-Leitungen noch ein zusätzliches Chipselet ableiten ? Wäre etwas kompliziert ..


Ich weiß nicht wie das in Bascom ist, aber theoretisch sollte man das externe RAM wenn man es aktiviert fast wie das normale interne ansprechen können.
Hat jemand 'ne Idee wie das in gcc aussieht?

ciao .. bernd

Kjion
21.04.2005, 09:35
Hi,

ich hab das externe RAM noch nicht so viel benutzt. Du könntest allerdings mal folgende Codestück ausprobieren ;-) :

// aus dem Datenblatt des ATMega162 ab Seite 28

#define OFFSET 0x0500

void init(void)
{
DDRC = 0xFF;
PORTC = 0x00;

/* externes RAM aktivieren */
MCUCR |= (1<<SRE);

/* eventuelle Waitstats aktivieren */
EMCUCR = 0;

/* eventl. Pins von PortC freigeben */
SFIOR &= ~((1<<XMBK)|(1<<XMM2)|(1<<XMM1)|(1<<XMM9));
}

int main(void)
{
unsigned char *p = (unsigned char *) (OFFSET + 1);

init();

*p = 0xaa;

PORTB = *p;

/* Die "unteren" Bytes liegen im internen RAM! */
p = 0x0002 + OFFSET;

*p = 0x72;

PORTD = *p;

while(1)
;
}
Hab das mal schnell zusammengestrickt. Ist also völlig ungetestet...

MfG Kjion

Kjion
21.04.2005, 09:41
Das Datenblatt sagt, dass jenseits 8MHz die 74HC.. Address Latches evtl zu langsam sind. Vielleicht wäre da was schnelleres angesagt (74ALS.. ?).

Wäre eine interessante Frage. Vielleicht könnte man jemand rausfinden welche Gatterlaufzeiten die einzelnen Chips haben ??
Hatte mich damit wie gesagt noch nicht wirklich genauer mit beschäftigt ...


'Ne andere Frage: Bei Reichelt finde ich max 32kB Speicher, 64k kann man aber anschließen. Wie schlte ich denn 2 32er parallel? Muss ich dann aus den Adress-Leitungen noch ein zusätzliches Chipselet ableiten ? Wäre etwas kompliziert ..

Es gibt so gut wie keine 64 kByte RAMs. Du kannst entweder ein 128 kByte RAM nehmen, oder eben wie du geschrieben hast zwei 32 kB RAMs. Dann brauchst du allerdings noch einen Inverter.
A15 vom AVR geht dann auf die CS Leitung des einen Chips und über den Inverter auch gleichzeitig auf die des anderen Chips. So sprichst du dann in den unteren 32 kB den einen Chip an, in den oberen den anderen...

MfG Kjion

bhm
21.04.2005, 11:57
ich hab das externe RAM noch nicht so viel benutzt. Du könntest allerdings mal folgende Codestück ausprobieren ;-)
hmmm, vorher muss ich so ein Ding erstmal bauen ....
Hat aber im Moment keine hohe Priorität. Gibt es dafür eigentlich Bedarf, also Frage Entwicklung nach Roboternetzstandard?

ciao .. bernd

bhm
21.04.2005, 11:59
Dann brauchst du allerdings noch einen Inverter.
A15 vom AVR geht dann auf die CS Leitung des einen Chips und über den Inverter auch gleichzeitig auf die des anderen Chips.
Das wäre noch ein mäßiger Aufwand. Ich hatte Schlimmeres befürchtet.

ciao .. bernd

roboter
21.04.2005, 12:01
Danke, so langsam kommt mir der Überblick O:)

Wenn man bei reichelt nach 62256-80 sucht, kommt man zu den Ram den ich benutzen will. Im Datenblatt des ATMega162 steht ja was von Waitstats. Ich will den ATMega162 mit 8Mhz takten. Nun weiß ich aber nicht, welches von den vier angegebenen das Richtige ist für diese Kombination ist.

roboter
21.04.2005, 14:19
Würde sowas in Bascom funktionieren?

$regfile = "m162def.dat" 'ATmega8-Deklarationen
$crystal = 8000000 'Quarz: 8 MHz

'enable XRAM
Mcucr.7 = 1

'nur einen Sektor
Emcucr.6 = 0
Emcucr.5 = 0
Emcucr.4 = 0

'Waitstats (Welche Einstellung benötige ich hier genau?)
Mcucr.6 = 0
Emcucr.1 = 0

'32K --> es werden nur 15 Adressbits benötigt --> PC7 freischalten
Sfior.3 = 1


'Der 32k-Speicher ist nun verfügbar von 0X0500 bis 0X8500