Forum: Mikrocontroller und Digitale Elektronik Atmega128 + Sram


von Alex (Gast)


Lesenswert?

Hallo,
ich weis das dieses Thema hier schon ein paar mal behandelt worden ist. 
Allerdings werde ich daraus nicht schlau bzw sind dort keine Information 
die meine Fragen beantworten.
Ich habe vor ein 8Mbit Sram an einem ATmega1281 zu betreiben.
Da ich mich noch nicht so gut auskennen, wollte ich mal klein anfangen 
und einfach mal daten raufschreiben und diese dann vergleichen.

Hier ist der code den ich geschrieben habe. Allerdings funktionier es 
nicht ganz:

    unsigned int j;
    unsigned int data = 0xffff;
    unsigned int *sram_ptr = 0x100;


        PORTF = (PORTF | 0x0C);
        data = 0xFFFF;
        sram_ptr = (unsigned int*)0x200;
        for (j = 0x200; j <= 0x300; j++)
        {
          *sram_ptr = data;
          sram_ptr++;
          data--;
        }

        sram_ptr = (unsigned int*)0x200;
        data = 0xFFFF;
        for (j = 0x200; j <= 0x300; j++)
        {
            if (*sram_ptr != data)
            {
                PORTF = PORTF & ~0x08;
            }
            if (*sram_ptr == data)
            {
               PORTF = PORTF & ~0x04;
            }
        }

Nun blinken allerdings beide led's wie verrückt. Ich programmier mit 
Codevision und simulier mit Avr studio. Da haut es hin. Nur am µC nicht 
mehr :S

Jede Art von Hilfe ist Willkommen =)

Greetings, Alex

von Karl H. (kbuchegg)


Lesenswert?

Alex wrote:

> Jede Art von Hilfe ist Willkommen =)

OK. Ich schiebs einfach mal von der Codesammlung ins richtige Forum. Ist 
zwar nur eine kleine Hilfe, aber was solls.


Und nächstes mal wird eine Anfrage in der Codesammlung sang und klanglos 
gelöscht!

von Alex (Gast)


Lesenswert?

Danke =)

Greetings, Alex

von Dirk B. (sharandac)


Lesenswert?

Hallo,

da wäre mal die frage wie du das ram angeschlossen hast. An das XMEM 
Interface? Wenn ja, was hast du mit den restlichen Pins des SRAM 
gemacht, liegen die vernünftig Potential? Ich hatte das Problem auch. 
Habe ewig den Fehler gesucht und das irgendwann mal raus bekommen, das 
die nicht benutzten Pins nicht in der Luft hängen sollten, sonst haben 
die ständig irgend einen zustand der ständig wechselt und nur Fehler 
verursacht.

CA Dirk

von Alex (Gast)


Lesenswert?

Schaltplan kann ich im Moment nicht anhängen da der am Laptop ist und 
ich diesen in der Schule vergessen hab. Kann ich erst Montag holen -.-
Alle Leitungen hängen auf einem Potential. Keine ist undefiniert.
Was vielleicht noch wichtig wäre ist, ich benutzte ein STK501 für den 
ATmega128 und die Ports A,C,F,G.
Als Adresslatch benutz ich einen 74HC373D, als Inverter einen LM5111-3M. 
Der Sram Chip is von Cypress Semiconductors, 62157E.

Greetings, Alex

von Hubert G. (Gast)


Lesenswert?

Versuch doch einmal ein "FRAM" mit I2C. FM24C246 mit 32 KBYTE ohne 
Statusabfrage zu schreiben und lesen bis zu einer Taktfrequenz von 1MHz.
Das Datenblatt ist sehr hilfreich.
Ablauf lesen: I2C initialisieren, Slaveaddresse schreiben, Hi Addr.,Lo 
Addr., Neustart, lesen ohne ack=1 byte, mit ack mehrfach.
Adresse incrementiert automatisch bei wiederholtem schreiben oder lesen.
Datenblatt :  www.ramtron.com. Funktioniert auch bei 100 und 400 KHz.
Daten bleiben bis zu 45 Jahre ohne Versorgung erhalten. Haelt bis zu 10 
Milliarden Zyklen aus. Slaveadresse kann an den Eingaengen mit Bruecken 
auf 5V eingestellt werden. Vorteil:nur zwei Leitungen vom MCU belegt.
Gehaeuse= 8-SOIC.
Hubert G.

von Alex (Gast)


Lesenswert?

