www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SRAM Write / Read Cycle


Autor: Lötmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo miteinander

Ich probiere ein SRAM der Firma NEC ( uPD431000A-70LL) 128Kbyte mittels 
einen PIC18 anzusteuern. Die Addressen A0 - A7 sind an PORTE , A8-A15 an 
PORTF, A16 ist noch an PORTG bit 0. Die Datenleitug ist PORTD

Hier der C-Code

void write_to_ram(unsigned long RAM_Address, unsigned char data)
{
  //1. Set data Port to Output
  TRISD = 0x00;

  // 2. Do Addressing

  if(RAM_Address > 0x0000FFFF)
  {
    PORTAbits.RA0= 1;
  }
  else PORTAbits.RA0 = 0;

  PORTE = RAM_Address & 0x000000FF;
  PORTF = ((RAM_Address>>=8) & 0x000000FF);



  PORTAbits.RA4 = 0; //CE1 LOW
  PORTAbits.RA3 = 0;  // OE LOW
  PORTAbits.RA2 = 0; // Write = LOW
  PORTAbits.RA1 = 1; // CE2 HIGH

  putchhex(data); // RS-232 output for debug
  PORTD = data; // Put data to PORTD

  PORTAbits.RA1 = 0; // CE2 Low


}

unsigned char read_from_ram(unsigned long RAM_Address)
{
  unsigned char data;

  //1. Set data Port to Input
  TRISD = 0xFF;

  if(RAM_Address > 0x0000FFFF)
  {
    PORTAbits.RA0= 1;
  }
  else PORTAbits.RA0 = 0;

  PORTE = RAM_Address & 0x000000FF;
  PORTF = ((RAM_Address>>=8) & 0x000000FF);

  PORTAbits.RA4 = 0; //CE1 LOW
  PORTAbits.RA1 = 1; // CE2 HIGH
  PORTAbits.RA3 = 0;  // OE LOW
  PORTAbits.RA2 = 1; // WE HIGH   (noted in remark)

  data = PORTD;
  putchhex(data);

return data;

}

was sicher auffällt ist das ich gar keine Delays eingebaut habe, den das 
SRAM ist ein 55ns. Der PIC wird mit 10Mhz betrieben, als habe ich mal 
angenommen das ich keine verzögerungen in den ns bereiche brauche, hier 
noch der Link zum Datasheet:

http://pdf1.alldatasheet.com/datasheet-pdf/view/97...

Irgendwie kann ich wenn ich zuerst schreibe, dann lese, nichts lesen...
An was könnte das liegen, elektrisch scheint es in Ordnung zu sein...

Mfg

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein CE reicht aus, also CE2 dauerhaft auf 1 pinnen.
"CE controlled write" reicht aus, also /OE fest auf 0 pinnen.

Write:

PORTAbits.RA2 = 0; // WE LOW
PORTAbits.RA4 = 0; // CE1 LOW
...
PORTAbits.RA4 = 1; // CE1 HIGH

Read:

PORTAbits.RA2 = 1; // WE HIGH
PORTAbits.RA4 = 0; // CE1 LOW
...
PORTAbits.RA4 = 1; // CE1 HIGH


Mit dem Timing der PICs nicht ich nicht so vertraut, aber bei AVRs würde 
das so nicht ohne Verzögerung vor dem Lesezugriff funktionieren, da 
deren Inputs durch eine stark verzögernde Register/Latch Kombi laufen, 
und daher in einer out/in Befehlsfolge kaum Zeit bleibt.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 A.K. (Gast)

> Mit dem Timing der PICs nicht ich nicht so vertraut, aber bei AVRs würde
> das so nicht ohne Verzögerung vor dem Lesezugriff funktionieren, da
> deren Inputs durch eine stark verzögernde Register/Latch Kombi laufen,
> und daher in einer out/in Befehlsfolge kaum Zeit bleibt.

Nanana, was heisst hier "stark verzögernde Register/Latch Kombi"? Das 
ist genau 1 Takt den man zwischendurch Pause machen muss. Da kann man 
irgendwas sinnvolles erledigen oder zur Not NOPen. ;-)

MfG
Falk


Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achtung PIC-Falle:

Port A4 ist ein open collector Ausgang und benötigt unbedingt einen 
externen Pull-up Widerstand.

Autor: Lötmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Komisch, das Ding will einfach nicht... Sind die den so Heikel auf die 
Timings, oder kanns sein das es defekt ist...?

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.