www.mikrocontroller.net

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


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Nachtrag : PB2: /CE, PB4: /WE , AVR-Clock : 2Mhz.

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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\.

Autor: Michael Sachse (cbmhardware)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Sachse (cbmhardware)
Datum:

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

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

Michael

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.