Das Problem ist die größe. Ich brauch mindestens 512kbyte und eine 
gewisse Geschwindigkeit.
Ich will später Daten von einem G-Sensor und GPS mitloggen. Das am 
besten ein paar mal in der Sekunde, und diese Daten bei einem gewissen 
Ereignis auf eine SD-Karte schreiben, wo sozusagen jede sekunde zählt.
Und sind FeRAM nicht noch immer sehr teuer? Hab vor geraumer Zeit mal 
nach einem passendem gesucht aber keinen gefunden der auch Preislich 
tragbar war.

Greetings, Alex

von Dirk B. (sharandac)


Lesenswert?

@Alex,

ich sehe gerade das du mit den pointer im internen RAM 0x200 bis 0x300 
arbeitest, ist das mit Absicht? Hast du des RAM-Interface aktiv? Wenn 
nicht benutzten Adresspin an den Ports vom ATmega hängen sollten die 
Ports als Ausgang definiert sein. Ich habe den RAM-Test so gemacht.
1
  // externes RAM-Interface freigeben
2
  XMCRA |= ( 1<<SRE ) ;
3
  // A16 freigeben, hängt an PD7, damit der RAM funktioniert, wenn dies nicht gemacht wird, ist A16 tristate und der RAM macht komische sachen :-)
4
  DDRD |= ( 1<<PD7 );
5
  PORTD |= ( 1<<PD7 );
6
  
7
  unsigned char * p = (unsigned char *) 0x2200;
8
  
9
  unsigned char data = 0;
10
  unsigned long fehler = 0;
11
  unsigned int i,a;
12
13
  // Schleife für Speicherzelle Byteweise
14
  for( i = 0x2200 ; i<0xffff ; i++ )
15
  {
16
    p++;
17
18
    data=1;
19
    
20
    // Schleife für Speicherzelle Bitweise in der aktuellen Speicherzelle Byteweise
21
    for( a = 0 ; a < 8 ; a++ )
22
    {
23
      data = 1<<a;
24
      *p = data;
25
      if ( *p != data )
26
      {
27
        fehler++;
28
        break;
29
      }
30
    }    
31
    *p = 0x00;
32
  }
33
  
34
  if ( fehler == 0 ) LED_1_ON();
35
  else while(1);

Wichtig ist das der Pointer p mit der ersten Adresse im externen RAM 
geladen wird, beim ATmega2561 ist das 0x2200. Das Beispiel testet alle 
Speicherstellen bitweise durch uns zählt die Fehler mit.

CA Dirk

von Hubert G. (Gast)


Lesenswert?

Hi Alex,
will dir nichts verkaufen, aber "FM25H20" kostet bei 
onlinecomponents.com USD17.89 und ist nur 5x6 mm (TDFN-8 Gehaeuse). Mit 
SPI bis 40MHz taktbar. 2Megabit (512Kbyte).
Hat auch chipselect fuer Erweiterung. Der Online-Laden ist verlaesslich, 
kaufe da manchmal. Ansteuerung ist relativ einfach.
Gruss Hubert

von Alexander B. (alexb)


Angehängte Dateien:

Lesenswert?

@Dirk: Großes Danke, das hat mir viel geholfen. Das heist ich hab die 
ganze Zeit in den falschen Adressbereich geschrieben. Beim ATmega128 
fangt der externe erst bei 0x1100 an.
Ich wusste nicht das ich das externe Ram erst aktivieren muss. Ich 
dachte das reicht wenn ich das beim erstellen eines Neuen Projektes, 
Codevision, angebe. Dem war wohl nicht so.
Aber positiv ist das mein kleines Programm, an dem ich schon mal ein 
ganzes Zeiterl gesessen bin, nicht grundlegend falsch war.

@Hubert: Danke, werd ich mir merken. Aber im Moment hab ich 5 von den 
Cypress Sram zuhause und will dann doch das diese funktionieren.

Anbei nun endlich der Schaltplan. Ich benutzte Eagle 5.4.0 Freeware. Hab 
noch nicht herausgefunden wie ich dort nen Bus machen kann. Deswegen 
entschuldigt die etwas unübersichtlichkeit ^^

Greetings, Alex

von GAST (Gast)


Lesenswert?

@Hubert
2M bit Ferroelectric Nonvolatile RAM
•  Organized as 256K x 8 bits

von Alexander B. (alexb)


Lesenswert?

Muss ich irgendwo die größe des Sram's definieren? Oder ist das egal und 
ich schreib nur in einem gewissem Adressbereich?

Greetings, Alex

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.