Forum: Mikrocontroller und Digitale Elektronik 8515 mit externem RAM


von Ralf (Gast)


Lesenswert?

Moin Moin,

habe immer noch Probleme mit meinem externen RAM am 8515!

Verwende ein 70ns SRAM zusammen mit einem 74HC573 als Adresslatch und 
der 8515 läuft auf 4MHz.
Habe das ganze mittlerweile auf einer Lochrasterplatine aufgebaut um 
möglichst kurze Verbindungswege zu haben, die ich vorher nicht hatte. 
Leider brachte auch das keinen Erfolg.
In der Software muss man doch einfach nur das externe RAM im 
MCUCR-Register freigeben und kann dann z.B. mit Hilfe des 
X-Y-Z-Registers und den ld und st Befehlen auf das externe RAM wie auf 
das interne zugreifen. Liege ich da richtig, oder ist da noch ein Haken. 
Mit und ohne Waitstate habe ich auch schon versucht.

Hoffe Ihr könnt mir helfen!

Gruß,
Ralf

von crazy horse (Gast)


Lesenswert?

/rd, /wr, /ce korrekt angeschlossen?

von Ralf (Gast)


Lesenswert?

Habe /rd und /wr direkt vom Controller mit den entsprechenden Pins des 
SRAMs verbunden.
/ce generiere ich mir über einen 74HC138. Habe die Adressleitungen 
A15,A14,A13 auf die Eingänge gelegt und Ausgang Y0 des HC138 auf den /ce 
des SRAMs.
ALE des Controllers liegt direkt auf dem ALE-Eingang des 74HC573.
Das sollte doch richtig sein, oder?

von Ralf (Gast)


Lesenswert?

Hat wirklich keiner eine Idee?

oder hat vielleicht einer eine Beispielschaltung mit Testprogramm, mit 
der ich meine Lösung vergleichen kann? Könnte auch mal meine 
Schaltung/Code anhängen

von DerInder (Gast)


Lesenswert?

