ATMega8515 mit 512kB SRAM klappt nicht

Gast #633083
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
Gast #633105
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.
Gast #633112
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
#633202
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
Gast #633271
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren