Forum: Mikrocontroller und Digitale Elektronik ATMega8515 mit 512kB SRAM klappt nicht


von Michael (Gast)


Lesenswert?

Ich habe ein kleines Problem mit einem SRAM am ATMEGA8515. Ich bekomme 
scheinbar keine Daten rein.

Anbei der Source vom Testen. Die oberen Leitungen (A16-A18 haengen an 
Port E = 0 : 64kB Bank 0). Ich habe es mal auf das Notwendigste 
reduziert: Zuerst wird A8-15 auf Portc geschrieben und ein Latch 
geclocked, danach wird der gleiche Port fuer A0-A8 beschrieben.
Der Datenport ist PortD und die DDRs sind alle (teilweise vorab) passend 
gesetzt.



        ldi ladr,0                         ; SRAM: Low-Address
        ldi hadr,0                         ; SRAM: Hi-Address

m5:

        ldi mp,255
        out ddrd,mp                        ; PortD output SRAM.:Data

        out portc,hadr                     ; set address port
        in mp,pinb                         ; clock (0) - 1 - 0 (A8-A15)
        ori mp,0b00001000
        out portb,mp
        andi mp,0b11110111
        out portb,mp

        out portc,ladr                     ; set Address (A0-A7)



        out  portd,count                  ; generate some values


        in mp,pinb                         ;  SRAM /WE:0 /CE:0 : write
        andi mp,0b11101011
        out portb,mp

        ori mp,0b11110100                  ; /WE:1 /CE:1 : tristate
        out portb,mp




Das SRAM ist ein 628512-70, der auch unter dieser Bezeichnung bei 
Reichelt zu finden ist. Ich hatte diesen Typen schonmal an einem sehr 
alten 8bit-Computer mit einem 6522-VIA verwendet. Da gab es mit 
folgendem Ablauf keine Probleme : Adressen setzen, Datenport setzen, /CE 
und /WE (wurde dort duch R/W erledigt) passend pulsen.
Der Source entspricht meinem letzten Versuch. Es ist zum Verzweifeln. 
Ich uebertrage mit knapp 20kB/s zwischen einem 30 Jahre alten CBM und 
einem AVR . An einem ansonsten unproblematischen SRAM muss man dann 
haengen bleiben.

Koennte mir jemand auf die Spruenge helfen ?

/OE liegt in der Schaltung auf GND. Habe ich bisher immer so verwendet. 
Elektrisch sollte alles ok sein. Signale sind auch alle passend da.


Michael

von Michael (Gast)


Lesenswert?

Kleiner Nachtrag : PB2: /CE, PB4: /WE , AVR-Clock : 2Mhz.

von Hannes L. (hannes)


Lesenswert?

Warum machst Du das "zu Fuß"? Der 8515 hat doch ein integriertes 
XMEM-Interface.

...

von holger (Gast)


Lesenswert?

>/OE liegt in der Schaltung auf GND. Habe ich bisher immer so verwendet.
>Elektrisch sollte alles ok sein. Signale sind auch alle passend da.

Kein Wunder das du dann nichts schreiben kannst:
Output Enable dauernd aktiviert. Statt /OE besser /CE auf GND.

von Michael (Gast)


Lesenswert?

hannes :
Das haette mir rd/wr in einen schon verwendeten Port gelegt. Ist auch 
etwas Gewohnheit und Faulheit sich mal mit diesen zusaetzlichen 
Port-Funktionen auseinander setzen zu muessen. ;)

Bei der /WE-Steuerung brauche ich afaik nur eine Leitung.


holger: Nach meinen Erfahrungen und den Informationen aus dem Datenblatt 
(OE immer L) sollte /OE nicht stoeren. Ich werde es dennoch mal testen.

Michael

von Benedikt K. (benedikt)


Lesenswert?

OE\ beeinflusst in der Tat bei nahezu allen RAMs (ich schreibe 
absichtlich nur RAM, denn bei DRAMs ist es genauso) nur den 
Ausgangstreiber. WE\ ist in Wirklichkeit also eher R/W\.

von Michael S. (cbmhardware)


Lesenswert?

Ich habe es :

/OE -> GND
/CE : PB2
/WE : PB4 zur Steuerung


Laut den Datenblaettern diverser 512 kB-SRAM-Chips hat /WE Prioritaet. 
/OE ist beim Schreibzugriff immer als "X" markiert, heisst "don't care". 
Da es beim Lesen sowieso auf GND liegt, ist das Konfigurieren eher 
Latte.

Zuerst wird /CE= 0 gesetzt.Beim Schreiben setze ich nun erst die 
Adressen, lege das Byte auf das Latch und pulse danach /WE (1):0:1. /CE 
wird zugleich mit dem letzten Pegelwechsel auf 1 gesetzt.

Beim Lesen wird dann das Abfragen von PortD "in den Pegelwechsel" von 
/CE gesetzt.

That's all. Man muss es nur richtig machen. :)

Michael

von holger (Gast)


Lesenswert?

>Zuerst wird /CE= 0 gesetzt.Beim Schreiben setze ich nun erst die
>Adressen, lege das Byte auf das Latch und pulse danach /WE (1):0:1. /CE
>wird zugleich mit dem letzten Pegelwechsel auf 1 gesetzt.

Mal was zum nachdenken ;)

/OE liegt auf GND. Wenn /CE auf 0 geht und du Daten
auf den Datenbus gibst, liegen die Ausgänge des RAM
und des Datenbusses parallel bis /WE auf 0 liegt.
Vieleicht besser erst /WE runterziehen und dann /CE.

von Michael S. (cbmhardware)


Lesenswert?

Das mit dem "Zuerst wird /CE= 0 gesetzt" koennen wir streichen.;)

Hatte ich ca. 5 Minuten nach dem Posting gemerkt. Ist ueberfluessig.

Michael

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.