Hallo,
schau doch mal auf die Seite von Daniel Herrington 
(http://www.frii.com/~dherr/gbcam.html), da ist zwar etwas mehr am MC 
(AD-Wandler) und die Software ist recht complex aber die dich 
interessierenden Teile sin recht einfach zu erkennen.

Gruß
-=jens=-

von Ralf (Gast)


Lesenswert?

Hallo Jens,

danke für deine Hilfe!
Habe gesehen, dass dort Pullups an der /rd und /wr Leitung hängen. Diese 
habe ich in meiner Schaltung nicht. Wenn ich mir die Schaltung des YAMPP 
MP3 Players ansehe, dann finde ich diese Widerstände jedoch auch nicht. 
Sind die beiden Ausgänge /rd und /wr open drain Ausgänge, sodass diese 
Widerstände nötig sind, oder nicht??

Gruß,
Ralf

von DerInder (Gast)


Lesenswert?

Hallo Ralf,
ich denke die Pullups dienen dazu undefinierte Zustände beim Einschalten 
zu verhindern. Beim starten des AVR´s sind die Ports ja als Eingänge 
definiert, ganz sicher bin ich mir allerdings nicht. Ich hab die 
Schaltung von Daniel, allerdings mit nem anderen AD-Wandler, aufgebaut 
und sie funzt einwandfrei.

Gruß
-=jens=-

von crazy horse (Gast)


Lesenswert?

pullups brauchst du nicht.
Setz doch endlich mal dein Programm hier rein, die Rätselraterei geht 
einem doch auf den Keks.

von Ralf (Gast)


Angehängte Dateien:

Lesenswert?

Sorry,

also hier mein Testprogramm.
Ich will vom Terminal eine Textdatei zum Controller senden und dann, 
wenn ich einen Taster drücke, soll diese Datei wieder zurück gesendet 
werden.
Habe hier nicht auf Schönheit geachtet, der Taster ist also nicht 
entprellt usw.

von DerInder (Gast)


Lesenswert?

Hallo Ralf,
du zählst ja deine Counter-Register in der UART_RCX nicht hoch (nach dem 
Auskommentierten st Befehl), dann muss deine Ausgaberoutine der Meineung 
sein, das keine Daten vorhanden sind.

Gruß
-=jens=-

von Ralf (Gast)


Lesenswert?

Hallo Jens,

ich gehe bei dem Testprogramm einfach davon aus, dass ich vor dem 
drücken des Tasters schon ein Textfile an den Controller gesendet habe, 
welches groß genug ist. Habe ich dieses File gesendet, dann drücke ich 
den Taster und setze den Zeiger wieder auf den Startpunkt, wo ich zuvor 
mit dem Beschreiben des RAMS begonnen habe. Von dort aus lese ich dann 
die Daten aus dem RAM aus und sende sie über die Schnittstelle an den 
PC. Die Anzahl der ausgelesenen Bytes habe ich einfach festgelegt und 
hat nichts mit der tatsächlich empfangenen Datenmenge zu tun. Ich möchte 
nur, das der Controller irgendwann aufhört zu senden, da sonst das 
Terminal bei mir immer weiter lief.

von DerInder (Gast)


Lesenswert?

Hallo Ralf,
o.k. wenn du es so machst solle das Programm ~2550 Byte senden.
Dann ist es wohl doch eher ein Hardware-Fehler. Check mal die 
Steuersignale, die Adress- und Datenleitungen sind (zumindest was 
vertauschen der Leitungen untereinander, nicht Adress- gegen 
Datenleitungen angeht) irrelevant.

Ich hoffe du kannst den Fehler lokalisieren. Sende eventuell mal ´n 
Layout das du verwendet hast.

Gruß
-=jens=-

von Ralf (Gast)


Lesenswert?

Werde morgen mal meinen Eagle-Plan anhängen und auf der Arbeit mal die 
Steuersignale ausmessen. Hoffe ich komme dann damit weiter. Werde mir 
auch noch ein paar Speicher ICs zulegen. Vielleicht hat mein jetziges ja 
auch schon ne Macke

Viele Grüße,

Ralf

von Sascha Weitkunat (Gast)


Lesenswert?

Hast du deinem AVR auch erzählt dass ihm externer Speicher zur verfügung 
steht?

Im MCUCR-Register das SRE-Bit setzen.

von Ralf (Gast)


Lesenswert?

Hallo Sascha,

habe 0xC0 ins MCUCR-Register gesetzt. Also SRE = 1 und 1 Waitstate. Habe 
es aber auch schon ohne Waitstate versucht.

von Ralf (Gast)


Angehängte Dateien:

Lesenswert?

Moin Moin,

habe euch nochmal meine Schaltung angehängt. Vielleicht könntet Ihr ja 
mal einen kurzen Blick drauf werfen, ob ich da einen Fehler drin habe. 
Die CF-Fassung habe ich noch nicht eingebaut. Wollte erst mal den Rest 
ans laufen kriegen. Ebenso fehlt der Spannungsregler.
Ist eine Eagle *.sch-Datei.

Danke schonmal....

Ralf

von DerInder (Gast)


Lesenswert?

Hallo Ralf,
dein Schaltplan ist bis auf die Adressselektion OK, es währe günstiger 
den RAM_CS direkt mit A15 zu verbinden weil du sonst nur das untere 
Viertel deines RAMs ansprechen kannst. Der Fehler sollte aber nicht die 
prinzipielle Funktion der Schaltung beeinträchtigen.

Gruß
-=jens=-

von Ralf (Gast)


Lesenswert?

Danke,

muß ich mir nochmal anschauen. Wollte meinen Adressbereich nachher in 
mehrere Teile aufteilen und dann die CF-Karte in einen höheren Bereich 
hineinlegen. Dann muß ich wohl noch ein ODER einbauen oder so, damit ich 
auch das ganze RAM verwenden kann. Die unteren 512 Byte werden glaube 
ich auch abgeschnittnen. Das hatte ich bis jetzt in Kauf genommen. Aber 
3/4 wollte ich nicht verlieren.
Werde heute dann nochmal die Steuersignale mit dem Scope nachmessen. 
Wenn die dann stimmen, hat wohl mein RAM oder eines der anderen ICs ne 
Macke.

Gruß,

Ralf

von Ralf (Gast)


Lesenswert?

Moin Moin,

danke für eure Hilfe!

Habe jetzt gestern meine Schaltung durchgemessen und das Problem lag 
wohl an der Entprellung des Tasters. Ich habe mir dort wohl immer recht 
schnell eine Störung eingefangen, sodass der Controller gleich zur 
Ausgabe der Daten übergegangen ist. Da zu diesem Zeitpunkt meist nur 
nicht lesbare oder Steuerzeichen im RAM standen, hat mein Terminal 
nichts angezeigt. Habe den Taster jetzt entprellt und alles 
funktioniert. Hätte nicht gedacht, dass das Entprellen des Tasters in so 
einem kleinen Programm so wichtig ist. Werde also in Zukunft immer 
saubere Programme schreiben!

Viele Grüße,

Ralf

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.