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
Warum machst Du das "zu Fuß"? Der 8515 hat doch ein integriertes XMEM-Interface. ...
>/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.
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
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\.
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
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.